Webhooks
Les adresses de votre serveur que N-Ways appelle quand une livraison ou un véhicule change.
Sur cette page
- Lister les points de réception
- Ajouter un point de réception (10 au plus) ; la réponse contient son secret de signature, affiché une seule fois
- Modifier l’url, les events ou le champ active d’un point de réception
- Supprimer un point de réception et son journal d’envois
- Un nouveau secret de signature (affiché une seule fois) ; l’ancien cesse aussitôt de fonctionner
- Mettre en file un événement ping vers le point de réception
- Le journal d’envois du point de réception, les plus récents d’abord (conservé 30 jours)
- Renvoyer une livraison maintenant (échouée, ou livrée et voulue de nouveau) ; ses tentatives sont gardées
- Un événement, envoyé par POST à votre point de réception
Envoyez votre clé avec key=VOTRE_CLE_API dans l’adresse, ou dans l’en-tête X-NWays-Api-Key. Clés d’API
Adresse de base : https://nways.ng/maps/v1/fleet
Lister les points de réception
GET https://nways.ng/maps/v1/fleet/webhooks
curl "https://nways.ng/maps/v1/fleet/webhooks" \
-H "X-NWays-Api-Key: VOTRE_CLE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/webhooks', {
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY },
})
const data = await res.json()import os
import requests
res = requests.get(
"https://nways.ng/maps/v1/fleet/webhooks",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Réponse
Les points de réception et les événements existants
| Champ | Type | Description |
|---|---|---|
webhooks | Webhook[] | Obligatoire. |
webhooks[].id | string | Obligatoire. |
webhooks[].url | string (uri) | Obligatoire. |
webhooks[].events | string[] | Obligatoire. |
webhooks[].active | boolean | Obligatoire. |
webhooks[].secret | string | Seulement à la création ou au renouvellement. |
webhooks[].headers | string[] | Les noms des en-têtes personnalisés envoyés avec chaque livraison (les valeurs ne sont jamais montrées). |
webhooks[].createdAt | string (date-time) | Obligatoire. |
webhooks[].updatedAt | string (date-time) | Obligatoire. |
events | string[] | Obligatoire. |
{
"webhooks": [
{
"id": "wh_Ub3yH9sLk2",
"url": "string",
"events": [
"task.created"
],
"active": true,
"secret": "whsec_…",
"headers": [
"string"
],
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00"
}
],
"events": [
"task.created"
]
}Erreurs
defaultErreur
Ajouter un point de réception (10 au plus) ; la réponse contient son secret de signature, affiché une seule fois
POST https://nways.ng/maps/v1/fleet/webhooks
Corps de la requête
| Champ | Type | Description |
|---|---|---|
url | string (uri) | Obligatoire. https, une adresse publique ; les redirections ne sont pas suivies. |
events | string[] | Vide = tous les événements. |
headers | object | Envoyé avec chaque livraison (un jeton que votre CRM demande). Pas X-NWays-*, Host, Content-Type, User-Agent. |
curl -X POST "https://nways.ng/maps/v1/fleet/webhooks" \
-H "X-NWays-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{"url":"string","events":["task.created"],"headers":{}}'const res = await fetch('https://nways.ng/maps/v1/fleet/webhooks', {
method: 'POST',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
"url": "string",
"events": [
"task.created"
],
"headers": {}
}),
})
const data = await res.json()import os
import requests
res = requests.post(
"https://nways.ng/maps/v1/fleet/webhooks",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
json={"url": "string", "events": ["task.created"], "headers": {}},
timeout=10,
)
data = res.json()Réponse
Créé
| Champ | Type | Description |
|---|---|---|
id | string | Obligatoire. |
url | string (uri) | Obligatoire. |
events | string[] | Obligatoire. |
active | boolean | Obligatoire. |
secret | string | Seulement à la création ou au renouvellement. |
headers | string[] | Les noms des en-têtes personnalisés envoyés avec chaque livraison (les valeurs ne sont jamais montrées). |
createdAt | string (date-time) | Obligatoire. |
updatedAt | string (date-time) | Obligatoire. |
{
"id": "wh_Ub3yH9sLk2",
"url": "string",
"events": [
"task.created"
],
"active": true,
"secret": "whsec_…",
"headers": [
"string"
],
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00"
}Erreurs
defaultErreur
Modifier l’url, les events ou le champ active d’un point de réception
PATCH https://nways.ng/maps/v1/fleet/webhooks/{id}
Paramètres
| Nom | Où | Type | Description |
|---|---|---|---|
id | chemin | string | Obligatoire. |
Corps de la requête
| Champ | Type | Description |
|---|---|---|
url | string (uri) | |
events | string[] | |
active | boolean | Désactivé : les envois en attente échouent et aucun nouvel envoi n’est mis en file. |
curl -X PATCH "https://nways.ng/maps/v1/fleet/webhooks/string" \
-H "X-NWays-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{"url":"string","events":["task.created"],"active":true}'const res = await fetch('https://nways.ng/maps/v1/fleet/webhooks/string', {
method: 'PATCH',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
"url": "string",
"events": [
"task.created"
],
"active": true
}),
})
const data = await res.json()import os
import requests
res = requests.patch(
"https://nways.ng/maps/v1/fleet/webhooks/string",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
json={"url": "string", "events": ["task.created"], "active": True},
timeout=10,
)
data = res.json()Réponse
Point de réception
| Champ | Type | Description |
|---|---|---|
id | string | Obligatoire. |
url | string (uri) | Obligatoire. |
events | string[] | Obligatoire. |
active | boolean | Obligatoire. |
secret | string | Seulement à la création ou au renouvellement. |
headers | string[] | Les noms des en-têtes personnalisés envoyés avec chaque livraison (les valeurs ne sont jamais montrées). |
createdAt | string (date-time) | Obligatoire. |
updatedAt | string (date-time) | Obligatoire. |
{
"id": "wh_Ub3yH9sLk2",
"url": "string",
"events": [
"task.created"
],
"active": true,
"secret": "whsec_…",
"headers": [
"string"
],
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00"
}Erreurs
defaultErreur
Supprimer un point de réception et son journal d’envois
DELETE https://nways.ng/maps/v1/fleet/webhooks/{id}
Paramètres
| Nom | Où | Type | Description |
|---|---|---|---|
id | chemin | string | Obligatoire. |
curl -X DELETE "https://nways.ng/maps/v1/fleet/webhooks/string" \
-H "X-NWays-Api-Key: VOTRE_CLE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/webhooks/string', {
method: 'DELETE',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY },
})
const data = await res.json()import os
import requests
res = requests.delete(
"https://nways.ng/maps/v1/fleet/webhooks/string",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Réponse
Supprimé
Pas de contenu.
Erreurs
defaultErreur
Un nouveau secret de signature (affiché une seule fois) ; l’ancien cesse aussitôt de fonctionner
POST https://nways.ng/maps/v1/fleet/webhooks/{id}/rotate-secret
Paramètres
| Nom | Où | Type | Description |
|---|---|---|---|
id | chemin | string | Obligatoire. |
curl -X POST "https://nways.ng/maps/v1/fleet/webhooks/string/rotate-secret" \
-H "X-NWays-Api-Key: VOTRE_CLE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/webhooks/string/rotate-secret', {
method: 'POST',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY },
})
const data = await res.json()import os
import requests
res = requests.post(
"https://nways.ng/maps/v1/fleet/webhooks/string/rotate-secret",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Réponse
Point de réception avec secret
| Champ | Type | Description |
|---|---|---|
id | string | Obligatoire. |
url | string (uri) | Obligatoire. |
events | string[] | Obligatoire. |
active | boolean | Obligatoire. |
secret | string | Seulement à la création ou au renouvellement. |
headers | string[] | Les noms des en-têtes personnalisés envoyés avec chaque livraison (les valeurs ne sont jamais montrées). |
createdAt | string (date-time) | Obligatoire. |
updatedAt | string (date-time) | Obligatoire. |
{
"id": "wh_Ub3yH9sLk2",
"url": "string",
"events": [
"task.created"
],
"active": true,
"secret": "whsec_…",
"headers": [
"string"
],
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00"
}Erreurs
defaultErreur
Mettre en file un événement ping vers le point de réception
POST https://nways.ng/maps/v1/fleet/webhooks/{id}/test
Paramètres
| Nom | Où | Type | Description |
|---|---|---|---|
id | chemin | string | Obligatoire. |
curl -X POST "https://nways.ng/maps/v1/fleet/webhooks/string/test" \
-H "X-NWays-Api-Key: VOTRE_CLE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/webhooks/string/test', {
method: 'POST',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY },
})
const data = await res.json()import os
import requests
res = requests.post(
"https://nways.ng/maps/v1/fleet/webhooks/string/test",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Réponse
En file
| Champ | Type | Description |
|---|---|---|
deliveryId | string | Obligatoire. |
{
"deliveryId": "dlv_Qa71ZcR0mX"
}Erreurs
defaultErreur
Le journal d’envois du point de réception, les plus récents d’abord (conservé 30 jours)
GET https://nways.ng/maps/v1/fleet/webhooks/{id}/deliveries
Paramètres
| Nom | Où | Type | Description |
|---|---|---|---|
id | chemin | string | Obligatoire. |
status | requête | string | Au choix: pending, delivered, failed. |
limit | requête | integer | Par défaut: 50. ≥ 1, ≤ 200. |
curl "https://nways.ng/maps/v1/fleet/webhooks/string/deliveries" \
-H "X-NWays-Api-Key: VOTRE_CLE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/webhooks/string/deliveries', {
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY },
})
const data = await res.json()import os
import requests
res = requests.get(
"https://nways.ng/maps/v1/fleet/webhooks/string/deliveries",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Réponse
Envois
| Champ | Type | Description |
|---|---|---|
deliveries | Delivery[] | Obligatoire. |
deliveries[].id | string | Obligatoire. |
deliveries[].event | string | Obligatoire. |
deliveries[].status | string | Obligatoire. Au choix: pending, delivered, failed. |
deliveries[].attempts | integer | Obligatoire. |
deliveries[].lastStatus | integer | Obligatoire. Le dernier statut HTTP de votre point de réception (0 = pas de réponse). |
deliveries[].lastError | string | Obligatoire. |
deliveries[].nextAttemptAt | string (date-time) | null | Obligatoire. |
deliveries[].createdAt | string (date-time) | Obligatoire. |
deliveries[].deliveredAt | string (date-time) | null | Obligatoire. |
deliveries[].payload | Event | Obligatoire. |
deliveries[].payload.id | string | Obligatoire. |
deliveries[].payload.type | string | Obligatoire. Un EventType, ou ping pour l’appel de test. |
deliveries[].payload.version | string | Obligatoire. La version du format : dans une version, des champs sont seulement ajoutés. |
deliveries[].payload.createdAt | string (date-time) | Obligatoire. |
deliveries[].payload.data | object | Obligatoire. |
deliveries[].payload.data.task | Task | |
deliveries[].payload.data.vehicle | any | Un Vehicle ; {id, name} dans les événements de zone. |
deliveries[].payload.data.zone | object | |
deliveries[].payload.data.at | string (date-time) | |
deliveries[].payload.data.position | object | |
deliveries[].payload.data.alert | AlertEvent | |
deliveries[].payload.data.changed | string[] | task.updated : les champs que la modification a changés. |
{
"deliveries": [
{
"id": "dlv_Qa71ZcR0mX",
"event": "string",
"status": "pending",
"attempts": 0,
"lastStatus": 0,
"lastError": "string",
"nextAttemptAt": "2026-10-15T09:00:00+01:00",
"createdAt": "2026-10-15T09:00:00+01:00",
"deliveredAt": "2026-10-15T09:00:00+01:00",
"payload": {
"id": "evt_9bQ2xLm0aZc4RwYeT7Kp",
"type": "string",
"version": "2026-10-16",
"createdAt": "2026-10-15T09:00:00+01:00",
"data": {
"task": {},
"vehicle": "string",
"zone": {},
"at": "2026-10-15T09:00:00+01:00",
"position": {},
"alert": {},
"changed": []
}
}
}
]
}Erreurs
defaultErreur
Renvoyer une livraison maintenant (échouée, ou livrée et voulue de nouveau) ; ses tentatives sont gardées
POST https://nways.ng/maps/v1/fleet/webhooks/{id}/deliveries/{deliveryId}/retry
Paramètres
| Nom | Où | Type | Description |
|---|---|---|---|
id | chemin | string | Obligatoire. |
deliveryId | chemin | string | Obligatoire. |
curl -X POST "https://nways.ng/maps/v1/fleet/webhooks/string/deliveries/string/retry" \
-H "X-NWays-Api-Key: VOTRE_CLE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/webhooks/string/deliveries/string/retry', {
method: 'POST',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY },
})
const data = await res.json()import os
import requests
res = requests.post(
"https://nways.ng/maps/v1/fleet/webhooks/string/deliveries/string/retry",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Réponse
En file
| Champ | Type | Description |
|---|---|---|
id | string | Obligatoire. |
status | any | Obligatoire. |
{
"id": "string",
"status": "string"
}Erreurs
defaultErreur
Un événement, envoyé par POST à votre point de réception
POST l’adresse de votre point de réception
En-têtes : X-NWays-Event (le type), X-NWays-Delivery (dlv_…, le même à chaque nouvelle tentative), X-NWays-Signature: t=<secondes unix>,v1=<hex> où v1 = HMAC-SHA256(secret, "<t>.<corps brut>"). Vérifiez-la avec le secret de votre adresse et refusez les horodatages décalés de plus de 5 minutes. Répondez par un 2xx en 10 s ; sinon nouvelle tentative après 30 s, 2 min, 10 min, 30 min, 1 h, 3 h, 6 h et 12 h, puis échec. Les événements peuvent arriver dans le désordre ou plusieurs fois : utilisez l’id de l’événement et le statut de la tâche. Événements : task.created, task.assigned, task.arriving, task.completed, task.failed (data.task, une Task), vehicle.offline (data.vehicle, un Vehicle ; une fois par silence plus long que offlineAfterS), et zone.entered / zone.exited (data.zone {id, name}, data.vehicle {id, name}, data.at, data.position {lat, lng}).
Paramètres
| Nom | Où | Type | Description |
|---|---|---|---|
X-NWays-Signature | en-tête | string | Obligatoire. |
X-NWays-Event | en-tête | string | Obligatoire. Au choix: task.created, task.assigned, task.arriving, task.completed, task.failed, vehicle.offline, zone.entered, zone.exited, asset.geofence_exit, asset.geofence_enter, asset.silent, asset.idle, asset.alert_resolved, connection.approved, connection.declined, connection.revoked, connection.ended, driver.availability_changed, dispatch.offered, dispatch.accepted, dispatch.declined, dispatch.expired, dispatch.withdrawn, task.started, delivery.rated, fleet.crash.detected, fleet.crash.resolved, task.updated. |
X-NWays-Delivery | en-tête | string | Obligatoire. |
Corps de la requête
| Champ | Type | Description |
|---|---|---|
id | string | Obligatoire. |
type | string | Obligatoire. Un EventType, ou ping pour l’appel de test. |
version | string | Obligatoire. La version du format : dans une version, des champs sont seulement ajoutés. |
createdAt | string (date-time) | Obligatoire. |
data | object | Obligatoire. |
data.task | Task | |
data.task.id | string | Obligatoire. |
data.task.ref | string | Obligatoire. Le numéro court de la livraison dans le projet, donné par N-Ways (« 1042 », affiché #1042) : pour les personnes, dans les alertes et les listes. |
data.task.status | string | Obligatoire. Au choix: created, assigned, picked_up, arriving, completed, failed, cancelled. |
data.task.vehicleId | string | null | Obligatoire. |
data.task.pickup | Stop | null | Obligatoire. |
data.task.dropoff | Stop | Obligatoire. |
data.task.dropoff.lat | number | Obligatoire. |
data.task.dropoff.lng | number | Obligatoire. |
data.task.dropoff.name | string | 120 caractères au plus. |
data.task.dropoff.address | string | 300 caractères au plus. |
data.task.recipientName | string | Obligatoire. |
data.task.recipientPhone | string | |
data.task.notes | string | Obligatoire. |
data.task.lang | string | Obligatoire. Au choix: en, fr, pt. |
data.task.arrivingS | integer | Obligatoire. |
data.task.eta | ETA | null | Obligatoire. Null tant qu’aucune position fraîche n’est arrivée, et une fois la tâche terminée. |
data.task.dueAt | string (date-time) | null | Obligatoire. |
data.task.late | boolean | Obligatoire. Ouverte et après dueAt, ou attendue après. |
data.task.trackingUrl | string (uri) | null | Obligatoire. Null une fois expiré. |
data.task.trackingExpiresAt | string (date-time) | null | Obligatoire. |
data.task.failureReason | string | |
data.task.createdAt | string (date-time) | Obligatoire. |
data.task.assignedAt | string (date-time) | null | Obligatoire. |
data.task.pickedUpAt | string (date-time) | null | Obligatoire. |
data.task.arrivingAt | string (date-time) | null | Obligatoire. |
data.task.endedAt | string (date-time) | null | Obligatoire. |
data.task.area | Area | null | La zone propre à la livraison : en sortir lève asset.geofence_exit. |
data.task.proofs | Proof[] | Seulement dans GET /tasks/{id} : les photos et signatures du livreur (N-Ways Business). |
data.task.proofs[].id | string | Obligatoire. |
data.task.proofs[].kind | string | Obligatoire. Au choix: photo, signature. |
data.task.proofs[].contentType | string | Obligatoire. Au choix: image/jpeg, image/png, image/webp. |
data.task.proofs[].bytes | integer | Obligatoire. |
data.task.proofs[].lat | number | null | Obligatoire. |
data.task.proofs[].lng | number | null | Obligatoire. |
data.task.proofs[].by | string | Obligatoire. Le nom du livreur. |
data.task.proofs[].createdAt | string (date-time) | Obligatoire. |
data.task.endNote | string | Seulement dans GET /tasks/{id} : ce que le livreur a écrit en terminant. |
data.task.recipientEmail | string | |
data.task.proofRequired | string[] | Celles de la livraison, sinon celles de vos réglages. |
data.task.proofRequiredOverride | string[] | null | |
data.task.packageSize | string | null | Au choix: small, medium, large, null. |
data.task.itemDescription | string | |
data.task.reference | string | |
data.task.scheduledAt | string (date-time) | null | |
data.task.connectionId | string | null | La connexion du livreur N-Ways qui l’a acceptée. |
data.task.acceptedAt | string (date-time) | null | |
data.task.startedAt | string (date-time) | null | |
data.task.editable | string | Ce que PATCH /tasks/{id} peut changer maintenant : tout, seulement notes et dueAt (retirée ou commencée), ou rien (terminée). Au choix: all, limited, none. |
data.task.editedAt | string (date-time) | null | La dernière modification. |
data.task.editedFields | string[] | Ce que la dernière modification a changé. |
data.task.pinDelivery | PinDelivery | Comment le code PIN de livraison parvient au client, quand la livraison en demande un et que les codes partent sur WhatsApp. Jamais le code lui-même. |
data.task.pinDelivery.channel | string | Obligatoire. Au choix: whatsapp, email, none. |
data.task.pinDelivery.state | string | Obligatoire. Au choix: sending, sent, delivered, read, failed. |
data.task.pinDelivery.whatsappErrorCode | integer | null | Obligatoire. L’échec de WhatsApp (131026 : pas sur WhatsApp), gardé après l’envoi du code par e-mail. |
data.task.pinDelivery.needsEmail | boolean | Obligatoire. Le client n’a pas reçu le code : envoyez-le avec POST /tasks/{id}/pin-email. |
data.task.pinDelivery.updatedAt | string (date-time) | Obligatoire. |
data.vehicle | any | Un Vehicle ; {id, name} dans les événements de zone. |
data.zone | object | |
data.zone.id | string | |
data.zone.name | string | |
data.at | string (date-time) | |
data.position | object | |
data.position.lat | number | |
data.position.lng | number | |
data.alert | AlertEvent | |
data.alert.id | string | Obligatoire. |
data.alert.ruleId | string | Obligatoire. Un id de règle, ou default:dispatch pour la zone d’une livraison sans règle propre, default:crash pour un accident sans règle crash. |
data.alert.ruleName | string | |
data.alert.kind | string | Obligatoire. Au choix: geofence_exit, geofence_enter, silent, idle, crash, tracker_alarm. |
data.alert.vehicleId | string | Obligatoire. |
data.alert.vehicleName | string | |
data.alert.subject | string | task:<id> ou zone:<id> pour les zones ; crash:<crs_id> pour un accident. |
data.alert.state | string | Obligatoire. Au choix: open, acknowledged, resolved. |
data.alert.detail | object | Obligatoire. position, at, taskId, area, zoneId, zoneName, lastSeenAt, since… ; un accident : crashId, at, position, accuracyM, speedBeforeKmh, road, driverName, driverPhone (quand vous l’avez), taskId, taskRef, taskLabel, state (help | resolved), resolvedHow (ok | help_here). |
data.alert.startedAt | string (date-time) | Obligatoire. |
data.alert.notifiedAt | string (date-time) | null | |
data.alert.notifications | integer | |
data.alert.acknowledgedBy | string | |
data.alert.acknowledgedAt | string (date-time) | null | |
data.alert.resolvedBy | string | |
data.alert.resolvedAt | string (date-time) | null | |
data.alert.autoResolved | boolean | Levée d’elle-même (de retour dans la zone, de nouveau des nouvelles, en mouvement). |
data.changed | string[] | task.updated : les champs que la modification a changés. |
{
"id": "evt_9bQ2xLm0aZc4RwYeT7Kp",
"type": "string",
"version": "2026-10-16",
"createdAt": "2026-10-15T09:00:00+01:00",
"data": {
"task": {
"id": "string",
"ref": "string",
"status": "created",
"vehicleId": "string",
"pickup": {
"lat": 0,
"lng": 0,
"name": "string",
"address": "string"
},
"dropoff": {
"lat": 0,
"lng": 0,
"name": "string",
"address": "string"
},
"recipientName": "string",
"recipientPhone": "string",
"notes": "string",
"lang": "en",
"arrivingS": 0,
"eta": {
"at": "2026-10-15T09:00:00+01:00",
"durationS": 0,
"distanceM": 0,
"trafficDelayS": 0,
"pickupAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00"
},
"dueAt": "2026-10-15T09:00:00+01:00",
"late": true,
"trackingUrl": "string",
"trackingExpiresAt": "2026-10-15T09:00:00+01:00",
"failureReason": "string",
"createdAt": "2026-10-15T09:00:00+01:00",
"assignedAt": "2026-10-15T09:00:00+01:00",
"pickedUpAt": "2026-10-15T09:00:00+01:00",
"arrivingAt": "2026-10-15T09:00:00+01:00",
"endedAt": "2026-10-15T09:00:00+01:00",
"area": {
"type": "circle",
"lat": 6.48,
"lng": 3.43,
"radiusM": 2500
},
"proofs": [
{
"id": "string",
"kind": "photo",
"contentType": "image/jpeg",
"bytes": 0,
"lat": 0,
"lng": 0,
"by": "string",
"createdAt": "2026-10-15T09:00:00+01:00"
}
],
"endNote": "string",
"recipientEmail": "string",
"proofRequired": [
"photo"
],
"proofRequiredOverride": [
"string"
],
"packageSize": "small",
"itemDescription": "string",
"reference": "string",
"scheduledAt": "2026-10-15T09:00:00+01:00",
"connectionId": "string",
"acceptedAt": "2026-10-15T09:00:00+01:00",
"startedAt": "2026-10-15T09:00:00+01:00",
"editable": "all",
"editedAt": "2026-10-15T09:00:00+01:00",
"editedFields": [
"string"
],
"pinDelivery": {
"channel": "whatsapp",
"state": "sending",
"whatsappErrorCode": 0,
"needsEmail": true,
"updatedAt": "2026-10-15T09:00:00+01:00"
}
},
"vehicle": "string",
"zone": {
"id": "string",
"name": "string"
},
"at": "2026-10-15T09:00:00+01:00",
"position": {
"lat": 0,
"lng": 0
},
"alert": {
"id": "alr_8KwP2nVd5T",
"ruleId": "string",
"ruleName": "string",
"kind": "geofence_exit",
"vehicleId": "string",
"vehicleName": "string",
"subject": "string",
"state": "open",
"detail": {},
"startedAt": "2026-10-15T09:00:00+01:00",
"notifiedAt": "2026-10-15T09:00:00+01:00",
"notifications": 0,
"acknowledgedBy": "string",
"acknowledgedAt": "2026-10-15T09:00:00+01:00",
"resolvedBy": "string",
"resolvedAt": "2026-10-15T09:00:00+01:00",
"autoResolved": true
},
"changed": [
"string"
]
}
}Réponse
Reçu