The free tiers are a real product — mocks, endpoints, saved responses. Pro is for rehearsing the things that go wrong, and for mirroring an API large enough to matter.
Make an API fail, on purpose
Name a set of responses — "outage", "rate limited", "expired token" — and flip your whole mock into it. Your error handling finally gets exercised, without editing a single endpoint or waiting for the real API to have a bad day.
curl https://apipreflight.io/m/abc123/orders \
-H "X-Mock-Scenario: outage"
Switch from the dashboard, or per request from a test — so two people can drive different scenarios against the same mock at once.
A different answer on each call
A scenario can be an ordered sequence: the first call times out, the second returns 500, the third succeeds. That is the retry-and-backoff path you cannot test against a real API, and the reason this product exists.
call 1 → 408 Request Timeout
call 2 → 500 Server Error
call 3 → 200 OK ← holds here
Holds on the last step so a failure stays reproducible. ?_reset=1 starts over.
Bodies that look like real data
Generate a list instead of copying one row ten times — with names, emails, prices, UUIDs and timestamps that differ every call. Each row is internally consistent, so a person’s email matches their name.
{{#repeat 10}}
{
"id": "{{uuid}}",
"name": "{{faker.name.fullName}}",
"email": "{{faker.internet.email}}",
"price": {{faker.commerce.price(5,80)}}
}
{{/repeat}}Click tokens in from a palette rather than memorising them.
Mock only what does not exist yet
Point an endpoint at your real API and it forwards the request — path, query, headers and all — and returns what actually comes back. Mock the two endpoints that are not built; let everything else hit the real thing.
GET /orders/{orderId} → mocked, returns your fixture
GET /customers/{id} → forwarded to https://api.yourco.comhttps only, and private or internal addresses are refused.
Start from your OpenAPI spec, and hand it back
Paste a spec — JSON or YAML — and get a working mock, with example bodies built from its schemas when it has no examples of its own. Export any mock, or your whole account as one document, to share with the people writing the real API.
Exports are valid OpenAPI 3.1 and carry your scenarios and sequences, so a colleague importing the file rebuilds the whole mock — not a hollow copy of its paths.
Your own address, not ours
Serve a mock from a subdomain of your own — yourteam.apipreflight.io — or from a domain you own, mock.yourcompany.com. The hostname identifies the mock, so the URLs your app calls carry no /m/{id} prefix, and the HTTPS certificate is issued and renewed for you.
https://apipreflight.io/m/abc123/users/1 ← every mock, free
https://yourteam.apipreflight.io/users/1 ← your subdomain
https://mock.yourcompany.com/users/1 ← your own domain
Your own domain takes one TXT record to prove it is yours and one CNAME to point it here — both shown in the dashboard with copy buttons, and the status updates itself while you wait.
A request log you can actually review
Every call to your mock is recorded: method, path, query, headers (credentials redacted), body, the status returned and how long it took — plus which scenario and which sequence step served it, so a failing test on call 3 is explainable. Pro keeps 500 recent calls instead of 25, and exports them as CSV or JSON.
Kept for 30 days. Response bodies are not stored — see the privacy policy.
Room to work
200 endpoints per mock instead of 10, and unlimited mocks instead of three — enough to mirror a real API surface rather than a corner of one.