Este artículo aún no está disponible en español; se muestra a continuación en inglés.
Article 77(1) requires one passport per physical battery. Creating a battery item creates its passport and mints its unique identifier — C- followed by 11 characters — which never changes and is what the QR code resolves.
New passports are drafts: not public, not billed, until you publish them.
Personalise the samples. Paste a test key and every snippet uses it — and your own model and passport ids.
/v1/models/{id}/itemsList a model's batteries
A model’s batteries with a derived display status (draft, pending, published, attention, repurposed, waste, recycled) and, for attention, the reasons. counts covers the whole model, not just the page.
This list pages by number. For syncing, prefer the cursor-paginated List passports with model_id.
Parameters5
idstringpathrequiredThe model id.
statusstringqueryoptionalOnly this display status:
draft,pending,published,attention,repurposed,wasteorrecycled.qstringqueryoptionalSerial number or identifier, case-insensitive (contains).
pageinteger ≥ 1queryoptionalPage number. Default 1.
pageSizeinteger, 1–200queryoptionalRows per page. Default 12.
Responses
- 200OK — One page of batteries.
Errors3
- 400
Validation faileddetailsnames each invalid field. - 401
unauthorizedThe key is missing, unknown or revoked. - 404
Not foundNo model with this id in your organisation.
curl "https://dppapi-production.up.railway.app/v1/models/cm1q8x2k40003l70f9a8s7d6e/items?q=C48-2027&pageSize=200" \-H "Authorization: Bearer $DPP_API_KEY"{"total": 100,"page": 1,"pageSize": 200,"counts": { "all": 100, "published": 98, "attention": 2 },"items": [{"id": "cm1q8y0bq0005l70fq2r3t4u5","uniqueIdentifier": "C-7KQ2M9XHT4R","serialNumber": "C48-2027-0001","dateOfManufacture": "2027-01-15T00:00:00.000Z","placeOfManufacture": "Stuttgart, Germany","identifierOrigin": "MINTED","passportId": "cm1q8y0bq0006l70fx9y8z7w6","publishedAt": "2027-01-15T10:02:11.000Z","registrationId": null,"displayStatus": "published","attentionReasons": []}]}/v1/itemsCreate one battery
Creates one battery and its draft passport. Battery-level data points — the Annex XIII 4(a) values measured when the battery is placed on the market — go in fields.
Moving from another provider? Send the identifier already printed on the battery as uniqueIdentifier. It is kept as-is and, because that code already resolves somewhere, the passport is published immediately if your plan allows publishing.
Request body11
modelIdstringrequiredThe model this battery belongs to.
serialNumberstring, ≤ 200optionalYour serial number.
dateOfManufacturedateoptionalISO 8601 date (data point 9).
placeOfManufacturestring, ≤ 300optionalPlant or city (data point 8). Required before publishing.
placedOnMarketAtdateoptionalDefaults to now.
putIntoServiceAtdateoptionalWhen it went into service, if known.
productionBatchIdstringoptionalProduction batch reference.
fieldsobjectoptionalBattery-level data points keyed by API field name.
uniqueIdentifierstringoptionalOnly when bringing an identifier from another provider. Omit to have one minted.
foreignResolverUrlURL, ≤ 500optionalWhere the imported identifier resolves today.
importedFromstring, ≤ 200optionalName of the previous provider, kept on the record.
Headers2
Idempotency-KeystringheaderoptionalOptional. A unique string per logical operation (a UUID is ideal). The first response is stored for 24 hours and replayed for retries; see Idempotency.
X-DPP-Dry-Run"true"headeroptionalOptional, live keys. Validate the write in full and store nothing. Test keys always dry-run; see Test keys.
Responses
- 201Created — The battery with its passport.
Errors7
- 400
Validation faileddetailsnames each invalid field. - 401
unauthorizedThe key is missing, unknown or revoked. - 402
plan_upgrade_requiredYour plan does not allow creating batteries. - 403
insufficient_scopeThe key has nowritescope. - 404
Model not foundNo such model in your organisation. - 409
identifier_takenThe supplieduniqueIdentifieralready exists. - 422
invalid_identifierThe supplieduniqueIdentifierbreaks the identifier rules;violationslists them.
Webhooks fired
Response fields · 201
object- idstring
- uniqueIdentifierstring
Immutable, resolvable passport identifier (ISO/IEC 15459).
- serialNumberstring | null
- dateOfManufacturestring · date-time | null
- placeOfManufacturestring | null
- fieldsobject
- idstring
- statusstring
One of
ORIGINALREPURPOSEDREUSEDREMANUFACTUREDWASTE - lifecycleStatestring
- publishedAtstring · date-time | null
- qrResolverUrlstring
curl -X POST "https://dppapi-production.up.railway.app/v1/items" \-H "Authorization: Bearer $DPP_API_KEY" \-H "Content-Type: application/json" \-H "Idempotency-Key: 7b3e0c52-1f7d-4b8a-9a52-2f0e6d1c9a44" \-d '{"modelId": "cm1q8x2k40003l70f9a8s7d6e","serialNumber": "C48-2027-0101","dateOfManufacture": "2027-01-16","placeOfManufacture": "Stuttgart, Germany","fields": {"measuredCapacityAtPlacing": 15.2,"measuredResistanceAtPlacing": 38}}'{"id": "cm1q8y0bq0005l70fq2r3t4u5","modelId": "cm1q8x2k40003l70f9a8s7d6e","uniqueIdentifier": "C-7KQ2M9XHT4R","identifierOrigin": "MINTED","serialNumber": "C48-2027-0101","dateOfManufacture": "2027-01-16T00:00:00.000Z","placeOfManufacture": "Stuttgart, Germany","fields": { "measuredCapacityAtPlacing": 15.2, "measuredResistanceAtPlacing": 38 },"passport": {"id": "cm1q8y0bq0006l70fx9y8z7w6","status": "ORIGINAL","lifecycleState": "ACTIVE","publishedAt": null,"qrResolverUrl": "https://dppapi-production.up.railway.app/p/C-7KQ2M9XHT4R"}}/v1/items/batchCreate many batteries
Creates up to 1,000 batteries in one request, each with its own passport and identifier. Two shapes: count batteries numbered serialPrefix + a four-digit counter (0001, 0002, …), or explicit rows of serials you already have. When both are sent, rows wins — an existing serial is never replaced with a generated one.
The batch is created in one transaction: either every battery is created or none is. Always send an Idempotency-Key, so that a retry after a timeout cannot create the batch twice.
Request body6
modelIdstringrequiredThe model.
countinteger, 1–1000optionalHow many to create when
rowsis absent. Default 1.serialPrefixstring, ≤ 60optionalPrefix for generated serial numbers.
placeOfManufacturestring, ≤ 300optionalApplied to every battery (rows may override).
dateOfManufacturedateoptionalApplied to every battery (rows may override).
rowsarray, ≤ 1000optional[{ serialNumber, dateOfManufacture?, placeOfManufacture? }].
Headers2
Idempotency-KeystringheaderoptionalOptional. A unique string per logical operation (a UUID is ideal). The first response is stored for 24 hours and replayed for retries; see Idempotency.
X-DPP-Dry-Run"true"headeroptionalOptional, live keys. Validate the write in full and store nothing. Test keys always dry-run; see Test keys.
Responses
- 201Created —
countand every created battery with its passport (abridged to one).
Errors7
- 400
Validation faileddetailsnames each invalid field. - 401
unauthorizedThe key is missing, unknown or revoked. - 402
plan_upgrade_requiredYour plan does not allow creating batteries. - 403
insufficient_scopeThe key has nowritescope. - 404
Model not foundNo such model in your organisation. - 409
organisation_frozenThe organisation is frozen and read-only. - 422
idempotency_key_reusedTheIdempotency-Keywas already used with a different body.
Webhooks fired
Response fields · 201
object- countinteger
- idstring
- uniqueIdentifierstring
Immutable, resolvable passport identifier (ISO/IEC 15459).
- serialNumberstring | null
- dateOfManufacturestring · date-time | null
- placeOfManufacturestring | null
- fieldsobject
- idstring
- statusstring
One of
ORIGINALREPURPOSEDREUSEDREMANUFACTUREDWASTE - lifecycleStatestring
- publishedAtstring · date-time | null
- qrResolverUrlstring
curl -X POST "https://dppapi-production.up.railway.app/v1/items/batch" \-H "Authorization: Bearer $DPP_API_KEY" \-H "Content-Type: application/json" \-H "Idempotency-Key: 7b3e0c52-1f7d-4b8a-9a52-2f0e6d1c9a44" \-d '{"modelId": "cm1q8x2k40003l70f9a8s7d6e","placeOfManufacture": "Stuttgart, Germany","dateOfManufacture": "2027-01-15","rows": [{"serialNumber": "SN-000481"},{"serialNumber": "SN-000482"}]}'{"count": 2,"items": [{"id": "cm1q8y0bq0005l70fq2r3t4u5","uniqueIdentifier": "C-7KQ2M9XHT4R","serialNumber": "SN-000481","placeOfManufacture": "Stuttgart, Germany","passport": { "id": "cm1q8y0bq0006l70fx9y8z7w6", "publishedAt": null }}]}/v1/items/{id}Get a battery
One battery with its model, passport and registration record.
Parameters1
idstringpathrequiredThe battery item id.
Responses
- 200OK — The battery.
Errors2
- 401
unauthorizedThe key is missing, unknown or revoked. - 404
Not foundNo battery with this id in your organisation.
Response fields · 200
object- idstring
- uniqueIdentifierstring
Immutable, resolvable passport identifier (ISO/IEC 15459).
- serialNumberstring | null
- dateOfManufacturestring · date-time | null
- placeOfManufacturestring | null
- fieldsobject
- idstring
- statusstring
One of
ORIGINALREPURPOSEDREUSEDREMANUFACTUREDWASTE - lifecycleStatestring
- publishedAtstring · date-time | null
- qrResolverUrlstring
curl "https://dppapi-production.up.railway.app/v1/items/cm1q8y0bq0005l70fq2r3t4u5" \-H "Authorization: Bearer $DPP_API_KEY"