pi_ogVuWddfjgJP
$42.00
requires_payment_method
Your app and your agents use it like the real thing. No keys, no sign-up, no bill.
The same test values the provider documents, the same answers back. Switch the card and watch the response change.
POST /v1/payment_intents amount=4200
→ 200 "status": "succeeded"
pi_ogVuWddfjgJP
$42.00
requires_payment_method
First your code creates the payment.
pi_ogVuWddfjgJP
$42.00
succeeded
customer · cus_kNucvv0HWDTS
Then the twin confirms it.
evt_payment_intent.succeeded
200
delivered · signed
Stripe-Signature t=…,v1=…
Then the webhook lands, signed.
pi_ogVuWddfjgJP
$30.00 left
refunded $12.00
charge.refunded · sent
Later you refund part of it.
Each twin opens a local dashboard: requests and responses, webhook deliveries, stored state, and the switches for scenarios and chaos.



Seven hand-tuned packs, 54 APIs from the provider's own current spec, 2,528 from the public APIs.guru directory, your own OpenAPI file, or a recording of your traffic. Mock Anything reads it and builds the twin itself.
| API | What it covers | Source | Command |
|---|---|---|---|
| Built-in packs | |||
| Stripe | Payments, refunds, Checkout | pack | |
| Paystack | Transactions, saved cards | pack | |
| Twilio | SMS and status callbacks | pack | |
| Resend | Email, bounces, scheduling | pack | |
| GitHub | Issues, comments, pull requests | pack | |
| Anthropic | Messages, streaming, tool use, canned replies | pack | |
| OpenAI | Chat, responses, streaming, canned replies | pack | |
| Any other API, by name | |||
| Slack | Slack Web API | inferred | |
| Notion | Notion API | inferred | |
| Spotify | Spotify Web API | inferred | |
| Jira | Jira Cloud platform | inferred | |
| Asana | Asana API | inferred | |
| Your own | |||
| Your spec | OpenAPI 3 or Swagger 2 | file or URL | |
| A recording | HAR from DevTools or a proxy | file | |
| Just the docs | Your agent writes the twin | MCP | twin_from_docs(url) |
Turn on chaos and the twin misbehaves like a provider on a bad day. Flip a switch and watch what your app would get.
Requests time out.
Some requests hang until your client gives up.
The provider has a bad day.
500, 502 and 503, in the provider's own error shape.
You hit the rate limit.
429 with Retry-After, so your backoff gets tested.
Webhooks arrive twice.
The same event, delivered twice. Is your handler idempotent?
Events come out of order.
Shuffled deliveries, the way real queues behave.
--chaos --seed 42. Orange is an error, grey a slow answer. We ran it twice and got this strip both times.Mock Anything ships as an MCP server. Claude Code, Cursor and other agents can start a twin mid-task, force a decline, turn on chaos and read back exactly what happened.
{ "mcpServers": { "mockanything": { "command": "npx", "args": ["-y", "@shipatmidnight/mockanything", "mcp"] } } }
mockanything <api> start a twin
mockanything inspect <api> see and edit what was inferred
mockanything env <api> snippets for your SDK
mockanything list built-in packs
“Start a Stripe twin, build the checkout, then force a declined card and make sure we handle it.”
2,528 of 2,528
APIs in the public directory start a twin. 37,770 calls, no server errors. Measured 29 Oct 2026.
mockanything verify compares a twin with the provider's real sandbox, using your own test key, and scores the match.No. Mock Anything is an independent, free, non-commercial project. Provider names are used only to say which API a twin is compatible with. Twins are built from public API facts, not from any provider's code or documentation text.
No. Any placeholder key works, for example sk_test_mockanything. Live keys are refused.
No. The twin runs locally and answers from memory. The only outbound traffic is the webhooks you point at your own app, fetching an API description when you ask for one by name or URL, and the sandbox calls verify makes when you run it with your own test key.
Anything with an OpenAPI or Swagger description, the 2,529 APIs listed by name in the public APIs.guru directory, the built-in packs, HAR recordings of your own traffic, and APIs your agent describes from their documentation.
Run npx @shipatmidnight/mockanything verify stripe --key sk_test_…. It makes the same calls to the twin and to the provider's sandbox and compares status codes, fields, types, id formats and error codes. Live keys are refused, and the report holds field names, never your data.
With --persist, yes. Objects, ids, the test clock and the webhook secret are saved to a file only you can read.
Yes. Start a twin before your tests and point your SDK's base URL at it. Use --seed to make chaos runs repeatable.
Packs are plain YAML. The contributing guide in the repository explains the rules: facts only, no branding, and a test with the official SDK.
Copies npx @shipatmidnight/mockanything stripe. The package goes live at launch, Sunday 1 November, midnight.