Developers · Core concepts

Rate limits and quotas

Requests per minute for live and test keys, the rate-limit headers, how to back off on 429, and every platform limit in one table.

Version
v1.0.0
Base URL
https://dppapi-production.up.railway.app/v1
Format
JSON · OpenAPI 3.1
FeedbackLast updated

Este artículo aún no está disponible en español; se muestra a continuación en inglés.

On this pageThe limit

The limit

Each live key may make 600 requests per minute; each test key 60. The budget is counted per key, not per IP address, so two integrations with their own keys never eat into each other’s — and integrations behind one NAT do not either. A request over the limit is answered with 429 Too Many Requests and changes nothing.

Headers

Every response carries the current state of the key’s budget:

HeaderMeaning
x-ratelimit-limitRequests allowed per minute for this key (600 or 60).
x-ratelimit-remainingRequests left in the current window.
x-ratelimit-resetSeconds until the window resets.
retry-afterOn 429 only: seconds to wait before retrying.
429 response
HTTP/1.1 429 Too Many Requestscontent-type: application/json; charset=utf-8x-ratelimit-limit: 600x-ratelimit-remaining: 0x-ratelimit-reset: 12retry-after: 12

Handling 429

Wait retry-after seconds, then send the same request again. A request refused with 429 was not applied, so retrying it is safe — and with an Idempotency-Key, so is every other retry.

# curl retries 429 and honours retry-after with --retry.curl --retry 5 "https://dppapi-production.up.railway.app/v1/models" \-H "Authorization: Bearer $DPP_API_KEY"

Staying under the limit

  • Use the bulk endpoints: POST /items/batch, POST /passports/publish, POST /passports/bulk-lifecycle and POST /passports/import-updates each take up to 1,000 rows.
  • Page lists with limit=200 instead of fetching records one by one.
  • Sync with updated_since and webhooks instead of polling everything.
  • For a full copy, GET /export/archive is one request.
  • Watch x-ratelimit-remaining in long jobs and slow down before it reaches zero.

Every limit in one table

LimitValueWhere
Requests per minute, live key600Rate limits
Requests per minute, test key60Test keys
Requests per minute without a key (resolver, specification)120 per IP addressPublic resolver
Rows per bulk request1,000Batch create, bulk publish, bulk lifecycle, import updates
Page size1–200, default 50Pagination
Battery list page size (GET /models/{id}/items)1–200, default 12Batteries
Idempotency key1–255 characters, kept 24 hIdempotency
Document uploadPDF, JPEG or PNG, ≤ 25 MB, one fileDocuments
Model name / chemistry200 / 120 charactersModels
Serial number / place of manufacture200 / 300 charactersBatteries
Status or recycling note500 charactersPassports
Industrial battery in scope> 2 kWhArt. 77(1)
Webhook response time10 sWebhooks
Webhook retries5 (1 minute, 5 minutes, 30 minutes, 2 hours, 6 hours)Webhooks
Webhook URLhttps, public address, ≤ 2000 charactersWebhook endpoints
Stored webhook response body2,000 charactersDelivery log

Preferencias de cookies

Tú decides qué cookies se usan. Puedes cambiar tu elección en cualquier momento desde «Configuración de cookies» en el pie de página. Política de privacidad

Necesarias

Siempre activas

Imprescindibles para que el sitio funcione: tu tema claro/oscuro y esta elección de cookies se guardan en tu navegador. No sirven para rastrearte.

Analítica

Google Analytics 4 mide cómo se usan las páginas mediante estadísticas, lo que nos ayuda a mejorar el sitio. Si aceptas, instala cookies y mide tu visita por completo. Si rechazas, no instala cookies, pero Google aún puede recibir datos técnicos como la página vista, el tipo de navegador y la dirección IP.

_ga, _ga_* · hasta 2 años · Google