> ## Documentation Index
> Fetch the complete documentation index at: https://docs.datacircle.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Files

> The co-op files: every LinkedIn profile fetched through Up2Data, HarvestAPI or Fetchin, one file per provider, new every day.

```bash theme={null}
curl https://api.datacircle.dev/files/ -H "Authorization: Token $DATACIRCLE_API_KEY"
```

Each file has a `dataset`, a `filename` (the name it downloads as), `row_count`, `size_bytes`, `sha256`, `created_at`, and `is_unlocked`, `true` when your workspace may download it. `row_count` counts its rows, one per profile. The `dataset` is one of these:

| Dataset | Contents | Who can download |
| - | - | - |
| `coop_up2data` | every public LinkedIn profile anyone fetched through Up2Data | every workspace that has added \$50 in total |
| `coop_harvestapi` | every public LinkedIn profile anyone fetched through HarvestAPI | the same as `coop_up2data` |
| `coop_fetchin` | every public LinkedIn profile anyone fetched through Fetchin | the same as `coop_up2data` |

Add \$50 to your account: you get \$50 of API PLUS the flat file. We publish new co-op files every day. Each one holds every profile to date, so `GET /files/` lists only the newest file of each dataset. Your [dashboard](https://datacircle.dev/app) lists the same files, with a download button once your workspace has added \$50.

```bash theme={null}
curl -X POST https://api.datacircle.dev/files/$FILE_ID/download-link/ \
  -H "Authorization: Token $DATACIRCLE_API_KEY"
```

Returns a download `url` valid for one hour, or `403` if your workspace has added less than \$50.

Check the file you downloaded against its `sha256` from `GET /files/`: the two must match.

```bash theme={null}
shasum -a 256 coop_up2data.parquet
```

Each co-op file is one Parquet table: one row per profile (from the provider's latest response) and one column per field the provider returns, with the provider's field names (see [LinkedIn Profile API](/linkedin-profile)). It is flat: we split each object into one column per subfield and keep each list as a Parquet list, never JSON text. [Dataset fields](/fields#co-op-file-columns) lists every column with its type. We drop a profile from a provider's file once that provider says the profile is gone. An email or a phone number written in a profile reads `[redacted]`. The file never contains who fetched which profile, emails of Datacircle users, costs or any credential.

```python theme={null}
import pandas as pd
up2data = pd.read_parquet("coop_up2data.parquet")
harvestapi = pd.read_parquet("coop_harvestapi.parquet")
fetchin = pd.read_parquet("coop_fetchin.parquet")
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.