# POST /distributor-portal/shipments/{shipment_id}/receive

Confirmer la réception d'une expédition, en scannant ou non des cartons ou des unités.

Source : https://docs.sealtrust.io/reference/post-distributor-portal-shipments-id-receive/

---

Vous confirmez avoir reçu une expédition. L'appel enregistre un événement de
réception avec la date et votre identité ; scanner des cartons ou des unités
est facultatif, une confirmation sans aucun scan est tout aussi valable.

Vous pouvez confirmer une même expédition en plusieurs fois (une partie reçue
aujourd'hui, le reste demain) : chaque appel ajoute sa propre confirmation,
aucune n'en remplace une autre. Un code déjà enregistré par une confirmation
antérieure de la MÊME expédition est ignoré silencieusement s'il est scanné
à nouveau : rescanner le même carton deux fois, par erreur ou par un appel
rejoué, ne le compte jamais deux fois. Une expédition accepte au plus 500
appels de confirmation au total ; au-delà, l'appel est refusé plutôt que de
laisser la table grossir sans limite.

## Autorisation

Session d'un compte contact distributeur. Voir
[`GET /distributor-portal/me`](/reference/get-distributor-portal-me/). Même
règle d'isolation que la lecture : l'expédition d'un autre distributeur
répond 404.

## Plafond d'appels

30 appels par minute, partagé avec le reste du portail distributeur. C'est le
seul appel du portail qui écrit.

## Paramètres de chemin

| Paramètre | Type | Description |
| --- | --- | --- |
| `shipment_id` | `integer` | Identifiant de l'expédition, chemin. |

## Corps de la requête

| Champ | Type | Description |
| --- | --- | --- |
| `scanned_identifiers` | `array` de `string` | Codes de cartons ou d'unités scannés. Facultatif, 1000 au plus. |
| `note` | `string` ou `null` | Remarque libre, 500 caractères au plus. Facultatif. |

## Requête d'exemple

```bash
curl -i -X POST "https://api.sealtrust.io/v1/distributor-portal/shipments/318/receive" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.0000000000000000000000000000.0000000000000000000000000000" \
  -H "Content-Type: application/json" \
  -d '{"scanned_identifiers": ["DSP000000123", "DSP000000124"], "note": "Carton légèrement abîmé"}'
```

## Réponse d'exemple

Code HTTP 201.

```json
{
  "reception_id": 7,
  "shipment_id": 318,
  "received_at": "2026-10-05T08:30:00Z",
  "received_by": "Camille Exemple",
  "scanned_count": 2
}
```

## Erreurs

| Code | Condition | Que faire |
| --- | --- | --- |
| 400 | Plus de 1000 codes scannés dans un seul appel. | Répartissez les scans sur plusieurs confirmations. |
| 400 | Cette expédition porte déjà 500 confirmations. | Contactez le support ; ce plafond n'est pas censé être atteint en usage ordinaire. |
| 401 | Jeton absent, illisible ou expiré. | Reconnectez-vous. |
| 403 | Compte sans accès distributeur actif. | Voir [`GET /distributor-portal/me`](/reference/get-distributor-portal-me/). |
| 404 | Expédition inconnue, ou d'un autre distributeur. | Vérifiez l'`id` dans [`GET /distributor-portal/shipments`](/reference/get-distributor-portal-shipments/). |
| 422 | Corps mal formé : un champ non déclaré (le schéma refuse les champs inconnus), ou `note` au-delà de 500 caractères. | Envoyez uniquement `scanned_identifiers` et `note`. |
| 429 | Plafond d'appels dépassé. | Attendez le délai de `Retry-After`. |

## Voir aussi

- [`GET /distributor-portal/shipments/{shipment_id}`](/reference/get-distributor-portal-shipments-id/),
  relire les confirmations déjà enregistrées.
