Import a Cardmarket stock file
Imports a Cardmarket "Export Own Stock" file as-is — send the file you downloaded from Cardmarket, no reformatting. 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 idProduct. The idArticle becomes the line's customId, the foil / reverse-holo flags set the finish, and the price is kept in EUR. Cardmarket's seven conditions map onto the five CardNexus conditions: 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 Cardmarket 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} for progress. A row whose idProduct 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/cardmarket \
--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"
}
}