/api/v1/registry/upload-fileUpload-Datei für das EU DPP Registry zu Batteriepässen erstellen
Erstellt die XML-Datei, die der Wirtschaftsakteur auf der Website des EU DPP Registry hochlädt (DPP Registration → upload a file), für die von Ihnen genannten **Batteriepässe**, bis zu 100 pro Aufruf. Die Registrierung ist eine eigene Handlung des Wirtschaftsakteurs mit seinem eigenen EU Login; TracePass bereitet die Datei vor und reicht sie nie ein.
**Nur Pässe, die bestehen würden, kommen hinein.** Das Registry lehnt die ganze Datei wegen eines fehlerhaften Eintrags ab, daher kommt jeder andere Pass in `excluded` mit seinem `reason` zurück: `not_found`, `not_battery`, `not_published`, `registered_in_production`, `registration_in_progress` (wird gerade an ein Register nach EN 18222 gesendet), `readiness_blocked` (die blockierenden Befunde stehen in `details`), `invalid_upi`, `duplicate_upi` (dieselbe Adresse wie ein anderer Pass in der Datei) oder `over_limit` (nach dem 100.). `included` listet die Pässe in der Datei, jeden mit seiner Adresse.
Die Adresse jedes aufgenommenen Passes wird im Pass eingefroren (`registryUpi`) und die Vorbereitung festgehalten (`registrationPreparedVia: "file"`). Speichern Sie `xml` unter `filename` und laden Sie die Datei unverändert hoch: Der Name verwendet nur die Zeichen, die das Registry akzeptiert. Eine Vorbereitung ist keine Registrierung: Erfassen Sie die Antwort des Registry für jeden Pass mit `POST /api/v1/passports/{id}/registration`.
Die Antwort ist JSON statt reinem XML, damit sie sich unter `Idempotency-Key` wiederholen lässt und die Ausschlüsse enthält. **Nur in Bezahlplänen** (`402` auf Free). OAuth-Aufrufer müssen für einen Admin oder Owner handeln. Zählt einen v1-Schreibvorgang pro aufgenommenem Pass.
Header
- Authorizationerforderlich
string
`Bearer <token>` — entweder ein `tp_` API-Schlüssel (Developer → API Keys; am einfachsten, für Server-zu-Server) oder ein OAuth-2.0-Access-Token (Developer → OAuth Apps; für nutzerautorisierte Apps, scoped und widerrufbar). Die Authentication-Seite enthält den vollständigen OAuth-Flow und die Scope-Liste.
e.g. Bearer tp_REDACTED_xxxxxxxxxxxx
- Idempotency-Key
string
UUID v4.
Body-Felder
- passportIdserforderlich
string[] (24 hex chars each, 1–100)
Die Pässe für die Datei. Pässe, die nicht bestehen würden, kommen in `excluded` zurück, statt den Aufruf scheitern zu lassen.
e.g. ["6650b2c3d4e5f6a7b8c9d0e1", "6650b2c3d4e5f6a7b8c9d0e2"]
Anfrage
curl -sS -X POST \
https://app.tracepass.eu/api/v1/registry/upload-file \
-H "Authorization: Bearer tp_REDACTED_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 5a8d2f17-9c4e-4b3a-8e61-0f2c7d9b4e35" \
-d '{ "passportIds": ["6650b2c3d4e5f6a7b8c9d0e1", "6650b2c3d4e5f6a7b8c9d0e2"] }'Antwort
{
"xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n…",
"filename": "acme-batteries-dpp-registry-batch-2026-11-06.xml",
"included": [
{
"id": "6650b2c3d4e5f6a7b8c9d0e1",
"upi": "https://id.tracepass.eu/01/04012345000016/21/A1B2C3"
}
],
"excluded": [
{
"id": "6650b2c3d4e5f6a7b8c9d0e2",
"reason": "readiness_blocked",
"details": [
"Required field \"Battery Carbon Footprint — Total\" has no value."
]
}
]
}