Start a bulk export

Exports your inventory lines to a gzip-compressed file. The export runs in the background: this call returns a job right away, and you poll GET /v1/inventory/bulk/jobs/{jobId} until status is completed and downloadUrl carries the link to the file. The file is kept for 7 days (the job's expiresAt).

Exported files use the exact row layout POST /v1/inventory/bulk/import accepts — column set, condition values, prices in decimal major units — so a file can be exported, edited, and imported back. Each line's comment, notes, location, and tags are included; location is the location name and tags is a comma-separated list of names in CSV (an array in JSON). Each row's productId is the catalogue product's numeric id, as returned by GET /v1/products. Rows also carry informational columns next to productId: name, expansion, url, game, printNumber, rarity, and the finish-matched cardmarketId and tcgplayerId (the Cardmarket / TCGplayer product id for this line's own finish). These are ignored on import.

Pass filters to export a subset — the same filters POST /v1/inventory/search accepts, so a search can be turned into an export unchanged. Export a single location with { "location": { "op": "or", "values": ["Store A"] } }, or every untagged line with { "tags": { "op": "or", "values": [null] } }. Filtered exports match lines the same way the search endpoint does, so the selection can lag your latest changes by a few seconds; exports without filters always reflect your latest changes.

Starting an export counts against the inventory-export rate limit: 1 request every 10 minutes.

Send an Idempotency-Key header to make retries safe: the same key returns the same response for 24 hours.

Requires the inventory:read scope.

Headers
  • Accept-Language
    Type: string

    The language to work in — en, fr, it, es, or de, with or without a region. Name searches match in that language where a translation exists, falling back to English. Defaults to English.

Body
required
application/json
  • format
    Type: string enum
    required

    The file format to generate: json or csv.

    values
    • json

      A JSON file.

    • csv

      A CSV file.

  • filters
    Type: object

    Export only the lines matching these filters — the same filters POST /v1/inventory/search accepts. Omit to export your whole inventory.

Responses
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for post/inventory/bulk/export
curl https://public-api.cardnexus.com/v1/inventory/bulk/export \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "format": "json",
  "filters": {
    "name": "",
    "printNumber": "ST02-44",
    "nameSlug": "",
    "customId": "",
    "customIdPrefix": "",
    "customIdContains": "",
    "commentContains": "",
    "productIds": [
      1
    ],
    "expansionId": [
      42,
      118
    ],
    "tags": {
      "op": "and",
      "values": [
        "Trade binder"
      ]
    },
    "location": {
      "op": "and",
      "values": [
        "Trade binder"
      ]
    },
    "condition": {
      "op": "and",
      "values": [
        "NM"
      ]
    },
    "language": {
      "op": "and",
      "values": [
        ""
      ]
    },
    "finish": {
      "op": "and",
      "values": [
        "Standard"
      ]
    },
    "productType": {
      "op": "and",
      "values": [
        "card"
      ]
    },
    "productCategory": "",
    "graded": true,
    "forSale": true,
    "quantity": {
      "min": 0,
      "max": 0
    },
    "listingPrice": {
      "min": 0,
      "max": 0
    },
    "gameFilters": {
      "game": "sorcery",
      "filters": {}
    }
  }
}'
{
  "job": {
    "id": "6848a1b2c8d4e9f7a6b5c4d3",
    "kind": "export",
    "status": "pending",
    "format": "csv",
    "mode": null,
    "counts": null,
    "progress": 0,
    "errorMessage": null,
    "downloadUrl": null,
    "errorReportUrl": null,
    "expiresAt": null,
    "createdAt": "2026-06-10T09:14:02.000Z"
  }
}