← All guides

πŸ“‘ We check dummy.restapiexample.com (and 70+ other public dev APIs) with a plain GET every 30 minutes β€” see the live status page.

restapiexample alternative β€” the employee API from your tutorial, without the 429 on your second request

dummy.restapiexample.com is the employee API baked into thousands of Java, Spring Boot, RestAssured, Postman, and Selenium tutorials β€” Tiger Nixon and his 23 colleagues are probably the most-asserted-on payroll in test automation. If a course told you to hit /api/v1/employees, it meant this service.

Here's what actually happened when we ran the canonical calls, live, on September 16, 2026:

A test suite against this API can run one request per minute. Below: the same employee API on Mockbird β€” free, no signup β€” with their exact roster, their exact response envelope if you want it, writes that persist, and 10,000 requests/day.

Migrate the whole roster in two curls

Spend your one-request-a-minute allowance once, and keep the data:

# 1. grab the roster (their envelope: {"status","data":[…],"message"}) and
#    shape it as a db.json β€” one key = one collection
curl -s https://dummy.restapiexample.com/api/v1/employees \
  | jq '{employees: .data}' > db.json

# 2. import it β€” no account needed
curl -s -X POST "https://mockbird.mockbird.workers.dev/api/projects/import?name=employees" \
  -H 'content-type: application/json' --data-binary @db.json
# β†’ {"id":"PROJECT_ID","adminKey":"…"}   β€” save both

Your copy is live immediately, ids preserved:

curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/employees?limit=100"
# β†’ all 24 records (default page size is 20 β€” pass ?limit= to raise it)

curl https://mockbird.mockbird.workers.dev/m/PROJECT_ID/employees/1
# β†’ {"id":1,"employee_name":"Tiger Nixon","employee_salary":320800,"employee_age":61,…}

Run it 10,000 times a day if you like. No 429, no HTML error pages mid-test-suite. (Prefer their exact field shapes without copying their data? Create the resource yourself with fullName/number/age field types β€” see docs β†’ resources.)

Keep their response envelope (so tutorial code keeps working)

Tutorial code written for restapiexample reads res.data.data β€” the payload lives inside {"status":"success","data":…,"message":…}. Mockbird returns plain arrays by default, but the envelope reshaper can reproduce their shape exactly β€” per request or as a project-wide default:

# project-wide default: every GET now answers in restapiexample's envelope
curl -X PUT https://mockbird.mockbird.workers.dev/api/projects/PROJECT_ID/settings \
  -H 'x-admin-key: ADMIN_KEY' -H 'content-type: application/json' \
  -d '{"envelope":"{\"status\":\"success\",\"data\":\"$data\",\"message\":\"Successfully! All records has been fetched.\"}"}'

curl https://mockbird.mockbird.workers.dev/m/PROJECT_ID/employees/2
# β†’ {"status":"success","data":{"id":2,"employee_name":"Garrett Winters",…},"message":"Successfully! …"}

Your res.data.data code path keeps working, byte-shape identical. Add ?mock_envelope=none to any request to see the bare records.

Writes that actually write

The part their API only pretends to do:

curl -X POST https://mockbird.mockbird.workers.dev/m/PROJECT_ID/employees \
  -H 'content-type: application/json' \
  -d '{"employee_name":"Ada Lovelace","employee_salary":424242,"employee_age":36,"profile_image":""}'
# β†’ 201 {"id":25,…}

curl https://mockbird.mockbird.workers.dev/m/PROJECT_ID/employees/25
# β†’ the record. Not null. No success-wrapped lie.

PUT/PATCH/DELETE work the same way and persist — so your create→assert→update→assert→delete test sequence tests something real.

The query features their API never had

# who earns β‰₯ 300k?
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/employees?employee_salary_gte=300000&limit=100"

# top 3 salaries
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/employees?sortBy=employee_salary&order=desc&limit=3"
# β†’ Paul Byrd (725000), Yuri Berry (675000), Charde Marshall (470600)

# any-field search
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/employees?q=nixon"

Plus ?page=/?limit= pagination with an X-Total-Count header, ?select= field projection, _like/_ne/range filters, GraphQL on the same data, and OpenAPI/Postman/TypeScript exports of your schema.

Still want the 429? Rehearse it on purpose

Their throttle is a bug in your test suite but a feature in your retry logic. Simulate it deliberately:

# always 429 (proper JSON body + retry-after header, not an HTML page)
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/employees?mock_status=429"

# or a realistic sequence: fail, fail, succeed β€” point your backoff code at it
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/employees?mock_seq=429,429,200"

restapiexample β†’ Mockbird translation

dummy.restapiexample.comMockbird
GET /api/v1/employeesGET /m/PROJECT_ID/employees?limit=100
GET /api/v1/employee/1GET /m/PROJECT_ID/employees/1
POST /api/v1/create (returns an id whose GET is null)POST /m/PROJECT_ID/employees β€” persists, GET it back for real
PUT /api/v1/update/21 Β· DELETE /api/v1/delete/2PUT/PATCH/DELETE /m/PROJECT_ID/employees/21 β€” persists
{"status":"success","data":…,"message":…} envelope, alwaysPlain JSON by default; same envelope on demand (?mock_envelope= or project default)
~1 request/minute in practice (429 + HTML body past it, while headers claim 57 remaining)10,000 requests/day per project; JSON errors with correct headers
Fixed 24-employee roster, 4 fixed fieldsTheir roster imported verbatim β€” or any resources/fields you want
No filters / sort / search / paginationAll of them, json-server-style, plus GraphQL

Where restapiexample genuinely wins

Bias disclosed β€” this page is written by the Mockbird maker. Fair is fair: dummy.restapiexample.com is the literal URL printed in your course PDF, and for following along with a video one read at a time, it works with absolutely zero setup β€” no project to create, nothing to import. It has been serving Tiger Nixon for the better part of a decade, and its parent site pairs the API with written tutorials. If your only need is one GET per minute to see what JSON looks like, it still does that. The walls above start mattering the moment you write a loop, a test suite, or a second curl within 60 seconds.

Start now

# the two-curl migration from the top of this page, or an instant seeded backend:
curl -X POST "https://mockbird.mockbird.workers.dev/api/projects" \
  -H 'content-type: application/json' -d '{"name":"my api","preset":"ecommerce"}'

Or zero setup: curl https://mockbird.mockbird.workers.dev/m/demo/products/1

Facts checked live on September 16, 2026: three consecutive GET /api/v1/employees β†’ 200, 429, 429 (HTML body); the 429 carried x-ratelimit-limit: 60, x-ratelimit-remaining: 57, retry-after: 38; POST /api/v1/create β†’ 200 success with "id":4443; GET /api/v1/employee/4443 β†’ "data":null inside a "status":"success" envelope. Every Mockbird command on this page was run against a live project before publishing. If their behavior changes, re-check β€” the status page probes it every 30 minutes.

Full API reference in the docs. More guides: Mock API for Java Β· Spring Boot Β· JSONPlaceholder alternative Β· GoRest alternative Β· CSV β†’ REST API. Create your API β†’

⚑ Skip the terminal: this link opens the dashboard's import panel β€” paste the db.json from step 1 and your employee API is live, no signup.