Veículos, motoristas e posições
As definições da sua frota, os seus motoristas e veículos, e as posições enviadas pelas aplicações dos seus estafetas.
Nesta página
- Obter as definições de frota do projeto
- Alterar as definições de frota (os campos omitidos mantêm o seu valor)
- Listar motoristas
- Adicionar um motorista
- Obter um motorista
- Alterar um motorista
- Eliminar um motorista (os veículos continuam a circular sem ele)
- Listar veículos com as suas últimas posições conhecidas
- Adicionar um veículo
- Obter um veículo e a sua última posição conhecida
- Alterar um veículo (driverId "" retira o motorista)
- Eliminar um veículo e o seu histórico de viagens
- Histórico de viagens de um veículo (do mais antigo para o mais recente)
- A cronologia de um veículo a partir do seu rastreador (ignição ligada e desligada, corte de alimentação e reposição), da mais recente para a mais antiga
- Enviar posições (em lote)
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
Obter as definições de frota do projeto
GET https://nways.ng/maps/v1/fleet/settings
curl "https://nways.ng/maps/v1/fleet/settings" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/settings', {
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/settings",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Definições
| Campo | Tipo | Descrição |
|---|---|---|
shareTraffic | boolean | Obrigatório. Permitir que as posições dos seus veículos alimentem também o trânsito em direto público da N-Ways (de forma anónima). Desligado, a menos que o ative. Predefinição: false. |
retentionDays | integer | Obrigatório. Durante quanto tempo são guardados o histórico de viagens e as tarefas terminadas. Predefinição: 30. ≥ 1, ≤ 90. |
brandName | string | Obrigatório. O nome que as páginas de seguimento mostram ("A sua entrega de …"). Até 60 caracteres. |
offlineAfterS | integer | Obrigatório. Silêncio a partir do qual um veículo fica offline (vehicle.offline). Predefinição: 600. ≥ 60, ≤ 86400. |
stopAlertS | integer | Obrigatório. Um veículo em entrega parado durante este tempo gera um alerta stopped. Predefinição: 600. ≥ 60, ≤ 7200. |
{
"shareTraffic": false,
"retentionDays": 30,
"brandName": "string",
"offlineAfterS": 600,
"stopAlertS": 600
}Erros
defaultErro
Alterar as definições de frota (os campos omitidos mantêm o seu valor)
PUT https://nways.ng/maps/v1/fleet/settings
Corpo do pedido
| Campo | Tipo | Descrição |
|---|---|---|
shareTraffic | boolean | |
retentionDays | integer | ≥ 1, ≤ 90. |
brandName | string | Até 60 caracteres. |
offlineAfterS | integer | ≥ 60, ≤ 86400. |
stopAlertS | integer | ≥ 60, ≤ 7200. |
curl -X PUT "https://nways.ng/maps/v1/fleet/settings" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API" \
-H "Content-Type: application/json" \
-d '{"brandName":"Chowtime","offlineAfterS":300}'const res = await fetch('https://nways.ng/maps/v1/fleet/settings', {
method: 'PUT',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
"brandName": "Chowtime",
"offlineAfterS": 300
}),
})
const data = await res.json()import os
import requests
res = requests.put(
"https://nways.ng/maps/v1/fleet/settings",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
json={"brandName": "Chowtime", "offlineAfterS": 300},
timeout=10,
)
data = res.json()Resposta
Definições
| Campo | Tipo | Descrição |
|---|---|---|
shareTraffic | boolean | Obrigatório. Permitir que as posições dos seus veículos alimentem também o trânsito em direto público da N-Ways (de forma anónima). Desligado, a menos que o ative. Predefinição: false. |
retentionDays | integer | Obrigatório. Durante quanto tempo são guardados o histórico de viagens e as tarefas terminadas. Predefinição: 30. ≥ 1, ≤ 90. |
brandName | string | Obrigatório. O nome que as páginas de seguimento mostram ("A sua entrega de …"). Até 60 caracteres. |
offlineAfterS | integer | Obrigatório. Silêncio a partir do qual um veículo fica offline (vehicle.offline). Predefinição: 600. ≥ 60, ≤ 86400. |
stopAlertS | integer | Obrigatório. Um veículo em entrega parado durante este tempo gera um alerta stopped. Predefinição: 600. ≥ 60, ≤ 7200. |
{
"shareTraffic": false,
"retentionDays": 30,
"brandName": "string",
"offlineAfterS": 600,
"stopAlertS": 600
}Erros
defaultErro
Listar motoristas
GET https://nways.ng/maps/v1/fleet/drivers
curl "https://nways.ng/maps/v1/fleet/drivers" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/drivers', {
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/drivers",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Motoristas, por id
| Campo | Tipo | Descrição |
|---|---|---|
drivers | Driver[] | Obrigatório. |
drivers[].id | string | Obrigatório. |
drivers[].name | string | Obrigatório. firstName e lastName juntos. |
drivers[].firstName | string | Obrigatório. |
drivers[].lastName | string | Obrigatório. Vazio para um motorista criado só com um nome de uma palavra. |
drivers[].phone | string | Obrigatório. |
drivers[].createdAt | string (date-time) | Obrigatório. |
drivers[].updatedAt | string (date-time) | Obrigatório. |
drivers[].app | object | Obrigatório. O estafeta na N-Ways Business. |
drivers[].app.status | string | Obrigatório. Um de: none, invited, joined. |
drivers[].app.joinedAt | string (date-time) | null | Obrigatório. |
drivers[].app.email | string | A conta N-Ways do estafeta (só depois de aderir). |
drivers[].app.name | string | |
drivers[].app.onDuty | boolean | Obrigatório. A partilhar a sua posição agora. |
drivers[].app.consentedAt | string (date-time) | null | Obrigatório. Quando aceitou partilhar a sua posição (null: não agora). |
drivers[].app.inviteExpiresAt | string (date-time) | Convidado: até quando o código funciona. |
{
"drivers": [
{
"id": "string",
"name": "string",
"firstName": "string",
"lastName": "string",
"phone": "string",
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00",
"app": {
"status": "none",
"joinedAt": "2026-10-15T09:00:00+01:00",
"email": "string",
"name": "string",
"onDuty": true,
"consentedAt": "2026-10-15T09:00:00+01:00",
"inviteExpiresAt": "2026-10-15T09:00:00+01:00"
}
}
]
}Erros
defaultErro
Adicionar um motorista
POST https://nways.ng/maps/v1/fleet/drivers
Corpo do pedido
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Obrigatório. |
name | string | O nome único antigo; ignorado quando firstName e lastName são enviados. Até 100 caracteres. |
phone | string | Até 32 caracteres. |
firstName | string | Letras (qualquer alfabeto, com acentos), espaços, hífenes e apóstrofos. Envie com lastName; name passa então a ser 'firstName lastName'. Até 50 caracteres. |
lastName | string | Obrigatório com firstName; as mesmas regras. Até 50 caracteres. |
curl -X POST "https://nways.ng/maps/v1/fleet/drivers" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API" \
-H "Content-Type: application/json" \
-d '{"id":"string","name":"string","phone":"string","firstName":"string","lastName":"string"}'const res = await fetch('https://nways.ng/maps/v1/fleet/drivers', {
method: 'POST',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
"id": "string",
"name": "string",
"phone": "string",
"firstName": "string",
"lastName": "string"
}),
})
const data = await res.json()import os
import requests
res = requests.post(
"https://nways.ng/maps/v1/fleet/drivers",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
json={"id": "string", "name": "string", "phone": "string", "firstName": "string", "lastName": "string"},
timeout=10,
)
data = res.json()Resposta
Criado
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Obrigatório. |
name | string | Obrigatório. firstName e lastName juntos. |
firstName | string | Obrigatório. |
lastName | string | Obrigatório. Vazio para um motorista criado só com um nome de uma palavra. |
phone | string | Obrigatório. |
createdAt | string (date-time) | Obrigatório. |
updatedAt | string (date-time) | Obrigatório. |
app | object | Obrigatório. O estafeta na N-Ways Business. |
app.status | string | Obrigatório. Um de: none, invited, joined. |
app.joinedAt | string (date-time) | null | Obrigatório. |
app.email | string | A conta N-Ways do estafeta (só depois de aderir). |
app.name | string | |
app.onDuty | boolean | Obrigatório. A partilhar a sua posição agora. |
app.consentedAt | string (date-time) | null | Obrigatório. Quando aceitou partilhar a sua posição (null: não agora). |
app.inviteExpiresAt | string (date-time) | Convidado: até quando o código funciona. |
{
"id": "string",
"name": "string",
"firstName": "string",
"lastName": "string",
"phone": "string",
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00",
"app": {
"status": "none",
"joinedAt": "2026-10-15T09:00:00+01:00",
"email": "string",
"name": "string",
"onDuty": true,
"consentedAt": "2026-10-15T09:00:00+01:00",
"inviteExpiresAt": "2026-10-15T09:00:00+01:00"
}
}Erros
409ErrodefaultErro
Obter um motorista
GET https://nways.ng/maps/v1/fleet/drivers/{id}
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
id | caminho | string | Obrigatório. |
curl "https://nways.ng/maps/v1/fleet/drivers/string" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/drivers/string', {
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/drivers/string",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Motorista
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Obrigatório. |
name | string | Obrigatório. firstName e lastName juntos. |
firstName | string | Obrigatório. |
lastName | string | Obrigatório. Vazio para um motorista criado só com um nome de uma palavra. |
phone | string | Obrigatório. |
createdAt | string (date-time) | Obrigatório. |
updatedAt | string (date-time) | Obrigatório. |
app | object | Obrigatório. O estafeta na N-Ways Business. |
app.status | string | Obrigatório. Um de: none, invited, joined. |
app.joinedAt | string (date-time) | null | Obrigatório. |
app.email | string | A conta N-Ways do estafeta (só depois de aderir). |
app.name | string | |
app.onDuty | boolean | Obrigatório. A partilhar a sua posição agora. |
app.consentedAt | string (date-time) | null | Obrigatório. Quando aceitou partilhar a sua posição (null: não agora). |
app.inviteExpiresAt | string (date-time) | Convidado: até quando o código funciona. |
{
"id": "string",
"name": "string",
"firstName": "string",
"lastName": "string",
"phone": "string",
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00",
"app": {
"status": "none",
"joinedAt": "2026-10-15T09:00:00+01:00",
"email": "string",
"name": "string",
"onDuty": true,
"consentedAt": "2026-10-15T09:00:00+01:00",
"inviteExpiresAt": "2026-10-15T09:00:00+01:00"
}
}Erros
defaultErro
Alterar um motorista
PATCH https://nways.ng/maps/v1/fleet/drivers/{id}
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
id | caminho | string | Obrigatório. |
Corpo do pedido
| Campo | Tipo | Descrição |
|---|---|---|
name | string | O nome único antigo; ignorado quando firstName e lastName são enviados. Até 100 caracteres. |
phone | string | Até 32 caracteres. |
firstName | string | Letras (qualquer alfabeto, com acentos), espaços, hífenes e apóstrofos. Envie com lastName; name passa então a ser 'firstName lastName'. Até 50 caracteres. |
lastName | string | Obrigatório com firstName; as mesmas regras. Até 50 caracteres. |
curl -X PATCH "https://nways.ng/maps/v1/fleet/drivers/string" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API" \
-H "Content-Type: application/json" \
-d '{"name":"string","phone":"string","firstName":"string","lastName":"string"}'const res = await fetch('https://nways.ng/maps/v1/fleet/drivers/string', {
method: 'PATCH',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
"name": "string",
"phone": "string",
"firstName": "string",
"lastName": "string"
}),
})
const data = await res.json()import os
import requests
res = requests.patch(
"https://nways.ng/maps/v1/fleet/drivers/string",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
json={"name": "string", "phone": "string", "firstName": "string", "lastName": "string"},
timeout=10,
)
data = res.json()Resposta
Motorista
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Obrigatório. |
name | string | Obrigatório. firstName e lastName juntos. |
firstName | string | Obrigatório. |
lastName | string | Obrigatório. Vazio para um motorista criado só com um nome de uma palavra. |
phone | string | Obrigatório. |
createdAt | string (date-time) | Obrigatório. |
updatedAt | string (date-time) | Obrigatório. |
app | object | Obrigatório. O estafeta na N-Ways Business. |
app.status | string | Obrigatório. Um de: none, invited, joined. |
app.joinedAt | string (date-time) | null | Obrigatório. |
app.email | string | A conta N-Ways do estafeta (só depois de aderir). |
app.name | string | |
app.onDuty | boolean | Obrigatório. A partilhar a sua posição agora. |
app.consentedAt | string (date-time) | null | Obrigatório. Quando aceitou partilhar a sua posição (null: não agora). |
app.inviteExpiresAt | string (date-time) | Convidado: até quando o código funciona. |
{
"id": "string",
"name": "string",
"firstName": "string",
"lastName": "string",
"phone": "string",
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00",
"app": {
"status": "none",
"joinedAt": "2026-10-15T09:00:00+01:00",
"email": "string",
"name": "string",
"onDuty": true,
"consentedAt": "2026-10-15T09:00:00+01:00",
"inviteExpiresAt": "2026-10-15T09:00:00+01:00"
}
}Erros
defaultErro
Eliminar um motorista (os veículos continuam a circular sem ele)
DELETE https://nways.ng/maps/v1/fleet/drivers/{id}
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
id | caminho | string | Obrigatório. |
curl -X DELETE "https://nways.ng/maps/v1/fleet/drivers/string" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/drivers/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/drivers/string",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Eliminado
Sem conteúdo.
Erros
defaultErro
Listar veículos com as suas últimas posições conhecidas
GET https://nways.ng/maps/v1/fleet/vehicles
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
status | consulta | string | Apenas os veículos com sinal recebido dentro de offlineAfterS (online) ou não. Um de: online, offline. |
curl "https://nways.ng/maps/v1/fleet/vehicles" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/vehicles', {
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/vehicles",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Veículos, por id
| Campo | Tipo | Descrição |
|---|---|---|
vehicles | Vehicle[] | Obrigatório. |
vehicles[].id | string | Obrigatório. |
vehicles[].name | string | Obrigatório. |
vehicles[].mode | string | Obrigatório. Como são calculados os percursos das ETA. motorcycle = uma mota de entregas (estradas e tempos de motociclo; as proibições de okada comercial, que se aplicam às okadas de passageiros, não se aplicam); okada = uma frota de okadas de passageiros (mantida fora das zonas de proibição de okada); motorbike = uma mota particular; keke = um triciclo (estradas de duas rodas, sem proibições de okada); car, van, truck = percursos de automóvel; bicycle; walk = um estafeta a pé; boat = na água (ETA em linha reta à sua velocidade); asset = qualquer outra coisa que siga (um reboque, um gerador): nunca tem percurso. Um de: motorcycle, okada, motorbike, keke, car, van, truck, bicycle, walk, boat, asset. Predefinição: motorcycle. |
vehicles[].plate | string | Obrigatório. |
vehicles[].driverId | string | null | Obrigatório. |
vehicles[].group | string | |
vehicles[].batteryPct | number | A bateria do rastreador ou do telemóvel no último relato, quando a envia. |
vehicles[].colour | string | A cor do veículo nos mapas da consola e da N-Ways Business. Um veículo novo fica com a cor que o seu projeto menos usa. Um de: blue, orange, teal, purple, pink, green, brown, navy, magenta, olive, cyan, maroon, sky, lime, plum, sand. |
vehicles[].lastLocation | Position | null | Obrigatório. |
vehicles[].online | boolean | Obrigatório. Com sinal recebido dentro de offlineAfterS. |
vehicles[].createdAt | string (date-time) | Obrigatório. |
vehicles[].updatedAt | string (date-time) | Obrigatório. |
{
"vehicles": [
{
"id": "string",
"name": "string",
"mode": "motorcycle",
"plate": "string",
"driverId": "string",
"group": "string",
"batteryPct": 0,
"colour": "blue",
"lastLocation": {
"lat": 0,
"lng": 0,
"heading": 0,
"speedMps": 0,
"accuracyM": 0,
"at": "2026-10-15T09:00:00+01:00"
},
"online": true,
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00"
}
]
}Erros
defaultErro
Adicionar um veículo
POST https://nways.ng/maps/v1/fleet/vehicles
Corpo do pedido
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Obrigatório. |
name | string | Até 100 caracteres. |
mode | string | Como são calculados os percursos das ETA. motorcycle = uma mota de entregas (estradas e tempos de motociclo; as proibições de okada comercial, que se aplicam às okadas de passageiros, não se aplicam); okada = uma frota de okadas de passageiros (mantida fora das zonas de proibição de okada); motorbike = uma mota particular; keke = um triciclo (estradas de duas rodas, sem proibições de okada); car, van, truck = percursos de automóvel; bicycle; walk = um estafeta a pé; boat = na água (ETA em linha reta à sua velocidade); asset = qualquer outra coisa que siga (um reboque, um gerador): nunca tem percurso. Um de: motorcycle, okada, motorbike, keke, car, van, truck, bicycle, walk, boat, asset. Predefinição: motorcycle. |
plate | string | Até 20 caracteres. |
driverId | string | O id de um motorista, ou vazio para nenhum. |
group | string | O seu próprio agrupamento ("Motas de Lekki"), para as regras de alerta. Até 60 caracteres. |
colour | string | A cor do veículo nos mapas da consola e da N-Ways Business. Um veículo novo fica com a cor que o seu projeto menos usa. Um de: blue, orange, teal, purple, pink, green, brown, navy, magenta, olive, cyan, maroon, sky, lime, plum, sand. |
curl -X POST "https://nways.ng/maps/v1/fleet/vehicles" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API" \
-H "Content-Type: application/json" \
-d '{"id":"bike-17","name":"Bike 17","mode":"motorcycle","plate":"LAG 123 XY","driverId":"d-4","group":"Yaba"}'const res = await fetch('https://nways.ng/maps/v1/fleet/vehicles', {
method: 'POST',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
"id": "bike-17",
"name": "Bike 17",
"mode": "motorcycle",
"plate": "LAG 123 XY",
"driverId": "d-4",
"group": "Yaba"
}),
})
const data = await res.json()import os
import requests
res = requests.post(
"https://nways.ng/maps/v1/fleet/vehicles",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
json={"id": "bike-17", "name": "Bike 17", "mode": "motorcycle", "plate": "LAG 123 XY", "driverId": "d-4", "group": "Yaba"},
timeout=10,
)
data = res.json()Resposta
Criado
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Obrigatório. |
name | string | Obrigatório. |
mode | string | Obrigatório. Como são calculados os percursos das ETA. motorcycle = uma mota de entregas (estradas e tempos de motociclo; as proibições de okada comercial, que se aplicam às okadas de passageiros, não se aplicam); okada = uma frota de okadas de passageiros (mantida fora das zonas de proibição de okada); motorbike = uma mota particular; keke = um triciclo (estradas de duas rodas, sem proibições de okada); car, van, truck = percursos de automóvel; bicycle; walk = um estafeta a pé; boat = na água (ETA em linha reta à sua velocidade); asset = qualquer outra coisa que siga (um reboque, um gerador): nunca tem percurso. Um de: motorcycle, okada, motorbike, keke, car, van, truck, bicycle, walk, boat, asset. Predefinição: motorcycle. |
plate | string | Obrigatório. |
driverId | string | null | Obrigatório. |
group | string | |
batteryPct | number | A bateria do rastreador ou do telemóvel no último relato, quando a envia. |
colour | string | A cor do veículo nos mapas da consola e da N-Ways Business. Um veículo novo fica com a cor que o seu projeto menos usa. Um de: blue, orange, teal, purple, pink, green, brown, navy, magenta, olive, cyan, maroon, sky, lime, plum, sand. |
lastLocation | Position | null | Obrigatório. |
online | boolean | Obrigatório. Com sinal recebido dentro de offlineAfterS. |
createdAt | string (date-time) | Obrigatório. |
updatedAt | string (date-time) | Obrigatório. |
{
"id": "string",
"name": "string",
"mode": "motorcycle",
"plate": "string",
"driverId": "string",
"group": "string",
"batteryPct": 0,
"colour": "blue",
"lastLocation": {
"lat": 0,
"lng": 0,
"heading": 0,
"speedMps": 0,
"accuracyM": 0,
"at": "2026-10-15T09:00:00+01:00"
},
"online": true,
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00"
}Erros
defaultErro
Obter um veículo e a sua última posição conhecida
GET https://nways.ng/maps/v1/fleet/vehicles/{id}
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
id | caminho | string | Obrigatório. |
curl "https://nways.ng/maps/v1/fleet/vehicles/string" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/vehicles/string', {
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/vehicles/string",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Veículo
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Obrigatório. |
name | string | Obrigatório. |
mode | string | Obrigatório. Como são calculados os percursos das ETA. motorcycle = uma mota de entregas (estradas e tempos de motociclo; as proibições de okada comercial, que se aplicam às okadas de passageiros, não se aplicam); okada = uma frota de okadas de passageiros (mantida fora das zonas de proibição de okada); motorbike = uma mota particular; keke = um triciclo (estradas de duas rodas, sem proibições de okada); car, van, truck = percursos de automóvel; bicycle; walk = um estafeta a pé; boat = na água (ETA em linha reta à sua velocidade); asset = qualquer outra coisa que siga (um reboque, um gerador): nunca tem percurso. Um de: motorcycle, okada, motorbike, keke, car, van, truck, bicycle, walk, boat, asset. Predefinição: motorcycle. |
plate | string | Obrigatório. |
driverId | string | null | Obrigatório. |
group | string | |
batteryPct | number | A bateria do rastreador ou do telemóvel no último relato, quando a envia. |
colour | string | A cor do veículo nos mapas da consola e da N-Ways Business. Um veículo novo fica com a cor que o seu projeto menos usa. Um de: blue, orange, teal, purple, pink, green, brown, navy, magenta, olive, cyan, maroon, sky, lime, plum, sand. |
lastLocation | Position | null | Obrigatório. |
online | boolean | Obrigatório. Com sinal recebido dentro de offlineAfterS. |
createdAt | string (date-time) | Obrigatório. |
updatedAt | string (date-time) | Obrigatório. |
{
"id": "string",
"name": "string",
"mode": "motorcycle",
"plate": "string",
"driverId": "string",
"group": "string",
"batteryPct": 0,
"colour": "blue",
"lastLocation": {
"lat": 0,
"lng": 0,
"heading": 0,
"speedMps": 0,
"accuracyM": 0,
"at": "2026-10-15T09:00:00+01:00"
},
"online": true,
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00"
}Erros
defaultErro
Alterar um veículo (driverId "" retira o motorista)
PATCH https://nways.ng/maps/v1/fleet/vehicles/{id}
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
id | caminho | string | Obrigatório. |
Corpo do pedido
| Campo | Tipo | Descrição |
|---|---|---|
name | string | Até 100 caracteres. |
mode | string | Como são calculados os percursos das ETA. motorcycle = uma mota de entregas (estradas e tempos de motociclo; as proibições de okada comercial, que se aplicam às okadas de passageiros, não se aplicam); okada = uma frota de okadas de passageiros (mantida fora das zonas de proibição de okada); motorbike = uma mota particular; keke = um triciclo (estradas de duas rodas, sem proibições de okada); car, van, truck = percursos de automóvel; bicycle; walk = um estafeta a pé; boat = na água (ETA em linha reta à sua velocidade); asset = qualquer outra coisa que siga (um reboque, um gerador): nunca tem percurso. Um de: motorcycle, okada, motorbike, keke, car, van, truck, bicycle, walk, boat, asset. Predefinição: motorcycle. |
plate | string | Até 20 caracteres. |
driverId | string | |
group | string | Até 60 caracteres. |
colour | string | A cor do veículo nos mapas da consola e da N-Ways Business. Um veículo novo fica com a cor que o seu projeto menos usa. Um de: blue, orange, teal, purple, pink, green, brown, navy, magenta, olive, cyan, maroon, sky, lime, plum, sand. |
curl -X PATCH "https://nways.ng/maps/v1/fleet/vehicles/string" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API" \
-H "Content-Type: application/json" \
-d '{"name":"string","mode":"motorcycle","plate":"string","driverId":"string","group":"string","colour":"blue"}'const res = await fetch('https://nways.ng/maps/v1/fleet/vehicles/string', {
method: 'PATCH',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
"name": "string",
"mode": "motorcycle",
"plate": "string",
"driverId": "string",
"group": "string",
"colour": "blue"
}),
})
const data = await res.json()import os
import requests
res = requests.patch(
"https://nways.ng/maps/v1/fleet/vehicles/string",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
json={"name": "string", "mode": "motorcycle", "plate": "string", "driverId": "string", "group": "string", "colour": "blue"},
timeout=10,
)
data = res.json()Resposta
Veículo
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Obrigatório. |
name | string | Obrigatório. |
mode | string | Obrigatório. Como são calculados os percursos das ETA. motorcycle = uma mota de entregas (estradas e tempos de motociclo; as proibições de okada comercial, que se aplicam às okadas de passageiros, não se aplicam); okada = uma frota de okadas de passageiros (mantida fora das zonas de proibição de okada); motorbike = uma mota particular; keke = um triciclo (estradas de duas rodas, sem proibições de okada); car, van, truck = percursos de automóvel; bicycle; walk = um estafeta a pé; boat = na água (ETA em linha reta à sua velocidade); asset = qualquer outra coisa que siga (um reboque, um gerador): nunca tem percurso. Um de: motorcycle, okada, motorbike, keke, car, van, truck, bicycle, walk, boat, asset. Predefinição: motorcycle. |
plate | string | Obrigatório. |
driverId | string | null | Obrigatório. |
group | string | |
batteryPct | number | A bateria do rastreador ou do telemóvel no último relato, quando a envia. |
colour | string | A cor do veículo nos mapas da consola e da N-Ways Business. Um veículo novo fica com a cor que o seu projeto menos usa. Um de: blue, orange, teal, purple, pink, green, brown, navy, magenta, olive, cyan, maroon, sky, lime, plum, sand. |
lastLocation | Position | null | Obrigatório. |
online | boolean | Obrigatório. Com sinal recebido dentro de offlineAfterS. |
createdAt | string (date-time) | Obrigatório. |
updatedAt | string (date-time) | Obrigatório. |
{
"id": "string",
"name": "string",
"mode": "motorcycle",
"plate": "string",
"driverId": "string",
"group": "string",
"batteryPct": 0,
"colour": "blue",
"lastLocation": {
"lat": 0,
"lng": 0,
"heading": 0,
"speedMps": 0,
"accuracyM": 0,
"at": "2026-10-15T09:00:00+01:00"
},
"online": true,
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00"
}Erros
defaultErro
Eliminar um veículo e o seu histórico de viagens
DELETE https://nways.ng/maps/v1/fleet/vehicles/{id}
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
id | caminho | string | Obrigatório. |
curl -X DELETE "https://nways.ng/maps/v1/fleet/vehicles/string" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/vehicles/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/vehicles/string",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Eliminado
Sem conteúdo.
Erros
defaultErro
Histórico de viagens de um veículo (do mais antigo para o mais recente)
GET https://nways.ng/maps/v1/fleet/vehicles/{id}/history
Por omissão, as últimas 24 horas; no máximo 7 dias por chamada e 10 000 posições. O histórico mais antigo do que retentionDays é apagado.
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
id | caminho | string | Obrigatório. |
from | consulta | string (date-time) | |
to | consulta | string (date-time) | |
taskId | consulta | string | Apenas as posições enviadas enquanto esta tarefa estava em curso. |
limit | consulta | integer | ≥ 1, ≤ 10000. |
curl "https://nways.ng/maps/v1/fleet/vehicles/string/history" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/vehicles/string/history', {
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/vehicles/string/history",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Posições
| Campo | Tipo | Descrição |
|---|---|---|
vehicleId | string | Obrigatório. |
from | string (date-time) | Obrigatório. |
to | string (date-time) | Obrigatório. |
positions | Position[] | Obrigatório. |
positions[].lat | number | Obrigatório. |
positions[].lng | number | Obrigatório. |
positions[].heading | number | ≥ 0, ≤ 360. |
positions[].speedMps | number | |
positions[].accuracyM | number | |
positions[].at | string (date-time) | Obrigatório. |
{
"vehicleId": "string",
"from": "2026-10-15T09:00:00+01:00",
"to": "2026-10-15T09:00:00+01:00",
"positions": [
{
"lat": 0,
"lng": 0,
"heading": 0,
"speedMps": 0,
"accuracyM": 0,
"at": "2026-10-15T09:00:00+01:00"
}
]
}Erros
defaultErro
A cronologia de um veículo a partir do seu rastreador (ignição ligada e desligada, corte de alimentação e reposição), da mais recente para a mais antiga
GET https://nways.ng/maps/v1/fleet/vehicles/{id}/events
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
id | caminho | string | Obrigatório. |
from | consulta | string (date-time) | Por omissão: há 24 horas. |
to | consulta | string (date-time) | No máximo 7 dias depois de from. |
limit | consulta | integer | Predefinição: 500. ≤ 500. |
curl "https://nways.ng/maps/v1/fleet/vehicles/string/events" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/vehicles/string/events', {
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/vehicles/string/events",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Entradas
| Campo | Tipo | Descrição |
|---|---|---|
vehicleId | string | |
events | object[] | |
events[].at | string (date-time) | |
events[].kind | string | Um de: ignition_on, ignition_off, power_cut, power_back. |
events[].lat | number | |
events[].lng | number |
{
"vehicleId": "string",
"events": [
{
"at": "2026-10-15T09:00:00+01:00",
"kind": "ignition_on",
"lat": 0,
"lng": 0
}
]
}Erros
defaultErro
Enviar posições (em lote)
POST https://nways.ng/maps/v1/fleet/locations
As aplicações de estafetas enviam as suas posições em lotes, para um ou vários veículos (1–1000 por chamada). As posições com até 24 horas são guardadas como histórico (uma aplicação que volta a ficar online envia o que guardou); a mais recente atualiza a última posição conhecida do veículo. Uma posição recente (10 minutos ou menos) recalcula os tempos da tarefa em aberto do veículo com o nosso motor de percursos e o trânsito em direto (no máximo a cada 10 s por tarefa), e marca-a como arriving quando o local de entrega está dentro do seu arrivingS ou a 250 m. As posições que não podem ser usadas são listadas em rejected pelo índice; as restantes são aceites. Envie a cada 5–15 s durante uma tarefa.
Corpo do pedido
| Campo | Tipo | Descrição |
|---|---|---|
updates | LocationUpdate[] | Obrigatório. Pelo menos 1 elementos, no máximo 1000 elementos. |
updates[].vehicleId | string | Obrigatório. |
updates[].lat | number | Obrigatório. ≥ -90, ≤ 90. |
updates[].lng | number | Obrigatório. ≥ -180, ≤ 180. |
updates[].t | string (date-time) | Quando a posição foi obtida (por omissão, agora); até 24 h no passado, 2 min no futuro. |
updates[].speedMps | number | ≥ 0, ≤ 100. |
updates[].heading | number | ≥ 0, ≤ 360. |
updates[].accuracyM | number | ≥ 0, ≤ 10000. |
updates[].batteryPct | number | Nível de bateria, mostrado na consola. ≥ 0, ≤ 100. |
updates[].ignition | boolean | A ignição de um rastreador (ACC). |
updates[].extVoltageV | number | A alimentação externa de um rastreador, em volts (0: cortada). ≥ 0, ≤ 100. |
updates[].odometerM | number | O conta-quilómetros de um rastreador, em metros. ≥ 0. |
updates[].sats | integer | Satélites visíveis. ≥ 0, ≤ 99. |
updates[].source | string | De onde vem a posição (por omissão, app). As posições de um rastreador nunca alimentam o trânsito em direto. Um de: app, tracker. |
curl -X POST "https://nways.ng/maps/v1/fleet/locations" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API" \
-H "Content-Type: application/json" \
-d '{"updates":[{"vehicleId":"bike-17","lat":6.512,"lng":3.375,"t":"2026-10-15T09:12:03Z","speedMps":6.2,"heading":210,"accuracyM":8}]}'const res = await fetch('https://nways.ng/maps/v1/fleet/locations', {
method: 'POST',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
"updates": [
{
"vehicleId": "bike-17",
"lat": 6.512,
"lng": 3.375,
"t": "2026-10-15T09:12:03Z",
"speedMps": 6.2,
"heading": 210,
"accuracyM": 8
}
]
}),
})
const data = await res.json()import os
import requests
res = requests.post(
"https://nways.ng/maps/v1/fleet/locations",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
json={"updates": [{"vehicleId": "bike-17", "lat": 6.512, "lng": 3.375, "t": "2026-10-15T09:12:03Z", "speedMps": 6.2, "heading": 210, "accuracyM": 8}]},
timeout=10,
)
data = res.json()Resposta
Aceite
| Campo | Tipo | Descrição |
|---|---|---|
accepted | integer | Obrigatório. |
rejected | object[] | Obrigatório. |
rejected[].index | integer | Obrigatório. |
rejected[].reason | string | Obrigatório. Um de: VEHICLE_NOT_FOUND, INVALID_POSITION, INVALID_TIME, TIME_OUT_OF_RANGE, INVALID_VALUE. |
tasks | object[] | Obrigatório. As tarefas em aberto dos veículos do lote, com os tempos recalculados. |
tasks[].id | string | Obrigatório. |
tasks[].status | string | Obrigatório. Um de: created, assigned, picked_up, arriving, completed, failed, cancelled. |
tasks[].eta | ETA | null | Obrigatório. |
{
"accepted": 0,
"rejected": [
{
"index": 0,
"reason": "VEHICLE_NOT_FOUND"
}
],
"tasks": [
{
"id": "string",
"status": "created",
"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"
}
}
]
}Erros
defaultErro