โ† All guides

A free jsonbin.io alternative โ€” for when the JSON blob needs to be a real API

Credit first: jsonbin.io is one of the good ones. It has been storing people's JSON reliably for years, CORS is enabled on every endpoint, records are private by default, updates are versioned, there's server-side JSONPath extraction on reads, and the pricing model is genuinely rare in its fairness: one-time purchases, no subscription โ€” you buy requests, they never expire, and the site doesn't even store your card details. They also grant free plans to open-source projects. If what you need is "put this JSON document somewhere safe and get it back", jsonbin does that job well.

This guide is for the moment the job changes โ€” when the blob is actually a list your frontend wants to query. Three things to know before you build on the free plan, all from jsonbin's own pricing page and docs:

  1. The free 10,000 requests are credited once โ€” ever. Not per month. Their pricing FAQ says the credited requests are "credited only for once"; when they're gone you upgrade to Pro ($20, one-time, 100,000 more) or buy additional requests (from $15). Every read counts. A little widget polling your bin once a minute exhausts the entire free allowance in about seven days.
  2. Everything starts with a signup and an API key. Verified live (September 2026): an anonymous POST https://api.jsonbin.io/v3/b answers 401 {"message":"You need to pass X-Master-Key or X-Access-Key in the header to create a bin"}. That key then lives in your client code or a proxy you now have to run.
  3. A bin is one opaque document. You GET the whole blob (or a JSONPath extract), you PUT the whole blob back. There's no per-record CRUD, no ?done=false filter, no pagination, no sorting, no search. On the free plan a record maxes out at 100 KB with 1 collection and no version history (versioning, schema validation and 10 MB XL bins are Pro).

Move a bin in one pipe

If your bin holds an array of records โ€” the common case โ€” pipe jsonbin's read straight into Mockbird's import. ?meta=false strips jsonbin's {"record": โ€ฆ, "metadata": โ€ฆ} wrapper so the raw payload transfers:

curl -s -H 'X-Master-Key: <YOUR_JSONBIN_KEY>' \
  'https://api.jsonbin.io/v3/b/<BIN_ID>/latest?meta=false' \
| curl -s -X POST 'https://mockbird.mockbird.workers.dev/api/projects/import?resource=todos' \
  -H 'content-type: application/json' --data-binary @-
# โ†’ { "id": "utj435hqk2", "adminKey": "โ€ฆ",
#     "resources": [{ "name": "todos", "records": 3,
#       "url": "https://mockbird.mockbird.workers.dev/m/utj435hqk2/todos" }] }

No account, no API key, one curl. Records are hosted verbatim โ€” integer ids preserved. An object of arrays works too (each key becomes its own collection, db.json-style), and a plain config object becomes a 1-record collection.

What the blob couldn't do

Every item is now a record behind a real REST endpoint, so the query toolkit jsonbin doesn't have works immediately โ€” all of these ran against production before this page was published:

curl https://mockbird.mockbird.workers.dev/m/utj435hqk2/todos          # list
curl https://mockbird.mockbird.workers.dev/m/utj435hqk2/todos/2        # one record
curl 'https://mockbird.mockbird.workers.dev/m/utj435hqk2/todos?done=false'        # filter
curl 'https://mockbird.mockbird.workers.dev/m/utj435hqk2/todos?title_like=launch' # substring
curl 'https://mockbird.mockbird.workers.dev/m/utj435hqk2/todos?sortBy=priority&order=desc&select=id,priority'
curl -X PATCH https://mockbird.mockbird.workers.dev/m/utj435hqk2/todos/2 \
  -H 'content-type: application/json' -d '{"done":true}'   # per-record merge โ€” no blob round-trip

Writes persist. Plus range operators (_gte/_lte/_gt/_lt/_ne), full-text q= search, pagination with X-Total-Count, GraphQL on the same data, a request inspector, and typed exports (openapi.json, postman.json, types.ts).

jsonbin โ†’ Mockbird translation

On jsonbin.ioOn Mockbird
POST /v3/b + X-Master-Key (signup first)one anonymous curl โ€” POST /api/projects/import or paste in the dashboard
GET /v3/b/<id>/latest?meta=false โ€” whole blobGET /m/<project>/<collection> โ€” list, filter, sort, paginate
X-JSON-Path extraction?select= projection + field filters + q= + GraphQL selection
PUT /v3/b/<id> โ€” replace the whole documentPOST / PUT / PATCH / DELETE per record
Version history (Pro, up to 1,000/record)named snapshots โ€” save/restore the whole dataset, 10 per project
Private bins behind your API keyopen by default; protected mode puts JWT auth on every endpoint
10,000 requests credited once, ever10,000 requests per project per day, every day, free
100 KB/record, 1 collection (free)1,000 records per collection, 20 collections per project
Data exportGET /m/<project>/db.json โ€” eject everything anytime

Honest comparison

jsonbin.io freeMockbird
Signup requiredyes โ€” API key on effectively every callno (anonymous projects; free signup to keep them)
Free requests10,000 credited once (never renew)10,000/day per project, renews daily
Data modelone JSON document per binrecords in collections โ€” per-record CRUD
QueryingJSONPath extractionfilters, ranges, search, sort, pagination, projection, GraphQL
VersioningPro only (up to 1,000 versions/record)snapshots (10/project) โ€” coarser but free
Max payload100 KB/record (10 MB XL bins on Pro)1,000 records/collection โ€” large single blobs aren't the use case
Pricing modelgenuinely fair: one-time purchases, requests never expire, no card storedfree while in beta
Track recordyears of stable service + status pagenewer (honest downside)

Where jsonbin wins, plainly: if you need one durable private JSON document with version history and a provider you can pay once and forget โ€” jsonbin's model is better than a subscription and better than most of this category. Big blobs (XL bins), schema validation, and per-version reads have no equivalent here. This page is for the other job: a list your app queries and mutates record-by-record.

Try it with zero setup

curl 'https://mockbird.mockbird.workers.dev/m/demo/products?limit=2&sortBy=price&order=desc'
curl -X POST https://mockbird.mockbird.workers.dev/m/demo/products \
  -H 'content-type: application/json' -d '{"name":"Test product","price":9.99}'
# โ†’ it persists โ€” GET it back by the id you received

This page is written by the Mockbird maker โ€” bias disclosed. jsonbin.io facts verified September 2026 from official pages: free-tier limits, the "credited only for once" request model, Pro $20 one-time / additional requests from $15, 100 KB free record size, 1 free collection and Pro-only versioning/schema-validation/XL-bins are from jsonbin.io/pricing; CORS-on-all-endpoints, the {"record","metadata"} read shape, ?meta=false, /latest, and X-JSON-Path are from jsonbin.io/api-reference; the anonymous-create 401 and its exact error message were curled live on Sep 4, 2026. Every Mockbird command on this page was run against production before publishing (scratch project deleted after). Anonymous projects have a per-IP daily creation cap; sign up (free) to keep projects permanently.

Full API reference in the docs. More guides: npoint.io alternative ยท host a JSON file as an API ยท jsonbox alternative ยท CSV โ†’ REST API ยท json-server, hosted. Create your API โ†’

โšก Skip the terminal: this link opens the dashboard import panel โ€” paste your bin's JSON, get a live queryable API, no signup. Or create a seeded e-commerce backend in one click.