---
title: Immettere sul mercato un passaporto batteria
description: "Registra un passaporto batteria pubblicato nel registro UE (art. 77, par. 10). Asincrono: risponde 202, poi il passaporto passa a placed o rejected."
canonical: "https://www.tracepass.eu/it/docs/place-passport-on-market"
locale: it
source: "https://www.tracepass.eu/it/docs/place-passport-on-market"
---

# Immettere sul mercato un passaporto batteria

> Registra un passaporto batteria pubblicato nel registro UE (art. 77, par. 10). Asincrono: risponde 202, poi il passaporto passa a placed o rejected.

```http
POST /api/v1/passports/{id}/place-on-market
```

Immette sul mercato un passaporto **batteria** pubblicato: il passaporto viene registrato nel registro UE dei passaporti digitali dei prodotti con l'accesso al registro configurato per il vostro account, quindi la registrazione avviene con le vostre credenziali (regolamento (UE) 2023/1542 sulle batterie, art. 77, paragrafo 10). Pubblicare un passaporto non lo registra; lo fa questa chiamata. Solo passaporti di batterie.

**Asincrono.** La chiamata verifica il passaporto, imposta `placeOnMarketStatus` su `placing` e risponde subito `202` con `{ passport, passportId, status: "placing", dppId }`. La chiamata al registro segue in background, con nuovi tentativi automatici finché il registro non è raggiungibile. Leggete il passaporto per seguirne l'esito: `placed` significa che il registro lo ha accettato (`placedOnMarketAt`, e `registrationId` quando il registro ne ha restituito uno) e attiva il webhook `passport.placed_on_market`; `rejected` significa che il registro lo ha rifiutato o non era raggiungibile una volta esauriti i tentativi (`registrationRejectedAt`, `registrationRejectionReason`) e attiva `passport.placement_rejected`. Per riprovare, eliminate la causa e richiamate questo endpoint — un passaporto rifiutato può essere immesso di nuovo. Se il passaporto non ha ancora un DPP ID, ne riceve uno, restituito come `dppId`.

I rifiuti rispondono **409** con un codice, verificati in quest'ordine: `not_a_battery`, `not_published` (solo un passaporto pubblicato può essere immesso sul mercato), `already_placed` (in corso o già immesso), `operator_id_missing` (l'account non ha un identificativo dell'operatore economico), `registry_not_configured` (un amministratore configura l'accesso al registro nella dashboard, in Settings → EU Registry) e `registry_not_ready`, il cui `findings[]` elenca i risultati della verifica di prontezza per il registro che lo impediscono — eseguite la verifica di prontezza per il registro per averli in forma strutturata. Un `findings[]` vuoto significa che il registro configurato non accetta ancora invii da TracePass.

**Dopo l'immissione l'operatore è bloccato:** una scrittura su una parte che cambierebbe un `operatorIdentifier` o un `facilityIdentifier` memorizzato risponde 409 `operator_locked`. Per correggerlo, contrassegnate il passaporto per l'eliminazione e createne uno nuovo. Nessun corpo della richiesta. Conta come una scrittura v1, e solo quando la chiamata è accettata. Rispetta `Idempotency-Key`.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `Authorization` | header | string | yes | `Bearer <token>` — una chiave API `tp_` (Developer → API Keys; più semplice, per server-to-server) oppure un access token OAuth 2.0 (Developer → OAuth Apps; per app autorizzate dall'utente, scoped e revocabili). La pagina Authentication contiene il flusso OAuth completo e l'elenco degli scopes. |
| `Idempotency-Key` | header | string | no | UUID v4. |
| `id` | path | string (24 hex chars) | yes | ID di un passaporto batteria pubblicato. |

## Examples

```bash
curl -sS -X POST \
  https://app.tracepass.eu/api/v1/passports/6650b2c3d4e5f6a7b8c9d0e1/place-on-market \
  -H "Authorization: Bearer tp_REDACTED_xxxxxxxxxxxx" \
  -H "Idempotency-Key: 3f1c9a52-8b7e-4d6a-9f0e-2c4b6d8e0a13"
```

```typescript
const res = await fetch(
  `https://app.tracepass.eu/api/v1/passports/${id}/place-on-market`,
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.TRACEPASS_API_KEY}`,
      "Idempotency-Key": crypto.randomUUID(),
    },
  },
);

if (res.status === 409) {
  const { error, findings } = await res.json();
  // e.g. registry_not_ready: findings lists what stands in the way.
  console.log(error, findings ?? []);
} else if (res.status === 202) {
  // Accepted: read the passport later — placeOnMarketStatus becomes
  // "placed" (registrationId) or "rejected" (registrationRejectionReason).
  const { dppId } = await res.json();
  console.log("placing", dppId);
}
```

```python
import os, uuid, requests
res = requests.post(
    f"https://app.tracepass.eu/api/v1/passports/{passport_id}/place-on-market",
    headers={
        "Authorization": f"Bearer {os.environ['TRACEPASS_API_KEY']}",
        "Idempotency-Key": str(uuid.uuid4()),
    },
)
if res.status_code == 409:
    body = res.json()
    print(body["error"], body.get("findings", []))
else:
    res.raise_for_status()
    print("placing", res.json()["dppId"])
```

## Responses

### 202 — In corso

```json
{
  "passport": {
    "_id": "6650b2c3d4e5f6a7b8c9d0e1",
    "status": "published",
    "placeOnMarketStatus": "placing"
  },
  "passportId": "6650b2c3d4e5f6a7b8c9d0e1",
  "status": "placing",
  "dppId": "https://id.tracepass.eu/dpp/7b1e4c2a-5f3d-4e8a-9c6b-2d1f0a3e5b7c"
}
```

### 409 — Registro non pronto

```json
{
  "error": "registry_not_ready",
  "findings": [
    "Required field \"carbonFootprintTotal\" has no value."
  ]
}
```

### 409 — Già immesso

```json
{ "error": "already_placed" }
```

### 404 — Non trovato

```json
{ "error": "passport_not_found" }
```

## Related

- [Verificare la prontezza per il registro](https://www.tracepass.eu/it/docs/passport-registry-readiness.md)
- [Leggere un passaporto](https://www.tracepass.eu/it/docs/get-passport.md)
- [Inserire o sostituire una parte](https://www.tracepass.eu/it/docs/upsert-party.md)
