Import a TCG Power Tools export
Imports a TCG Power Tools CSV export as-is. Send it as multipart/form-data with the file in the file field and mode as a plain form field.
Each row is matched to a CardNexus product by its cardmarketId (or tcgplayerId when present). The isFoil flag sets the finish, the price is kept in EUR, and the condition codes map the same way as Cardmarket: MT and NM → NM, EX and LP → LP, GD → MP, PL → HP, PO → DMG.
The file's structure is checked right away: a file that can't be read as a TCG Power Tools export comes back with UNPROCESSABLE_FILE. Once accepted, the import runs in the background — this call returns a job, and you poll GET /v1/inventory/bulk/jobs/{jobId}. A row whose id matches no product fails with PRODUCT_NOT_FOUND in the error report; the rest still import.
Send an Idempotency-Key header to make retries safe. Requires the inventory:write scope.
- application/json
- application/json
- application/json
- application/json
- application/json
- application/json
- application/json
- application/json
- application/json
curl https://public-api.cardnexus.com/v1/inventory/bulk/import/tcgpowertools \
--request POST \
--header 'Content-Type: multipart/form-data' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--form 'file=' \
--form 'mode=upsert'
{
"job": {
"id": "6848a3f0c8d4e9f7a6b5c4e1",
"kind": "import",
"status": "pending",
"format": "csv",
"mode": "upsert",
"counts": null,
"progress": 0,
"errorMessage": null,
"downloadUrl": null,
"errorReportUrl": null,
"expiresAt": null,
"createdAt": "2026-06-10T09:20:45.000Z"
}
}