SDKs
There is nothing to install, and that is deliberate.
Six GET endpoints with query parameters is not enough surface to justify a package in five languages —
each of which would lag the API, need its own release, and hide the two things that actually matter: the
limit headers and how you retry.
What you get instead:
- An OpenAPI 3.1 document that any generator consumes, if you want types — see OpenAPI.
- A worked client per language below, short enough to read in one sitting and paste into your own code.
curl The shell version, including the flag that stops your query being mangled. TypeScript Typed from the spec, with retry handling that tells the two 429s apart. Python httpx, sync and async, with the same retry logic. Go net/http, no dependencies. Rust reqwest and serde.
What a client should do
- Send the key as a header, never in the query string. Query strings end up in logs and referrers.
- Tell the two 429s apart. The rate limit is transient and wants a one-second retry; the quota is
not and wants an error.
x-quota-remaining: 0distinguishes them. The logic is here. - Surface
from_clamped. Otherwise a plan boundary is indistinguishable from an empty corpus. Archive depth. - Ask for large pages.
limit=100where you can — each page is a billed request. - Do not retry a
404or a zero-result response. Neither is a failure.
If you are writing an agent rather than a client, you probably want MCP instead — the model reads the tool descriptions and makes these choices itself.