Skip to main content
Read endpoints work with no credentials at all — you can call the API right now with nothing but curl. A free API key raises your limits 5-10× and unlocks long-polling, which is the feature you actually want.

Getting a key

Both fields are optional. label is for your own benefit when you have several. contact_email is unverified and is the only way we can warn you before a breaking change.
The key is shown once and is not recoverable. Store it before you close the terminal. Minting is limited to 3 keys per IP per day.

Sending it

Either header works, pick one:
Omit the header entirely for anonymous access. Sending an invalid key is an error (unauthorized, 401) rather than a silent downgrade to the anonymous tier — a typo’d key should fail loudly, not quietly cost you your limits.

An API key is not an account

There is no password, no login, no profile, and we ask for no personal data. A key exists for exactly two reasons: so requests can be attributed for fair-use accounting, and so one misbehaving integration can be switched off without banning an IP range that honest users share. It is a bearer token for rate accounting, not an identity. This is also why keyless access stays allowed. A “free public API” that refuses a plain curl is a bad first impression, so the incentive to get a key is the higher limits — not a wall.

Checking what you have

GET /api/v1/me reports your tier, limits, and current usage, and does not consume quota:
Called without a key it reports the anonymous tier and your per-IP usage, which is a quick way to confirm what bucket a CI runner is actually landing in.

Lost your key?

Mint a new one. There is no recovery flow, because there is no account to recover it into — we store a SHA-256 hash, never the key itself. If a key leaks, the fix is the same: mint a replacement and email us the leaked prefix so we can revoke it.