For sellers · REST · JSON

API documentation

A small REST API for sellers to pull their batches and packs and mark cards sold from their own tools — a till, a scanner, a spreadsheet macro, whatever you've already got. Three endpoints, plain JSON, token authentication.

Test vs live mode

Every new integration starts in test mode — every endpoint returns a sandbox batch instead of your real inventory, so you can build and test against realistic data without touching anything real. Every response carries an X-Api-Mode header telling you which mode you're in. Once we've reviewed your integration, we switch you to live mode and you start seeing your real batches. The sold endpoint has its own separate approval step on top of that — see its errors below.

Authentication

Every request needs a bearer token in the Authorization header:

Authorization: Bearer <your-api-token>

Tokens are issued per store, not per user. If you're one of our sellers, grab yours from the API access page on your dashboard — access has to be switched on there before a token will work, and API access itself has to be granted to your store first. Not seeing it yet? Ask us at support@arcanepacks.com.

Rate limits

Two limits apply, independently of each other:

  • 20 requests per minute — applies across the whole API, same for every store.
  • A daily quota — set per store (1,000 requests a day by default); check the API access page on your dashboard for your own limit and how much you've used today.

Going over either returns 429 with a JSON body explaining which one:

{ "message": "Rate limit exceeded. Try again shortly." }
{ "message": "Daily request limit reached. Resets at midnight UTC." }

Endpoints

GET/api/v1/batches

List your batches

References of every active batch belonging to your store — usually the first call an integration makes, then used to feed the other two endpoints below.

Request

curl "https://arcanepacks.com/api/v1/batches" \
  -H "Authorization: Bearer $ARCANE_API_TOKEN"

Response — 200 OK

{
  "data": [
    { "reference": "ARC-2026-0001", "status": "committed" },
    { "reference": "ARC-2026-0004", "status": "committed" }
  ]
}

Errors

401{ "message": "Invalid or missing API token." }
GET/api/v1/batches/{reference}

Get an active batch's packs

Every pack in one of your batches, along with its card and sale status. Only works for batches that are currently active (committed and not merged away) — a batch reference that's still a draft, or was merged into another batch, returns a 409.

Request

curl "https://arcanepacks.com/api/v1/batches/ARC-2026-0001" \
  -H "Authorization: Bearer $ARCANE_API_TOKEN"

Response — 200 OK

{
  "data": [
    {
      "id": 10350,
      "image_url": "https://pokepulse-static.s3.eu-west-2.amazonaws.com/cards/images/PHANTASMAL-FLAMES/Blowtorch_117_094.webp",
      "title": "Blowtorch",
      "rarity": "Ultra Rare",
      "is_sold": false,
      "sold_at": null,
      "market_price": 2.40,
      "market_price_last_synced_at": "2026-08-02T00:00:00+00:00",
      "pokepulse_last_synced_at": "2026-08-02T18:38:03+00:00",
      "qr_url": "https://arcanepacks.com/q/nkfp8iowm9uf"
    },
    {
      "id": 10351,
      "image_url": "https://pokepulse-static.s3.eu-west-2.amazonaws.com/cards/images/PHANTASMAL-FLAMES/Charizard_004_094.webp",
      "title": "Charizard ex",
      "rarity": "Special Illustration Rare",
      "is_sold": true,
      "sold_at": "2026-08-08T08:38:24+00:00",
      "market_price": 84.00,
      "market_price_last_synced_at": "2026-08-06T00:00:00+00:00",
      "pokepulse_last_synced_at": "2026-08-06T09:12:47+00:00",
      "qr_url": "https://arcanepacks.com/q/7q2vd0mksrat"
    }
  ]
}

Errors

401{ "message": "Invalid or missing API token." }
404{ "message": "Batch not found." }
409{ "message": "This batch is not currently active." }
POST/api/v1/batches/{reference}/packs/{id}/sold

Mark a pack sold

Marks the given pack's card as sold. {id} is the id field from the packs list above. Safe to call more than once on the same pack — re-marking an already-sold pack returns status: "already_sold" instead of erroring, so it's safe to wire up to a barcode scanner that might double-scan.

Request

curl -X POST "https://arcanepacks.com/api/v1/batches/ARC-2026-0001/packs/10350/sold" \
  -H "Authorization: Bearer $ARCANE_API_TOKEN"

Response — 200 OK

{
  "status": "sold",
  "data": {
    "id": 10350,
    "is_sold": true,
    "sold_at": "2026-08-08T08:38:24+00:00"
  }
}

Errors

401{ "message": "Invalid or missing API token." }
403{ "message": "The mark-as-sold endpoint has not been enabled for this store yet." }
404{ "message": "Batch not found." }
404{ "message": "Pack not found in this batch." }

Already a seller?

Manage your API access and grab your token from your dashboard.