/api/v1/registry/upload-fileФайл за качване в EU DPP Registry за паспорти на батерии
Създава XML файла, който икономическият оператор качва на уебсайта на EU DPP Registry (DPP Registration → upload a file), за посочените от вас паспорти на **батерии**, до 100 на извикване. Регистрацията е собствено действие на оператора със собствения му EU Login; TracePass подготвя файла и никога не го подава.
**Влизат само паспортите, които биха преминали.** Регистърът отхвърля целия файл заради един грешен запис, затова всеки друг паспорт се връща в `excluded` с `reason`: `not_found`, `not_battery`, `not_published`, `registered_in_production`, `registration_in_progress` (в процес на изпращане към регистър по EN 18222), `readiness_blocked` (блокиращите констатации са в `details`), `invalid_upi`, `duplicate_upi` (същият адрес като на друг паспорт във файла) или `over_limit` (след 100-ия). `included` изброява паспортите във файла, всеки със своя адрес.
Адресът на всеки включен паспорт се фиксира в паспорта (`registryUpi`) и подготовката се записва (`registrationPreparedVia: "file"`). Запазете `xml` под името `filename` и го качете непроменен: името съдържа само знаците, които регистърът приема. Подготовката не е регистрация: запишете отговора на регистъра за всеки паспорт с `POST /api/v1/passports/{id}/registration`.
Отговорът е JSON, а не директно XML, за да може да се повтори с `Idempotency-Key` и да съдържа изключените паспорти. **Само за платени планове** (`402` при Free). OAuth извикванията трябва да са от името на администратор или собственик. Брои се по едно v1 записване за всеки включен паспорт.
Хедъри
- Authorizationзадължително
string
`Bearer <token>` — или `tp_` API ключ (Developer → API Keys; най-просто, за server-to-server), или OAuth 2.0 access token (Developer → OAuth Apps; за приложения, авторизирани от потребител, scoped и отзоваеми). Страницата Authentication съдържа пълния OAuth поток и списъка със scopes.
e.g. Bearer tp_REDACTED_xxxxxxxxxxxx
- Idempotency-Key
string
UUID v4.
Полета в тялото
- passportIdsзадължително
string[] (24 hex chars each, 1–100)
Паспортите, които да влязат във файла. Паспортите, които не биха преминали, се връщат в `excluded`, вместо извикването да се провали.
e.g. ["6650b2c3d4e5f6a7b8c9d0e1", "6650b2c3d4e5f6a7b8c9d0e2"]
Заявка
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"] }'Отговор
{
"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."
]
}
]
}