Six complete, related, populated APIs and a toolbox of everything else a client has to get right — REST, GraphQL, WebSocket, Server-Sent Events and MQTT over WebSocket. No keys, no accounts, no database: reads are real, and writes are answered exactly as a real server would answer them, then forgotten.
Each one is a small world with thousands of related records, ids that never change, and behaviour a real backend has: a transfer checks the funds and answers with both transactions, a ticket refuses an impossible status, a booking gets a seat.
An online shop: products, customers, orders, reviews and stock.
An IoT fleet: sites, devices, telemetry and alerts — the MQTT one.
Retail banking: customers, accounts, cards, eight thousand transactions, transfers and FX rates.
A social network: users, posts, comments, likes and follows — the GraphQL one.
A support desk: tickets, messages, agents, customers, SLAs — the state-machine one.
Airports, airlines, two and a half thousand scheduled flights and their bookings — the live-board one.
Echo, any status code, delays, redirects, cookies, gzip, streams, uploads — and every auth scheme, checked for real: Basic, Digest, API key, Bearer, AWS SigV4, OAuth 2 with PKCE, JWT.
sondahub keeps no data — there is no database behind it, only files and code. So a POST, PUT, PATCH or DELETE is validated, run through the real logic, and answered with exactly the status, headers and body a real server would send. Then it is forgotten. Every such answer says so:
HTTP/1.1 201 Created
X-Sondahub-Write: simulated
Location: https://api.sondahub.com/v1/store/products/2001
{
"id": 2001,
"sku": "NEW-1",
…
"_note": "Simulated write: this is exactly what the server would have answered, but nothing was stored — sondahub keeps no data. A GET will not find it."
}
What that buys you: the request went out right, the answer came back right, the checks ran, the auth worked — which is what testing a client is. What it cannot do: show you the record on the next GET.
Everything an API here offers can be loaded into Sonda without typing a request by hand.
Every API publishes an OpenAPI document. Import → From a URL, paste https://api.sondahub.com/v1/store/openapi.json, and the whole project appears with example bodies.
Lists with filters, a record by id, a POST that gets validated and priced, a PATCH that moves a status. Wrong bodies come back as 422 with every field named.
A WebSocket or SSE request on /v1/fleet/ws or /v1/fleet/events streams the world's own activity. The MQTT pane connects to wss://api.sondahub.com/mqtt.
A playground. The data is generated and stable; the records are related to each other the way real ones are; the servers answer the way real ones do, including when you get it wrong. Nothing here is real, nothing is stored, and the data is yours to download as plain JSON.