---
title: Ergebnis des EU DPP Registry für einen Batteriepass erfassen
description: "Erfasst die Antwort des EU DPP Registry zu einem Batteriepass: Registrierung in Produktion oder ein Test. Angabe des Wirtschaftsakteurs. Bezahlpläne."
canonical: "https://www.tracepass.eu/de/docs/record-passport-registration"
locale: de
source: "https://www.tracepass.eu/de/docs/record-passport-registration"
---

# Ergebnis des EU DPP Registry für einen Batteriepass erfassen

> Erfasst die Antwort des EU DPP Registry zu einem Batteriepass: Registrierung in Produktion oder ein Test. Angabe des Wirtschaftsakteurs. Bezahlpläne.

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

Erfasst, was der Wirtschaftsakteur von der Website des EU DPP Registry zu einem veröffentlichten **Batteriepass** meldet. TracePass hält die Angabe des Wirtschaftsakteurs fest und prüft sie nicht beim Registry nach. Der Body hat eine von zwei Formen, gewählt über `environment`.

**`environment: "production"`** — der Pass ist im Produktiv-Registry registriert. Setzt `placeOnMarketStatus: "placed"`, `registrationMode: "website"`, `placedOnMarketAt` und, wenn Sie sie mitsenden, `registrationId` (die Registrierungskennung des Registry, höchstens 200 Zeichen). `placedOnMarketAt` ist das Datum des Inverkehrbringens als `YYYY-MM-DD`: standardmäßig heute, nicht in der Zukunft und nicht vor der ersten Veröffentlichung des Passes. Die Parteien Wirtschaftsakteur und Standort werden gesperrt (ein Schreibvorgang auf eine Partei, der eine gespeicherte Kennung ändern würde, antwortet mit 409 `operator_locked`), die Sicherungskopie des Passes wird eingeplant und der Webhook `passport.placed_on_market` ausgelöst.

**`environment: "acceptance"`** — ein Test in der Acceptance-Umgebung des Registry: `result` ist `passed` oder `failed`, bei einem Fehlschlag mit dem Fehlercode des Registry in `errorCode` (höchstens 100 Zeichen, z. B. `SEMANTIC_VALIDATION_UNAVAILABLE`). Ein Test hat keine Rechtswirkung und ändert am Pass nichts außer `registryAcceptanceTest`.

**Ablehnungen:** `400` bei einem Body, der die Validierung nicht besteht, oder einem abgelehnten Datum (`invalid_date`, wenn es nicht `YYYY-MM-DD` ist, `date_in_future`, `date_before_publication`, `registration_id_too_long`); `409` bei `not_a_battery`, `not_published` oder, für Produktion, `already_registered` (der Pass ist bereits in Verkehr gebracht oder wird gerade an ein Register nach EN 18222 gesendet). Eine irrtümliche Erfassung nehmen Sie mit `DELETE /api/v1/passports/{id}/registration` zurück.

**Nur in Bezahlplänen** (`402` auf Free). OAuth-Aufrufer müssen für einen Admin oder Owner handeln. Gibt den Pass nach der Erfassung zurück. Zählt als ein v1-Schreibvorgang, und nur, wenn der Aufruf gelingt. Unterstützt `Idempotency-Key`.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `Authorization` | header | string | yes | `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. |
| `Idempotency-Key` | header | string | no | UUID v4. |
| `id` | path | string (24 hex chars) | yes | Pass-ID eines veröffentlichten Batteriepasses. |
| `environment` | body | "production" \| "acceptance" | yes | Aus welcher Umgebung des Registry das Ergebnis stammt. `acceptance` ist ein Test ohne Rechtswirkung. |
| `placedOnMarketAt` | body | string (YYYY-MM-DD) | no | Nur Produktion. Das Datum des Inverkehrbringens. Standardmäßig heute; nicht in der Zukunft, nicht vor der ersten Veröffentlichung des Passes. |
| `registrationId` | body | string (≤ 200 chars) | no | Nur Produktion. Die Registrierungskennung des Registry, sofern Sie sie haben. |
| `result` | body | "passed" \| "failed" | no | Nur `acceptance`, dort Pflicht. Das Ergebnis des Tests. |
| `errorCode` | body | string (≤ 100 chars) | no | Nur `acceptance`. Der Fehlercode des Registry bei einem fehlgeschlagenen Test. |

## 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 — Produktion erfasst

```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 — Test erfasst

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

### 400 — Datum abgelehnt

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

### 409 — Bereits registriert

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

## Related

- [Irrtümliche Erfassung zurücknehmen](https://www.tracepass.eu/de/docs/undo-passport-registration.md)
- [Adresse für das Registry abrufen](https://www.tracepass.eu/de/docs/passport-registry-upi.md)
- [Upload-Datei erstellen](https://www.tracepass.eu/de/docs/registry-upload-file.md)
- [Pass lesen](https://www.tracepass.eu/de/docs/get-passport.md)
