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

Dieser Artikel liegt noch nicht auf Deutsch vor und wird unten auf Englisch angezeigt.

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

Cookie-Einstellungen

Sie entscheiden, welche Cookies verwendet werden. Ihre Wahl können Sie jederzeit über „Cookie-Einstellungen“ im Footer ändern. Datenschutzerklärung

Notwendig

Immer aktiv

Für den Betrieb der Website erforderlich: Ihr Hell-/Dunkel-Design und diese Cookie-Auswahl werden in Ihrem Browser gespeichert. Sie dienen nicht dem Tracking.

Analyse

Google Analytics 4 misst über Statistiken, wie Seiten genutzt werden, und hilft uns, die Website zu verbessern. Wenn Sie zustimmen, setzt es Cookies und erfasst Ihren Besuch vollständig. Wenn Sie ablehnen, setzt es keine Cookies, doch Google kann weiterhin technische Daten erhalten, etwa die aufgerufene Seite, Ihren Browsertyp und Ihre IP-Adresse.

_ga, _ga_* · bis zu 2 Jahre · Google