BYTETOOLS

Open Collective API

Free Open Collective GraphQL API with no key: transparent budgets, expenses, contributors and balances for thousands of open source projects. Tested example included.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the Open Collective API?

The Open Collective API is a free GraphQL API exposing the finances of collectives that fund open source and community projects. Public data — balances, transactions, expenses, contributor lists and tiers — is readable with no API key, since radical financial transparency is the platform's founding premise.

Open Collective's entire model is that a project's finances are public: who contributed, how much, what was spent and on what. The API is the machine-readable expression of that, and it means you can query a project's real budget and burn rate rather than guessing at its sustainability.

It is GraphQL rather than REST, which suits the data — a collective's finances involve members, tiers, transactions, expenses and updates, and a REST design would either over-fetch or force many round trips. Collectives are addressed by `slug`, the same identifier that appears in their profile URL, so moving from a project's page to an API query is direct. Writes (submitting an expense, for instance) require a personal token, but the read layer used here does not.

Quick facts

Base URL
https://api.opencollective.com/graphql/v2
Authentication
No API key for public read queries. A personal token is required only for writes and for private data such as unapproved expenses.
Rate limit
Unauthenticated queries are throttled per IP; supplying a free personal token raises the ceiling substantially.
Pricing
Free.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the Open Collective API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Fetch a collective's name and currency with GraphQL

POST https://api.opencollective.com/graphql/v2

curl
curl -X POST 'https://api.opencollective.com/graphql/v2' \
  -H 'Content-Type: application/json' \
  -d '{"query":"{collective(slug:\"webpack\"){name slug currency}}"}'
JavaScript (fetch)
const res = await fetch("https://api.opencollective.com/graphql/v2", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"query":"{collective(slug:\"webpack\"){name slug currency}}"}),
});
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

headers = {
    "Content-Type": "application/json",
}

payload = {"query":"{collective(slug:\"webpack\"){name slug currency}}"}

res = requests.post("https://api.opencollective.com/graphql/v2", headers=headers, json=payload, timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
{
  "data": {
    "collective": {
      "name": "webpack",
      "slug": "webpack",
      "currency": "USD"
    }
  }
}

Parameters

ParameterTypeRequiredDescription
querystringRequiredThe GraphQL query document, sent in the JSON body. {collective(slug:"webpack"){name slug currency}}
variablesobjectOptionalValues for variables declared in the query — the clean way to parameterise rather than string-building. {"slug":"webpack"}
slugargumentOptionalThe collective's identifier, matching the last segment of its profile URL. webpack
limit / offsetargumentOptionalPagination on nested collections such as transactions and members. 10

Response fields

dataobject
The GraphQL result, shaped exactly like the query you sent — nothing extra is returned.
collective.name / slugstring
Display name and URL identifier.
collective.currencystring
The collective's base currency. Amounts elsewhere are denominated in it, so read this before comparing figures across collectives.
collective.stats.balanceobject
Current balance, returned as an amount in cents plus a currency — not a float.
transactionsobject
Paginated financial history with type, amount, description and counterparty.
expensesobject
Submitted expenses with status, amount and payee, which is where the transparency really shows.
membersobject
Contributors and backers with roles and contribution totals.
errorsarray
GraphQL returns HTTP 200 even for query errors — always check this array before reading `data`.

What you can build with the Open Collective API

  • Display a project's real funding and expenses on its own site
  • Research the financial sustainability of open source projects
  • Build a sponsor or backer wall from live contributor data
  • Track monthly recurring funding for a collective over time

Common errors and how to fix them

HTTP 200 with an errors array

The query was malformed or named an unknown field.

Fix: GraphQL reports errors in the body, never in the status code. Inspect `errors` first — a 200 does not mean success here.

Null collective

The slug does not exist or the collective is not public.

Fix: The slug is the last segment of the profile URL and is case-sensitive.

429

Unauthenticated rate limit reached.

Fix: Generate a free personal token and send it as an `Api-Key` header. Read queries still work without one, just with a lower ceiling.

Open Collective API — frequently asked questions

Is the Open Collective API free?

Yes. Public read queries need no API key, because financial transparency is the platform's whole premise. A free personal token is only needed for writes, private data, or to raise the rate limit.

Why does Open Collective use GraphQL?

Because the data is deeply connected — a collective has members, tiers, transactions, expenses and updates. REST would mean either over-fetching enormous objects or making many round trips; GraphQL lets you name exactly the fields you need in one request.

How do I find a collective's slug?

It is the last segment of its Open Collective profile URL. A project at opencollective.com/webpack has the slug `webpack`, which is what the `collective` query expects.

Are amounts returned as decimals?

No — amounts come back in cents alongside a currency code, which avoids floating-point rounding on money. Divide by 100 for display, and read the collective's `currency` field before comparing across collectives.

Tools that pair with this API

Open Collective is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.