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

# Credits

> What an API call costs in credits, how to predict it before you make the call, and where to see what you consumed.

export const CreditCosts = ({part}) => {
  const data = {
    "schedules": [{
      "version": "2026-09-observation",
      "effectiveFrom": "2026-01-01T00:00:00Z",
      "credits": {
        "0": 0,
        "1": 1,
        "2": 2,
        "analytics": 5
      }
    }],
    "groups": [{
      "id": "0",
      "label": "Free",
      "unit": "per call"
    }, {
      "id": "1",
      "label": "Summary",
      "unit": "per record"
    }, {
      "id": "2",
      "label": "Full profile",
      "unit": "per record"
    }, {
      "id": "analytics",
      "label": "Analytics",
      "unit": "per query"
    }],
    "routes": {
      "data": [{
        "path": "/data/companies",
        "group": "2",
        "summaryGroup": "1",
        "unit": "per record"
      }, {
        "path": "/data/companies/{id}",
        "group": "2",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/companies/{id}/financials",
        "group": "2",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/companies/{id}/funding-rounds",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/companies/{id}/headcount-breakdown",
        "group": "2",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/companies/{id}/investors",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/companies/{id}/patents",
        "group": "2",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/companies/{id}/similar",
        "group": "2",
        "summaryGroup": "1",
        "unit": "per record"
      }, {
        "path": "/data/companies/{id}/team",
        "group": "2",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/companies/{id}/valuations",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/companies/{id}/web-traffic",
        "group": "2",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/companies/geo",
        "group": "1",
        "summaryGroup": null,
        "unit": "per point"
      }, {
        "path": "/data/entities",
        "group": "2",
        "summaryGroup": "1",
        "unit": "per record"
      }, {
        "path": "/data/entities/{id}",
        "group": "2",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/entities/{id}/lp-funds",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/entities/geo",
        "group": "1",
        "summaryGroup": null,
        "unit": "per point"
      }, {
        "path": "/data/founders",
        "group": "2",
        "summaryGroup": "1",
        "unit": "per record"
      }, {
        "path": "/data/founders/{id}",
        "group": "2",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/founders/{id}/founded-companies",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/funds",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/funds/{id}",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/gov-ngo",
        "group": "2",
        "summaryGroup": "1",
        "unit": "per record"
      }, {
        "path": "/data/gov-ngo/{id}",
        "group": "2",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/gov-ngo/{id}/patents",
        "group": "2",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/gov-ngo/{id}/team",
        "group": "2",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/gov-ngo/geo",
        "group": "1",
        "summaryGroup": null,
        "unit": "per point"
      }, {
        "path": "/data/investors",
        "group": "2",
        "summaryGroup": "1",
        "unit": "per record"
      }, {
        "path": "/data/investors/{id}",
        "group": "2",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/investors/{id}/funds",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/investors/{id}/lp-funds",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/investors/{id}/portfolio",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/investors/{id}/similar",
        "group": "2",
        "summaryGroup": "1",
        "unit": "per record"
      }, {
        "path": "/data/investors/{id}/team",
        "group": "2",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/investors/geo",
        "group": "1",
        "summaryGroup": null,
        "unit": "per point"
      }, {
        "path": "/data/jobs",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/jobs/{id}",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/news",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/news/{id}",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/notes",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/notes/{id}",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/people",
        "group": "2",
        "summaryGroup": "1",
        "unit": "per record"
      }, {
        "path": "/data/people/{id}",
        "group": "2",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/people/{id}/career",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/people/{id}/education",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/search",
        "group": "0",
        "summaryGroup": null,
        "unit": "per call"
      }, {
        "path": "/data/transactions",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/transactions/{id}",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/universities",
        "group": "2",
        "summaryGroup": "1",
        "unit": "per record"
      }, {
        "path": "/data/universities/{id}",
        "group": "2",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/universities/{id}/alumni",
        "group": "2",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/universities/{id}/patents",
        "group": "2",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/universities/{id}/team",
        "group": "2",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/universities/geo",
        "group": "1",
        "summaryGroup": null,
        "unit": "per point"
      }, {
        "path": "/data/valuations",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }, {
        "path": "/data/valuations/{id}",
        "group": "1",
        "summaryGroup": null,
        "unit": "per record"
      }],
      "other": [{
        "path": "/analytics/aggregate/{source}",
        "group": "analytics",
        "summaryGroup": null,
        "unit": "per query"
      }, {
        "path": "/analytics/aggregate/{source}/multi-metric",
        "group": "analytics",
        "summaryGroup": null,
        "unit": "per query"
      }, {
        "path": "/analytics/timeseries",
        "group": "analytics",
        "summaryGroup": null,
        "unit": "per query"
      }, {
        "path": "/reference/filters",
        "group": "0",
        "summaryGroup": null,
        "unit": "per call"
      }, {
        "path": "/reference/filters/{key}/values",
        "group": "0",
        "summaryGroup": null,
        "unit": "per call"
      }, {
        "path": "/reference/filters/search",
        "group": "0",
        "summaryGroup": null,
        "unit": "per call"
      }]
    },
    "fields": [{
      "collections": ["/data/entities"],
      "fields": ["alumni", "career", "education", "exits", "founded_companies", "founders", "investor.exits", "investor.match", "investor.portfolio", "investor.rank", "match", "patents", "portfolio", "rank", "revenue", "traffic"]
    }, {
      "collections": ["/data/companies"],
      "fields": ["founders", "investor.exits", "investor.match", "investor.portfolio", "investor.rank", "patents", "revenue", "traffic"]
    }, {
      "collections": ["/data/investors"],
      "fields": ["career", "education", "exits", "founded_companies", "investor.exits", "investor.match", "investor.portfolio", "investor.rank", "match", "portfolio", "rank"]
    }, {
      "collections": ["/data/universities"],
      "fields": ["alumni", "investor.exits", "investor.match", "investor.portfolio", "investor.rank", "patents"]
    }, {
      "collections": ["/data/gov-ngo"],
      "fields": ["founders", "investor.exits", "investor.match", "investor.portfolio", "investor.rank", "patents", "traffic"]
    }, {
      "collections": ["/data/people"],
      "fields": ["career", "education", "founded_companies", "investor.exits", "investor.match", "investor.portfolio", "investor.rank"]
    }, {
      "collections": ["/data/founders"],
      "fields": ["career", "education", "founded_companies", "investor.exits", "investor.match", "investor.portfolio", "investor.rank"]
    }]
  };
  const [now, setNow] = useState(() => Date.now());
  const started = data.schedules.filter(s => Date.parse(s.effectiveFrom) <= now);
  const current = started.at(-1) ?? data.schedules[0];
  const upcoming = data.schedules.filter(s => Date.parse(s.effectiveFrom) > now);
  const nextStart = upcoming.length > 0 ? Date.parse(upcoming[0].effectiveFrom) : null;
  useEffect(() => {
    if (nextStart === null) return undefined;
    const timer = setTimeout(() => setNow(Date.now()), Math.min(nextStart - now, 2 ** 31 - 1));
    return () => clearTimeout(timer);
  }, [now, nextStart]);
  const day = iso => iso.slice(0, 10);
  const price = group => group === null ? "Not supported" : String(current.credits[group]);
  const period = s => {
    const i = data.schedules.indexOf(s);
    const next = data.schedules[i + 1];
    return [i > 0 && `${s === current ? "since" : "from"} ${day(s.effectiveFrom)}`, next && `until ${day(next.effectiveFrom)}`].filter(Boolean).join(", ");
  };
  if (part === "schedules") {
    return <table>
        <thead>
          <tr>
            <th>In force (UTC)</th>
            {data.groups.map(g => <th key={g.id}>
                {g.label} <span className="font-normal">({g.unit})</span>
              </th>)}
          </tr>
        </thead>
        <tbody>
          {[current, ...upcoming].map(s => <tr key={s.version}>
              <td>
                <strong>{s === current ? "Current" : "Upcoming"}</strong>
                {period(s) && `: ${period(s)}`}
              </td>
              {data.groups.map(g => <td key={g.id}>{s.credits[g.id]}</td>)}
            </tr>)}
        </tbody>
      </table>;
  }
  if (part === "fields") {
    return <table>
        <thead>
          <tr>
            <th>Collection</th>
            <th>Fields priced at full profile</th>
          </tr>
        </thead>
        <tbody>
          {data.fields.map(row => <tr key={row.collections.join()}>
              <td>
                {row.collections.map((c, i) => <span key={c}>
                    {i > 0 && ", "}
                    <code>{c}</code>
                  </span>)}
              </td>
              <td>
                {row.fields.map((f, i) => <span key={f}>
                    {i > 0 && ", "}
                    <code>{f}</code>
                  </span>)}
              </td>
            </tr>)}
        </tbody>
      </table>;
  }
  const routes = data.routes[part] ?? [];
  return <>
      {upcoming.length > 0 && <p>Prices in force now. Upcoming changes are listed in the table above.</p>}
      <table>
        <thead>
          <tr>
            <th>Endpoint</th>
            <th>Credits</th>
            <th>
              With <code>view=summary</code>
            </th>
            <th>Unit</th>
          </tr>
        </thead>
        <tbody>
          {routes.map(r => <tr key={r.path}>
              <td>
                <code>GET {r.path}</code>
              </td>
              <td>{price(r.group)}</td>
              <td>{price(r.summaryGroup)}</td>
              <td>{r.unit}</td>
            </tr>)}
        </tbody>
      </table>
    </>;
};

Every API-key request under `/data`, `/analytics` and `/reference` is metered in **credits**.
What a call costs follows from what it returns, so you can price a call before you make it. After the call, the **`X-Credits-Used`** response header
reports what it consumed. Credits don't depend on any currency or plan: the same call costs the
same number of credits whoever makes it.

<Note>
  **Open beta: metered and capped, not billed.** Each call draws on your
  team's credits, which Dealroom grants when you get API access. When they run
  out, requests return [`402 CREDITS_EXHAUSTED`](#remaining-balance). Allowances
  are indicative and may change, and credits are not billed in money during
  open beta.
</Note>

## How a call is priced

* **Four groups.** Free (0), summary (1 per record), full profile (2 per record) and analytics
  (per query).
* **A field costs the group of the dataset it comes from.** A company's own name, location and
  funding total are summary. Its founders, revenue and web traffic are glances at the people,
  financials and traffic datasets, so they are full profile.
* **A request is charged at the highest group of any field it returns.** One full-profile field
  makes the whole row full profile.
* **`view=summary` returns the summary shape. `view=full`, the default, adds the full-profile
  fields.** It works on the entity collections and their `/similar` lenses.

Detail endpoints (`/data/companies/{id}`) always return, and charge for, the full profile.

## Worked example

Here is the same company as a summary row and as a full row. Values are illustrative and
trimmed for length.

<CodeGroup>
  ```json Summary — 1 credit theme={null}
  {
    "uuid": "345d1ab6-33df-4759-9e17-0d0c0ec9ab1c",
    "name": "Stripe",
    "tagline": "Online payment processing for internet businesses",
    "domain": "stripe.com",
    "locations": [{ "role": "hq", "city": { "id": 1001, "name": "San Francisco" } }],
    "taxonomy": [{ "id": 42, "name": "fintech", "type": "industry" }],
    "employees_count": 8000,
    "funding": { "total": 8700000000, "total_vc": 8700000000, "rounds_count": 12 },
    "valuation": { "value": 65000000000, "year": 2024, "month": 2 },
    "jobs": { "is_hiring": true, "open_count": 420 }
  }
  ```

  ```json Full — 2 credits theme={null}
  {
    "uuid": "345d1ab6-33df-4759-9e17-0d0c0ec9ab1c",
    "name": "Stripe",
    "tagline": "Online payment processing for internet businesses",
    "domain": "stripe.com",
    "locations": [{ "role": "hq", "city": { "id": 1001, "name": "San Francisco" } }],
    "taxonomy": [{ "id": 42, "name": "fintech", "type": "industry" }],
    "employees_count": 8000,
    "funding": { "total": 8700000000, "total_vc": 8700000000, "rounds_count": 12 },
    "valuation": { "value": 65000000000, "year": 2024, "month": 2 },
    "jobs": { "is_hiring": true, "open_count": 420 },
    "founders": {
      "total": 2,
      "items": [
        { "is_founder": true, "person": { "name": "Patrick Collison", "type": "person" } },
        { "is_founder": true, "person": { "name": "John Collison", "type": "person" } }
      ]
    },
    "revenue": { "value": 14000000000, "year": 2023 },
    "traffic": { "monthly_visits": 41000000, "growth_3m": 3.1 },
    "patents": { "count": 12 }
  }
  ```
</CodeGroup>

The full row adds `founders`, `revenue`, `traffic` and `patents`. Each is a glance at another
dataset, so the row is priced at full profile.

| Call | Records | Group | Credits |
| - | - | - | - |
| `GET /data/companies?view=summary&limit=25` | 25 | Summary | 25 |
| `GET /data/companies?limit=25` | 25 | Full profile | 50 |
| `GET /data/companies/{id}` | 1 | Full profile | 2 |
| `GET /data/companies/{id}/funding-rounds?limit=10` | 10 | Summary | 10 |
| `GET /analytics/aggregate/funding-rounds?…` | 1 query | Analytics | 5 |
| `GET /reference/filters/taxonomy_id/values?q=fintech` | — | Free | 0 |

## What a call costs

<Warning>
  The prices are **placeholders** during open beta and may be revised. Build
  against the header, not against the numbers on this page.
</Warning>

### Credits per group

A call costs its group's credits times the records it returns: rows, map points, or one per
analytics query. A call is priced at the prices in force when it is made; upcoming changes are
listed with the date they take effect.

<CreditCosts part="schedules" />

### Data endpoints

<CreditCosts part="data" />

### Analytics and reference endpoints

<CreditCosts part="other" />

### Fields that make a row full profile

On these collections, every field not listed is priced at summary. A row that returns any listed
field is priced at full profile; `view=summary` leaves them out. Sub-resources are priced as a
whole, in the endpoint tables above.

<CreditCosts part="fields" />

## Reading the header

```http theme={null}
GET /data/transactions?limit=25
HTTP/1.1 200 OK
X-Credits-Used: 25

GET /data/companies/{id}
HTTP/1.1 200 OK
X-Credits-Used: 2

GET /analytics/aggregate/funding-rounds?…
HTTP/1.1 200 OK
X-Credits-Used: 5

GET /reference/filters/taxonomy_id/values?q=fintech
HTTP/1.1 200 OK
X-Credits-Used: 0

GET /data/companies?limit=99999
HTTP/1.1 400 Bad Request
X-Credits-Used: 0
```

The value is always a non-negative integer.

| Value | Meaning |
| - | - |
| `N > 0` | This request consumed `N` credits |
| `0` | A free endpoint (search, filter values, lookups) **or** an error response — a failed call costs nothing |
| header absent | The endpoint is not metered, or the request was not authenticated with an API key |

`0` and *absent* are deliberately different: `0` means the API metered the call and found it free;
absent means it was never metered.

## Which responses carry it

* **Carried**: every response — success or error — to a request authenticated with an API key
  under `/data/*`, `/analytics/*` and `/reference/*`, including `403`, `404`, `429` and any `400`
  raised once authentication has completed.
* **Not carried**: `/platform/*` self-service (account, API keys, usage, teams, lists), `/system/*`,
  `/health`, the API reference itself, the namespace indices (`/data`, `/analytics`, `/reference`),
  and any response rejected before authentication completes — a `401` for a missing or invalid
  token, or the `400` for an API-key request without its `X-Client-Id` header.

The header is listed in `Access-Control-Expose-Headers`, so browser-side code can read it:

```typescript theme={null}
const res = await fetch(`${baseUrl}/data/transactions?limit=25`, { headers });
const raw = res.headers.get("X-Credits-Used");
// null: not metered (or not an API-key request) — keep it distinct from a free call's 0
const credits = raw === null ? null : Number(raw);
```

## Remaining balance

During open beta an API key draws on its **team's credits**, granted by Dealroom when you get API
access. Your team's used and remaining credits are shown on the API keys settings page. When they
are used up, or if none were granted yet, requests under `/data` and `/analytics` return
`402 CREDITS_EXHAUSTED` until more are added; `/reference` lookups are free and stay available. The
balance trails usage by up to about two minutes, so a few requests past the limit can still succeed.
If your team's credits cannot be checked for a moment, requests return `503 SERVICE_UNAVAILABLE`;
retry shortly.

There is no `X-Credits-Remaining` header yet. The API only reports a figure it can compute exactly
on every replica, and a remaining balance needs a shared consumption counter that does not exist yet.

## Further reading

<CardGroup cols={2}>
  <Card title="Rate limits" icon="gauge-high" href="/concepts/rate-limits">
    How fast you can call the API — a separate control from how much you consume.
  </Card>

  <Card title="Errors" icon="triangle-exclamation" href="/concepts/errors">
    The error envelope and every stable error code, including the 402 when credits run out.
  </Card>
</CardGroup>


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