Free covers five people, not one. No install, no card.

Version control for your API, not just your code.

Every push is read for what it does to callers and classified as breaking or not — in caller terms, not diff lines — then held for a human to approve before anyone sees it. That decision is logged permanently, so “who approved this and when” is always answerable. The reference, the OpenAPI spec and a live mock regenerate from the same approved change, which is what makes nothing hand-maintained and nothing able to drift.

Nothing publishes without review Every approval kept, permanently Keyboard-first Self-hostable

Every other tool

Docs are a second copy of the truth

Someone writes the spec by hand. The code moves. The spec doesn’t. Six weeks later nobody trusts the collection, the mock returns fields that no longer exist, and the SDK is generated from a document that stopped being true in March.

src/routes/orders.tsPOST /orders · requires authopenapi.yamlPOST /orders · public  ← stale
APIOS

Docs are a projection of the truth

There is no second copy to fall behind. The reference, the spec and the mock are all derived from the endpoints in your repository — and a change only reaches them after a person has read what it does to callers and approved it.

src/routes/orders.tsPOST /orders · requires authreference · openapi · mockPOST /orders · requires auth  ← derived
How it works

Four steps, and you own the one that matters

The pipeline is automatic right up to the point where judgment is required. That step is yours, permanently.

  1. 1Push

    Connect the repo

    Express, Fastify, Hono, NestJS and Next route handlers are detected automatically. Nothing to annotate, no decorators to add.

  2. 2Extract

    Read what changed

    Endpoints, path and query params, body fields, status codes, and which middleware guards the route — pulled straight from the source.

  3. 3Review

    In caller terms

    Auth added to an open route is breaking, even though it's one line. The diff is judged by what it does to consumers, not by lines changed.

  4. 4Publish

    Everything at once

    One approval regenerates the reference, the OpenAPI 3.1 document and the mock server together — from the same endpoints.

The extractor reads route registrations rather than compiling your project — fast enough to run on a webhook, and fallible enough that a person should look. Reviewers approve; a separate permission ships. That split is enforced on the server, not by hiding a button.

your-workspace / review queue
a4f21c9 · feat: require auth on order refunds
src/routes/orders.ts
router.post("/orders/:id/refund", handler)
+router.post("/orders/:id/refund", requireAuth, handler)

A route changes. APIOS reads the push, not a spec you'd have to update by hand.

One approval

Four artifacts that cannot disagree

They’re generated from the same approved endpoints in the same pass, so “the mock is out of date with the docs” stops being a category of bug that exists.

API reference

Grouped, searchable, with runnable cURL per endpoint. Public-facing, generated from what a reviewer approved.

OpenAPI 3.1

JSON or YAML, correctly templated paths, real operation ids. Feed it to any generator you already use.

A running mock

Honours pagination, simulates auth, and can be forced to fail or stall so the frontend can build error states before the backend exists.

A collection you can send

Foldered by resource, named the way you'd name them, documented down to the file and line each endpoint came from — with auth and an environment already wired up.

And the client it ships with

Free forever, and genuinely good

Try it right here, no account needed — this playground is a real request through the production proxy, not a recording. Sign in once and the full workspace is yours, data staying local to your browser either way.

apios — live playground
GET

This is a real request.

Press Send and it goes out through the same proxy the product uses — real latency, real headers, no CORS.

Built around the part that actually costs you time

Composing a request was never the hard part. Understanding the answer is.

Error detective

A red status code is a starting point, not an answer. Every failure gets a root cause, a fix, and the checks worth running — grounded in the actual request, headers and payload.

Requests from a sentence

Describe the endpoint. Get the method, URL, headers, an example payload and docs — matched to the conventions already in your collection.

Tests from real responses

Assertions are derived from the response you actually received, so every path they reference is guaranteed to exist. No spec-shaped guesses.

Timing that names the culprit

DNS, TCP, TLS, TTFB and download measured at the socket — then told back to you in a sentence. Slow because of the network, or because of them?

Chaining without scripts

Bind a token out of a login response and every request after it uses the value. A rule you can read and review, not a JavaScript snippet buried in a tab.

Paste any cURL

From the docs, from a bug report, from your browser's network tab. Drop it in the URL bar and the whole request populates — method, headers, body, auth.

Keyboard-first

Your hands never leave the keyboard

Every action is two keystrokes away. Search requests, switch environments, fire a send, jump between tabs — all from one palette that ranks commands and entities together.

⌘KCommand palette⌘↵Send request⌘5Review queue?Every shortcut
Search requests, or run a command…

Requests

GETList products
POSTCreate user
DELETERemove order

Actions

Publish approved proposal⌘5
Compare

Everyone else diffs your spec

Postman, Apidog, oasdiff, Redocly — every one of them takes a specification somebody maintains by hand as its input. That’s the artifact that drifts. These pages say where that matters, and where it doesn’t.

Pricing

Priced per workspace. Never per reviewer.

What’s metered is scale — seats, repositories, how long the audit log is kept. Never review, never breaking-change detection. Charging for the safety features would sabotage the one habit this product needs a team to form.

Free

A real team, and the whole pipeline.

$0forever

Start free
  • 5 members — not one, and no card
  • 3 repositories, read on every push
  • Breaking-change detection, review queue, audit log
  • Generated reference, OpenAPI 3.1 and mock server
  • The full client: chaining, runner, response diff, AI
  • Self-hostable, on this tier too

Enterprise

For teams with a security review.

Customannual

Talk to us
  • Everything in Team
  • Unlimited members, repositories and keys
  • SSO / SAML and SCIM provisioning
  • Unlimited audit retention, exportable to your SIEM
  • SLA and dedicated support

Team is one price for the workspace, however many people are in it — a team that adds three reviewers is using this correctly, and charging for that would teach you not to. Self-hosting is on every tier, including free: the server runs against your own Postgres.

Stop maintaining a second copy

Connect a repository and watch the first proposal arrive. Or sign in and send a request in ten seconds — free, forever.