/api/v1/passports/{id}/registrationЗаписване на резултата от EU DPP Registry за паспорт на батерия
Записва това, което икономическият оператор съобщава от уебсайта на EU DPP Registry, за един публикуван паспорт на **батерия**. TracePass записва изявлението на оператора и не го проверява в регистъра. Тялото има една от две форми според `environment`.
**`environment: "production"`** — паспортът е регистриран в производствения регистър. Задава `placeOnMarketStatus: "placed"`, `registrationMode: "website"`, `placedOnMarketAt` и, ако го изпратите, `registrationId` (идентификаторът на регистрацията в регистъра, най-много 200 знака). `placedOnMarketAt` е датата на пускане на пазара във формат `YYYY-MM-DD`: по подразбиране днешната, не в бъдещето и не преди първото публикуване на паспорта. Страните на оператора и съоръжението се заключват (запис на страна, който би променил съхранен идентификатор, връща 409 `operator_locked`), резервното копие на паспорта се поставя на опашка и се изпраща webhook `passport.placed_on_market`.
**`environment: "acceptance"`** — тест в приемната среда на регистъра: `result` е `passed` или `failed`, като при неуспех се добавя кодът за грешка на регистъра в `errorCode` (най-много 100 знака, напр. `SEMANTIC_VALIDATION_UNAVAILABLE`). Тестът няма правно действие и не променя в паспорта нищо освен `registryAcceptanceTest`.
**Откази:** `400` при тяло, което не минава валидиране, или при отхвърлена дата (`invalid_date`, когато не е `YYYY-MM-DD`, `date_in_future`, `date_before_publication`, `registration_id_too_long`); `409` при `not_a_battery`, `not_published` или, за производствената среда, `already_registered` (паспортът вече е пуснат на пазара или е в процес на изпращане към регистър по EN 18222). Погрешен запис се отменя с `DELETE /api/v1/passports/{id}/registration`.
**Само за платени планове** (`402` при Free). OAuth извикванията трябва да са от името на администратор или собственик. Връща паспорта след записа. Брои се като едно v1 записване, и то само когато извикването е успешно. Поддържа `Idempotency-Key`.
Параметри в пътя
- idзадължително
string (24 hex chars)
ID на публикуван паспорт на батерия.
Хедъри
- 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.
Полета в тялото
- environmentзадължително
"production" | "acceptance"
От коя среда на регистъра е резултатът. `acceptance` е тест без правно действие.
e.g. production
- placedOnMarketAt
string (YYYY-MM-DD)
Само за производствената среда. Датата на пускане на пазара. По подразбиране днешната; не в бъдещето и не преди първото публикуване на паспорта.
e.g. 2027-03-01
- registrationId
string (≤ 200 chars)
Само за производствената среда. Идентификаторът на регистрацията в регистъра, ако го имате.
e.g. URI-000-00-000
- result
"passed" | "failed"
Само за `acceptance` и там е задължително. Резултатът от теста.
e.g. failed
- errorCode
string (≤ 100 chars)
Само за `acceptance`. Кодът за грешка на регистъра при неуспешен тест.
e.g. SEMANTIC_VALIDATION_UNAVAILABLE
Заявка
curl -sS -X POST \
https://app.tracepass.eu/api/v1/passports/6650b2c3d4e5f6a7b8c9d0e1/registration \
-H "Authorization: Bearer tp_REDACTED_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 9e3b6c28-1f7a-4d52-b0e4-6a8c2d1f5b97" \
-d '{ "environment": "production", "placedOnMarketAt": "2027-03-01", "registrationId": "URI-000-00-000" }'Отговор
{
"passport": {
"_id": "6650b2c3d4e5f6a7b8c9d0e1",
"status": "published",
"placeOnMarketStatus": "placed",
"registrationMode": "website",
"placedOnMarketAt": "2027-03-01T00:00:00.000Z",
"registrationId": "URI-000-00-000",
"registryUpi": "https://id.tracepass.eu/01/04012345000016/21/A1B2C3",
"registrationPreparedAt": "2027-02-26T09:12:00.000Z",
"registrationPreparedVia": "form"
}
}