N-Ways
Documentation développeursWebhooks

Webhooks

Les adresses de votre serveur que N-Ways appelle quand une livraison ou un véhicule change.

Sur cette page
Remarque :

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
curl "https://nways.ng/maps/v1/fleet/webhooks" \
  -H "X-NWays-Api-Key: VOTRE_CLE_API"
JavaScript
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()
Python
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

ChampTypeDescription
webhooksWebhook[]Obligatoire.
webhooks[].idstringObligatoire.
webhooks[].urlstring (uri)Obligatoire.
webhooks[].eventsstring[]Obligatoire.
webhooks[].activebooleanObligatoire.
webhooks[].secretstringSeulement à la création ou au renouvellement.
webhooks[].headersstring[]Les noms des en-têtes personnalisés envoyés avec chaque livraison (les valeurs ne sont jamais montrées).
webhooks[].createdAtstring (date-time)Obligatoire.
webhooks[].updatedAtstring (date-time)Obligatoire.
eventsstring[]Obligatoire.
200 OK
{
  "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

  • default Erreur

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

ChampTypeDescription
urlstring (uri)Obligatoire. https, une adresse publique ; les redirections ne sont pas suivies.
eventsstring[]Vide = tous les événements.
headersobjectEnvoyé avec chaque livraison (un jeton que votre CRM demande). Pas X-NWays-*, Host, Content-Type, User-Agent.
cURL
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":{}}'
JavaScript
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()
Python
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éé

ChampTypeDescription
idstringObligatoire.
urlstring (uri)Obligatoire.
eventsstring[]Obligatoire.
activebooleanObligatoire.
secretstringSeulement à la création ou au renouvellement.
headersstring[]Les noms des en-têtes personnalisés envoyés avec chaque livraison (les valeurs ne sont jamais montrées).
createdAtstring (date-time)Obligatoire.
updatedAtstring (date-time)Obligatoire.
201 OK
{
  "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

  • default Erreur

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

NomOùTypeDescription
idcheminstringObligatoire.

Corps de la requête

ChampTypeDescription
urlstring (uri)
eventsstring[]
activebooleanDésactivé : les envois en attente échouent et aucun nouvel envoi n’est mis en file.
cURL
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}'
JavaScript
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()
Python
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

ChampTypeDescription
idstringObligatoire.
urlstring (uri)Obligatoire.
eventsstring[]Obligatoire.
activebooleanObligatoire.
secretstringSeulement à la création ou au renouvellement.
headersstring[]Les noms des en-têtes personnalisés envoyés avec chaque livraison (les valeurs ne sont jamais montrées).
createdAtstring (date-time)Obligatoire.
updatedAtstring (date-time)Obligatoire.
200 OK
{
  "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

  • default Erreur

Supprimer un point de réception et son journal d’envois

DELETE https://nways.ng/maps/v1/fleet/webhooks/{id}

Paramètres

NomOùTypeDescription
idcheminstringObligatoire.
cURL
curl -X DELETE "https://nways.ng/maps/v1/fleet/webhooks/string" \
  -H "X-NWays-Api-Key: VOTRE_CLE_API"
JavaScript
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()
Python
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

  • default Erreur

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

NomOùTypeDescription
idcheminstringObligatoire.
cURL
curl -X POST "https://nways.ng/maps/v1/fleet/webhooks/string/rotate-secret" \
  -H "X-NWays-Api-Key: VOTRE_CLE_API"
JavaScript
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()
Python
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

ChampTypeDescription
idstringObligatoire.
urlstring (uri)Obligatoire.
eventsstring[]Obligatoire.
activebooleanObligatoire.
secretstringSeulement à la création ou au renouvellement.
headersstring[]Les noms des en-têtes personnalisés envoyés avec chaque livraison (les valeurs ne sont jamais montrées).
createdAtstring (date-time)Obligatoire.
updatedAtstring (date-time)Obligatoire.
200 OK
{
  "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

  • default Erreur

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

NomOùTypeDescription
idcheminstringObligatoire.
cURL
curl -X POST "https://nways.ng/maps/v1/fleet/webhooks/string/test" \
  -H "X-NWays-Api-Key: VOTRE_CLE_API"
JavaScript
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()
Python
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

ChampTypeDescription
deliveryIdstringObligatoire.
202 OK
{
  "deliveryId": "dlv_Qa71ZcR0mX"
}

Erreurs

  • default Erreur

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

NomOùTypeDescription
idcheminstringObligatoire.
statusrequêtestringAu choix: pending, delivered, failed.
limitrequêteintegerPar défaut: 50. ≥ 1, ≤ 200.
cURL
curl "https://nways.ng/maps/v1/fleet/webhooks/string/deliveries" \
  -H "X-NWays-Api-Key: VOTRE_CLE_API"
JavaScript
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()
Python
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

ChampTypeDescription
deliveriesDelivery[]Obligatoire.
deliveries[].idstringObligatoire.
deliveries[].eventstringObligatoire.
deliveries[].statusstringObligatoire. Au choix: pending, delivered, failed.
deliveries[].attemptsintegerObligatoire.
deliveries[].lastStatusintegerObligatoire. Le dernier statut HTTP de votre point de réception (0 = pas de réponse).
deliveries[].lastErrorstringObligatoire.
deliveries[].nextAttemptAtstring (date-time) | nullObligatoire.
deliveries[].createdAtstring (date-time)Obligatoire.
deliveries[].deliveredAtstring (date-time) | nullObligatoire.
deliveries[].payloadEventObligatoire.
deliveries[].payload.idstringObligatoire.
deliveries[].payload.typestringObligatoire. Un EventType, ou ping pour l’appel de test.
deliveries[].payload.versionstringObligatoire. La version du format : dans une version, des champs sont seulement ajoutés.
deliveries[].payload.createdAtstring (date-time)Obligatoire.
deliveries[].payload.dataobjectObligatoire.
deliveries[].payload.data.taskTask
deliveries[].payload.data.vehicleanyUn Vehicle ; {id, name} dans les événements de zone.
deliveries[].payload.data.zoneobject
deliveries[].payload.data.atstring (date-time)
deliveries[].payload.data.positionobject
deliveries[].payload.data.alertAlertEvent
deliveries[].payload.data.changedstring[]task.updated : les champs que la modification a changés.
200 OK
{
  "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

  • default Erreur

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

NomOùTypeDescription
idcheminstringObligatoire.
deliveryIdcheminstringObligatoire.
cURL
curl -X POST "https://nways.ng/maps/v1/fleet/webhooks/string/deliveries/string/retry" \
  -H "X-NWays-Api-Key: VOTRE_CLE_API"
JavaScript
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()
Python
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

ChampTypeDescription
idstringObligatoire.
statusanyObligatoire.
202 OK
{
  "id": "string",
  "status": "string"
}

Erreurs

  • default Erreur

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

NomOùTypeDescription
X-NWays-Signatureen-têtestringObligatoire.
X-NWays-Eventen-têtestringObligatoire. 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-Deliveryen-têtestringObligatoire.

Corps de la requête

ChampTypeDescription
idstringObligatoire.
typestringObligatoire. Un EventType, ou ping pour l’appel de test.
versionstringObligatoire. La version du format : dans une version, des champs sont seulement ajoutés.
createdAtstring (date-time)Obligatoire.
dataobjectObligatoire.
data.taskTask
data.task.idstringObligatoire.
data.task.refstringObligatoire. 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.statusstringObligatoire. Au choix: created, assigned, picked_up, arriving, completed, failed, cancelled.
data.task.vehicleIdstring | nullObligatoire.
data.task.pickupStop | nullObligatoire.
data.task.dropoffStopObligatoire.
data.task.dropoff.latnumberObligatoire.
data.task.dropoff.lngnumberObligatoire.
data.task.dropoff.namestring120 caractères au plus.
data.task.dropoff.addressstring300 caractères au plus.
data.task.recipientNamestringObligatoire.
data.task.recipientPhonestring
data.task.notesstringObligatoire.
data.task.langstringObligatoire. Au choix: en, fr, pt.
data.task.arrivingSintegerObligatoire.
data.task.etaETA | nullObligatoire. Null tant qu’aucune position fraîche n’est arrivée, et une fois la tâche terminée.
data.task.dueAtstring (date-time) | nullObligatoire.
data.task.latebooleanObligatoire. Ouverte et après dueAt, ou attendue après.
data.task.trackingUrlstring (uri) | nullObligatoire. Null une fois expiré.
data.task.trackingExpiresAtstring (date-time) | nullObligatoire.
data.task.failureReasonstring
data.task.createdAtstring (date-time)Obligatoire.
data.task.assignedAtstring (date-time) | nullObligatoire.
data.task.pickedUpAtstring (date-time) | nullObligatoire.
data.task.arrivingAtstring (date-time) | nullObligatoire.
data.task.endedAtstring (date-time) | nullObligatoire.
data.task.areaArea | nullLa zone propre à la livraison : en sortir lève asset.geofence_exit.
data.task.proofsProof[]Seulement dans GET /tasks/{id} : les photos et signatures du livreur (N-Ways Business).
data.task.proofs[].idstringObligatoire.
data.task.proofs[].kindstringObligatoire. Au choix: photo, signature.
data.task.proofs[].contentTypestringObligatoire. Au choix: image/jpeg, image/png, image/webp.
data.task.proofs[].bytesintegerObligatoire.
data.task.proofs[].latnumber | nullObligatoire.
data.task.proofs[].lngnumber | nullObligatoire.
data.task.proofs[].bystringObligatoire. Le nom du livreur.
data.task.proofs[].createdAtstring (date-time)Obligatoire.
data.task.endNotestringSeulement dans GET /tasks/{id} : ce que le livreur a écrit en terminant.
data.task.recipientEmailstring
data.task.proofRequiredstring[]Celles de la livraison, sinon celles de vos réglages.
data.task.proofRequiredOverridestring[] | null
data.task.packageSizestring | nullAu choix: small, medium, large, null.
data.task.itemDescriptionstring
data.task.referencestring
data.task.scheduledAtstring (date-time) | null
data.task.connectionIdstring | nullLa connexion du livreur N-Ways qui l’a acceptée.
data.task.acceptedAtstring (date-time) | null
data.task.startedAtstring (date-time) | null
data.task.editablestringCe 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.editedAtstring (date-time) | nullLa dernière modification.
data.task.editedFieldsstring[]Ce que la dernière modification a changé.
data.task.pinDeliveryPinDeliveryComment 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.channelstringObligatoire. Au choix: whatsapp, email, none.
data.task.pinDelivery.statestringObligatoire. Au choix: sending, sent, delivered, read, failed.
data.task.pinDelivery.whatsappErrorCodeinteger | nullObligatoire. L’échec de WhatsApp (131026 : pas sur WhatsApp), gardé après l’envoi du code par e-mail.
data.task.pinDelivery.needsEmailbooleanObligatoire. Le client n’a pas reçu le code : envoyez-le avec POST /tasks/{id}/pin-email.
data.task.pinDelivery.updatedAtstring (date-time)Obligatoire.
data.vehicleanyUn Vehicle ; {id, name} dans les événements de zone.
data.zoneobject
data.zone.idstring
data.zone.namestring
data.atstring (date-time)
data.positionobject
data.position.latnumber
data.position.lngnumber
data.alertAlertEvent
data.alert.idstringObligatoire.
data.alert.ruleIdstringObligatoire. 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.ruleNamestring
data.alert.kindstringObligatoire. Au choix: geofence_exit, geofence_enter, silent, idle, crash, tracker_alarm.
data.alert.vehicleIdstringObligatoire.
data.alert.vehicleNamestring
data.alert.subjectstringtask:<id> ou zone:<id> pour les zones ; crash:<crs_id> pour un accident.
data.alert.statestringObligatoire. Au choix: open, acknowledged, resolved.
data.alert.detailobjectObligatoire. 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.startedAtstring (date-time)Obligatoire.
data.alert.notifiedAtstring (date-time) | null
data.alert.notificationsinteger
data.alert.acknowledgedBystring
data.alert.acknowledgedAtstring (date-time) | null
data.alert.resolvedBystring
data.alert.resolvedAtstring (date-time) | null
data.alert.autoResolvedbooleanLevée d’elle-même (de retour dans la zone, de nouveau des nouvelles, en mouvement).
data.changedstring[]task.updated : les champs que la modification a changés.
Exemple
{
  "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