N-Ways
Documentação para programadoresWebhooks

Webhooks

Os endereços do seu servidor que a N-Ways chama quando uma entrega ou um veículo muda.

Nesta página
Nota:

Envie a sua chave com key=A_SUA_CHAVE_API no endereço, ou no cabeçalho X-NWays-Api-Key. Chaves de API

Endereço base: https://nways.ng/maps/v1/fleet

Listar endpoints de webhook

GET https://nways.ng/maps/v1/fleet/webhooks

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

Resposta

Os endpoints e os eventos existentes

CampoTipoDescrição
webhooksWebhook[]Obrigatório.
webhooks[].idstringObrigatório.
webhooks[].urlstring (uri)Obrigatório.
webhooks[].eventsstring[]Obrigatório.
webhooks[].activebooleanObrigatório.
webhooks[].secretstringApenas quando é criado ou renovado.
webhooks[].headersstring[]Nomes dos cabeçalhos personalizados enviados com cada entrega (os valores nunca são mostrados).
webhooks[].createdAtstring (date-time)Obrigatório.
webhooks[].updatedAtstring (date-time)Obrigatório.
eventsstring[]Obrigatório.
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"
  ]
}

Erros

  • default Erro

Adicionar um endpoint (até 10); a resposta traz o seu segredo de assinatura, mostrado uma única vez

POST https://nways.ng/maps/v1/fleet/webhooks

Corpo do pedido

CampoTipoDescrição
urlstring (uri)Obrigatório. https, um endereço público; os redirecionamentos não são seguidos.
eventsstring[]Vazio = todos os eventos.
headersobjectEnviados com cada entrega (um token de autenticação que o seu CRM pede). Nunca X-NWays-*, Host, Content-Type, User-Agent.
cURL
curl -X POST "https://nways.ng/maps/v1/fleet/webhooks" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_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()

Resposta

Criado

CampoTipoDescrição
idstringObrigatório.
urlstring (uri)Obrigatório.
eventsstring[]Obrigatório.
activebooleanObrigatório.
secretstringApenas quando é criado ou renovado.
headersstring[]Nomes dos cabeçalhos personalizados enviados com cada entrega (os valores nunca são mostrados).
createdAtstring (date-time)Obrigatório.
updatedAtstring (date-time)Obrigatório.
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"
}

Erros

  • default Erro

Alterar o url, os eventos ou o active de um endpoint

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

Parâmetros

NomeOndeTipoDescrição
idcaminhostringObrigatório.

Corpo do pedido

CampoTipoDescrição
urlstring (uri)
eventsstring[]
activebooleanDesligado: as entregas pendentes falham e não são postas novas em fila.
cURL
curl -X PATCH "https://nways.ng/maps/v1/fleet/webhooks/string" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_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()

Resposta

Endpoint

CampoTipoDescrição
idstringObrigatório.
urlstring (uri)Obrigatório.
eventsstring[]Obrigatório.
activebooleanObrigatório.
secretstringApenas quando é criado ou renovado.
headersstring[]Nomes dos cabeçalhos personalizados enviados com cada entrega (os valores nunca são mostrados).
createdAtstring (date-time)Obrigatório.
updatedAtstring (date-time)Obrigatório.
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"
}

Erros

  • default Erro

Eliminar um endpoint e o seu registo de entregas

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

Parâmetros

NomeOndeTipoDescrição
idcaminhostringObrigatório.
cURL
curl -X DELETE "https://nways.ng/maps/v1/fleet/webhooks/string" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_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()

Resposta

Eliminado

Sem conteúdo.

Erros

  • default Erro

Um novo segredo de assinatura (mostrado uma única vez); o antigo deixa de funcionar de imediato

POST https://nways.ng/maps/v1/fleet/webhooks/{id}/rotate-secret

Parâmetros

NomeOndeTipoDescrição
idcaminhostringObrigatório.
cURL
curl -X POST "https://nways.ng/maps/v1/fleet/webhooks/string/rotate-secret" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_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()

Resposta

Endpoint com secret

CampoTipoDescrição
idstringObrigatório.
urlstring (uri)Obrigatório.
eventsstring[]Obrigatório.
activebooleanObrigatório.
secretstringApenas quando é criado ou renovado.
headersstring[]Nomes dos cabeçalhos personalizados enviados com cada entrega (os valores nunca são mostrados).
createdAtstring (date-time)Obrigatório.
updatedAtstring (date-time)Obrigatório.
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"
}

Erros

  • default Erro

Pôr em fila um evento ping para o endpoint

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

Parâmetros

NomeOndeTipoDescrição
idcaminhostringObrigatório.
cURL
curl -X POST "https://nways.ng/maps/v1/fleet/webhooks/string/test" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_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()

Resposta

Em fila

CampoTipoDescrição
deliveryIdstringObrigatório.
202 OK
{
  "deliveryId": "dlv_Qa71ZcR0mX"
}

Erros

  • default Erro

O registo de entregas do endpoint, das mais recentes para as mais antigas (guardado 30 dias)

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

Parâmetros

NomeOndeTipoDescrição
idcaminhostringObrigatório.
statusconsultastringUm de: pending, delivered, failed.
limitconsultaintegerPredefinição: 50. ≥ 1, ≤ 200.
cURL
curl "https://nways.ng/maps/v1/fleet/webhooks/string/deliveries" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_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()

Resposta

Entregas

CampoTipoDescrição
deliveriesDelivery[]Obrigatório.
deliveries[].idstringObrigatório.
deliveries[].eventstringObrigatório.
deliveries[].statusstringObrigatório. Um de: pending, delivered, failed.
deliveries[].attemptsintegerObrigatório.
deliveries[].lastStatusintegerObrigatório. O último estado HTTP do seu endpoint (0 = sem resposta).
deliveries[].lastErrorstringObrigatório.
deliveries[].nextAttemptAtstring (date-time) | nullObrigatório.
deliveries[].createdAtstring (date-time)Obrigatório.
deliveries[].deliveredAtstring (date-time) | nullObrigatório.
deliveries[].payloadEventObrigatório.
deliveries[].payload.idstringObrigatório.
deliveries[].payload.typestringObrigatório. Um EventType, ou ping vindo da chamada de teste.
deliveries[].payload.versionstringObrigatório. A versão da forma do conteúdo: dentro de uma versão, só se acrescentam campos.
deliveries[].payload.createdAtstring (date-time)Obrigatório.
deliveries[].payload.dataobjectObrigatório.
deliveries[].payload.data.taskTask
deliveries[].payload.data.vehicleanyUm Vehicle; {id, name} nos eventos de zona.
deliveries[].payload.data.zoneobject
deliveries[].payload.data.atstring (date-time)
deliveries[].payload.data.positionobject
deliveries[].payload.data.alertAlertEvent
deliveries[].payload.data.changedstring[]task.updated: os campos que a edição alterou.
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": []
        }
      }
    }
  ]
}

Erros

  • default Erro

Enviar de novo uma entrega agora (falhada, ou entregue e pretendida outra vez); as suas tentativas são mantidas

POST https://nways.ng/maps/v1/fleet/webhooks/{id}/deliveries/{deliveryId}/retry

Parâmetros

NomeOndeTipoDescrição
idcaminhostringObrigatório.
deliveryIdcaminhostringObrigatório.
cURL
curl -X POST "https://nways.ng/maps/v1/fleet/webhooks/string/deliveries/string/retry" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_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()

Resposta

Em fila

CampoTipoDescrição
idstringObrigatório.
statusanyObrigatório.
202 OK
{
  "id": "string",
  "status": "string"
}

Erros

  • default Erro

Um evento, enviado por POST para o seu endpoint

POST o endereço do seu endpoint

Cabeçalhos: X-NWays-Event (o tipo), X-NWays-Delivery (dlv_…, o mesmo nas novas tentativas), X-NWays-Signature: t=<unix seconds>,v1=<hex> em que v1 = HMAC-SHA256(secret, "<t>.<raw body>"). Verifique-a com o segredo do seu endpoint e recuse marcas temporais com mais de 5 minutos de diferença. Responda com qualquer 2xx em menos de 10 s; qualquer outra resposta é repetida após 30 s, 2 min, 10 min, 30 min, 1 h, 3 h, 6 h e 12 h, e depois marcada como falhada. Os eventos podem chegar fora de ordem ou mais do que uma vez: use o id do evento e o estado da tarefa. Eventos: task.created, task.assigned, task.arriving, task.completed, task.failed (data.task, uma Task), vehicle.offline (data.vehicle, um Vehicle; uma vez por silêncio mais longo do que offlineAfterS), e zone.entered / zone.exited (data.zone {id, name}, data.vehicle {id, name}, data.at, data.position {lat, lng}).

Parâmetros

NomeOndeTipoDescrição
X-NWays-SignaturecabeçalhostringObrigatório.
X-NWays-EventcabeçalhostringObrigatório. Um de: 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-DeliverycabeçalhostringObrigatório.

Corpo do pedido

CampoTipoDescrição
idstringObrigatório.
typestringObrigatório. Um EventType, ou ping vindo da chamada de teste.
versionstringObrigatório. A versão da forma do conteúdo: dentro de uma versão, só se acrescentam campos.
createdAtstring (date-time)Obrigatório.
dataobjectObrigatório.
data.taskTask
data.task.idstringObrigatório.
data.task.refstringObrigatório. O número curto da entrega no projeto, atribuído pela N-Ways ("1042", mostrado como #1042): para pessoas, em alertas e listas.
data.task.statusstringObrigatório. Um de: created, assigned, picked_up, arriving, completed, failed, cancelled.
data.task.vehicleIdstring | nullObrigatório.
data.task.pickupStop | nullObrigatório.
data.task.dropoffStopObrigatório.
data.task.dropoff.latnumberObrigatório.
data.task.dropoff.lngnumberObrigatório.
data.task.dropoff.namestringAté 120 caracteres.
data.task.dropoff.addressstringAté 300 caracteres.
data.task.recipientNamestringObrigatório.
data.task.recipientPhonestring
data.task.notesstringObrigatório.
data.task.langstringObrigatório. Um de: en, fr, pt.
data.task.arrivingSintegerObrigatório.
data.task.etaETA | nullObrigatório. Nulo até chegar uma posição recente, e depois de a tarefa terminar.
data.task.dueAtstring (date-time) | nullObrigatório.
data.task.latebooleanObrigatório. Em aberto e com dueAt ultrapassado, ou prevista para depois dele.
data.task.trackingUrlstring (uri) | nullObrigatório. Nulo depois de expirar.
data.task.trackingExpiresAtstring (date-time) | nullObrigatório.
data.task.failureReasonstring
data.task.createdAtstring (date-time)Obrigatório.
data.task.assignedAtstring (date-time) | nullObrigatório.
data.task.pickedUpAtstring (date-time) | nullObrigatório.
data.task.arrivingAtstring (date-time) | nullObrigatório.
data.task.endedAtstring (date-time) | nullObrigatório.
data.task.areaArea | nullA área própria da entrega: sair dela gera asset.geofence_exit.
data.task.proofsProof[]Apenas em GET /tasks/{id}: as fotografias e assinaturas do estafeta (N-Ways Business).
data.task.proofs[].idstringObrigatório.
data.task.proofs[].kindstringObrigatório. Um de: photo, signature.
data.task.proofs[].contentTypestringObrigatório. Um de: image/jpeg, image/png, image/webp.
data.task.proofs[].bytesintegerObrigatório.
data.task.proofs[].latnumber | nullObrigatório.
data.task.proofs[].lngnumber | nullObrigatório.
data.task.proofs[].bystringObrigatório. O nome do estafeta.
data.task.proofs[].createdAtstring (date-time)Obrigatório.
data.task.endNotestringApenas em GET /tasks/{id}: o que o estafeta escreveu ao terminar.
data.task.recipientEmailstring
data.task.proofRequiredstring[]O da própria entrega, senão o das suas definições.
data.task.proofRequiredOverridestring[] | null
data.task.packageSizestring | nullUm de: small, medium, large, null.
data.task.itemDescriptionstring
data.task.referencestring
data.task.scheduledAtstring (date-time) | null
data.task.connectionIdstring | nullA ligação do motorista N-Ways que a aceitou.
data.task.acceptedAtstring (date-time) | null
data.task.startedAtstring (date-time) | null
data.task.editablestringO que PATCH /tasks/{id} pode alterar agora: tudo, apenas notes e dueAt (recolhida ou iniciada), ou nada (terminada). Um de: all, limited, none.
data.task.editedAtstring (date-time) | nullA última edição.
data.task.editedFieldsstring[]O que a última edição alterou.
data.task.pinDeliveryPinDeliveryComo o PIN de entrega está a chegar ao cliente, quando a entrega pede um e os PIN vão por WhatsApp. Nunca o próprio PIN.
data.task.pinDelivery.channelstringObrigatório. Um de: whatsapp, email, none.
data.task.pinDelivery.statestringObrigatório. Um de: sending, sent, delivered, read, failed.
data.task.pinDelivery.whatsappErrorCodeinteger | nullObrigatório. A falha do WhatsApp (131026: não está no WhatsApp), guardada depois de o PIN ter ido por e-mail.
data.task.pinDelivery.needsEmailbooleanObrigatório. O cliente não recebeu o PIN: envie-o com POST /tasks/{id}/pin-email.
data.task.pinDelivery.updatedAtstring (date-time)Obrigatório.
data.vehicleanyUm Vehicle; {id, name} nos eventos de zona.
data.zoneobject
data.zone.idstring
data.zone.namestring
data.atstring (date-time)
data.positionobject
data.position.latnumber
data.position.lngnumber
data.alertAlertEvent
data.alert.idstringObrigatório.
data.alert.ruleIdstringObrigatório. Um id de regra, ou default:dispatch para uma área de entrega sem regra própria, default:crash para um acidente sem regra de acidente.
data.alert.ruleNamestring
data.alert.kindstringObrigatório. Um de: geofence_exit, geofence_enter, silent, idle, crash, tracker_alarm.
data.alert.vehicleIdstringObrigatório.
data.alert.vehicleNamestring
data.alert.subjectstringtask:<id> ou zone:<id> para as geovedações; crash:<crs_id> para um acidente.
data.alert.statestringObrigatório. Um de: open, acknowledged, resolved.
data.alert.detailobjectObrigatório. position, at, taskId, area, zoneId, zoneName, lastSeenAt, since…; um acidente: crashId, at, position, accuracyM, speedBeforeKmh, road, driverName, driverPhone (quando o tem), taskId, taskRef, taskLabel, state (help | resolved), resolvedHow (ok | help_here).
data.alert.startedAtstring (date-time)Obrigatório.
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.autoResolvedbooleanResolvido por si (de volta ao interior, com sinal de novo, em movimento).
data.changedstring[]task.updated: os campos que a edição alterou.
Exemplo
{
  "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"
    ]
  }
}

Resposta

Recebido