← All guides

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

SpaceX API alternative β€” the launches API from your tutorial is down. Here's a free stand-in.

The community SpaceX API is the "fetch something cool" dataset of a whole era of tutorials: React launch trackers, Apollo Client's own GraphQL docs, YouTube build-alongs, take-home exercises. Three different endpoints carried that traffic, and right now all three fail:

If your tutorial just died on line one, here's a free launches API with the same bones β€” launches and rockets, filterable and sortable, served over both REST and GraphQL β€” plus things the original never had: writes that persist, failure-mode rehearsal, and data you can edit. No signup.

1. A launches API in one paste

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

The dataset is 16 milestone launches (FalconSat through Starship IFT-1 β€” real missions, our own descriptions) and 4 rockets, in a v4-familiar shape: flight_number, name, date_utc, success, details, plus a rocketId foreign key and a patch image URL that actually renders (served by our placeholder-image API, so your launch cards get pictures).

2. The translation table

SpaceX API (v4)Your Mockbird project
/v4/launches/launches
/v4/launches/latest/launches?sortBy=date_utc&order=desc&limit=1
/v4/launches/{id}/launches/12
POST /v4/launches/query with {"query":{"success":false}}/launches?success=false β€” a plain GET
/v4/rockets/rockets
populate: "rocket"/launches/12?_expand=rocket β€” the rocket object is joined inline
(no equivalent)/rockets/2/launches β€” every Falcon 9 launch, nested-route style
(no equivalent)/launches?q=starlink β€” full-text search
BASE=https://mockbird.mockbird.workers.dev/m/YOUR_ID

curl "$BASE/launches?sortBy=date_utc&order=desc&limit=1"   # the "latest launch" card
curl "$BASE/launches?success=false"                        # the three failures
curl "$BASE/launches/12?_expand=rocket"                    # Demo-2, rocket joined

3. The Apollo tutorial, un-broken

Every project gets a GraphQL endpoint at /m/YOUR_ID/graphql β€” with GraphiQL when you open it in a browser. The launchesPast query from the Apollo tutorials translates directly:

query {
  launches(limit: 5, sortBy: "date_utc", order: "desc") {
    id
    name
    date_utc
    success
    rocket { name }        # the rocketId relation, resolved
  }
  launchesCount
}
curl -s -X POST https://mockbird.mockbird.workers.dev/m/YOUR_ID/graphql \
  -H 'content-type: application/json' \
  -d '{"query":"{ launches(limit:3, sortBy:\"date_utc\", order:\"desc\"){ name success rocket { name } } }"}'

Filters use a typed where input β€” launches(where:{success:false}) returns exactly the three failures. One honest quirk: the single-record field is named by stripping the plural s, so it's launche(id: 9) β€” yes, really. Mutations (createLaunches, etc.) write the same records REST sees.

4. Writes that persist β€” log a new launch

curl -s -X POST https://mockbird.mockbird.workers.dev/m/YOUR_ID/launches \
  -H 'content-type: application/json' \
  -d '{"flight_number":201,"name":"My Mission","date_utc":"2026-10-01T12:00:00Z",
       "success":true,"rocketId":2,"details":"Launched from my tutorial."}'
# β†’ 201 {"id":17,…}   β€” and GET /launches/17 returns it. It persists.

The original API was read-only even when it worked. With writes, the launch-tracker tutorial grows into a full-CRUD portfolio piece: an admin page, an edit form, a delete button.

5. Rehearse the failure you just experienced

You found this page because an API your code depended on went down. Point your error handling at it on purpose:

# fail, fail, recover β€” retry/backoff drill
curl "https://mockbird.mockbird.workers.dev/m/YOUR_ID/launches?mock_seq=525,525,200"

# slow network for your loading skeletons
curl "https://mockbird.mockbird.workers.dev/m/YOUR_ID/launches?mock_delay=2000"

More recipes in testing loading & error states.

Want real, current launch data instead?

A mock is the wrong tool if your goal is showing users real upcoming launches. The actively maintained option is Launch Library 2 (ll.thespacedevs.com) β€” keyless, covers all agencies (not just SpaceX), and answered live during our checks. Mind its free-tier rate limit (about 15 requests/hour), which is exactly why you develop against a mock and swap the base URL for production.

The honest split: real data for real users β†’ Launch Library 2. A stable fixture you control β€” offline dev, deterministic tests, CRUD, failure drills β†’ Mockbird. They compose.

Start now

The one-paste block in section 1, or zero setup at all:

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

Facts checked live on September 17, 2026: api.spacexdata.com answered HTTP 525 on /v4/launches/latest, /v5/launches/latest, and /v4/rockets; api.spacex.land/graphql answered HTTP 520; spacex-production.up.railway.app answered 200 with an errors array quoting an invalid-JSON response from api.spacexdata.com. The r/SpaceX API repository announced the project was no longer maintained in November 2022. Launch Library 2 answered a keyless request during the same check. Every Mockbird command on this page was run against a live project before publishing.

Full API reference in the docs. More guides: Free GraphQL mock API Β· Mock API for React Β· SWAPI alternative Β· GitHub Jobs alternative Β· JSONPlaceholder alternative. Create your API β†’

⚑ Skip the terminal: this link opens the dashboard import panel β€” paste the contents of spacex.db.json and you have the same API with zero curl. No signup.