Docs menu+
Guides

Requests and responses

The API is read-only: every endpoint is a GET that answers with JSON.

Envelopes

A single record comes back in data, and a list comes back as an array in data with paging details in meta.

json
{
  "data": { "number": "OP01-120", "category": "character" }
}

Pagination

Lists return up to limit records: 1 to 200, 50 by default. When there are more, meta.next_cursor holds a cursor. Pass it back as ?cursor= with the same filters to get the next page. It's null on the last page. Cursors are opaque, so don't build or parse them.

curl "https://api.manifestcards.app/v1/printings?set=OP-01&limit=100" \
  -H "X-API-Key: $MANIFEST_KEY"

Languages

lang picks which localizations a card carries and which printings and sets are listed: en, ja, or all, the default. With lang=en, a card has only English text, and only printings released in English come back.

Errors

Errors use HTTP status codes, and the body always has the same shape:

json
{ "error": { "code": "not_found", "message": "no card OP99-999" } }
  • 400 bad_request: a parameter is missing or invalid. The message names it.
  • 401 unauthorized: the key is missing, unknown or revoked.
  • 404 not_found: nothing has that id, number or code.
  • 429 rate_limited: over the limit. Wait for Retry-After seconds.
  • 500 internal: our fault. Try again later.

Caching

Every response carries an ETag. Send it back in If-None-Match and you get an empty 304 Not Modified until the data changes. Data responses are also marked Cache-Control: private, max-age=300, so reusing one for five minutes is safe.

Images

Every printing has two image fields. image_url is Manifest's own copy: put it straight in an <img> tag, no key needed. official_image_url is the same image on Bandai's site. Browsers refuse to show Bandai's images on other sites, but servers and bots can still fetch them.