Import RFID tokens from JSON or CSV

post/v1/tenants/{tenant_id}/tokens/import
Requires an API key

Requires tokens:write (tenant-admin). Up to 5,000 rows as JSON {"rows": [...]} or text/csv with a header row (id_token, type, status, expires_at, label, external_reference); at most 1 MiB. Rows match existing tokens by external_reference, else by id_token (case-insensitive): new values are created, given fields of existing ones updated, others reported unchanged, so re-running a file is safe. Absent fields keep their current value (new tokens: ISO14443, Accepted). dry_run=true validates and plans without writing and needs no Idempotency-Key. Invalid rows are reported per row and skipped; valid rows still apply. A 503 outcome_unknown leaves some rows applied: re-run the same file with a new key.

Path parameters

  • tenant_idintegerRequired

Query parameters

  • dry_runboolean
    Default false

Headers

  • idempotency-keystring | null

Request body

  • rowsarray of objectRequired
    Up to 5,000 rows, each with id_token and optionally type, status, expires_at, label and external_reference.

Returns · 200

  • dry_runbooleanRequired
  • countsobjectRequired
    Rows per action: create, update, unchanged, error. A dry run reports what applying would do.
  • rowsarray of ImportRowResultRequired
    Every error row, and every row that changes or would change a token.
    Child attributes
    • rowintegerRequired
      1-based data row (the CSV header is not counted).
    • id_tokenstring | nullRequired
    • actionenumRequired
      One of create, update, unchanged, error
    • token_idinteger | null
    • codestring | null
      Why an error row was refused: invalid, duplicate_in_file, token_reserved, token_ambiguous, token_type_mismatch or external_reference_conflict.
    • messagestring | null
POST /v1/tenants/{tenant_id}/tokens/import
curl --fail-with-body -X POST "https://api.ivoracharge.com/v1/tenants/1042/tokens/import" \
  -H "Authorization: Bearer $IVORA_API_KEY" \
  -H "Idempotency-Key: order-2026-09-30-0001" \
  -H "Content-Type: application/json" \
  -d '{
  "rows": [
    {}
  ]
}'
Response · 200
{
  "dry_run": false,
  "counts": {},
  "rows": [
    {
      "row": 1,
      "id_token": "string",
      "action": "create",
      "token_id": 1,
      "code": "string",
      "message": "string"
    }
  ]
}
Try it is not available here yetRequests from this page are off until the production API at https://api.ivoracharge.com is public. Use the code samples from your application server; Ivora grants production access. Keys are created in Developer tools.