Skip to main content

Bulk operations

To import a whole customer base, issue hundreds of tickets or update thousands of cards, use the /bulk endpoints instead of looping over single calls.

ResourceCreateUpdateDelete
CustomersPOST/clients/bulkPATCH/clients/bulkDELETE/clients/bulk
Transit passesPOST/transits/{transitId}/passes/bulkPATCH/transits/{transitId}/passes/bulkDELETE/transits/{transitId}/passes/bulk
Event passesPOST/events/{id}/passes/bulkPATCH/events/{id}/passes/bulkDELETE/events/{id}/passes/bulk
Hotel passesPOST/hotels/{id}/passes/bulkPATCH/hotels/{id}/passes/bulkDELETE/hotels/{id}/passes/bulk
Sent couponsPATCH/coupons/{id}/passes/bulkDELETE/coupons/{id}/passes/bulk

Request body​

FieldTypeDescription
itemsarray1 to 5,000 items, each in the format of the single-item endpoint. Deletions take ids (an array of identifiers).
webhookUrlstringOptional. URL called once the operation is complete.
forceSyncbooleanOptional, false by default. true processes the request immediately and returns the results. Only for batches of fewer than 1,000 items (otherwise 400:SYNC_EXECUTION_NOT_ALLOWED).
Create two customers and send them their loyalty card
POST/clients/bulkTry it
curl -L 'https://api-v2.test.eldowallet.fr/clients/bulk' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'x-lang: en' \
-H 'Authorization: Bearer <token>' \
--data-raw '{
"webhookUrl": "https://your-server.example.com/hooks/eldo-bulk",
"items": [
{
"firstName": "Camille",
"lastName": "Martin",
"email": "camille@example.com",
"source": "CRM",
"gain": 1250,
"sendCard": true
},
{
"firstName": "Yanis",
"lastName": "Benali",
"email": "yanis@example.com",
"source": "CRM",
"gain": 300,
"sendCard": true
}
]
}'

Asynchronous mode (default)​

The response comes back immediately, before processing:

{
"operationId": "6651a7e0c4b2f19d8e3a0c55",
"totalItems": 2,
"successCount": 0,
"failureCount": 0,
"status": "pending",
"createdAt": "2026-11-20T10:00:00.000Z"
}

Track progress with GET/bulk-operations/{operationId}: status moves from pending to processing, then completed or failed. At the end, every failed item is listed in operationErrors.

The completion webhook isn't guaranteed

webhookUrl is called only once, with no retry, and only if the operation ends as completed. Keep polling GET/bulk-operations/{operationId} as a safety net.

Best practices​

  • Split anything above 5,000 items, and send the batches one after another.
  • Provide your own barcode per item if you need to link the pass to your system (ticketing, CRM).
  • An error on one item doesn't cancel the others: retry only the items in operationErrors.

API news, once a month

New endpoints, upcoming changes, guides and use cases. No spam, one-click unsubscribe.

Report a technical problem

An API error, a pass that does not update, an email that does not arrive? Describe the problem: our technical team will answer.

For a fast answer, include:

  • The method and endpoint (e.g. POST /clients)
  • The error code returned (errorCode) and the body sent
  • The date and time of the call
  • The identifiers involved (customer, template, pass)

Never include an API token or a password.

AI assistant

Beta

Loading…

AI-generated answers (Claude): double-check important details.

Sign in to use the assistant