mock → observe → enforce
Paste an OpenAPI document.
Get a live URL.
That URL mocks your API before it exists. Point it at the real thing later and it validates every request and response against the contract - and tells you where production has drifted from what you publish.
Or start from one of ours
# paste a spec, get a URL - no account, gone in 24 hours curl -s https://openapi-proxy.com/specs -T openapi.json https://amber-heron.openapi-proxy.com # every operation answers from your schema, immediately curl https://amber-heron.openapi-proxy.com/pets/42 { "id": 42, "name": "string", "tag": "string" }
Three steps, each one optional
-
mock
A live URL for an API that does not exist yet
Paste the spec and every operation answers immediately, generated from your schemas: examples honoured, required fields present, content types negotiated. Frontend unblocked, SDK tested, partner demo booked - before the backend has a repository.
-
observe
Proof the implementation matches the document
Point the same URL at your real upstream. Conforming traffic passes through untouched; every request and response is checked against the contract, and the drift report shows what your API actually does versus what your docs claim - per operation, per field, with when it started.
-
enforce
The contract, enforced at the edge
When you trust what observe shows you, turn it round: a non-conforming request is rejected with RFC 7807
problem+jsonnaming the exact schema pointer, and never reaches your upstream at all.
The docs say one thing. Production says another.
Every published API drifts: a field goes nullable after a migration, an enum grows a value the spec never heard of, a deploy changes a date format and three partners' SDKs quietly break. You find out when a customer emails.
A proxy that validates responses - sampled, off the hot path, never touching the client's bytes - sees the drift the day it ships, not the week it is reported. Retention turns it into a time series: not just what is wrong, but when it started and what shipped that day.
{
"type": "https://openapi-proxy.com/problems/request-validation",
"title": "request does not match the published contract",
"status": 422,
"violations": [
{ "pointer": "/paths/~1pets/post/requestBody",
"error": "required property 'name' is missing" }
]
}
Fast enough to sit in the request path
- added by validating a request against your contract
- ~0.8µs
- throughput, end to end over HTTP
- 160,000/s
- conforming responses forwarded
- byte-identical
- requests a validator failure may drop
- zero
The request path is compiled C: the event loop, the forward to your upstream, JSON Schema validation, and the routing that maps your hostname to your document. Perl runs the configuration, the reporting pipeline and the control plane, which execute once per deployment and once per poll rather than once per request. That separation is why contract validation costs microseconds where a scripting runtime spends milliseconds.
Conforming traffic is forwarded byte-identical, headers included. Paths your specification does not cover are forwarded, not rejected: an incomplete specification is the normal case, and a gateway that returns 404 for your uncovered routes is one you cannot deploy.
Measured with the benchmark harness in our repository: validation cost against a fixed upstream, throughput over HTTP with four workers on a single machine. The capacity model behind our pricing is built from the same figures - see the docs.
What leaves your network
Violation fingerprints and one redacted example per fingerprint per window. Never a full request or response body. That sentence is in our security page and our DPA, in that order - and teams that need single-tenant isolation can run on a dedicated instance we provision and operate for them.
Priced on traffic, not seats
Metered on requests proxied, because that is what costs us. Seat pricing punishes exactly the team-wide adoption we want.
| Free | Starter £29 | Team £99 | Business £399 |
|---|---|---|---|
| 1 proxy 10k req/mo |
3 proxies 1M req/mo |
10 proxies 10M req/mo enforce mode |
unlimited proxies 100M req/mo SLA, SSO, dedicated instance |
On paid plans, going over your ceiling never fails a request - it raises an alert and bills the overage. A gateway that stops passing traffic because of an invoice is a gateway nobody puts in production.