Your first proxy
A mock becomes a proxy the moment it has an upstream. In the hosted console that is one field: set the upstream URL, and the same hostname that answered from your schemas now forwards to your API - validating everything that passes through.
Observe first
New proxies start in observe mode, and most should stay there a while:
- Conforming traffic is forwarded untouched - byte-identical, headers included, minus the hop-by-hop set.
- A non-conforming request or response is recorded and forwarded anyway. Nothing about your clients' experience changes; you gain a drift report showing where reality and the document disagree.
- An
X-Request-Idis minted if absent, echoed on the response, and carried on every violation record - so a drift entry links to the request that produced it.
The default that matters most
An unmatched path is forwarded, not rejected. A spec that does not
cover every route your API serves is the normal case, not an error;
uncovered paths pass straight through and are counted as undeclared
in the drift report, so coverage is something you can watch grow. A
gateway that 404s your uncovered routes is a gateway you cannot
install - so this one does not.
Enforce when you trust it
When observe mode has been quiet for long enough to believe it,
enforce turns the contract into a boundary. A non-conforming
request is answered at the edge with RFC 7807 problem+json:
{
"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" }
]
}
The request never reaches your upstream. Responses are never enforced
- your bytes are your bytes - but response violations keep feeding the drift report either way.
Fail-open, always
In both modes the gateway's own failures err in one direction: if validation cannot run, traffic flows. The security page describes how that property is tested rather than promised.
What to read next
Observe mode is only useful if you look at what it found:
- The drift report - what it found.
- Coverage - how much it looked at. Read this before concluding from a quiet drift report that all is well.
- Alerts - so you stop having to look.
And before you turn enforce on, the version diff is the page that tells you whether the contract you are about to enforce is the one your traffic has been conforming to.
Enforce is a plan feature
Enforce mode starts on the Team plan, and the reasoning is on the pricing page. Enforce also needs an upstream to protect: a mock has nothing to reject for, so the option is refused rather than silently ignored.