← All guides

A live API for Hoppscotch β€” the URL that just works in the web app

Hoppscotch is the API client that respects how the web works: open source, runs entirely in a browser tab, nothing to install. The price of that honesty is one famous wall β€” the web app makes requests with the browser's own fetch, so any API that doesn't send CORS headers dies with Network Error, and the fix is installing a browser extension, routing through a proxy, or running their Agent. Most real APIs, and most mock tools, don't send CORS headers.

Every Mockbird endpoint does. That makes this a genuinely useful pair: a live, stateful API you can point the Hoppscotch web tab at with zero setup β€” paste a URL, hit Send with the default Browser interceptor, get JSON. This guide walks that path end to end: one request, then the whole API imported into Collections from a single OpenAPI URL, stateful CRUD, forced errors and latency, and a real schema for the GraphQL tab. Everything below was performed in hoppscotch.io against production before publishing.

1. One request, zero setup

Open hoppscotch.io, paste this into the URL bar, hit Send:

https://mockbird.mockbird.workers.dev/m/demo/products?limit=2

With the stock Browser interceptor (Settings β†’ Interceptor β€” it's the default) that returns 200 OK with two seeded products. No extension, no proxy privacy-policy to read, no Agent download. If you've only ever seen Hoppscotch's Network Error screen against your own endpoints, that's the difference CORS headers make β€” we send Access-Control-Allow-Origin: * and answer preflights on every mock endpoint, because a mock API that browsers can't call is half a mock API.

The demo project is public and reseeds daily. Everything on this page also works on your own project β€” same URLs with your project id.

2. Import the whole API from one URL

Every project publishes a live OpenAPI 3.0 spec. Hoppscotch imports it directly:

Collections β†’ Import β†’ Import from OpenAPI β†’ Import from URL:

https://mockbird.mockbird.workers.dev/m/demo/openapi.json

When we did exactly that, Hoppscotch reported 5 collections, 24 requests, 44 response examples imported β€” a folder per resource (products, orders, customers, reviews) with List / Get one / Create / Replace / Update / Delete requests, every documented query param present with its description (pagination, sorting, per-field filters, and the simulation params below), and response examples attached. Click the imported List products and Send β€” it returns the live list as-is.

Interop detail we fixed while writing this guide: Hoppscotch (like most importers) pre-fills every documented query param with an empty value (?name=&cursor=&mock_status=…). Mockbird treats empty-valued params as absent, so imported requests work verbatim instead of accidentally filtering the list down to nothing. If your own API misbehaves under Hoppscotch imports, check how it handles empty params.

Mid-migration team with Postman collections? Hoppscotch's Postman importer (with experimental script import since v2025.10.0) works too, and every project also exports a native Postman Collection v2.1 at /m/<project>/postman.json β€” one source of truth, both formats.

3. It's a real backend: writes persist

Open the imported Create a product (or make a POST request by hand), send a body:

POST https://mockbird.mockbird.workers.dev/m/demo/products
content-type: application/json

{"name": "Hoppscotch test", "price": 9.99}

The response has a new id. Now GET /m/demo/products/<that id> β€” it's there. PATCH it, DELETE it, watch X-Total-Count move. This is the part example-based mocking can't do: the demo is backed by a real datastore, so the create β†’ read-back β†’ update β†’ delete loop you're teaching your frontend actually round-trips. Filters (?category=…, ?price_gte=100), full-text ?search=, sorting, pagination and relations all run against the current data, not a canned response.

4. Break it on purpose from the params table

The imported requests arrive with the simulation params pre-listed (disabled until you give them a value). Toggle them in the Parameters tab:

ParamWhat you get
mock_status=503that status with a JSON error body β€” build your error branch against a real 503
mock_delay=30003 s of latency β€” watch your spinner, or set it past your client timeout
mock_seq=503,503,200deterministic sequence: two failures, then success β€” retry/backoff testing (add mock_seq_key=me to keep your sequence isolated on the shared demo)
mock_chaos=0.330% of requests fail with a random 5xx/429 β€” flaky-API drills
mock_ratelimit=5a real 429 + Retry-After once you exceed 5 req/min

All of these work on any endpoint and method β€” full recipes in the loading & error states guide.

5. The GraphQL tab gets a real schema

Hoppscotch's GraphQL tab wants an endpoint that answers introspection. Connect it to:

https://mockbird.mockbird.workers.dev/m/demo/graphql

The Documentation Explorer fills with the typed schema generated from the same data β€” Product, Order, Customer, Review, filter inputs, and full Query/Mutation roots. This query (run for real while writing this page) returns the two priciest products plus a count:

{ products(limit: 2, sortBy: "price", order: "desc") { id name price } productsCount }

Mutations work too, and they write the same records the REST endpoints serve β€” create a product over GraphQL, GET it over REST. (While verifying this we found our depth guard was rejecting Hoppscotch's standard introspection query as "too deep"; introspection is now exempt, so if you tried this before September 2026 and saw No schema found β€” it works now.)

6. And Hoppscotch's own mock servers?

Since v2025.10.0 Hoppscotch has a built-in Mock Servers feature, and it's a sensible design: save real responses as Examples, turn a Collection into a mock server, refine routes with header/query matchers, delays and template variables ({{uuid}}, {{timestamp}}). If your team lives in Hoppscotch workspaces and wants contract-first mocks derived from saved examples, use it β€” it's right there.

The boundaries, from their own docs and our hands-on run:

Hoppscotch mock serversMockbird
Accountlogin required (the New button is disabled logged-out)none β€” anonymous project, claim later
Semanticsexample replay: "mocks return predefined responses… they don't execute business logic or touch data stores"stateful CRUD β€” writes persist, filters/search/pagination compute
CORSyou add Access-Control-Allow-Origin headers to each mock response yourselfon by default, everywhere
Callersyour app + Hoppscotch requestsanything: browser, curl, CI, mobile, teammates β€” plus GraphQL, TS/Zod types, MSW export, db.json eject
Dynamic bits{{uuid}}/{{timestamp}}/env vars in bodiesseeded fake data + templated custom routes + simulation params

They compose, too: point a Hoppscotch mock server's source collection at requests you built against a Mockbird project, or keep design-phase example mocks in Hoppscotch and switch the environment's baseUrl here the day you need writes to stick.

7. Your own API instead of the shared demo

One curl (or one click), no signup:

curl -s -X POST https://mockbird.mockbird.workers.dev/api/projects \
  -H "content-type: application/json" \
  -d '{"preset":"ecommerce"}'
# β†’ {"id":"abc123xyz9", "adminKey":"…", ...}

Then import https://mockbird.mockbird.workers.dev/m/abc123xyz9/openapi.json into Hoppscotch exactly as in Β§2 β€” same flow, your schema, your data. Define resources by hand, or import an existing OpenAPI spec, db.json, CSV, or HAR recording and get a Hoppscotch-ready spec back out. Projects have a 10,000 requests/day cap β€” interactive use barely dents it.

Try it now

1. Open hoppscotch.io
2. Paste https://mockbird.mockbird.workers.dev/m/demo/products?limit=2 β†’ Send
3. Collections β†’ Import β†’ OpenAPI β†’ from URL:
   https://mockbird.mockbird.workers.dev/m/demo/openapi.json

Free, no signup required. Full docs Β· machine-readable API index.

Related: the same walkthrough for Bruno, escaping Postman's mock-server limits, Insomnia mock servers compared, the free GraphQL mock API, and testing loading and error states.

Verification: every step on this page was performed in the hoppscotch.io web app (1 Sep 2026) against production with the default Browser interceptor: the direct request returned 200, the OpenAPI URL import reported 5 collections / 24 requests / 44 examples, the imported List products request returned the live list verbatim, and the GraphQL tab loaded the full schema and executed the query shown. Mock-server facts are from Hoppscotch's official docs and blog (v2025.10.0, Oct 30 2025) plus a hands-on check of the logged-out UI. Test records created on the demo were deleted. If a step here doesn't work, that's a bug: tell us.