N-Ways
Documentation développeursGPS trackers

GPS trackers

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.

Sur cette page
Remarque :

Envoyez votre clé avec key=VOTRE_CLE_API dans l’adresse, ou dans l’en-tête X-NWays-Api-Key. Clés d’API

Adresse de base : https://nways.ng/maps/v1/fleet

Lister vos traceurs, avec le nombre par état

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

Paramètres

NomOùTypeDescription
staterequêtestringAu choix: awaiting_first_fix, live, silent.
modelrequêtestringUn identifiant de modèle du catalogue.
qrequêtestringTrouve un nom, un IMEI, un véhicule ou un numéro de SIM.
cURL
curl "https://nways.ng/maps/v1/fleet/trackers" \
  -H "X-NWays-Api-Key: VOTRE_CLE_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()

Réponse

Traceurs

ChampTypeDescription
trackersTracker[]Obligatoire.
trackers[].idstring
trackers[].imeistring
trackers[].namestring
trackers[].vehicleIdstring | null
trackers[].vehicleNamestring
trackers[].protocolstringUn protocole que la passerelle de N-Ways lit (gt06, teltonika, h02, gps103, tk103, gl200, meitrack, ruptela, jt808, suntech, galileo, startek, topin, xexun, gosafe, tzone, wialon, watch, osmand), forward pour une unité transférée depuis votre plateforme de suivi, ou "" tant que son modèle ou sa première connexion ne le disent pas.
trackers[].modelstring
trackers[].simNumberstring
trackers[].networkstring
trackers[].apnstring
trackers[].statestringAu choix: awaiting_first_fix, live, silent.
trackers[].connectedboolean
trackers[].heardbooleanLa passerelle de N-Ways a entendu cet appareil (même avant son ajout).
trackers[].lastSeenAtstring (date-time) | null
trackers[].lastFixAtstring (date-time) | nullSa dernière position GPS.
trackers[].onMapAtstring (date-time) | nullSa dernière position qui a déplacé son véhicule sur la carte.
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[].setupobjectPour un seul traceur : les étapes SMS dans l’ordre (key, sms, reply, optional), ou les réglages d’une app de téléphone (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[]Ce que la passerelle a vu et qu’il faut corriger, le plus utile d’abord.
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
countsobjectObligatoire.
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": {}
}

Erreurs

  • default Erreur

Ajouter un traceur par son IMEI (le premier qui l’ajoute le garde)

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

Erreurs : INVALID_IMEI (pas 15 chiffres, ou chiffre de contrôle Luhn faux), INVALID_DEVICE_ID (l’identifiant d’un téléphone), TRACKER_EXISTS (déjà à vous), TRACKER_CLAIMED_ELSEWHERE (une autre organisation le détient), VEHICLE_NOT_FOUND.

Corps de la requête

ChampTypeDescription
imeistring15 chiffres (espaces et tirets ignorés) ; l’identifiant d’appareil d’un téléphone pour le modèle osmand-phone, l’identifiant d’unité d’une plateforme pour le modèle forwarded.
namestring
vehicleIdstringUn de vos véhicules ("" pour le détacher).
vehicleobjectUn nouveau véhicule pour lui, à la place.
vehicle.namestring
vehicle.modestring
vehicle.platestring
modelstringUn identifiant de modèle du catalogue, ou not-sure (appris à sa première connexion).
simNumberstring
networkstringUn identifiant de réseau du catalogue, ou other.
apnstringPar défaut : celui du réseau.
cURL
curl -X POST "https://nways.ng/maps/v1/fleet/trackers" \
  -H "X-NWays-Api-Key: VOTRE_CLE_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()

Réponse

Ajouté

ChampTypeDescription
idstring
imeistring
namestring
vehicleIdstring | null
vehicleNamestring
protocolstringUn protocole que la passerelle de N-Ways lit (gt06, teltonika, h02, gps103, tk103, gl200, meitrack, ruptela, jt808, suntech, galileo, startek, topin, xexun, gosafe, tzone, wialon, watch, osmand), forward pour une unité transférée depuis votre plateforme de suivi, ou "" tant que son modèle ou sa première connexion ne le disent pas.
modelstring
simNumberstring
networkstring
apnstring
statestringAu choix: awaiting_first_fix, live, silent.
connectedboolean
heardbooleanLa passerelle de N-Ways a entendu cet appareil (même avant son ajout).
lastSeenAtstring (date-time) | null
lastFixAtstring (date-time) | nullSa dernière position GPS.
onMapAtstring (date-time) | nullSa dernière position qui a déplacé son véhicule sur la carte.
positionobject | null
batteryPctnumber | null
batteryVnumber | null
extVoltageVnumber | null
ignitionboolean | null
satsinteger | null
odometerMnumber | null
claimedAtstring (date-time)
setupobjectPour un seul traceur : les étapes SMS dans l’ordre (key, sms, reply, optional), ou les réglages d’une app de téléphone (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[]Ce que la passerelle a vu et qu’il faut corriger, le plus utile d’abord.
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"
  }
}

Erreurs

  • default Erreur

Le catalogue des appareils, les réseaux SIM de votre pays et leurs APN, et où les appareils envoient

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

models : chaque modèle (avec son status supported | coming, ses façons de se connecter et sa famille), puis forwarded et not-sure. brands, families, protocols, counts : comme GET https://nways.ng/v1/trackers/catalogue. networks : ceux de votre pays ; unverified : un APN tiré d’une liste publique, pas encore vérifié sur une vraie SIM.

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

Réponse

Catalogue

ChampTypeDescription
modelsTrackerModel[]
models[].idstring
models[].brandstring
models[].brandIdstring
models[].namestring
models[].protocolstring
models[].familystringSon jeu de commandes (SMS de réglage, logiciel, commandes).
models[].kindstringAu choix: vehicle, asset, personal, obd, phone.
models[].passwordstringLe mot de passe SMS d’origine.
models[].popularboolean
models[].statusstringAu choix: supported, coming.
models[].methodsstring[]
brandsobject[]
familiesobject
protocolsobject[]
protocols[].idstring
protocols[].namestring
protocols[].statusstringAu choix: 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"
  ]
}

Erreurs

  • default Erreur

Ajouter plusieurs traceurs depuis un CSV (vérifiez d’abord avec dryRun)

POST https://nways.ng/maps/v1/fleet/trackers/import

Colonnes repérées par leur en-tête, dans n’importe quel ordre, virgules ou points-virgules : imei, vehicle (l’un des vôtres par identifiant, nom ou plaque, ou un nouveau de ce nom), model (un identifiant du catalogue ou « Marque Modèle » ; vide : pas sûr), sim, network, et au choix apn, name, plate, type. 1 000 lignes au plus. Chaque ligne dit ce qui ne va pas (issues : imei_missing, imei_invalid, imei_check_digit, imei_duplicate, imei_yours, imei_elsewhere, model_unknown, network_unknown, vehicle_missing, mode_unknown) ; avec dryRun à false, les bonnes lignes sont ajoutées et les autres laissées de côté.

Corps de la requête

ChampTypeDescription
csvstringObligatoire.
dryRunboolean
cURL
curl -X POST "https://nways.ng/maps/v1/fleet/trackers/import" \
  -H "X-NWays-Api-Key: VOTRE_CLE_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()

Réponse

Chaque ligne

ChampTypeDescription
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
}

Erreurs

  • default Erreur

La fiche des installateurs, les SMS de réglage de chaque traceur dans l’ordre (CSV)

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

Paramètres

NomOùTypeDescription
idsrequêtestringIdentifiants de traceurs, séparés par des virgules. Par défaut : les traceurs pas encore sur la carte.
langrequêtestringAu choix: en, fr, pt. Par défaut: en.
cURL
curl "https://nways.ng/maps/v1/fleet/trackers/setup.csv" \
  -H "X-NWays-Api-Key: VOTRE_CLE_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()

Réponse

Une ligne par SMS : IMEI, traceur, véhicule, modèle, numéro de SIM, étape, à faire, SMS, réponse.

Erreurs

  • default Erreur

Le transfert depuis votre plateforme de suivi, ses adresses et les unités qu’elle envoie

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

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

Réponse

Transfert

ChampTypeDescription
enabledboolean
tokenstring | nullLa clé de vos adresses : gardez-la secrète.
urlsobject | null
urls.traccarstring
urls.osmandstring
urls.flespistring
urls.webhookstring
urls.bearerstring
wialonobject
wialon.hoststring
wialon.portinteger
wialon.passwordstring
wialon.statusstringAu choix: supported, coming.
unitsobject[]
units[].unitIdstring
units[].sourcestringAu choix: 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[].trackerIdstringRempli une fois qu’il est l’un de vos traceurs.
units[].trackerNamestring
units[].elsewherebooleanUne autre organisation détient cet IMEI.
units[].lastPayloadobjectCe que la plateforme a envoyé en dernier (unités pas encore ajoutées).
lastAtstring (date-time) | null
lastBySourceobject
unknownintegerUnités pas encore ajoutées.
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
}

Erreurs

  • default Erreur

Activer le transfert, ou lui donner un nouveau jeton (l’ancien cesse aussitôt)

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: VOTRE_CLE_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()

Réponse

Transfert

ChampTypeDescription
enabledboolean
tokenstring | nullLa clé de vos adresses : gardez-la secrète.
urlsobject | null
urls.traccarstring
urls.osmandstring
urls.flespistring
urls.webhookstring
urls.bearerstring
wialonobject
wialon.hoststring
wialon.portinteger
wialon.passwordstring
wialon.statusstringAu choix: supported, coming.
unitsobject[]
units[].unitIdstring
units[].sourcestringAu choix: 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[].trackerIdstringRempli une fois qu’il est l’un de vos traceurs.
units[].trackerNamestring
units[].elsewherebooleanUne autre organisation détient cet IMEI.
units[].lastPayloadobjectCe que la plateforme a envoyé en dernier (unités pas encore ajoutées).
lastAtstring (date-time) | null
lastBySourceobject
unknownintegerUnités pas encore ajoutées.
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
}

Erreurs

  • default Erreur

Désactiver le transfert (les unités restent listées)

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: VOTRE_CLE_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()

Réponse

Transfert

ChampTypeDescription
enabledboolean
tokenstring | nullLa clé de vos adresses : gardez-la secrète.
urlsobject | null
urls.traccarstring
urls.osmandstring
urls.flespistring
urls.webhookstring
urls.bearerstring
wialonobject
wialon.hoststring
wialon.portinteger
wialon.passwordstring
wialon.statusstringAu choix: supported, coming.
unitsobject[]
units[].unitIdstring
units[].sourcestringAu choix: 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[].trackerIdstringRempli une fois qu’il est l’un de vos traceurs.
units[].trackerNamestring
units[].elsewherebooleanUne autre organisation détient cet IMEI.
units[].lastPayloadobjectCe que la plateforme a envoyé en dernier (unités pas encore ajoutées).
lastAtstring (date-time) | null
lastBySourceobject
unknownintegerUnités pas encore ajoutées.
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
}

Erreurs

  • default Erreur

Ajouter une unité transférée à vos traceurs (un nouveau véhicule à son nom, sauf si vous en donnez un)

POST https://nways.ng/maps/v1/fleet/trackers/forwarding/units/{unitId}/add

Paramètres

NomOùTypeDescription
unitIdcheminstringObligatoire.

Corps de la requête

ChampTypeDescription
imeistring15 chiffres (espaces et tirets ignorés) ; l’identifiant d’appareil d’un téléphone pour le modèle osmand-phone, l’identifiant d’unité d’une plateforme pour le modèle forwarded.
namestring
vehicleIdstringUn de vos véhicules ("" pour le détacher).
vehicleobjectUn nouveau véhicule pour lui, à la place.
vehicle.namestring
vehicle.modestring
vehicle.platestring
modelstringUn identifiant de modèle du catalogue, ou not-sure (appris à sa première connexion).
simNumberstring
networkstringUn identifiant de réseau du catalogue, ou other.
apnstringPar défaut : celui du réseau.
cURL
curl -X POST "https://nways.ng/maps/v1/fleet/trackers/forwarding/units/string/add" \
  -H "X-NWays-Api-Key: VOTRE_CLE_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()

Réponse

Ajouté

ChampTypeDescription
idstring
imeistring
namestring
vehicleIdstring | null
vehicleNamestring
protocolstringUn protocole que la passerelle de N-Ways lit (gt06, teltonika, h02, gps103, tk103, gl200, meitrack, ruptela, jt808, suntech, galileo, startek, topin, xexun, gosafe, tzone, wialon, watch, osmand), forward pour une unité transférée depuis votre plateforme de suivi, ou "" tant que son modèle ou sa première connexion ne le disent pas.
modelstring
simNumberstring
networkstring
apnstring
statestringAu choix: awaiting_first_fix, live, silent.
connectedboolean
heardbooleanLa passerelle de N-Ways a entendu cet appareil (même avant son ajout).
lastSeenAtstring (date-time) | null
lastFixAtstring (date-time) | nullSa dernière position GPS.
onMapAtstring (date-time) | nullSa dernière position qui a déplacé son véhicule sur la carte.
positionobject | null
batteryPctnumber | null
batteryVnumber | null
extVoltageVnumber | null
ignitionboolean | null
satsinteger | null
odometerMnumber | null
claimedAtstring (date-time)
setupobjectPour un seul traceur : les étapes SMS dans l’ordre (key, sms, reply, optional), ou les réglages d’une app de téléphone (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[]Ce que la passerelle a vu et qu’il faut corriger, le plus utile d’abord.
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"
  }
}

Erreurs

  • default Erreur

Oublier une unité transférée (elle revient si votre plateforme l’envoie à nouveau)

DELETE https://nways.ng/maps/v1/fleet/trackers/forwarding/units/{unitId}

Paramètres

NomOùTypeDescription
unitIdcheminstringObligatoire.
cURL
curl -X DELETE "https://nways.ng/maps/v1/fleet/trackers/forwarding/units/string" \
  -H "X-NWays-Api-Key: VOTRE_CLE_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()

Réponse

Oublié

Erreurs

  • default Erreur

Vos demandes de transfert de traceurs ici, et les traceurs partis ailleurs

GET https://nways.ng/maps/v1/fleet/tracker-transfers

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

Réponse

Transferts

ChampTypeDescription
transfersTrackerTransfer[]
transfers[].idstring
transfers[].imeistring
transfers[].directionstringAu choix: in, out.
transfers[].statestringAu choix: pending, waiting, moved, expired, cancelled.
transfers[].vehicleIdstring | null
transfers[].restartSmsstringCe qu’il faut envoyer à l’appareil pour qu’il se reconnecte.
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
}

Erreurs

  • default Erreur

Demander un traceur qu’une autre organisation détient (propriétaires et administrateurs)

POST https://nways.ng/maps/v1/fleet/tracker-transfers

Erreurs : TRACKER_NOT_CLAIMED (personne ne le détient : ajoutez-le), TRACKER_EXISTS (déjà à vous), TRANSFER_NOT_PROVABLE (un téléphone ou une unité transférée : son organisation le retire).

Corps de la requête

ChampTypeDescription
imeistringObligatoire.
vehicleIdstring
cURL
curl -X POST "https://nways.ng/maps/v1/fleet/tracker-transfers" \
  -H "X-NWays-Api-Key: VOTRE_CLE_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()

Réponse

Demandé

ChampTypeDescription
idstring
imeistring
directionstringAu choix: in, out.
statestringAu choix: pending, waiting, moved, expired, cancelled.
vehicleIdstring | null
restartSmsstringCe qu’il faut envoyer à l’appareil pour qu’il se reconnecte.
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"
}

Erreurs

  • default Erreur

Vous faites reconnecter l’appareil maintenant (son SMS de redémarrage) ; une nouvelle connexion dans les 3 minutes le transfère

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

Paramètres

NomOùTypeDescription
transferIdcheminstringObligatoire.
cURL
curl -X POST "https://nways.ng/maps/v1/fleet/tracker-transfers/trf_4fQ9xLm2Za/start" \
  -H "X-NWays-Api-Key: VOTRE_CLE_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()

Réponse

En attente

ChampTypeDescription
idstring
imeistring
directionstringAu choix: in, out.
statestringAu choix: pending, waiting, moved, expired, cancelled.
vehicleIdstring | null
restartSmsstringCe qu’il faut envoyer à l’appareil pour qu’il se reconnecte.
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"
}

Erreurs

  • default Erreur

Retirer une demande

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

Paramètres

NomOùTypeDescription
transferIdcheminstringObligatoire.
cURL
curl -X DELETE "https://nways.ng/maps/v1/fleet/tracker-transfers/string" \
  -H "X-NWays-Api-Key: VOTRE_CLE_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()

Réponse

Retirée

Erreurs

  • default Erreur

Obtenir un traceur, ses étapes de configuration et ce qui ne va pas

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

Paramètres

NomOùTypeDescription
trackerIdcheminstringObligatoire. Son identifiant, ou son IMEI.
cURL
curl "https://nways.ng/maps/v1/fleet/trackers/trk_4fQ9xLm2Za" \
  -H "X-NWays-Api-Key: VOTRE_CLE_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()

Réponse

Traceur

ChampTypeDescription
idstring
imeistring
namestring
vehicleIdstring | null
vehicleNamestring
protocolstringUn protocole que la passerelle de N-Ways lit (gt06, teltonika, h02, gps103, tk103, gl200, meitrack, ruptela, jt808, suntech, galileo, startek, topin, xexun, gosafe, tzone, wialon, watch, osmand), forward pour une unité transférée depuis votre plateforme de suivi, ou "" tant que son modèle ou sa première connexion ne le disent pas.
modelstring
simNumberstring
networkstring
apnstring
statestringAu choix: awaiting_first_fix, live, silent.
connectedboolean
heardbooleanLa passerelle de N-Ways a entendu cet appareil (même avant son ajout).
lastSeenAtstring (date-time) | null
lastFixAtstring (date-time) | nullSa dernière position GPS.
onMapAtstring (date-time) | nullSa dernière position qui a déplacé son véhicule sur la carte.
positionobject | null
batteryPctnumber | null
batteryVnumber | null
extVoltageVnumber | null
ignitionboolean | null
satsinteger | null
odometerMnumber | null
claimedAtstring (date-time)
setupobjectPour un seul traceur : les étapes SMS dans l’ordre (key, sms, reply, optional), ou les réglages d’une app de téléphone (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[]Ce que la passerelle a vu et qu’il faut corriger, le plus utile d’abord.
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"
  }
}

Erreurs

  • default Erreur

Modifier un traceur (son véhicule, son modèle, sa SIM)

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

Paramètres

NomOùTypeDescription
trackerIdcheminstringObligatoire. Son identifiant, ou son IMEI.

Corps de la requête

ChampTypeDescription
imeistring15 chiffres (espaces et tirets ignorés) ; l’identifiant d’appareil d’un téléphone pour le modèle osmand-phone, l’identifiant d’unité d’une plateforme pour le modèle forwarded.
namestring
vehicleIdstringUn de vos véhicules ("" pour le détacher).
vehicleobjectUn nouveau véhicule pour lui, à la place.
vehicle.namestring
vehicle.modestring
vehicle.platestring
modelstringUn identifiant de modèle du catalogue, ou not-sure (appris à sa première connexion).
simNumberstring
networkstringUn identifiant de réseau du catalogue, ou other.
apnstringPar défaut : celui du réseau.
cURL
curl -X PATCH "https://nways.ng/maps/v1/fleet/trackers/trk_4fQ9xLm2Za" \
  -H "X-NWays-Api-Key: VOTRE_CLE_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()

Réponse

Traceur

ChampTypeDescription
idstring
imeistring
namestring
vehicleIdstring | null
vehicleNamestring
protocolstringUn protocole que la passerelle de N-Ways lit (gt06, teltonika, h02, gps103, tk103, gl200, meitrack, ruptela, jt808, suntech, galileo, startek, topin, xexun, gosafe, tzone, wialon, watch, osmand), forward pour une unité transférée depuis votre plateforme de suivi, ou "" tant que son modèle ou sa première connexion ne le disent pas.
modelstring
simNumberstring
networkstring
apnstring
statestringAu choix: awaiting_first_fix, live, silent.
connectedboolean
heardbooleanLa passerelle de N-Ways a entendu cet appareil (même avant son ajout).
lastSeenAtstring (date-time) | null
lastFixAtstring (date-time) | nullSa dernière position GPS.
onMapAtstring (date-time) | nullSa dernière position qui a déplacé son véhicule sur la carte.
positionobject | null
batteryPctnumber | null
batteryVnumber | null
extVoltageVnumber | null
ignitionboolean | null
satsinteger | null
odometerMnumber | null
claimedAtstring (date-time)
setupobjectPour un seul traceur : les étapes SMS dans l’ordre (key, sms, reply, optional), ou les réglages d’une app de téléphone (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[]Ce que la passerelle a vu et qu’il faut corriger, le plus utile d’abord.
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"
  }
}

Erreurs

  • default Erreur

Retirer un traceur (n’importe qui peut alors l’ajouter)

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

Paramètres

NomOùTypeDescription
trackerIdcheminstringObligatoire. Son identifiant, ou son IMEI.
cURL
curl -X DELETE "https://nways.ng/maps/v1/fleet/trackers/trk_4fQ9xLm2Za" \
  -H "X-NWays-Api-Key: VOTRE_CLE_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()

Réponse

Retiré

Erreurs

  • default Erreur

Le journal de l’appareil (connexions, trames brutes, champs décodés, réponses envoyées, erreurs), du plus ancien au plus récent

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

Les 500 dernières entrées et 7 jours sont gardés. Sans after, les limit dernières entrées.

Paramètres

NomOùTypeDescription
trackerIdcheminstringObligatoire.
afterrequêtestringUn identifiant d’entrée : seulement les entrées suivantes.
limitrequêteintegerPar défaut: 200. ≤ 500.
cURL
curl "https://nways.ng/maps/v1/fleet/trackers/string/log" \
  -H "X-NWays-Api-Key: VOTRE_CLE_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()

Réponse

Entrées

ChampTypeDescription
entriesTrackerLogEntry[]
entries[].idstringUn curseur : les entrées suivantes en ont de plus grands.
entries[].atstring (date-time)
entries[].dirstringAu choix: 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"
    }
  ]
}

Erreurs

  • default Erreur

Le journal et l’état de l’appareil au fil de l’eau (server-sent events)

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

event: state (le Tracker) et event: log (une TrackerLogEntry), en commençant par l’état et les 50 dernières entrées (ou celles après ?after=). Un commentaire toutes les 15 s le garde ouvert.

Paramètres

NomOùTypeDescription
trackerIdcheminstringObligatoire.
cURL
curl "https://nways.ng/maps/v1/fleet/trackers/string/stream" \
  -H "X-NWays-Api-Key: VOTRE_CLE_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()

Réponse

Un flux d’événements

Erreurs

  • default Erreur

Faire rouler un traceur virtuel pour celui-ci (son propre protocole, via la passerelle de N-Ways)

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

Un court trajet dans votre pays, une position toutes les 3 s, les réponses vérifiées octet par octet. Pannes à essayer : noAckWait, badCrc, invalidFix, clockSkewH (8 : un traceur à l’heure de Chine), backlog. Erreurs : VIRTUAL_RUNNING, TRACKER_NO_VEHICLE, TRACKER_CONNECTED (le vrai est connecté), VIRTUAL_TRACKER_UNAVAILABLE.

Paramètres

NomOùTypeDescription
trackerIdcheminstringObligatoire.

Corps de la requête

ChampTypeDescription
minutesintegerPar défaut: 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: VOTRE_CLE_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()

Réponse

Démarré

ChampTypeDescription
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"
}

Erreurs

  • default Erreur

Arrêter son traceur virtuel

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

Paramètres

NomOùTypeDescription
trackerIdcheminstringObligatoire.
cURL
curl -X DELETE "https://nways.ng/maps/v1/fleet/trackers/string/virtual" \
  -H "X-NWays-Api-Key: VOTRE_CLE_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()

Réponse

Arrêté

Erreurs

  • default Erreur

Les commandes envoyées à un traceur (les 30 dernières), et celles qu’il accepte

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

Paramètres

NomOùTypeDescription
trackerIdcheminstringObligatoire.
cURL
curl "https://nways.ng/maps/v1/fleet/trackers/string/commands" \
  -H "X-NWays-Api-Key: VOTRE_CLE_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()

Réponse

Commandes

ChampTypeDescription
commandsTrackerCommand[]
commands[].idstring
commands[].kindstringAu choix: locate, restart, interval, heartbeat.
commands[].secondsinteger
commands[].statestringoffline et sms : envoyez plutôt le SMS. Au choix: sent, answered, offline, failed, sms.
commands[].textstringLa commande par la connexion.
commands[].smsstringLa même sous forme de SMS.
commands[].smsTostring
commands[].replystringCe que l’appareil a répondu.
commands[].errorstring
commands[].createdBystring
commands[].createdAtstring (date-time)
commands[].sentAtstring (date-time) | null
commands[].answeredAtstring (date-time) | null
kindsobjectChaque commande qu’il accepte : par sa connexion (gprs) ou par SMS seulement.
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
}

Erreurs

  • default Erreur

Envoyer une commande (propriétaires et administrateurs) ; sa réponse arrive dans le journal de l’appareil

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

Connecté et son protocole l’accepte par la connexion : envoyée, puis répondue. Sinon : offline ou sms, avec le SMS à lui envoyer (sms, smsTo). Erreurs : COMMAND_NOT_SUPPORTED, COMMANDS_NOT_SUPPORTED (un téléphone ou une unité transférée).

Paramètres

NomOùTypeDescription
trackerIdcheminstringObligatoire.

Corps de la requête

ChampTypeDescription
kindstringObligatoire. Au choix: locate, restart, interval, heartbeat.
secondsintegerinterval : 5 à 3600 ; heartbeat : 60 à 3600 (en minutes entières).
cURL
curl -X POST "https://nways.ng/maps/v1/fleet/trackers/string/commands" \
  -H "X-NWays-Api-Key: VOTRE_CLE_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()

Réponse

Envoyée (ou le SMS à envoyer)

ChampTypeDescription
idstring
kindstringAu choix: locate, restart, interval, heartbeat.
secondsinteger
statestringoffline et sms : envoyez plutôt le SMS. Au choix: sent, answered, offline, failed, sms.
textstringLa commande par la connexion.
smsstringLa même sous forme de SMS.
smsTostring
replystringCe que l’appareil a répondu.
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"
}

Erreurs

  • default Erreur