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.
- Type: stringAccept
- Language The language to work in —
en,fr,it,es, orde, with or without a region. Name searches match in that language where a translation exists, falling back to English. Defaults to English.
- Type: string enumformatrequired
The file format to generate:
jsonorcsv.values- json
A JSON file.
- csv
A CSV file.
- Type: objectfilters
Export only the lines matching these filters — the same filters
POST /v1/inventory/searchaccepts. Omit to export your whole inventory.
- application/json
- application/json
- application/json
- application/json
- application/json
- application/json
- application/json
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"
}
}