Overview
All endpoints are under https://eudigitalpassportprocessor.com/api/v1. Authentication: Authorization: Bearer dpp_live_... on every request.
All responses use a consistent envelope:
{ "data": { ... } } # single resource
{ "data": [...], "pagination": { ... } } # list
{ "error": "message" } # errorOrganisation
GET /api/v1/org
Returns your organisation summary including quota usage.
Passports
GET /api/v1/passports
Returns a paginated list of passports. Query parameters: page, per_page (max 100), status (draft/complete/active/revoked), category (BATTERY_EV/BATTERY_INDUSTRIAL).
GET /api/v1/passports/:id
Returns a full passport including Annex XIII data, supply chain actors, and document metadata.
POST /api/v1/passports
Creates a new passport. Required fields: passport_number, product_name, category_code (BATTERY_EV or BATTERY_INDUSTRIAL). Optional: passport_level (model/batch/item), data (Annex XIII fields).
PATCH /api/v1/passports/:id
Updates data (Annex XIII fields), product_name, or passport_level. The data object is merged — only send the fields you want to change.
POST /api/v1/passports/:id/activate
Activates a passport. Returns the updated passport with status: "active" and public_url.
GET /api/v1/passports/:id/registry-status
Returns EU registry submission state including status, submission ID, and any error details.
Error codes
| Code | Meaning |
|---|---|
| 401 | Invalid, expired, or missing API key |
| 403 | Access not permitted — demo account, or insufficient role permissions |
| 404 | Resource not found or belongs to another organisation |
| 409 | Conflict — passport number already exists |
| 422 | Validation error — required fields missing |
| 429 | Passport quota reached |
| 500 | Internal server error |
| Section | Entry | Reviewed |
|---|---|---|
| API Access | Getting Started with the EU Digital Passport Processor API | 2026-04 |