# charge a stored card, 20.00 USD curl -X POST https://api.yourproduct.com/v1/charges \ -H "Authorization: Bearer $API_KEY" \ -d amount=2000 \ -d currency=usd
Every endpoint documented, every sample run against your live API before it ships. If the code on the page doesn't work, it doesn't go out.
# charge a stored card, 20.00 USD curl -X POST https://api.yourproduct.com/v1/charges \ -H "Authorization: Bearer $API_KEY" \ -d amount=2000 \ -d currency=usd
They won't book a demo. They won't email sales. They'll open your reference, try to make one call work, and either keep going or close the tab. Your API docs are the sales call, and nobody is there to help.
A snippet that errors costs a developer an hour before they realise it wasn't their fault. That hour is where trust goes.
Happy paths are easy. What breaks a real integration is the 409 you never explained and the retry rule nobody wrote down.
Cursor and Copilot answer from your docs now. A stale parameter doesn't stay on the page — it lands in your user's editor.
Your reference is the only salesperson that works at 2am, and it never gets a second chance.
One session with an engineer who knows it. We go through what it does, who integrates with it, and which parts people get wrong.
Your OpenAPI spec is the backbone, so we fix it first — missing descriptions, wrong types, undocumented fields. Then you approve the page structure.
Each endpoint gets a real description, a typed parameter table, and working samples in the languages you support. Then we execute them against your live API.
Language tabs, copy buttons, a sticky endpoint reference, and search that lands on the right method. Built to be skimmed, not read.
Live on your domain with llms.txt included. Then the samples run in CI, so the day one of them stops working, someone finds out.
A reference is more than a list of endpoints. It's auth, errors, pagination, and the unglamorous middle of a real integration — the parts that decide whether someone finishes.
Every method with a real description, typed parameters, and complete request and response pairs. Generated from your spec, then written by a person.
Four or more languages per endpoint, each one executed against your live API before publish. If it doesn't run, it doesn't ship.
The three things every integration hits and most docs skip. A full error catalogue with what causes each one and what to do about it.
Structured so Cursor, Copilot and ChatGPT quote your API correctly. llms.txt shipped by default, because they read your docs before your users do.
API docs rot faster than anything else you publish, because the product changes underneath them every sprint. So we automate the watching. Our agents track your spec and your releases, flag the pages a change breaks, and draft the fix — then a writer checks it before it goes live.
A developer pastes your sample, gets an error, and assumes your API is broken.
It runs first time, because we ran it first.
Your engineers answer integration questions in a shared Slack channel.
The reference answers them. Once, correctly, for everyone.
An evaluation stalls because nobody could get past authentication.
They make their first successful call in ten minutes.
Copilot suggests a parameter you removed two releases ago.
It suggests the current one, because your docs say so.
Writers write it. We use in-house agents to speed up the slow parts — reading your codebase, pulling structure out of an API spec, producing a first draft, spotting pages that have drifted out of date. That saves days. But a person decides what goes on the page, checks it against your product, and signs it off. A model can't tell when your product's own behaviour doesn't make sense, and noticing that is half of what you're paying us for.
A test or sandbox account is enough. We need to actually execute the samples — that's the difference between a reference that works and one that looks like it should. We never need production credentials.
You can, and you should — for the skeleton. But a generator only knows what your spec says, and specs are usually incomplete: missing descriptions, vague types, no guidance on when to use what. It also can't write the getting-started guide, which is the page that actually decides whether someone integrates. We fix the spec first, then write the parts a generator can't.
Whichever your users actually ship in. cURL plus three or four others is typical — Node, Python, Go, Java, Ruby, PHP. We'd rather do four languages properly than eight badly.
Two ways. The samples are runnable in CI, so a break shows up in your build rather than in a support ticket. And our agents diff your spec on every release, flag the pages a change affects, and draft the update for a writer to review.
Yours. If you don't have one, we'll recommend one and set it up. We work with the usual docs platforms and with docs-as-code in your own repo. There's nothing you have to rent from us, and nothing you can't take with you.
Send us your spec and a sandbox key. We'll tell you what's missing and what it's costing you in failed integrations.