---
title: Записване на резултата от EU DPP Registry за паспорт на батерия
description: "Записва отговора на EU DPP Registry за паспорт на батерия: регистрация в производствената среда или тест. Изявление на оператора. Платени планове."
canonical: "https://www.tracepass.eu/bg/docs/record-passport-registration"
locale: bg
source: "https://www.tracepass.eu/bg/docs/record-passport-registration"
---

# Записване на резултата от EU DPP Registry за паспорт на батерия

> Записва отговора на EU DPP Registry за паспорт на батерия: регистрация в производствената среда или тест. Изявление на оператора. Платени планове.

```http
POST /api/v1/passports/{id}/registration
```

Записва това, което икономическият оператор съобщава от уебсайта на 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`.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `Authorization` | header | string | yes | `Bearer <token>` — или `tp_` API ключ (Developer → API Keys; най-просто, за server-to-server), или OAuth 2.0 access token (Developer → OAuth Apps; за приложения, авторизирани от потребител, scoped и отзоваеми). Страницата Authentication съдържа пълния OAuth поток и списъка със scopes. |
| `Idempotency-Key` | header | string | no | UUID v4. |
| `id` | path | string (24 hex chars) | yes | ID на публикуван паспорт на батерия. |
| `environment` | body | "production" \| "acceptance" | yes | От коя среда на регистъра е резултатът. `acceptance` е тест без правно действие. |
| `placedOnMarketAt` | body | string (YYYY-MM-DD) | no | Само за производствената среда. Датата на пускане на пазара. По подразбиране днешната; не в бъдещето и не преди първото публикуване на паспорта. |
| `registrationId` | body | string (≤ 200 chars) | no | Само за производствената среда. Идентификаторът на регистрацията в регистъра, ако го имате. |
| `result` | body | "passed" \| "failed" | no | Само за `acceptance` и там е задължително. Резултатът от теста. |
| `errorCode` | body | string (≤ 100 chars) | no | Само за `acceptance`. Кодът за грешка на регистъра при неуспешен тест. |

## Examples

```bash
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" }'
```

```typescript
// What the operator saw on the EU DPP Registry website.
const res = await fetch(
  `https://app.tracepass.eu/api/v1/passports/${id}/registration`,
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.TRACEPASS_API_KEY}`,
      "Content-Type": "application/json",
      "Idempotency-Key": crypto.randomUUID(),
    },
    body: JSON.stringify({
      environment: "production",
      placedOnMarketAt: "2027-03-01",
      registrationId: "URI-000-00-000",
    }),
  },
);
if (!res.ok) {
  const { error } = await res.json();
  console.log(error); // e.g. date_in_future, already_registered
} else {
  const { passport } = await res.json();
  console.log(passport.placeOnMarketStatus, passport.registrationMode); // "placed" "website"
}
```

```python
import os, uuid, requests
# A test in the Registry's acceptance environment: no legal effect.
res = requests.post(
    f"https://app.tracepass.eu/api/v1/passports/{passport_id}/registration",
    headers={
        "Authorization": f"Bearer {os.environ['TRACEPASS_API_KEY']}",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={
        "environment": "acceptance",
        "result": "failed",
        "errorCode": "SEMANTIC_VALIDATION_UNAVAILABLE",
    },
)
res.raise_for_status()
print(res.json()["passport"]["registryAcceptanceTest"])
```

## Responses

### 200 — Записана регистрация

```json
{
  "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"
  }
}
```

### 200 — Записан тест

```json
{
  "passport": {
    "_id": "6650b2c3d4e5f6a7b8c9d0e1",
    "status": "published",
    "registryAcceptanceTest": {
      "result": "failed",
      "errorCode": "SEMANTIC_VALIDATION_UNAVAILABLE",
      "at": "2026-11-06T10:05:00.000Z"
    }
  }
}
```

### 400 — Отхвърлена дата

```json
{ "error": "date_in_future" }
```

### 409 — Вече регистриран

```json
{ "error": "already_registered" }
```

## Related

- [Отмяна на погрешен запис](https://www.tracepass.eu/bg/docs/undo-passport-registration.md)
- [Адрес за регистъра](https://www.tracepass.eu/bg/docs/passport-registry-upi.md)
- [Създаване на файл за качване](https://www.tracepass.eu/bg/docs/registry-upload-file.md)
- [Прочитане на паспорт](https://www.tracepass.eu/bg/docs/get-passport.md)
