> ## 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.

# Pass-through

> Already calling HarvestAPI, iBlinked, Up2Data, or BlitzAPI? Change the host, add two headers, keep everything else.

Same path, same query, same body as the provider. You get the provider's exact status and body back, paid from your Datacircle credits at cost.

| Header | Value |
| - | - |
| `X-Datacircle-Provider` | `harvestapi`, `iblinked`, `up2data` or `blitzapi` |
| `X-Datacircle-Key` | your Datacircle API key |

`Authorization` is left alone: it's not ours.

```bash theme={null}
# HarvestAPI: api.harvest-api.com becomes api.datacircle.dev
curl -i "https://api.datacircle.dev/linkedin/profile?url=https://www.linkedin.com/in/williamhgates/" \
  -H "X-Datacircle-Provider: harvestapi" -H "X-Datacircle-Key: $DATACIRCLE_API_KEY"

# iBlinked: api.iblinked.fr becomes api.datacircle.dev
curl -i -X POST "https://api.datacircle.dev/v1/enrich/single" \
  -H "X-Datacircle-Provider: iblinked" -H "X-Datacircle-Key: $DATACIRCLE_API_KEY" \
  -H "Content-Type: application/json" -d '{"token": "williamhgates", "include": ["all"]}'

# Up2Data: api.up2data.ai becomes api.datacircle.dev
curl -i -X POST "https://api.datacircle.dev/v1/profiles/enrich" \
  -H "X-Datacircle-Provider: up2data" -H "X-Datacircle-Key: $DATACIRCLE_API_KEY" \
  -H "Content-Type: application/json" -d '{"url": "https://www.linkedin.com/in/williamhgates"}'

# BlitzAPI: api.blitz-api.ai becomes api.datacircle.dev (verified work email from a LinkedIn URL)
curl -i -X POST "https://api.datacircle.dev/v2/enrichment/email" \
  -H "X-Datacircle-Provider: blitzapi" -H "X-Datacircle-Key: $DATACIRCLE_API_KEY" \
  -H "Content-Type: application/json" -d '{"person_linkedin_url": "https://www.linkedin.com/in/williamhgates"}'

```

HarvestAPI paths: `GET /linkedin/profile`, `/linkedin/company`, `/linkedin/profile-search`, `/linkedin/company-search`, with the same query parameters as [LinkedIn profile](/linkedin-profile), [LinkedIn company](/linkedin-company) and [LinkedIn search](/linkedin-search), plus HarvestAPI's own `query` and `main` (profile), `query` (company) and `geoId` (company search); any other parameter answers `400` and is not charged. A call never costs more than its route's price ($0.0037, $0.0116 with `findEmail`). iBlinked: `POST /v1/enrich/single`. Up2Data: `POST /v1/profiles/enrich` ($0.00125 per profile found, what Up2Data bills us; a miss Up2Data doesn't bill is free). BlitzAPI: `POST /v2/enrichment/email`, `/v2/enrichment/person`, `/v2/enrichment/company` ($0.01 per record BlitzAPI uses; errors are free). BlitzAPI and Up2Data have daily limits too ($0.05 and $1 per account) and answer `429` past them; past any daily limit, an answer already in the shared cache is still served, free.

Our data is in response headers only:

| Header | Meaning |
| - | - |
| `X-Datacircle-Cost-USD` | what this call cost |
| `X-Datacircle-Balance-USD` | what you have left |
| `X-Datacircle-Cache-Hit` | `true` when the co-op already had it |

Errors that are ours, not the provider's:

| Status | Meaning |
| - | - |
| `401` | missing or invalid `X-Datacircle-Key` |
| `400` | unknown `X-Datacircle-Provider`, a proxied POST route without a JSON object body, or an unknown HarvestAPI query parameter |
| `402` | out of credit |
| `404` | no `X-Datacircle-Provider` header, or a path we don't pass through |

## Your API key is enough

No URL carries a workspace: the key picks it. Datacircle's own routes are `/auth/`, `/me/`, `/credits/`, `/checkout/`, `/files/` and `/linkedin/<x>/`, with `Authorization: Token <api_key>` (`Bearer <api_key>` works too).


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