Rastreadores GPS
The trackers fitted to your cars, bikes and trucks (Concox, Jimi, Micodus, Teltonika, Sinotrack, Coban, Queclink, Meitrack,
Ruptela, Suntech, Galileosky, iStartek, JT/T 808 and more, and phones running Traccar Client or OsmAnd). Add one by its IMEI
(14 digits are fine: the check digit is worked out), and put it on a vehicle now or later (POST /trackers/assign; a vehicle
can have several, its position from the best current fix, the primary first); send it the setup SMS steps (setup), and its
positions appear as that vehicle's, with ignition, power and battery. First claim wins: a tracker another organisation
holds is refused (TRACKER_CLAIMED_ELSEWHERE: move it with /tracker-transfers). Devices report to trk.nways.ng on their
protocol's port (GT06 5023, Teltonika 5027, H02 5013, the catalogue lists each; 5000 works any of them out); ones that report
under a shorter id (TK103, watches, JT/T 808 by terminal or SIM number) are matched to their IMEI;
phones to https://nways.ng/v1/trackers/osmand?id=<tracker id>&lat=&lon=×tamp=&speed= (OsmAnd's protocol).
Alarms (SOS, power cut, overspeed, low battery) are alerts of kind tracker_alarm and the webhook asset.tracker_alarm.
Try it without hardware: POST /trackers/{trackerId}/virtual drives a virtual tracker speaking the device's own protocol,
or run go run ./cmd/trackersim (the backend repository) against your own gateway.
Nesta página
- Listar os seus rastreadores, com contagens por estado
- Adicionar um rastreador pelo seu IMEI (o primeiro a reclamar fica com ele)
- O catálogo de dispositivos, as redes SIM do seu país e os respetivos APN, e para onde os dispositivos comunicam
- Adicionar muitos rastreadores a partir de um CSV (verifique-o primeiro com dryRun)
- A folha dos instaladores, os SMS de configuração de cada rastreador por ordem (CSV)
- O reencaminhamento a partir da sua plataforma de seguimento, os seus endereços e as unidades que envia
- Ativar o reencaminhamento, ou dar-lhe um novo token (o antigo deixa de funcionar de imediato)
- Desativar o reencaminhamento (as unidades continuam listadas)
- Adicionar uma unidade reencaminhada como um dos seus rastreadores (um veículo novo com o nome dela, a menos que indique um)
- Esquecer uma unidade reencaminhada (volta se a sua plataforma a enviar de novo)
- Os seus pedidos para transferir rastreadores para aqui, e os rastreadores que foram transferidos para outro lado
- Pedir um rastreador que outra organização detém (proprietários e administradores)
- Está agora a fazer o dispositivo iniciar sessão de novo (o seu SMS de reinício); um novo login nos 3 minutos seguintes transfere-o
- Retirar um pedido
- Obter um rastreador, os seus passos de configuração e o que está mal
- Editar um rastreador (o seu veículo, modelo, SIM)
- Remover um rastreador (pode depois ser adicionado por qualquer pessoa)
- O registo do dispositivo (ligações, tramas em bruto, campos descodificados, respostas enviadas, erros), do mais antigo para o mais recente
- O registo e o estado do dispositivo à medida que mudam (server-sent events)
- Conduzir um rastreador virtual em vez deste (com o seu próprio protocolo, através do gateway da N-Ways)
- Parar o seu rastreador virtual
- Comandos enviados a um rastreador (os últimos 30), e quais aceita
- Enviar um comando (proprietários e administradores); a resposta chega no registo do dispositivo
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 os seus rastreadores, com contagens por estado
GET https://nways.ng/maps/v1/fleet/trackers
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
state | consulta | string | Um de: awaiting_first_fix, live, silent. |
model | consulta | string | Um id de modelo do catálogo. |
q | consulta | string | Encontra um nome, IMEI, veículo ou número de SIM. |
curl "https://nways.ng/maps/v1/fleet/trackers" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/trackers', {
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/trackers",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Rastreadores
| Campo | Tipo | Descrição |
|---|---|---|
trackers | Tracker[] | Obrigatório. |
trackers[].id | string | |
trackers[].imei | string | |
trackers[].name | string | |
trackers[].vehicleId | string | null | |
trackers[].vehicleName | string | |
trackers[].protocol | string | Um protocolo que o gateway da N-Ways lê (gt06, teltonika, h02, gps103, tk103, gl200, meitrack, ruptela, jt808, suntech, galileo, startek, topin, xexun, gosafe, tzone, wialon, watch, osmand), forward para uma unidade reencaminhada a partir da sua plataforma de seguimento, ou "" até que o seu modelo ou a primeira ligação o indique. |
trackers[].model | string | |
trackers[].simNumber | string | |
trackers[].network | string | |
trackers[].apn | string | |
trackers[].state | string | Um de: awaiting_first_fix, live, silent. |
trackers[].connected | boolean | |
trackers[].heard | boolean | O gateway da N-Ways já recebeu sinal deste dispositivo (mesmo antes de ter sido adicionado). |
trackers[].lastSeenAt | string (date-time) | null | |
trackers[].lastFixAt | string (date-time) | null | A sua última posição GPS. |
trackers[].onMapAt | string (date-time) | null | A sua última posição que moveu o seu veículo no mapa. |
trackers[].position | object | null | |
trackers[].batteryPct | number | null | |
trackers[].batteryV | number | null | |
trackers[].extVoltageV | number | null | |
trackers[].ignition | boolean | null | |
trackers[].sats | integer | null | |
trackers[].odometerM | number | null | |
trackers[].claimedAt | string (date-time) | |
trackers[].setup | object | Os do rastreador único: os passos SMS por ordem (key, sms, reply, optional), ou as definições de uma aplicação de telemóvel (value). |
trackers[].setup.protocol | string | |
trackers[].setup.host | string | |
trackers[].setup.port | integer | |
trackers[].setup.url | string | |
trackers[].setup.smsTo | string | |
trackers[].setup.assumed | boolean | |
trackers[].setup.steps | object[] | |
trackers[].setup.steps[].n | integer | |
trackers[].setup.steps[].key | string | |
trackers[].setup.steps[].sms | string | |
trackers[].setup.steps[].value | string | |
trackers[].setup.steps[].reply | string | |
trackers[].setup.steps[].optional | boolean | |
trackers[].diagnosis | string[] | O que o gateway viu e precisa de ser corrigido, do mais útil para o menos útil. |
trackers[].virtual | VirtualTracker | |
trackers[].virtual.running | boolean | |
trackers[].virtual.protocol | string | |
trackers[].virtual.startedAt | string (date-time) | |
trackers[].virtual.until | string (date-time) | |
trackers[].virtual.sent | integer | |
trackers[].virtual.answered | integer | |
trackers[].virtual.problems | string[] | |
trackers[].virtual.error | string | |
counts | object | Obrigatório. |
models | object |
{
"trackers": [
{
"id": "trk_4fQ9xLm2Za",
"imei": "356307042441013",
"name": "string",
"vehicleId": "string",
"vehicleName": "string",
"protocol": "gt06",
"model": "string",
"simNumber": "string",
"network": "string",
"apn": "string",
"state": "awaiting_first_fix",
"connected": true,
"heard": true,
"lastSeenAt": "2026-10-15T09:00:00+01:00",
"lastFixAt": "2026-10-15T09:00:00+01:00",
"onMapAt": "2026-10-15T09:00:00+01:00",
"position": {
"lat": 0,
"lng": 0,
"at": "2026-10-15T09:00:00+01:00"
},
"batteryPct": 0,
"batteryV": 0,
"extVoltageV": 0,
"ignition": true,
"sats": 0,
"odometerM": 0,
"claimedAt": "2026-10-15T09:00:00+01:00",
"setup": {
"protocol": "string",
"host": "string",
"port": 0,
"url": "string",
"smsTo": "string",
"assumed": true,
"steps": [
{}
]
},
"diagnosis": [
"no_vehicle"
],
"virtual": {
"running": true,
"protocol": "string",
"startedAt": "2026-10-15T09:00:00+01:00",
"until": "2026-10-15T09:00:00+01:00",
"sent": 0,
"answered": 0,
"problems": [
"string"
],
"error": "string"
}
}
],
"counts": {},
"models": {}
}Erros
defaultErro
Adicionar um rastreador pelo seu IMEI (o primeiro a reclamar fica com ele)
POST https://nways.ng/maps/v1/fleet/trackers
Erros: INVALID_IMEI (não tem 15 algarismos, ou o dígito de controlo Luhn está errado), INVALID_DEVICE_ID (o id de um telemóvel), TRACKER_EXISTS (já é seu), TRACKER_CLAIMED_ELSEWHERE (outra organização detém-no), VEHICLE_NOT_FOUND.
Corpo do pedido
| Campo | Tipo | Descrição |
|---|---|---|
imei | string | 15 algarismos (espaços e hífenes são ignorados); o id do dispositivo de um telemóvel para o modelo osmand-phone, o id de unidade de uma plataforma para o modelo forwarded. |
name | string | |
vehicleId | string | Um dos seus veículos ("" para desligar). |
vehicle | object | Em vez disso, um veículo novo para ele. |
vehicle.name | string | |
vehicle.mode | string | |
vehicle.plate | string | |
model | string | Um id de modelo do catálogo, ou not-sure (deduzido a partir da sua primeira ligação). |
simNumber | string | |
network | string | Um id de rede do catálogo, ou other. |
apn | string | Por omissão: o da rede. |
curl -X POST "https://nways.ng/maps/v1/fleet/trackers" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API" \
-H "Content-Type: application/json" \
-d '{"imei":"356307042441013","vehicleId":"truck-12","model":"concox-gt06n","network":"mtn","simNumber":"+2348030000000"}'const res = await fetch('https://nways.ng/maps/v1/fleet/trackers', {
method: 'POST',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
"imei": "356307042441013",
"vehicleId": "truck-12",
"model": "concox-gt06n",
"network": "mtn",
"simNumber": "+2348030000000"
}),
})
const data = await res.json()import os
import requests
res = requests.post(
"https://nways.ng/maps/v1/fleet/trackers",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
json={"imei": "356307042441013", "vehicleId": "truck-12", "model": "concox-gt06n", "network": "mtn", "simNumber": "+2348030000000"},
timeout=10,
)
data = res.json()Resposta
Adicionado
| Campo | Tipo | Descrição |
|---|---|---|
id | string | |
imei | string | |
name | string | |
vehicleId | string | null | |
vehicleName | string | |
protocol | string | Um protocolo que o gateway da N-Ways lê (gt06, teltonika, h02, gps103, tk103, gl200, meitrack, ruptela, jt808, suntech, galileo, startek, topin, xexun, gosafe, tzone, wialon, watch, osmand), forward para uma unidade reencaminhada a partir da sua plataforma de seguimento, ou "" até que o seu modelo ou a primeira ligação o indique. |
model | string | |
simNumber | string | |
network | string | |
apn | string | |
state | string | Um de: awaiting_first_fix, live, silent. |
connected | boolean | |
heard | boolean | O gateway da N-Ways já recebeu sinal deste dispositivo (mesmo antes de ter sido adicionado). |
lastSeenAt | string (date-time) | null | |
lastFixAt | string (date-time) | null | A sua última posição GPS. |
onMapAt | string (date-time) | null | A sua última posição que moveu o seu veículo no mapa. |
position | object | null | |
batteryPct | number | null | |
batteryV | number | null | |
extVoltageV | number | null | |
ignition | boolean | null | |
sats | integer | null | |
odometerM | number | null | |
claimedAt | string (date-time) | |
setup | object | Os do rastreador único: os passos SMS por ordem (key, sms, reply, optional), ou as definições de uma aplicação de telemóvel (value). |
setup.protocol | string | |
setup.host | string | |
setup.port | integer | |
setup.url | string | |
setup.smsTo | string | |
setup.assumed | boolean | |
setup.steps | object[] | |
setup.steps[].n | integer | |
setup.steps[].key | string | |
setup.steps[].sms | string | |
setup.steps[].value | string | |
setup.steps[].reply | string | |
setup.steps[].optional | boolean | |
diagnosis | string[] | O que o gateway viu e precisa de ser corrigido, do mais útil para o menos útil. |
virtual | VirtualTracker | |
virtual.running | boolean | |
virtual.protocol | string | |
virtual.startedAt | string (date-time) | |
virtual.until | string (date-time) | |
virtual.sent | integer | |
virtual.answered | integer | |
virtual.problems | string[] | |
virtual.error | string |
{
"id": "trk_4fQ9xLm2Za",
"imei": "356307042441013",
"name": "string",
"vehicleId": "string",
"vehicleName": "string",
"protocol": "gt06",
"model": "string",
"simNumber": "string",
"network": "string",
"apn": "string",
"state": "awaiting_first_fix",
"connected": true,
"heard": true,
"lastSeenAt": "2026-10-15T09:00:00+01:00",
"lastFixAt": "2026-10-15T09:00:00+01:00",
"onMapAt": "2026-10-15T09:00:00+01:00",
"position": {
"lat": 0,
"lng": 0,
"at": "2026-10-15T09:00:00+01:00"
},
"batteryPct": 0,
"batteryV": 0,
"extVoltageV": 0,
"ignition": true,
"sats": 0,
"odometerM": 0,
"claimedAt": "2026-10-15T09:00:00+01:00",
"setup": {
"protocol": "string",
"host": "string",
"port": 0,
"url": "string",
"smsTo": "string",
"assumed": true,
"steps": [
{
"n": 0,
"key": "string",
"sms": "string",
"value": "string",
"reply": "string",
"optional": true
}
]
},
"diagnosis": [
"no_vehicle"
],
"virtual": {
"running": true,
"protocol": "string",
"startedAt": "2026-10-15T09:00:00+01:00",
"until": "2026-10-15T09:00:00+01:00",
"sent": 0,
"answered": 0,
"problems": [
"string"
],
"error": "string"
}
}Erros
defaultErro
O catálogo de dispositivos, as redes SIM do seu país e os respetivos APN, e para onde os dispositivos comunicam
GET https://nways.ng/maps/v1/fleet/trackers/catalog
models: todos os modelos (com status supported | coming, os seus métodos e família), depois forwarded e not-sure. brands, families, protocols, counts: como em GET https://nways.ng/v1/trackers/catalogue. networks: as do seu país; unverified: um APN de uma lista pública ainda não verificado num SIM real.
curl "https://nways.ng/maps/v1/fleet/trackers/catalog" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/trackers/catalog', {
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/trackers/catalog",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Catálogo
| Campo | Tipo | Descrição |
|---|---|---|
models | TrackerModel[] | |
models[].id | string | |
models[].brand | string | |
models[].brandId | string | |
models[].name | string | |
models[].protocol | string | |
models[].family | string | O seu conjunto de comandos (SMS de configuração, configurador, comandos). |
models[].kind | string | Um de: vehicle, asset, personal, obd, phone. |
models[].password | string | A palavra-passe SMS com que vem de fábrica. |
models[].popular | boolean | |
models[].status | string | Um de: supported, coming. |
models[].methods | string[] | |
brands | object[] | |
families | object | |
protocols | object[] | |
protocols[].id | string | |
protocols[].name | string | |
protocols[].status | string | Um de: supported, coming. |
protocols[].port | integer | |
networks | object[] | |
networks[].id | string | |
networks[].name | string | |
networks[].apn | string | |
networks[].user | string | |
networks[].pass | string | |
networks[].unverified | boolean | |
country | string | |
host | string | |
ports | object | |
osmandUrl | string | |
platforms | string[] | |
commandKinds | string[] |
{
"models": [
{
"id": "concox-gt06n",
"brand": "Concox",
"brandId": "string",
"name": "GT06N",
"protocol": "gt06",
"family": "string",
"kind": "vehicle",
"password": "string",
"popular": true,
"status": "supported",
"methods": [
"sms"
]
}
],
"brands": [
{}
],
"families": {},
"protocols": [
{
"id": "string",
"name": "string",
"status": "supported",
"port": 0
}
],
"networks": [
{
"id": "string",
"name": "string",
"apn": "string",
"user": "string",
"pass": "string",
"unverified": true
}
],
"country": "string",
"host": "trk.nways.ng",
"ports": {},
"osmandUrl": "string",
"platforms": [
"string"
],
"commandKinds": [
"string"
]
}Erros
defaultErro
Adicionar muitos rastreadores a partir de um CSV (verifique-o primeiro com dryRun)
POST https://nways.ng/maps/v1/fleet/trackers/import
Colunas por cabeçalho, em qualquer ordem, com vírgulas ou pontos e vírgulas: imei, vehicle (um dos seus por id, nome ou matrícula, ou um novo com esse nome), model (um id do catálogo ou "Marca Modelo"; vazio: não sabe), sim, network e, opcionalmente, apn, name, plate, type. No máximo 1000 linhas. Cada linha diz o que está mal (issues: imei_missing, imei_invalid, imei_check_digit, imei_duplicate, imei_yours, imei_elsewhere, model_unknown, network_unknown, vehicle_missing, mode_unknown); com dryRun false, as linhas corretas são adicionadas e as restantes ficam de fora.
Corpo do pedido
| Campo | Tipo | Descrição |
|---|---|---|
csv | string | Obrigatório. |
dryRun | boolean |
curl -X POST "https://nways.ng/maps/v1/fleet/trackers/import" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API" \
-H "Content-Type: application/json" \
-d '{"csv":"imei,vehicle,model,sim,network\n356307042441013,Hiace 2,Concox GT06N,08030000000,MTN\n","dryRun":true}'const res = await fetch('https://nways.ng/maps/v1/fleet/trackers/import', {
method: 'POST',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
"csv": "imei,vehicle,model,sim,network\n356307042441013,Hiace 2,Concox GT06N,08030000000,MTN\n",
"dryRun": true
}),
})
const data = await res.json()import os
import requests
res = requests.post(
"https://nways.ng/maps/v1/fleet/trackers/import",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
json={"csv": "imei,vehicle,model,sim,network\n356307042441013,Hiace 2,Concox GT06N, 08030000000,MTN\n", "dryRun": True},
timeout=10,
)
data = res.json()Resposta
Cada linha
| Campo | Tipo | Descrição |
|---|---|---|
rows | object[] | |
rows[].row | integer | |
rows[].imei | string | |
rows[].model | string | |
rows[].network | string | |
rows[].simNumber | string | |
rows[].vehicle | string | |
rows[].vehicleId | string | |
rows[].newVehicle | boolean | |
rows[].ok | boolean | |
rows[].trackerId | string | |
rows[].issues | object[] | |
rows[].issues[].field | string | |
rows[].issues[].code | string | |
rows[].issues[].message | string | |
total | integer | |
ok | integer | |
bad | integer | |
added | integer | |
dryRun | boolean |
{
"rows": [
{
"row": 0,
"imei": "string",
"model": "string",
"network": "string",
"simNumber": "string",
"vehicle": "string",
"vehicleId": "string",
"newVehicle": true,
"ok": true,
"trackerId": "string",
"issues": [
{
"field": "string",
"code": "string",
"message": "string"
}
]
}
],
"total": 0,
"ok": 0,
"bad": 0,
"added": 0,
"dryRun": true
}Erros
defaultErro
A folha dos instaladores, os SMS de configuração de cada rastreador por ordem (CSV)
GET https://nways.ng/maps/v1/fleet/trackers/setup.csv
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
ids | consulta | string | Ids de rastreadores, separados por vírgulas. Por omissão: os rastreadores que ainda não estão no mapa. |
lang | consulta | string | Um de: en, fr, pt. Predefinição: en. |
curl "https://nways.ng/maps/v1/fleet/trackers/setup.csv" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/trackers/setup.csv', {
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/trackers/setup.csv",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Uma linha por SMS: IMEI, rastreador, veículo, modelo, número do SIM, passo, o que fazer, SMS, resposta.
Erros
defaultErro
O reencaminhamento a partir da sua plataforma de seguimento, os seus endereços e as unidades que envia
GET https://nways.ng/maps/v1/fleet/trackers/forwarding
curl "https://nways.ng/maps/v1/fleet/trackers/forwarding" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/trackers/forwarding', {
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/trackers/forwarding",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Reencaminhamento
| Campo | Tipo | Descrição |
|---|---|---|
enabled | boolean | |
token | string | null | A chave nos seus endereços: mantenha-a secreta. |
urls | object | null | |
urls.traccar | string | |
urls.osmand | string | |
urls.flespi | string | |
urls.webhook | string | |
urls.bearer | string | |
wialon | object | |
wialon.host | string | |
wialon.port | integer | |
wialon.password | string | |
wialon.status | string | Um de: supported, coming. |
units | object[] | |
units[].unitId | string | |
units[].source | string | Um de: traccar, osmand, flespi, webhook, wialon. |
units[].name | string | |
units[].firstSeen | string (date-time) | |
units[].lastSeen | string (date-time) | |
units[].lastFixAt | string (date-time) | null | |
units[].position | object | null | |
units[].received | integer | |
units[].trackerId | string | Definido quando passa a ser um dos seus rastreadores. |
units[].trackerName | string | |
units[].elsewhere | boolean | Outra organização detém este IMEI. |
units[].lastPayload | object | O que a plataforma enviou por último (unidades ainda não adicionadas). |
lastAt | string (date-time) | null | |
lastBySource | object | |
unknown | integer | Unidades ainda não adicionadas. |
units24h | integer |
{
"enabled": true,
"token": "fwd_8KwP2nVd5T…",
"urls": {
"traccar": "string",
"osmand": "string",
"flespi": "string",
"webhook": "string",
"bearer": "string"
},
"wialon": {
"host": "string",
"port": 0,
"password": "string",
"status": "supported"
},
"units": [
{
"unitId": "string",
"source": "traccar",
"name": "string",
"firstSeen": "2026-10-15T09:00:00+01:00",
"lastSeen": "2026-10-15T09:00:00+01:00",
"lastFixAt": "2026-10-15T09:00:00+01:00",
"position": {},
"received": 0,
"trackerId": "string",
"trackerName": "string",
"elsewhere": true,
"lastPayload": {}
}
],
"lastAt": "2026-10-15T09:00:00+01:00",
"lastBySource": {},
"unknown": 0,
"units24h": 0
}Erros
defaultErro
Ativar o reencaminhamento, ou dar-lhe um novo token (o antigo deixa de funcionar de imediato)
POST https://nways.ng/maps/v1/fleet/trackers/forwarding
curl -X POST "https://nways.ng/maps/v1/fleet/trackers/forwarding" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/trackers/forwarding', {
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/trackers/forwarding",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Reencaminhamento
| Campo | Tipo | Descrição |
|---|---|---|
enabled | boolean | |
token | string | null | A chave nos seus endereços: mantenha-a secreta. |
urls | object | null | |
urls.traccar | string | |
urls.osmand | string | |
urls.flespi | string | |
urls.webhook | string | |
urls.bearer | string | |
wialon | object | |
wialon.host | string | |
wialon.port | integer | |
wialon.password | string | |
wialon.status | string | Um de: supported, coming. |
units | object[] | |
units[].unitId | string | |
units[].source | string | Um de: traccar, osmand, flespi, webhook, wialon. |
units[].name | string | |
units[].firstSeen | string (date-time) | |
units[].lastSeen | string (date-time) | |
units[].lastFixAt | string (date-time) | null | |
units[].position | object | null | |
units[].received | integer | |
units[].trackerId | string | Definido quando passa a ser um dos seus rastreadores. |
units[].trackerName | string | |
units[].elsewhere | boolean | Outra organização detém este IMEI. |
units[].lastPayload | object | O que a plataforma enviou por último (unidades ainda não adicionadas). |
lastAt | string (date-time) | null | |
lastBySource | object | |
unknown | integer | Unidades ainda não adicionadas. |
units24h | integer |
{
"enabled": true,
"token": "fwd_8KwP2nVd5T…",
"urls": {
"traccar": "string",
"osmand": "string",
"flespi": "string",
"webhook": "string",
"bearer": "string"
},
"wialon": {
"host": "string",
"port": 0,
"password": "string",
"status": "supported"
},
"units": [
{
"unitId": "string",
"source": "traccar",
"name": "string",
"firstSeen": "2026-10-15T09:00:00+01:00",
"lastSeen": "2026-10-15T09:00:00+01:00",
"lastFixAt": "2026-10-15T09:00:00+01:00",
"position": {},
"received": 0,
"trackerId": "string",
"trackerName": "string",
"elsewhere": true,
"lastPayload": {}
}
],
"lastAt": "2026-10-15T09:00:00+01:00",
"lastBySource": {},
"unknown": 0,
"units24h": 0
}Erros
defaultErro
Desativar o reencaminhamento (as unidades continuam listadas)
DELETE https://nways.ng/maps/v1/fleet/trackers/forwarding
curl -X DELETE "https://nways.ng/maps/v1/fleet/trackers/forwarding" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/trackers/forwarding', {
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/trackers/forwarding",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Reencaminhamento
| Campo | Tipo | Descrição |
|---|---|---|
enabled | boolean | |
token | string | null | A chave nos seus endereços: mantenha-a secreta. |
urls | object | null | |
urls.traccar | string | |
urls.osmand | string | |
urls.flespi | string | |
urls.webhook | string | |
urls.bearer | string | |
wialon | object | |
wialon.host | string | |
wialon.port | integer | |
wialon.password | string | |
wialon.status | string | Um de: supported, coming. |
units | object[] | |
units[].unitId | string | |
units[].source | string | Um de: traccar, osmand, flespi, webhook, wialon. |
units[].name | string | |
units[].firstSeen | string (date-time) | |
units[].lastSeen | string (date-time) | |
units[].lastFixAt | string (date-time) | null | |
units[].position | object | null | |
units[].received | integer | |
units[].trackerId | string | Definido quando passa a ser um dos seus rastreadores. |
units[].trackerName | string | |
units[].elsewhere | boolean | Outra organização detém este IMEI. |
units[].lastPayload | object | O que a plataforma enviou por último (unidades ainda não adicionadas). |
lastAt | string (date-time) | null | |
lastBySource | object | |
unknown | integer | Unidades ainda não adicionadas. |
units24h | integer |
{
"enabled": true,
"token": "fwd_8KwP2nVd5T…",
"urls": {
"traccar": "string",
"osmand": "string",
"flespi": "string",
"webhook": "string",
"bearer": "string"
},
"wialon": {
"host": "string",
"port": 0,
"password": "string",
"status": "supported"
},
"units": [
{
"unitId": "string",
"source": "traccar",
"name": "string",
"firstSeen": "2026-10-15T09:00:00+01:00",
"lastSeen": "2026-10-15T09:00:00+01:00",
"lastFixAt": "2026-10-15T09:00:00+01:00",
"position": {},
"received": 0,
"trackerId": "string",
"trackerName": "string",
"elsewhere": true,
"lastPayload": {}
}
],
"lastAt": "2026-10-15T09:00:00+01:00",
"lastBySource": {},
"unknown": 0,
"units24h": 0
}Erros
defaultErro
Adicionar uma unidade reencaminhada como um dos seus rastreadores (um veículo novo com o nome dela, a menos que indique um)
POST https://nways.ng/maps/v1/fleet/trackers/forwarding/units/{unitId}/add
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
unitId | caminho | string | Obrigatório. |
Corpo do pedido
| Campo | Tipo | Descrição |
|---|---|---|
imei | string | 15 algarismos (espaços e hífenes são ignorados); o id do dispositivo de um telemóvel para o modelo osmand-phone, o id de unidade de uma plataforma para o modelo forwarded. |
name | string | |
vehicleId | string | Um dos seus veículos ("" para desligar). |
vehicle | object | Em vez disso, um veículo novo para ele. |
vehicle.name | string | |
vehicle.mode | string | |
vehicle.plate | string | |
model | string | Um id de modelo do catálogo, ou not-sure (deduzido a partir da sua primeira ligação). |
simNumber | string | |
network | string | Um id de rede do catálogo, ou other. |
apn | string | Por omissão: o da rede. |
curl -X POST "https://nways.ng/maps/v1/fleet/trackers/forwarding/units/string/add" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API" \
-H "Content-Type: application/json" \
-d '{"imei":"string","name":"string","vehicleId":"string","vehicle":{"name":"string","mode":"string","plate":"string"},"model":"string","simNumber":"string","network":"string","apn":"string"}'const res = await fetch('https://nways.ng/maps/v1/fleet/trackers/forwarding/units/string/add', {
method: 'POST',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
"imei": "string",
"name": "string",
"vehicleId": "string",
"vehicle": {
"name": "string",
"mode": "string",
"plate": "string"
},
"model": "string",
"simNumber": "string",
"network": "string",
"apn": "string"
}),
})
const data = await res.json()import os
import requests
res = requests.post(
"https://nways.ng/maps/v1/fleet/trackers/forwarding/units/string/add",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
json={"imei": "string", "name": "string", "vehicleId": "string", "vehicle": {"name": "string", "mode": "string", "plate": "string"}, "model": "string", "simNumber": "string", "network": "string", "apn": "string"},
timeout=10,
)
data = res.json()Resposta
Adicionado
| Campo | Tipo | Descrição |
|---|---|---|
id | string | |
imei | string | |
name | string | |
vehicleId | string | null | |
vehicleName | string | |
protocol | string | Um protocolo que o gateway da N-Ways lê (gt06, teltonika, h02, gps103, tk103, gl200, meitrack, ruptela, jt808, suntech, galileo, startek, topin, xexun, gosafe, tzone, wialon, watch, osmand), forward para uma unidade reencaminhada a partir da sua plataforma de seguimento, ou "" até que o seu modelo ou a primeira ligação o indique. |
model | string | |
simNumber | string | |
network | string | |
apn | string | |
state | string | Um de: awaiting_first_fix, live, silent. |
connected | boolean | |
heard | boolean | O gateway da N-Ways já recebeu sinal deste dispositivo (mesmo antes de ter sido adicionado). |
lastSeenAt | string (date-time) | null | |
lastFixAt | string (date-time) | null | A sua última posição GPS. |
onMapAt | string (date-time) | null | A sua última posição que moveu o seu veículo no mapa. |
position | object | null | |
batteryPct | number | null | |
batteryV | number | null | |
extVoltageV | number | null | |
ignition | boolean | null | |
sats | integer | null | |
odometerM | number | null | |
claimedAt | string (date-time) | |
setup | object | Os do rastreador único: os passos SMS por ordem (key, sms, reply, optional), ou as definições de uma aplicação de telemóvel (value). |
setup.protocol | string | |
setup.host | string | |
setup.port | integer | |
setup.url | string | |
setup.smsTo | string | |
setup.assumed | boolean | |
setup.steps | object[] | |
setup.steps[].n | integer | |
setup.steps[].key | string | |
setup.steps[].sms | string | |
setup.steps[].value | string | |
setup.steps[].reply | string | |
setup.steps[].optional | boolean | |
diagnosis | string[] | O que o gateway viu e precisa de ser corrigido, do mais útil para o menos útil. |
virtual | VirtualTracker | |
virtual.running | boolean | |
virtual.protocol | string | |
virtual.startedAt | string (date-time) | |
virtual.until | string (date-time) | |
virtual.sent | integer | |
virtual.answered | integer | |
virtual.problems | string[] | |
virtual.error | string |
{
"id": "trk_4fQ9xLm2Za",
"imei": "356307042441013",
"name": "string",
"vehicleId": "string",
"vehicleName": "string",
"protocol": "gt06",
"model": "string",
"simNumber": "string",
"network": "string",
"apn": "string",
"state": "awaiting_first_fix",
"connected": true,
"heard": true,
"lastSeenAt": "2026-10-15T09:00:00+01:00",
"lastFixAt": "2026-10-15T09:00:00+01:00",
"onMapAt": "2026-10-15T09:00:00+01:00",
"position": {
"lat": 0,
"lng": 0,
"at": "2026-10-15T09:00:00+01:00"
},
"batteryPct": 0,
"batteryV": 0,
"extVoltageV": 0,
"ignition": true,
"sats": 0,
"odometerM": 0,
"claimedAt": "2026-10-15T09:00:00+01:00",
"setup": {
"protocol": "string",
"host": "string",
"port": 0,
"url": "string",
"smsTo": "string",
"assumed": true,
"steps": [
{
"n": 0,
"key": "string",
"sms": "string",
"value": "string",
"reply": "string",
"optional": true
}
]
},
"diagnosis": [
"no_vehicle"
],
"virtual": {
"running": true,
"protocol": "string",
"startedAt": "2026-10-15T09:00:00+01:00",
"until": "2026-10-15T09:00:00+01:00",
"sent": 0,
"answered": 0,
"problems": [
"string"
],
"error": "string"
}
}Erros
defaultErro
Esquecer uma unidade reencaminhada (volta se a sua plataforma a enviar de novo)
DELETE https://nways.ng/maps/v1/fleet/trackers/forwarding/units/{unitId}
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
unitId | caminho | string | Obrigatório. |
curl -X DELETE "https://nways.ng/maps/v1/fleet/trackers/forwarding/units/string" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/trackers/forwarding/units/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/trackers/forwarding/units/string",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Esquecido
Erros
defaultErro
Os seus pedidos para transferir rastreadores para aqui, e os rastreadores que foram transferidos para outro lado
GET https://nways.ng/maps/v1/fleet/tracker-transfers
curl "https://nways.ng/maps/v1/fleet/tracker-transfers" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/tracker-transfers', {
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/tracker-transfers",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Transferências
| Campo | Tipo | Descrição |
|---|---|---|
transfers | TrackerTransfer[] | |
transfers[].id | string | |
transfers[].imei | string | |
transfers[].direction | string | Um de: in, out. |
transfers[].state | string | Um de: pending, waiting, moved, expired, cancelled. |
transfers[].vehicleId | string | null | |
transfers[].restartSms | string | O que enviar ao dispositivo para que inicie sessão de novo. |
transfers[].createdAt | string (date-time) | |
transfers[].startedAt | string (date-time) | null | |
transfers[].expiresAt | string (date-time) | null | |
transfers[].movedAt | string (date-time) | null | |
transfers[].trackerId | string | |
windowS | integer |
{
"transfers": [
{
"id": "trf_4fQ9xLm2Za",
"imei": "string",
"direction": "in",
"state": "pending",
"vehicleId": "string",
"restartSms": "string",
"createdAt": "2026-10-15T09:00:00+01:00",
"startedAt": "2026-10-15T09:00:00+01:00",
"expiresAt": "2026-10-15T09:00:00+01:00",
"movedAt": "2026-10-15T09:00:00+01:00",
"trackerId": "string"
}
],
"windowS": 180
}Erros
defaultErro
Pedir um rastreador que outra organização detém (proprietários e administradores)
POST https://nways.ng/maps/v1/fleet/tracker-transfers
Erros: TRACKER_NOT_CLAIMED (ninguém o detém: adicione-o), TRACKER_EXISTS (já é seu), TRANSFER_NOT_PROVABLE (um telemóvel ou uma unidade reencaminhada: a sua organização remove-o).
Corpo do pedido
| Campo | Tipo | Descrição |
|---|---|---|
imei | string | Obrigatório. |
vehicleId | string |
curl -X POST "https://nways.ng/maps/v1/fleet/tracker-transfers" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API" \
-H "Content-Type: application/json" \
-d '{"imei":"string","vehicleId":"string"}'const res = await fetch('https://nways.ng/maps/v1/fleet/tracker-transfers', {
method: 'POST',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
"imei": "string",
"vehicleId": "string"
}),
})
const data = await res.json()import os
import requests
res = requests.post(
"https://nways.ng/maps/v1/fleet/tracker-transfers",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
json={"imei": "string", "vehicleId": "string"},
timeout=10,
)
data = res.json()Resposta
Pedido
| Campo | Tipo | Descrição |
|---|---|---|
id | string | |
imei | string | |
direction | string | Um de: in, out. |
state | string | Um de: pending, waiting, moved, expired, cancelled. |
vehicleId | string | null | |
restartSms | string | O que enviar ao dispositivo para que inicie sessão de novo. |
createdAt | string (date-time) | |
startedAt | string (date-time) | null | |
expiresAt | string (date-time) | null | |
movedAt | string (date-time) | null | |
trackerId | string |
{
"id": "trf_4fQ9xLm2Za",
"imei": "string",
"direction": "in",
"state": "pending",
"vehicleId": "string",
"restartSms": "string",
"createdAt": "2026-10-15T09:00:00+01:00",
"startedAt": "2026-10-15T09:00:00+01:00",
"expiresAt": "2026-10-15T09:00:00+01:00",
"movedAt": "2026-10-15T09:00:00+01:00",
"trackerId": "string"
}Erros
defaultErro
Está agora a fazer o dispositivo iniciar sessão de novo (o seu SMS de reinício); um novo login nos 3 minutos seguintes transfere-o
POST https://nways.ng/maps/v1/fleet/tracker-transfers/{transferId}/start
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
transferId | caminho | string | Obrigatório. |
curl -X POST "https://nways.ng/maps/v1/fleet/tracker-transfers/trf_4fQ9xLm2Za/start" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/tracker-transfers/trf_4fQ9xLm2Za/start', {
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/tracker-transfers/trf_4fQ9xLm2Za/start",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
À espera
| Campo | Tipo | Descrição |
|---|---|---|
id | string | |
imei | string | |
direction | string | Um de: in, out. |
state | string | Um de: pending, waiting, moved, expired, cancelled. |
vehicleId | string | null | |
restartSms | string | O que enviar ao dispositivo para que inicie sessão de novo. |
createdAt | string (date-time) | |
startedAt | string (date-time) | null | |
expiresAt | string (date-time) | null | |
movedAt | string (date-time) | null | |
trackerId | string |
{
"id": "trf_4fQ9xLm2Za",
"imei": "string",
"direction": "in",
"state": "pending",
"vehicleId": "string",
"restartSms": "string",
"createdAt": "2026-10-15T09:00:00+01:00",
"startedAt": "2026-10-15T09:00:00+01:00",
"expiresAt": "2026-10-15T09:00:00+01:00",
"movedAt": "2026-10-15T09:00:00+01:00",
"trackerId": "string"
}Erros
defaultErro
Retirar um pedido
DELETE https://nways.ng/maps/v1/fleet/tracker-transfers/{transferId}
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
transferId | caminho | string | Obrigatório. |
curl -X DELETE "https://nways.ng/maps/v1/fleet/tracker-transfers/string" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/tracker-transfers/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/tracker-transfers/string",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Retirado
Erros
defaultErro
Obter um rastreador, os seus passos de configuração e o que está mal
GET https://nways.ng/maps/v1/fleet/trackers/{trackerId}
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
trackerId | caminho | string | Obrigatório. O seu id, ou o seu IMEI. |
curl "https://nways.ng/maps/v1/fleet/trackers/trk_4fQ9xLm2Za" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/trackers/trk_4fQ9xLm2Za', {
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/trackers/trk_4fQ9xLm2Za",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Rastreador
| Campo | Tipo | Descrição |
|---|---|---|
id | string | |
imei | string | |
name | string | |
vehicleId | string | null | |
vehicleName | string | |
protocol | string | Um protocolo que o gateway da N-Ways lê (gt06, teltonika, h02, gps103, tk103, gl200, meitrack, ruptela, jt808, suntech, galileo, startek, topin, xexun, gosafe, tzone, wialon, watch, osmand), forward para uma unidade reencaminhada a partir da sua plataforma de seguimento, ou "" até que o seu modelo ou a primeira ligação o indique. |
model | string | |
simNumber | string | |
network | string | |
apn | string | |
state | string | Um de: awaiting_first_fix, live, silent. |
connected | boolean | |
heard | boolean | O gateway da N-Ways já recebeu sinal deste dispositivo (mesmo antes de ter sido adicionado). |
lastSeenAt | string (date-time) | null | |
lastFixAt | string (date-time) | null | A sua última posição GPS. |
onMapAt | string (date-time) | null | A sua última posição que moveu o seu veículo no mapa. |
position | object | null | |
batteryPct | number | null | |
batteryV | number | null | |
extVoltageV | number | null | |
ignition | boolean | null | |
sats | integer | null | |
odometerM | number | null | |
claimedAt | string (date-time) | |
setup | object | Os do rastreador único: os passos SMS por ordem (key, sms, reply, optional), ou as definições de uma aplicação de telemóvel (value). |
setup.protocol | string | |
setup.host | string | |
setup.port | integer | |
setup.url | string | |
setup.smsTo | string | |
setup.assumed | boolean | |
setup.steps | object[] | |
setup.steps[].n | integer | |
setup.steps[].key | string | |
setup.steps[].sms | string | |
setup.steps[].value | string | |
setup.steps[].reply | string | |
setup.steps[].optional | boolean | |
diagnosis | string[] | O que o gateway viu e precisa de ser corrigido, do mais útil para o menos útil. |
virtual | VirtualTracker | |
virtual.running | boolean | |
virtual.protocol | string | |
virtual.startedAt | string (date-time) | |
virtual.until | string (date-time) | |
virtual.sent | integer | |
virtual.answered | integer | |
virtual.problems | string[] | |
virtual.error | string |
{
"id": "trk_4fQ9xLm2Za",
"imei": "356307042441013",
"name": "string",
"vehicleId": "string",
"vehicleName": "string",
"protocol": "gt06",
"model": "string",
"simNumber": "string",
"network": "string",
"apn": "string",
"state": "awaiting_first_fix",
"connected": true,
"heard": true,
"lastSeenAt": "2026-10-15T09:00:00+01:00",
"lastFixAt": "2026-10-15T09:00:00+01:00",
"onMapAt": "2026-10-15T09:00:00+01:00",
"position": {
"lat": 0,
"lng": 0,
"at": "2026-10-15T09:00:00+01:00"
},
"batteryPct": 0,
"batteryV": 0,
"extVoltageV": 0,
"ignition": true,
"sats": 0,
"odometerM": 0,
"claimedAt": "2026-10-15T09:00:00+01:00",
"setup": {
"protocol": "string",
"host": "string",
"port": 0,
"url": "string",
"smsTo": "string",
"assumed": true,
"steps": [
{
"n": 0,
"key": "string",
"sms": "string",
"value": "string",
"reply": "string",
"optional": true
}
]
},
"diagnosis": [
"no_vehicle"
],
"virtual": {
"running": true,
"protocol": "string",
"startedAt": "2026-10-15T09:00:00+01:00",
"until": "2026-10-15T09:00:00+01:00",
"sent": 0,
"answered": 0,
"problems": [
"string"
],
"error": "string"
}
}Erros
defaultErro
Editar um rastreador (o seu veículo, modelo, SIM)
PATCH https://nways.ng/maps/v1/fleet/trackers/{trackerId}
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
trackerId | caminho | string | Obrigatório. O seu id, ou o seu IMEI. |
Corpo do pedido
| Campo | Tipo | Descrição |
|---|---|---|
imei | string | 15 algarismos (espaços e hífenes são ignorados); o id do dispositivo de um telemóvel para o modelo osmand-phone, o id de unidade de uma plataforma para o modelo forwarded. |
name | string | |
vehicleId | string | Um dos seus veículos ("" para desligar). |
vehicle | object | Em vez disso, um veículo novo para ele. |
vehicle.name | string | |
vehicle.mode | string | |
vehicle.plate | string | |
model | string | Um id de modelo do catálogo, ou not-sure (deduzido a partir da sua primeira ligação). |
simNumber | string | |
network | string | Um id de rede do catálogo, ou other. |
apn | string | Por omissão: o da rede. |
curl -X PATCH "https://nways.ng/maps/v1/fleet/trackers/trk_4fQ9xLm2Za" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API" \
-H "Content-Type: application/json" \
-d '{"imei":"string","name":"string","vehicleId":"string","vehicle":{"name":"string","mode":"string","plate":"string"},"model":"string","simNumber":"string","network":"string","apn":"string"}'const res = await fetch('https://nways.ng/maps/v1/fleet/trackers/trk_4fQ9xLm2Za', {
method: 'PATCH',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
"imei": "string",
"name": "string",
"vehicleId": "string",
"vehicle": {
"name": "string",
"mode": "string",
"plate": "string"
},
"model": "string",
"simNumber": "string",
"network": "string",
"apn": "string"
}),
})
const data = await res.json()import os
import requests
res = requests.patch(
"https://nways.ng/maps/v1/fleet/trackers/trk_4fQ9xLm2Za",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
json={"imei": "string", "name": "string", "vehicleId": "string", "vehicle": {"name": "string", "mode": "string", "plate": "string"}, "model": "string", "simNumber": "string", "network": "string", "apn": "string"},
timeout=10,
)
data = res.json()Resposta
Rastreador
| Campo | Tipo | Descrição |
|---|---|---|
id | string | |
imei | string | |
name | string | |
vehicleId | string | null | |
vehicleName | string | |
protocol | string | Um protocolo que o gateway da N-Ways lê (gt06, teltonika, h02, gps103, tk103, gl200, meitrack, ruptela, jt808, suntech, galileo, startek, topin, xexun, gosafe, tzone, wialon, watch, osmand), forward para uma unidade reencaminhada a partir da sua plataforma de seguimento, ou "" até que o seu modelo ou a primeira ligação o indique. |
model | string | |
simNumber | string | |
network | string | |
apn | string | |
state | string | Um de: awaiting_first_fix, live, silent. |
connected | boolean | |
heard | boolean | O gateway da N-Ways já recebeu sinal deste dispositivo (mesmo antes de ter sido adicionado). |
lastSeenAt | string (date-time) | null | |
lastFixAt | string (date-time) | null | A sua última posição GPS. |
onMapAt | string (date-time) | null | A sua última posição que moveu o seu veículo no mapa. |
position | object | null | |
batteryPct | number | null | |
batteryV | number | null | |
extVoltageV | number | null | |
ignition | boolean | null | |
sats | integer | null | |
odometerM | number | null | |
claimedAt | string (date-time) | |
setup | object | Os do rastreador único: os passos SMS por ordem (key, sms, reply, optional), ou as definições de uma aplicação de telemóvel (value). |
setup.protocol | string | |
setup.host | string | |
setup.port | integer | |
setup.url | string | |
setup.smsTo | string | |
setup.assumed | boolean | |
setup.steps | object[] | |
setup.steps[].n | integer | |
setup.steps[].key | string | |
setup.steps[].sms | string | |
setup.steps[].value | string | |
setup.steps[].reply | string | |
setup.steps[].optional | boolean | |
diagnosis | string[] | O que o gateway viu e precisa de ser corrigido, do mais útil para o menos útil. |
virtual | VirtualTracker | |
virtual.running | boolean | |
virtual.protocol | string | |
virtual.startedAt | string (date-time) | |
virtual.until | string (date-time) | |
virtual.sent | integer | |
virtual.answered | integer | |
virtual.problems | string[] | |
virtual.error | string |
{
"id": "trk_4fQ9xLm2Za",
"imei": "356307042441013",
"name": "string",
"vehicleId": "string",
"vehicleName": "string",
"protocol": "gt06",
"model": "string",
"simNumber": "string",
"network": "string",
"apn": "string",
"state": "awaiting_first_fix",
"connected": true,
"heard": true,
"lastSeenAt": "2026-10-15T09:00:00+01:00",
"lastFixAt": "2026-10-15T09:00:00+01:00",
"onMapAt": "2026-10-15T09:00:00+01:00",
"position": {
"lat": 0,
"lng": 0,
"at": "2026-10-15T09:00:00+01:00"
},
"batteryPct": 0,
"batteryV": 0,
"extVoltageV": 0,
"ignition": true,
"sats": 0,
"odometerM": 0,
"claimedAt": "2026-10-15T09:00:00+01:00",
"setup": {
"protocol": "string",
"host": "string",
"port": 0,
"url": "string",
"smsTo": "string",
"assumed": true,
"steps": [
{
"n": 0,
"key": "string",
"sms": "string",
"value": "string",
"reply": "string",
"optional": true
}
]
},
"diagnosis": [
"no_vehicle"
],
"virtual": {
"running": true,
"protocol": "string",
"startedAt": "2026-10-15T09:00:00+01:00",
"until": "2026-10-15T09:00:00+01:00",
"sent": 0,
"answered": 0,
"problems": [
"string"
],
"error": "string"
}
}Erros
defaultErro
Remover um rastreador (pode depois ser adicionado por qualquer pessoa)
DELETE https://nways.ng/maps/v1/fleet/trackers/{trackerId}
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
trackerId | caminho | string | Obrigatório. O seu id, ou o seu IMEI. |
curl -X DELETE "https://nways.ng/maps/v1/fleet/trackers/trk_4fQ9xLm2Za" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/trackers/trk_4fQ9xLm2Za', {
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/trackers/trk_4fQ9xLm2Za",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Removido
Erros
defaultErro
O registo do dispositivo (ligações, tramas em bruto, campos descodificados, respostas enviadas, erros), do mais antigo para o mais recente
GET https://nways.ng/maps/v1/fleet/trackers/{trackerId}/log
São guardadas as últimas 500 entradas e 7 dias. Sem after, as últimas limit entradas.
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
trackerId | caminho | string | Obrigatório. |
after | consulta | string | Um id de entrada: apenas as entradas posteriores. |
limit | consulta | integer | Predefinição: 200. ≤ 500. |
curl "https://nways.ng/maps/v1/fleet/trackers/string/log" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/trackers/string/log', {
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/trackers/string/log",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Entradas
| Campo | Tipo | Descrição |
|---|---|---|
entries | TrackerLogEntry[] | |
entries[].id | string | Um cursor: as entradas posteriores têm valores maiores. |
entries[].at | string (date-time) | |
entries[].dir | string | Um de: in, out, note. |
entries[].kind | string | login, position, heartbeat, alarm, status, handshake, unknown, ack, connect, disconnect, noise, refused |
entries[].hex | string | |
entries[].ascii | string | |
entries[].decoded | object | |
entries[].error | string | |
entries[].remote | string |
{
"entries": [
{
"id": "string",
"at": "2026-10-15T09:00:00+01:00",
"dir": "in",
"kind": "string",
"hex": "string",
"ascii": "string",
"decoded": {},
"error": "string",
"remote": "string"
}
]
}Erros
defaultErro
O registo e o estado do dispositivo à medida que mudam (server-sent events)
GET https://nways.ng/maps/v1/fleet/trackers/{trackerId}/stream
event: state (o Tracker) e event: log (uma TrackerLogEntry), começando pelo estado e pelas últimas 50 entradas (ou as posteriores a ?after=). Um comentário a cada 15 s mantém a ligação aberta.
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
trackerId | caminho | string | Obrigatório. |
curl "https://nways.ng/maps/v1/fleet/trackers/string/stream" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/trackers/string/stream', {
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/trackers/string/stream",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Um fluxo de eventos
Erros
defaultErro
Conduzir um rastreador virtual em vez deste (com o seu próprio protocolo, através do gateway da N-Ways)
POST https://nways.ng/maps/v1/fleet/trackers/{trackerId}/virtual
Uma estrada curta no seu país, uma posição a cada 3 s, respostas verificadas byte a byte. Falhas a experimentar: noAckWait, badCrc, invalidFix, clockSkewH (8: um rastreador na hora da China), backlog. Erros: VIRTUAL_RUNNING, TRACKER_NO_VEHICLE, TRACKER_CONNECTED (o verdadeiro está ligado), VIRTUAL_TRACKER_UNAVAILABLE.
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
trackerId | caminho | string | Obrigatório. |
Corpo do pedido
| Campo | Tipo | Descrição |
|---|---|---|
minutes | integer | Predefinição: 3. ≥ 1, ≤ 10. |
sos | boolean | |
powerCut | boolean | |
noAckWait | boolean | |
badCrc | boolean | |
invalidFix | boolean | |
clockSkewH | number | |
backlog | integer | ≤ 50. |
lang | string |
curl -X POST "https://nways.ng/maps/v1/fleet/trackers/string/virtual" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API" \
-H "Content-Type: application/json" \
-d '{"minutes":3,"sos":true,"powerCut":true,"noAckWait":true,"badCrc":true,"invalidFix":true,"clockSkewH":0,"backlog":0,"lang":"string"}'const res = await fetch('https://nways.ng/maps/v1/fleet/trackers/string/virtual', {
method: 'POST',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
"minutes": 3,
"sos": true,
"powerCut": true,
"noAckWait": true,
"badCrc": true,
"invalidFix": true,
"clockSkewH": 0,
"backlog": 0,
"lang": "string"
}),
})
const data = await res.json()import os
import requests
res = requests.post(
"https://nways.ng/maps/v1/fleet/trackers/string/virtual",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
json={"minutes": 3, "sos": True, "powerCut": True, "noAckWait": True, "badCrc": True, "invalidFix": True, "clockSkewH": 0, "backlog": 0, "lang": "string"},
timeout=10,
)
data = res.json()Resposta
Iniciado
| Campo | Tipo | Descrição |
|---|---|---|
running | boolean | |
protocol | string | |
startedAt | string (date-time) | |
until | string (date-time) | |
sent | integer | |
answered | integer | |
problems | string[] | |
error | string |
{
"running": true,
"protocol": "string",
"startedAt": "2026-10-15T09:00:00+01:00",
"until": "2026-10-15T09:00:00+01:00",
"sent": 0,
"answered": 0,
"problems": [
"string"
],
"error": "string"
}Erros
defaultErro
Parar o seu rastreador virtual
DELETE https://nways.ng/maps/v1/fleet/trackers/{trackerId}/virtual
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
trackerId | caminho | string | Obrigatório. |
curl -X DELETE "https://nways.ng/maps/v1/fleet/trackers/string/virtual" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/trackers/string/virtual', {
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/trackers/string/virtual",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Parado
Erros
defaultErro
Comandos enviados a um rastreador (os últimos 30), e quais aceita
GET https://nways.ng/maps/v1/fleet/trackers/{trackerId}/commands
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
trackerId | caminho | string | Obrigatório. |
curl "https://nways.ng/maps/v1/fleet/trackers/string/commands" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/trackers/string/commands', {
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/trackers/string/commands",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Resposta
Comandos
| Campo | Tipo | Descrição |
|---|---|---|
commands | TrackerCommand[] | |
commands[].id | string | |
commands[].kind | string | Um de: locate, restart, interval, heartbeat. |
commands[].seconds | integer | |
commands[].state | string | offline e sms: envie antes o SMS. Um de: sent, answered, offline, failed, sms. |
commands[].text | string | O comando pela ligação. |
commands[].sms | string | O mesmo, como SMS. |
commands[].smsTo | string | |
commands[].reply | string | O que o dispositivo respondeu. |
commands[].error | string | |
commands[].createdBy | string | |
commands[].createdAt | string (date-time) | |
commands[].sentAt | string (date-time) | null | |
commands[].answeredAt | string (date-time) | null | |
kinds | object | Cada comando que aceita: pela sua ligação (gprs) ou apenas por SMS. |
connected | boolean |
{
"commands": [
{
"id": "cmd_4fQ9xLm2Za",
"kind": "locate",
"seconds": 0,
"state": "sent",
"text": "string",
"sms": "string",
"smsTo": "string",
"reply": "string",
"error": "string",
"createdBy": "string",
"createdAt": "2026-10-15T09:00:00+01:00",
"sentAt": "2026-10-15T09:00:00+01:00",
"answeredAt": "2026-10-15T09:00:00+01:00"
}
],
"kinds": {},
"connected": true
}Erros
defaultErro
Enviar um comando (proprietários e administradores); a resposta chega no registo do dispositivo
POST https://nways.ng/maps/v1/fleet/trackers/{trackerId}/commands
Ligado e o seu protocolo aceita-o pela ligação: sent, depois answered. Caso contrário: offline ou sms, com o SMS a enviar-lhe (sms, smsTo). Erros: COMMAND_NOT_SUPPORTED, COMMANDS_NOT_SUPPORTED (um telemóvel ou uma unidade reencaminhada).
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
trackerId | caminho | string | Obrigatório. |
Corpo do pedido
| Campo | Tipo | Descrição |
|---|---|---|
kind | string | Obrigatório. Um de: locate, restart, interval, heartbeat. |
seconds | integer | interval: 5–3600; heartbeat: 60–3600 (minutos inteiros). |
curl -X POST "https://nways.ng/maps/v1/fleet/trackers/string/commands" \
-H "X-NWays-Api-Key: A_SUA_CHAVE_API" \
-H "Content-Type: application/json" \
-d '{"kind":"interval","seconds":30}'const res = await fetch('https://nways.ng/maps/v1/fleet/trackers/string/commands', {
method: 'POST',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
"kind": "interval",
"seconds": 30
}),
})
const data = await res.json()import os
import requests
res = requests.post(
"https://nways.ng/maps/v1/fleet/trackers/string/commands",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
json={"kind": "interval", "seconds": 30},
timeout=10,
)
data = res.json()Resposta
Enviado (ou o SMS a enviar)
| Campo | Tipo | Descrição |
|---|---|---|
id | string | |
kind | string | Um de: locate, restart, interval, heartbeat. |
seconds | integer | |
state | string | offline e sms: envie antes o SMS. Um de: sent, answered, offline, failed, sms. |
text | string | O comando pela ligação. |
sms | string | O mesmo, como SMS. |
smsTo | string | |
reply | string | O que o dispositivo respondeu. |
error | string | |
createdBy | string | |
createdAt | string (date-time) | |
sentAt | string (date-time) | null | |
answeredAt | string (date-time) | null |
{
"id": "cmd_4fQ9xLm2Za",
"kind": "locate",
"seconds": 0,
"state": "sent",
"text": "string",
"sms": "string",
"smsTo": "string",
"reply": "string",
"error": "string",
"createdBy": "string",
"createdAt": "2026-10-15T09:00:00+01:00",
"sentAt": "2026-10-15T09:00:00+01:00",
"answeredAt": "2026-10-15T09:00:00+01:00"
}Erros
defaultErro