DPP API
Your product data already lives in your ERP, PIM or battery management system. Use the API to create and update passports without manual entry, and send serial numbers and battery status automatically.
Base URL: https://www.qrnot.com/api/dpp/v1
OpenAPI spec (import into Postman / Swagger) ↗1. Key
Create a key in the panel under Company → API keys (company owner only). The key is shown once; send it in the header of every request. Keys can be read-only or read + write, and can be revoked at any time.
Authorization: Bearer qrn_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxRules
- Everything you write is saved to the draft first. The public passport changes only when you call /publish; every publish is stored as a new version.
- Battery status (state of health, cycles, charge) is the exception: no publish needed, it shows on the passport immediately.
- Every write is recorded in your company audit log as “api:<key name>”.
- Limits: 1200 requests per hour per key, at most 2000 serial numbers per request. Your plan’s product limit applies to the API too.
- Send your ERP product code as externalId and repeating the same request never creates a duplicate.
- Errors are always { "error": { "code", "message", "details" } }; choose the message language with the x-dpp-lang header (tr, en, de, fr, es, nl, ar, ru).
2. Endpoints
GET/meCompany, plan limits and key permissions (connection test)
GET/productsList products (?status=draft|published|archived)
POST/productsNew product draft (with externalId: create or update)
GET/products/{id}Full product (draft state)
PATCH/products/{id}Partial update; fields you omit are kept
POST/products/{id}/publishPublish the draft as a new version
GET/products/{id}/itemsSerial numbers (?q=&limit=&offset=)
POST/products/{id}/itemsAdd serial numbers: a list or a range
PUT/products/{id}/itemsBattery: bulk update many batteries’ status
PATCH/products/{id}/items/{serial}Battery: one battery’s status
GET/products/external/{externalId}Read by ERP code
PUT/products/external/{externalId}Create or update by ERP code
3. Examples
Create or update by ERP code
curl -X PUT https://www.qrnot.com/api/dpp/v1/products/external/VB-48-15AH \
-H "Authorization: Bearer qrn_live_…" \
-H "Content-Type: application/json" \
-d '{
"defaultLang": "en",
"texts": { "en": { "name": "E-bike battery 48V 15Ah" } },
"data": {
"brand": "Volta", "model": "VB-48", "category": "battery",
"gtin": "08691234567892", "countryOfOrigin": "TR",
"sector": { "batteryCategory": "lmt", "chemistry": "Li-ion LFP" }
}
}'Publish
curl -X POST https://www.qrnot.com/api/dpp/v1/products/{id}/publish \
-H "Authorization: Bearer qrn_live_…"Add serial numbers (one passport each)
curl -X POST https://www.qrnot.com/api/dpp/v1/products/{id}/items \
-H "Authorization: Bearer qrn_live_…" \
-H "Content-Type: application/json" \
-d '{ "serials": [
{ "serial": "VB-000101", "batch": "L2026-10", "productionDate": "2026-10-20" },
{ "serial": "VB-000102", "batch": "L2026-10", "productionDate": "2026-10-20" }
] }'Update one battery’s status
curl -X PATCH https://www.qrnot.com/api/dpp/v1/products/{id}/items/VB-000101 \
-H "Authorization: Bearer qrn_live_…" \
-H "Content-Type: application/json" \
-d '{ "stateOfHealthPct": 97, "cycles": 120, "stateOfChargePct": 80 }'4. Sector fields
Fields go into data.sector; the module is chosen by product category. If a “required” field is missing, publish returns 400 and lists what is missing in error.details.
Battery category: battery
| Key | Field | Type | Source |
|---|---|---|---|
| batteryCategory | Battery categoryrequired | ev | lmt | industrial | sli | portable | Md. 77(1), Ek VI-A |
| chemistry | Battery chemistryrequired | string | Ek VI-A, Ek XIII 1(b) |
| manufacturingPlace | Place of manufacture (facility)required | string | Ek VI-A |
| ratedEnergyKwh | Rated energy | number (kWh) | Md. 77(1) |
| hazardousSubstances | Hazardous substances (other than Hg, Cd, Pb)required | string | Ek VI-A, Ek XIII 1(b) |
| criticalRawMaterials | Critical raw materials (> 0.1%) | [cobalt | lithium | nickel | natural_graphite | manganese | other] | Ek VI-A, Ek XIII 1(b) |
| extinguishingAgent | Usable extinguishing agentrequired | string | Ek VI-A |
| ratedCapacityAh | Rated capacityrequired | number (Ah) | Ek XIII 1(g) |
| voltageMin | Minimum voltage | number (V) | Ek XIII 1(h) |
| voltageNominal | Nominal voltagerequired | number (V) | Ek XIII 1(h) |
| voltageMax | Maximum voltage | number (V) | Ek XIII 1(h) |
| voltageTempRange | Temperature range for voltage values | string | Ek XIII 1(h) |
| powerOriginalW | Original power capabilityrequired | number (W) | Ek XIII 1(i) |
| powerLimitsTemp | Power limits and temperature range | string | Ek XIII 1(i) |
| expectedLifetimeCycles | Expected lifetimerequired | number (cycles) | Ek XIII 1(j) |
| lifetimeTestRef | Lifetime test reference | string | Ek XIII 1(j) |
| capacityThresholdPct | Capacity threshold for exhaustion | number (%) | Ek XIII 1(k) |
| storageTempMin | Minimum temperature when not in use | number (°C) | Ek XIII 1(l) |
| storageTempMax | Maximum temperature when not in use | number (°C) | Ek XIII 1(l) |
| calendarWarrantyYears | Commercial warranty for calendar life | number (years) | Ek XIII 1(m) |
| rteInitialPct | Initial round-trip energy efficiency | number (%) | Ek XIII 1(n) |
| rteAt50Pct | Efficiency at 50% of cycle life | number (%) | Ek XIII 1(n) |
| resistanceCellMohm | Internal cell resistance | number (mΩ) | Ek XIII 1(o) |
| resistancePackMohm | Internal pack resistance | number (mΩ) | Ek XIII 1(o) |
| cycleLifeCRate | C-rate of cycle-life test | number (C) | Ek XIII 1(p) |
| carbonFootprintPerKwh | Carbon footprint (life cycle) | number (kg CO₂e/kWh) | Md. 7, Ek XIII 1(c) |
| carbonClass | Carbon footprint performance class | A | B | C | D | E | Md. 7(2) |
| carbonStudyUrl | Public version of the carbon footprint study | string | Md. 7(1) |
| dueDiligenceReport | Supply-chain due diligence report | string | Md. 52(3), Ek XIII 1(d) |
| recycledCobaltPct | Recycled cobalt share | number (%) | Md. 8, Ek XIII 1(e) |
| recycledLithiumPct | Recycled lithium share | number (%) | Md. 8, Ek XIII 1(e) |
| recycledNickelPct | Recycled nickel share | number (%) | Md. 8, Ek XIII 1(e) |
| recycledLeadPct | Recycled lead share | number (%) | Md. 8, Ek XIII 1(e) |
| renewableContentPct | Renewable content share | number (%) | Ek XIII 1(f) |
| markings | Labels and markings | [ce | separate_collection | cd | pb | capacity] | Md. 13, Ek XIII 1(q) |
| docReference | EU declaration of conformity referencerequired | string | Md. 18, Ek XIII 1(r) |
| wasteInfo | Information on preventing and managing waste batteriesrequired | string | Md. 60(1), Ek XIII 1(s) |
| detailedComposition | Detailed composition (cathode, anode, electrolyte) | string | Ek XIII 2(a) |
| spareParts | Spare part numbers and supplier contacts | string | Ek XIII 2(b) |
| dismantling | Dismantling information (diagrams, sequence, fasteners, tools, warnings, cell layout) | string | Ek XIII 2(c) |
| safetyMeasures | Safety measures | string | Ek XIII 2(d) |
Textile and footwear category: textile | footwear
| Key | Field | Type | Source |
|---|---|---|---|
| productType | Product type | string | — |
| sizeRange | Size range | string | — |
| animalOrigin | Contains non-textile parts of animal origin | no | yes | 1007/2011 md. 12 |
| countrySpinning | Spinning | string | — |
| countryWeaving | Weaving / knitting | string | — |
| countryDyeing | Dyeing, printing and finishing | string | — |
| countryAssembly | Making-up (sewing) | string | — |
| careWash | Washing | w95 | w60 | w40 | w30 | hand | nowash | ISO 3758 |
| careBleach | Bleaching | bleach_any | bleach_oxygen | bleach_no | ISO 3758 |
| careDry | Drying | tumble_normal | tumble_low | tumble_no | line | flat | ISO 3758 |
| careIron | Ironing | iron_high | iron_medium | iron_low | iron_no | ISO 3758 |
| careProfessional | Professional cleaning | prof_p | prof_f | prof_w | prof_no | ISO 3758 |
| pillingGrade | Pilling grade (1–5) | number | ISO 12945 |
| colourFastnessWash | Colour fastness to washing (1–5) | number | ISO 105-C06 |
| colourFastnessLight | Colour fastness to light (1–8) | number | ISO 105-B02 |
| dimensionalChangePct | Dimensional change after washing | number (%) | ISO 5077 |
| washCyclesTested | Wash cycles tested | number | — |
| recyclability | Recyclability | mono | mostly_mono | blend | — |
| recyclingDisruptors | Recycling disruptors (elastane, coatings, metal trims) | string | — |
| removableTrims | Trims easily removable | yes | no | na | — |
| microfibreRelease | Microfibre release | number (mg/kg) | — |
| reachConform | Complies with REACH Annex XVII restrictions | yes | no | REACH Ek XVII |
| chemicalCertifications | Chemical certifications (OEKO-TEX, ZDHC…) | string | — |
Furniture category: furniture
| Key | Field | Type | Source |
|---|---|---|---|
| furnitureType | Furniture type | string | — |
| useEnvironment | Use environment | indoor | outdoor | both | — |
| maxLoadKg | Maximum load | number (kg) | — |
| componentMaterials | Materials by component | string | — |
| woodSpecies | Wood species | string | — |
| woodOrigin | Country of wood harvest | string | — |
| woodCertification | Forest certification | string | FSC / PEFC |
| upholstery | Upholstery fabric composition | string | — |
| foamType | Foam / filling type | string | — |
| formaldehydeClass | Formaldehyde emission class | e05 | e1 | e2 | na | EN 717-1 / EN 16516 |
| flameRetardants | Flame retardants | none | present | — |
| flameRetardantDetails | Flame retardant details | string | — |
| vocInfo | Volatile organic compounds (VOC) | string | — |
| testedStandards | Durability / safety standards tested | string | EN 16139, EN 12520, EN 1730… |
| disassembly | Disassembly | tool_free | standard_tools | special_tools | not_designed | — |
| fasteners | Fasteners | string | — |
| sparePartsList | Spare parts list | string | — |
| recyclabilityInfo | End of life and recycling | string | — |
| packaging | Packaging materials | string | — |
| eudrReference | EUDR due diligence statement reference | string | EUDR 2023/1115 md. 4 |
Battery status fields (per serial number)
| Key | Field | Type | Source |
|---|---|---|---|
| status | Battery status | original | repurposed | reused | remanufactured | waste | Ek XIII 4 |
| stateOfHealthPct | State of health (SoH) | number (%) | Md. 14, Ek XIII 4 |
| remainingCapacityAh | Remaining capacity | number (Ah) | Ek VII, Ek XIII 4 |
| cycles | Charge-discharge cycles | number (cycles) | Ek XIII 4 |
| stateOfChargePct | State of charge (SoC) | number (%) | Ek XIII 4 |
| negativeEvents | Negative events (accidents etc.) | string | Ek XIII 4 |
| operatingConditions | Operating conditions (temperature history) | string | Ek XIII 4 |
Note: the API does not submit to the EU central DPP registry; the technical details of that registry have not been published yet.