N-Ways
Documentação para programadoresRastreadores GPS

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=&timestamp=&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
Nota:

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

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

Listar os seus rastreadores, com contagens por estado

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

Parâmetros

NomeOndeTipoDescrição
stateconsultastringUm de: awaiting_first_fix, live, silent.
modelconsultastringUm id de modelo do catálogo.
qconsultastringEncontra um nome, IMEI, veículo ou número de SIM.
cURL
curl "https://nways.ng/maps/v1/fleet/trackers" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_API"
JavaScript
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()
Python
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

CampoTipoDescrição
trackersTracker[]Obrigatório.
trackers[].idstring
trackers[].imeistring
trackers[].namestring
trackers[].vehicleIdstring | null
trackers[].vehicleNamestring
trackers[].protocolstringUm 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[].modelstring
trackers[].simNumberstring
trackers[].networkstring
trackers[].apnstring
trackers[].statestringUm de: awaiting_first_fix, live, silent.
trackers[].connectedboolean
trackers[].heardbooleanO gateway da N-Ways já recebeu sinal deste dispositivo (mesmo antes de ter sido adicionado).
trackers[].lastSeenAtstring (date-time) | null
trackers[].lastFixAtstring (date-time) | nullA sua última posição GPS.
trackers[].onMapAtstring (date-time) | nullA sua última posição que moveu o seu veículo no mapa.
trackers[].positionobject | null
trackers[].batteryPctnumber | null
trackers[].batteryVnumber | null
trackers[].extVoltageVnumber | null
trackers[].ignitionboolean | null
trackers[].satsinteger | null
trackers[].odometerMnumber | null
trackers[].claimedAtstring (date-time)
trackers[].setupobjectOs 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.protocolstring
trackers[].setup.hoststring
trackers[].setup.portinteger
trackers[].setup.urlstring
trackers[].setup.smsTostring
trackers[].setup.assumedboolean
trackers[].setup.stepsobject[]
trackers[].setup.steps[].ninteger
trackers[].setup.steps[].keystring
trackers[].setup.steps[].smsstring
trackers[].setup.steps[].valuestring
trackers[].setup.steps[].replystring
trackers[].setup.steps[].optionalboolean
trackers[].diagnosisstring[]O que o gateway viu e precisa de ser corrigido, do mais útil para o menos útil.
trackers[].virtualVirtualTracker
trackers[].virtual.runningboolean
trackers[].virtual.protocolstring
trackers[].virtual.startedAtstring (date-time)
trackers[].virtual.untilstring (date-time)
trackers[].virtual.sentinteger
trackers[].virtual.answeredinteger
trackers[].virtual.problemsstring[]
trackers[].virtual.errorstring
countsobjectObrigatório.
modelsobject
200 OK
{
  "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

  • default Erro

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

CampoTipoDescrição
imeistring15 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.
namestring
vehicleIdstringUm dos seus veículos ("" para desligar).
vehicleobjectEm vez disso, um veículo novo para ele.
vehicle.namestring
vehicle.modestring
vehicle.platestring
modelstringUm id de modelo do catálogo, ou not-sure (deduzido a partir da sua primeira ligação).
simNumberstring
networkstringUm id de rede do catálogo, ou other.
apnstringPor omissão: o da rede.
cURL
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"}'
JavaScript
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()
Python
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

CampoTipoDescrição
idstring
imeistring
namestring
vehicleIdstring | null
vehicleNamestring
protocolstringUm 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.
modelstring
simNumberstring
networkstring
apnstring
statestringUm de: awaiting_first_fix, live, silent.
connectedboolean
heardbooleanO gateway da N-Ways já recebeu sinal deste dispositivo (mesmo antes de ter sido adicionado).
lastSeenAtstring (date-time) | null
lastFixAtstring (date-time) | nullA sua última posição GPS.
onMapAtstring (date-time) | nullA sua última posição que moveu o seu veículo no mapa.
positionobject | null
batteryPctnumber | null
batteryVnumber | null
extVoltageVnumber | null
ignitionboolean | null
satsinteger | null
odometerMnumber | null
claimedAtstring (date-time)
setupobjectOs 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.protocolstring
setup.hoststring
setup.portinteger
setup.urlstring
setup.smsTostring
setup.assumedboolean
setup.stepsobject[]
setup.steps[].ninteger
setup.steps[].keystring
setup.steps[].smsstring
setup.steps[].valuestring
setup.steps[].replystring
setup.steps[].optionalboolean
diagnosisstring[]O que o gateway viu e precisa de ser corrigido, do mais útil para o menos útil.
virtualVirtualTracker
virtual.runningboolean
virtual.protocolstring
virtual.startedAtstring (date-time)
virtual.untilstring (date-time)
virtual.sentinteger
virtual.answeredinteger
virtual.problemsstring[]
virtual.errorstring
201 OK
{
  "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

  • default Erro

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

CampoTipoDescrição
modelsTrackerModel[]
models[].idstring
models[].brandstring
models[].brandIdstring
models[].namestring
models[].protocolstring
models[].familystringO seu conjunto de comandos (SMS de configuração, configurador, comandos).
models[].kindstringUm de: vehicle, asset, personal, obd, phone.
models[].passwordstringA palavra-passe SMS com que vem de fábrica.
models[].popularboolean
models[].statusstringUm de: supported, coming.
models[].methodsstring[]
brandsobject[]
familiesobject
protocolsobject[]
protocols[].idstring
protocols[].namestring
protocols[].statusstringUm de: supported, coming.
protocols[].portinteger
networksobject[]
networks[].idstring
networks[].namestring
networks[].apnstring
networks[].userstring
networks[].passstring
networks[].unverifiedboolean
countrystring
hoststring
portsobject
osmandUrlstring
platformsstring[]
commandKindsstring[]
200 OK
{
  "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

  • default Erro

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

CampoTipoDescrição
csvstringObrigatório.
dryRunboolean
cURL
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}'
JavaScript
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()
Python
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

CampoTipoDescrição
rowsobject[]
rows[].rowinteger
rows[].imeistring
rows[].modelstring
rows[].networkstring
rows[].simNumberstring
rows[].vehiclestring
rows[].vehicleIdstring
rows[].newVehicleboolean
rows[].okboolean
rows[].trackerIdstring
rows[].issuesobject[]
rows[].issues[].fieldstring
rows[].issues[].codestring
rows[].issues[].messagestring
totalinteger
okinteger
badinteger
addedinteger
dryRunboolean
200 OK
{
  "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

  • default Erro

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

NomeOndeTipoDescrição
idsconsultastringIds de rastreadores, separados por vírgulas. Por omissão: os rastreadores que ainda não estão no mapa.
langconsultastringUm de: en, fr, pt. Predefinição: en.
cURL
curl "https://nways.ng/maps/v1/fleet/trackers/setup.csv" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_API"
JavaScript
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()
Python
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

  • default Erro

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

CampoTipoDescrição
enabledboolean
tokenstring | nullA chave nos seus endereços: mantenha-a secreta.
urlsobject | null
urls.traccarstring
urls.osmandstring
urls.flespistring
urls.webhookstring
urls.bearerstring
wialonobject
wialon.hoststring
wialon.portinteger
wialon.passwordstring
wialon.statusstringUm de: supported, coming.
unitsobject[]
units[].unitIdstring
units[].sourcestringUm de: traccar, osmand, flespi, webhook, wialon.
units[].namestring
units[].firstSeenstring (date-time)
units[].lastSeenstring (date-time)
units[].lastFixAtstring (date-time) | null
units[].positionobject | null
units[].receivedinteger
units[].trackerIdstringDefinido quando passa a ser um dos seus rastreadores.
units[].trackerNamestring
units[].elsewherebooleanOutra organização detém este IMEI.
units[].lastPayloadobjectO que a plataforma enviou por último (unidades ainda não adicionadas).
lastAtstring (date-time) | null
lastBySourceobject
unknownintegerUnidades ainda não adicionadas.
units24hinteger
200 OK
{
  "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

  • default Erro

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

CampoTipoDescrição
enabledboolean
tokenstring | nullA chave nos seus endereços: mantenha-a secreta.
urlsobject | null
urls.traccarstring
urls.osmandstring
urls.flespistring
urls.webhookstring
urls.bearerstring
wialonobject
wialon.hoststring
wialon.portinteger
wialon.passwordstring
wialon.statusstringUm de: supported, coming.
unitsobject[]
units[].unitIdstring
units[].sourcestringUm de: traccar, osmand, flespi, webhook, wialon.
units[].namestring
units[].firstSeenstring (date-time)
units[].lastSeenstring (date-time)
units[].lastFixAtstring (date-time) | null
units[].positionobject | null
units[].receivedinteger
units[].trackerIdstringDefinido quando passa a ser um dos seus rastreadores.
units[].trackerNamestring
units[].elsewherebooleanOutra organização detém este IMEI.
units[].lastPayloadobjectO que a plataforma enviou por último (unidades ainda não adicionadas).
lastAtstring (date-time) | null
lastBySourceobject
unknownintegerUnidades ainda não adicionadas.
units24hinteger
200 OK
{
  "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

  • default Erro

Desativar o reencaminhamento (as unidades continuam listadas)

DELETE https://nways.ng/maps/v1/fleet/trackers/forwarding

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

CampoTipoDescrição
enabledboolean
tokenstring | nullA chave nos seus endereços: mantenha-a secreta.
urlsobject | null
urls.traccarstring
urls.osmandstring
urls.flespistring
urls.webhookstring
urls.bearerstring
wialonobject
wialon.hoststring
wialon.portinteger
wialon.passwordstring
wialon.statusstringUm de: supported, coming.
unitsobject[]
units[].unitIdstring
units[].sourcestringUm de: traccar, osmand, flespi, webhook, wialon.
units[].namestring
units[].firstSeenstring (date-time)
units[].lastSeenstring (date-time)
units[].lastFixAtstring (date-time) | null
units[].positionobject | null
units[].receivedinteger
units[].trackerIdstringDefinido quando passa a ser um dos seus rastreadores.
units[].trackerNamestring
units[].elsewherebooleanOutra organização detém este IMEI.
units[].lastPayloadobjectO que a plataforma enviou por último (unidades ainda não adicionadas).
lastAtstring (date-time) | null
lastBySourceobject
unknownintegerUnidades ainda não adicionadas.
units24hinteger
200 OK
{
  "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

  • default Erro

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

NomeOndeTipoDescrição
unitIdcaminhostringObrigatório.

Corpo do pedido

CampoTipoDescrição
imeistring15 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.
namestring
vehicleIdstringUm dos seus veículos ("" para desligar).
vehicleobjectEm vez disso, um veículo novo para ele.
vehicle.namestring
vehicle.modestring
vehicle.platestring
modelstringUm id de modelo do catálogo, ou not-sure (deduzido a partir da sua primeira ligação).
simNumberstring
networkstringUm id de rede do catálogo, ou other.
apnstringPor omissão: o da rede.
cURL
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"}'
JavaScript
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()
Python
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

CampoTipoDescrição
idstring
imeistring
namestring
vehicleIdstring | null
vehicleNamestring
protocolstringUm 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.
modelstring
simNumberstring
networkstring
apnstring
statestringUm de: awaiting_first_fix, live, silent.
connectedboolean
heardbooleanO gateway da N-Ways já recebeu sinal deste dispositivo (mesmo antes de ter sido adicionado).
lastSeenAtstring (date-time) | null
lastFixAtstring (date-time) | nullA sua última posição GPS.
onMapAtstring (date-time) | nullA sua última posição que moveu o seu veículo no mapa.
positionobject | null
batteryPctnumber | null
batteryVnumber | null
extVoltageVnumber | null
ignitionboolean | null
satsinteger | null
odometerMnumber | null
claimedAtstring (date-time)
setupobjectOs 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.protocolstring
setup.hoststring
setup.portinteger
setup.urlstring
setup.smsTostring
setup.assumedboolean
setup.stepsobject[]
setup.steps[].ninteger
setup.steps[].keystring
setup.steps[].smsstring
setup.steps[].valuestring
setup.steps[].replystring
setup.steps[].optionalboolean
diagnosisstring[]O que o gateway viu e precisa de ser corrigido, do mais útil para o menos útil.
virtualVirtualTracker
virtual.runningboolean
virtual.protocolstring
virtual.startedAtstring (date-time)
virtual.untilstring (date-time)
virtual.sentinteger
virtual.answeredinteger
virtual.problemsstring[]
virtual.errorstring
201 OK
{
  "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

  • default Erro

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

NomeOndeTipoDescrição
unitIdcaminhostringObrigatório.
cURL
curl -X DELETE "https://nways.ng/maps/v1/fleet/trackers/forwarding/units/string" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_API"
JavaScript
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()
Python
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

  • default Erro

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

CampoTipoDescrição
transfersTrackerTransfer[]
transfers[].idstring
transfers[].imeistring
transfers[].directionstringUm de: in, out.
transfers[].statestringUm de: pending, waiting, moved, expired, cancelled.
transfers[].vehicleIdstring | null
transfers[].restartSmsstringO que enviar ao dispositivo para que inicie sessão de novo.
transfers[].createdAtstring (date-time)
transfers[].startedAtstring (date-time) | null
transfers[].expiresAtstring (date-time) | null
transfers[].movedAtstring (date-time) | null
transfers[].trackerIdstring
windowSinteger
200 OK
{
  "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

  • default Erro

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

CampoTipoDescrição
imeistringObrigatório.
vehicleIdstring
cURL
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"}'
JavaScript
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()
Python
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

CampoTipoDescrição
idstring
imeistring
directionstringUm de: in, out.
statestringUm de: pending, waiting, moved, expired, cancelled.
vehicleIdstring | null
restartSmsstringO que enviar ao dispositivo para que inicie sessão de novo.
createdAtstring (date-time)
startedAtstring (date-time) | null
expiresAtstring (date-time) | null
movedAtstring (date-time) | null
trackerIdstring
201 OK
{
  "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

  • default Erro

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

NomeOndeTipoDescrição
transferIdcaminhostringObrigatório.
cURL
curl -X POST "https://nways.ng/maps/v1/fleet/tracker-transfers/trf_4fQ9xLm2Za/start" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_API"
JavaScript
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()
Python
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

CampoTipoDescrição
idstring
imeistring
directionstringUm de: in, out.
statestringUm de: pending, waiting, moved, expired, cancelled.
vehicleIdstring | null
restartSmsstringO que enviar ao dispositivo para que inicie sessão de novo.
createdAtstring (date-time)
startedAtstring (date-time) | null
expiresAtstring (date-time) | null
movedAtstring (date-time) | null
trackerIdstring
200 OK
{
  "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

  • default Erro

Retirar um pedido

DELETE https://nways.ng/maps/v1/fleet/tracker-transfers/{transferId}

Parâmetros

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

  • default Erro

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

NomeOndeTipoDescrição
trackerIdcaminhostringObrigatório. O seu id, ou o seu IMEI.
cURL
curl "https://nways.ng/maps/v1/fleet/trackers/trk_4fQ9xLm2Za" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_API"
JavaScript
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()
Python
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

CampoTipoDescrição
idstring
imeistring
namestring
vehicleIdstring | null
vehicleNamestring
protocolstringUm 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.
modelstring
simNumberstring
networkstring
apnstring
statestringUm de: awaiting_first_fix, live, silent.
connectedboolean
heardbooleanO gateway da N-Ways já recebeu sinal deste dispositivo (mesmo antes de ter sido adicionado).
lastSeenAtstring (date-time) | null
lastFixAtstring (date-time) | nullA sua última posição GPS.
onMapAtstring (date-time) | nullA sua última posição que moveu o seu veículo no mapa.
positionobject | null
batteryPctnumber | null
batteryVnumber | null
extVoltageVnumber | null
ignitionboolean | null
satsinteger | null
odometerMnumber | null
claimedAtstring (date-time)
setupobjectOs 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.protocolstring
setup.hoststring
setup.portinteger
setup.urlstring
setup.smsTostring
setup.assumedboolean
setup.stepsobject[]
setup.steps[].ninteger
setup.steps[].keystring
setup.steps[].smsstring
setup.steps[].valuestring
setup.steps[].replystring
setup.steps[].optionalboolean
diagnosisstring[]O que o gateway viu e precisa de ser corrigido, do mais útil para o menos útil.
virtualVirtualTracker
virtual.runningboolean
virtual.protocolstring
virtual.startedAtstring (date-time)
virtual.untilstring (date-time)
virtual.sentinteger
virtual.answeredinteger
virtual.problemsstring[]
virtual.errorstring
200 OK
{
  "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

  • default Erro

Editar um rastreador (o seu veículo, modelo, SIM)

PATCH https://nways.ng/maps/v1/fleet/trackers/{trackerId}

Parâmetros

NomeOndeTipoDescrição
trackerIdcaminhostringObrigatório. O seu id, ou o seu IMEI.

Corpo do pedido

CampoTipoDescrição
imeistring15 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.
namestring
vehicleIdstringUm dos seus veículos ("" para desligar).
vehicleobjectEm vez disso, um veículo novo para ele.
vehicle.namestring
vehicle.modestring
vehicle.platestring
modelstringUm id de modelo do catálogo, ou not-sure (deduzido a partir da sua primeira ligação).
simNumberstring
networkstringUm id de rede do catálogo, ou other.
apnstringPor omissão: o da rede.
cURL
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"}'
JavaScript
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()
Python
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

CampoTipoDescrição
idstring
imeistring
namestring
vehicleIdstring | null
vehicleNamestring
protocolstringUm 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.
modelstring
simNumberstring
networkstring
apnstring
statestringUm de: awaiting_first_fix, live, silent.
connectedboolean
heardbooleanO gateway da N-Ways já recebeu sinal deste dispositivo (mesmo antes de ter sido adicionado).
lastSeenAtstring (date-time) | null
lastFixAtstring (date-time) | nullA sua última posição GPS.
onMapAtstring (date-time) | nullA sua última posição que moveu o seu veículo no mapa.
positionobject | null
batteryPctnumber | null
batteryVnumber | null
extVoltageVnumber | null
ignitionboolean | null
satsinteger | null
odometerMnumber | null
claimedAtstring (date-time)
setupobjectOs 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.protocolstring
setup.hoststring
setup.portinteger
setup.urlstring
setup.smsTostring
setup.assumedboolean
setup.stepsobject[]
setup.steps[].ninteger
setup.steps[].keystring
setup.steps[].smsstring
setup.steps[].valuestring
setup.steps[].replystring
setup.steps[].optionalboolean
diagnosisstring[]O que o gateway viu e precisa de ser corrigido, do mais útil para o menos útil.
virtualVirtualTracker
virtual.runningboolean
virtual.protocolstring
virtual.startedAtstring (date-time)
virtual.untilstring (date-time)
virtual.sentinteger
virtual.answeredinteger
virtual.problemsstring[]
virtual.errorstring
200 OK
{
  "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

  • default Erro

Remover um rastreador (pode depois ser adicionado por qualquer pessoa)

DELETE https://nways.ng/maps/v1/fleet/trackers/{trackerId}

Parâmetros

NomeOndeTipoDescrição
trackerIdcaminhostringObrigatório. O seu id, ou o seu IMEI.
cURL
curl -X DELETE "https://nways.ng/maps/v1/fleet/trackers/trk_4fQ9xLm2Za" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_API"
JavaScript
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()
Python
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

  • default Erro

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

NomeOndeTipoDescrição
trackerIdcaminhostringObrigatório.
afterconsultastringUm id de entrada: apenas as entradas posteriores.
limitconsultaintegerPredefinição: 200. ≤ 500.
cURL
curl "https://nways.ng/maps/v1/fleet/trackers/string/log" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_API"
JavaScript
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()
Python
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

CampoTipoDescrição
entriesTrackerLogEntry[]
entries[].idstringUm cursor: as entradas posteriores têm valores maiores.
entries[].atstring (date-time)
entries[].dirstringUm de: in, out, note.
entries[].kindstringlogin, position, heartbeat, alarm, status, handshake, unknown, ack, connect, disconnect, noise, refused
entries[].hexstring
entries[].asciistring
entries[].decodedobject
entries[].errorstring
entries[].remotestring
200 OK
{
  "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

  • default Erro

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

NomeOndeTipoDescrição
trackerIdcaminhostringObrigatório.
cURL
curl "https://nways.ng/maps/v1/fleet/trackers/string/stream" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_API"
JavaScript
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()
Python
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

  • default Erro

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

NomeOndeTipoDescrição
trackerIdcaminhostringObrigatório.

Corpo do pedido

CampoTipoDescrição
minutesintegerPredefinição: 3. ≥ 1, ≤ 10.
sosboolean
powerCutboolean
noAckWaitboolean
badCrcboolean
invalidFixboolean
clockSkewHnumber
backloginteger≤ 50.
langstring
cURL
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"}'
JavaScript
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()
Python
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

CampoTipoDescrição
runningboolean
protocolstring
startedAtstring (date-time)
untilstring (date-time)
sentinteger
answeredinteger
problemsstring[]
errorstring
202 OK
{
  "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

  • default Erro

Parar o seu rastreador virtual

DELETE https://nways.ng/maps/v1/fleet/trackers/{trackerId}/virtual

Parâmetros

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

  • default Erro

Comandos enviados a um rastreador (os últimos 30), e quais aceita

GET https://nways.ng/maps/v1/fleet/trackers/{trackerId}/commands

Parâmetros

NomeOndeTipoDescrição
trackerIdcaminhostringObrigatório.
cURL
curl "https://nways.ng/maps/v1/fleet/trackers/string/commands" \
  -H "X-NWays-Api-Key: A_SUA_CHAVE_API"
JavaScript
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()
Python
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

CampoTipoDescrição
commandsTrackerCommand[]
commands[].idstring
commands[].kindstringUm de: locate, restart, interval, heartbeat.
commands[].secondsinteger
commands[].statestringoffline e sms: envie antes o SMS. Um de: sent, answered, offline, failed, sms.
commands[].textstringO comando pela ligação.
commands[].smsstringO mesmo, como SMS.
commands[].smsTostring
commands[].replystringO que o dispositivo respondeu.
commands[].errorstring
commands[].createdBystring
commands[].createdAtstring (date-time)
commands[].sentAtstring (date-time) | null
commands[].answeredAtstring (date-time) | null
kindsobjectCada comando que aceita: pela sua ligação (gprs) ou apenas por SMS.
connectedboolean
200 OK
{
  "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

  • default Erro

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

NomeOndeTipoDescrição
trackerIdcaminhostringObrigatório.

Corpo do pedido

CampoTipoDescrição
kindstringObrigatório. Um de: locate, restart, interval, heartbeat.
secondsintegerinterval: 5–3600; heartbeat: 60–3600 (minutos inteiros).
cURL
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}'
JavaScript
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()
Python
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)

CampoTipoDescrição
idstring
kindstringUm de: locate, restart, interval, heartbeat.
secondsinteger
statestringoffline e sms: envie antes o SMS. Um de: sent, answered, offline, failed, sms.
textstringO comando pela ligação.
smsstringO mesmo, como SMS.
smsTostring
replystringO que o dispositivo respondeu.
errorstring
createdBystring
createdAtstring (date-time)
sentAtstring (date-time) | null
answeredAtstring (date-time) | null
201 OK
{
  "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

  • default Erro