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 NMNM, EX and LPLP, GDMP, PLHP, PODMG.

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.

Body
required
application/json
Responses
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for post/inventory/bulk/import/cardmarket
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"
  }
}