Liens de réception
A link a shop posts its orders to (WooCommerce's webhooks, Zapier, Make, Wix Automations, a Google Sheet's script):
each order becomes a delivery under your automation rules. Post to the link's url (/v1/in/<token>), no key:
the token and the signature are the key. Format generic: the body below, signed
X-NWays-Signature: sha256=<hex HMAC-SHA256 of the body with the secret> (or Authorization: Bearer <secret> where
the sender can't sign). Format woocommerce: WooCommerce's order webhook as it comes (X-WC-Webhook-Signature).
The delivery's id is <idPrefix or format>-<order id>; a repeat does nothing new. At most 120 calls a minute per
link, 256 KB each. Every call is in the link's log for 30 days.
Sur cette page
- Vos liens de réception (sans secrets) et les formats qu’un lien accepte
- Créer un lien de réception (son secret s’affiche maintenant, une seule fois)
- Un lien de réception
- Modifier un lien (pickupPlaceId "" et dispatch null les effacent)
- Supprimer un lien et son journal (son adresse s’arrête aussitôt)
- Une nouvelle adresse et un nouveau secret (affichés une fois) ; les anciens s’arrêtent aussitôt
- Le journal du lien, du plus récent au plus ancien (30 jours)
- Relancer un appel journalisé tel qu’il est arrivé (409 NOT_RETRYABLE s’il n’a pas été gardé)
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
Vos liens de réception (sans secrets) et les formats qu’un lien accepte
GET https://nways.ng/maps/v1/fleet/inbound
curl "https://nways.ng/maps/v1/fleet/inbound" \
-H "X-NWays-Api-Key: VOTRE_CLE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/inbound', {
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY },
})
const data = await res.json()import os
import requests
res = requests.get(
"https://nways.ng/maps/v1/fleet/inbound",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Réponse
Liens
| Champ | Type | Description |
|---|---|---|
links | InboundLink[] | |
links[].id | string | |
links[].name | string | |
links[].format | string | Au choix: generic, woocommerce. |
links[].url | string | |
links[].secret | string | Seulement à la création ou au renouvellement. |
links[].pickupPlaceId | string | null | |
links[].dispatch | string | object | null | |
links[].idPrefix | string | |
links[].readyStatus | string | |
links[].test | boolean | |
links[].active | boolean | |
links[].createdAt | string (date-time) | |
links[].updatedAt | string (date-time) | |
links[].lastAt | string (date-time) | null | |
links[].counts | object | Appels journalisés (30 jours) par état. |
links[].made | integer | Les livraisons créées par ses appels (30 jours), y compris celles en attente de leur adresse. |
links[].open | integer | Ce qui vous attend encore : les livraisons toujours en attente de leur adresse, et les appels en échec sans rien reçu pour cette commande depuis. |
formats | object[] | |
formats[].id | string | |
formats[].name | string | |
formats[].signature | string | |
formats[].platforms | string[] |
{
"links": [
{
"id": "inl_4fQ9xLm2Za",
"name": "string",
"format": "generic",
"url": "https://map.nways.ng/v1/in/in_…",
"secret": "string",
"pickupPlaceId": "string",
"dispatch": "auto",
"idPrefix": "string",
"readyStatus": "string",
"test": true,
"active": true,
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00",
"lastAt": "2026-10-15T09:00:00+01:00",
"counts": {},
"made": 0,
"open": 0
}
],
"formats": [
{
"id": "string",
"name": "string",
"signature": "string",
"platforms": [
"string"
]
}
]
}Erreurs
defaultErreur
Créer un lien de réception (son secret s’affiche maintenant, une seule fois)
POST https://nways.ng/maps/v1/fleet/inbound
Corps de la requête
| Champ | Type | Description |
|---|---|---|
name | string | Obligatoire à la création. 80 caractères au plus. |
format | string | Au choix: generic, woocommerce. Par défaut: generic. |
pickupPlaceId | string | Un de vos lieux d’enlèvement : l’enlèvement des commandes. |
dispatch | string | object | L’envoi propre à une commande : auto, hold ou manual, ou un objet ; ce qu’il omet vient de vos règles d’automatisation. |
idPrefix | string | Les id de livraison sont <idPrefix>-<id de commande> (par défaut : le format). |
readyStatus | string | WooCommerce : le statut de commande qui veut dire prête à être récupérée (par ex. ready-for-pickup). |
test | boolean | Ses commandes sont des livraisons d’essai, jamais confiées à un livreur ou un chauffeur. |
active | boolean | Par défaut: true. |
curl -X POST "https://nways.ng/maps/v1/fleet/inbound" \
-H "X-NWays-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{"name":"My shop","format":"woocommerce","pickupPlaceId":"plc_4fQ9xLm2Za","readyStatus":"ready-for-pickup"}'const res = await fetch('https://nways.ng/maps/v1/fleet/inbound', {
method: 'POST',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
"name": "My shop",
"format": "woocommerce",
"pickupPlaceId": "plc_4fQ9xLm2Za",
"readyStatus": "ready-for-pickup"
}),
})
const data = await res.json()import os
import requests
res = requests.post(
"https://nways.ng/maps/v1/fleet/inbound",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
json={"name": "My shop", "format": "woocommerce", "pickupPlaceId": "plc_4fQ9xLm2Za", "readyStatus": "ready-for-pickup"},
timeout=10,
)
data = res.json()Réponse
Lien avec secret
| Champ | Type | Description |
|---|---|---|
id | string | |
name | string | |
format | string | Au choix: generic, woocommerce. |
url | string | |
secret | string | Seulement à la création ou au renouvellement. |
pickupPlaceId | string | null | |
dispatch | string | object | null | |
idPrefix | string | |
readyStatus | string | |
test | boolean | |
active | boolean | |
createdAt | string (date-time) | |
updatedAt | string (date-time) | |
lastAt | string (date-time) | null | |
counts | object | Appels journalisés (30 jours) par état. |
made | integer | Les livraisons créées par ses appels (30 jours), y compris celles en attente de leur adresse. |
open | integer | Ce qui vous attend encore : les livraisons toujours en attente de leur adresse, et les appels en échec sans rien reçu pour cette commande depuis. |
{
"id": "inl_4fQ9xLm2Za",
"name": "string",
"format": "generic",
"url": "https://map.nways.ng/v1/in/in_…",
"secret": "string",
"pickupPlaceId": "string",
"dispatch": "auto",
"idPrefix": "string",
"readyStatus": "string",
"test": true,
"active": true,
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00",
"lastAt": "2026-10-15T09:00:00+01:00",
"counts": {},
"made": 0,
"open": 0
}Erreurs
defaultErreur
Un lien de réception
GET https://nways.ng/maps/v1/fleet/inbound/{id}
Paramètres
| Nom | Où | Type | Description |
|---|---|---|---|
id | chemin | string | Obligatoire. |
curl "https://nways.ng/maps/v1/fleet/inbound/string" \
-H "X-NWays-Api-Key: VOTRE_CLE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/inbound/string', {
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY },
})
const data = await res.json()import os
import requests
res = requests.get(
"https://nways.ng/maps/v1/fleet/inbound/string",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Réponse
Lien
| Champ | Type | Description |
|---|---|---|
id | string | |
name | string | |
format | string | Au choix: generic, woocommerce. |
url | string | |
secret | string | Seulement à la création ou au renouvellement. |
pickupPlaceId | string | null | |
dispatch | string | object | null | |
idPrefix | string | |
readyStatus | string | |
test | boolean | |
active | boolean | |
createdAt | string (date-time) | |
updatedAt | string (date-time) | |
lastAt | string (date-time) | null | |
counts | object | Appels journalisés (30 jours) par état. |
made | integer | Les livraisons créées par ses appels (30 jours), y compris celles en attente de leur adresse. |
open | integer | Ce qui vous attend encore : les livraisons toujours en attente de leur adresse, et les appels en échec sans rien reçu pour cette commande depuis. |
{
"id": "inl_4fQ9xLm2Za",
"name": "string",
"format": "generic",
"url": "https://map.nways.ng/v1/in/in_…",
"secret": "string",
"pickupPlaceId": "string",
"dispatch": "auto",
"idPrefix": "string",
"readyStatus": "string",
"test": true,
"active": true,
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00",
"lastAt": "2026-10-15T09:00:00+01:00",
"counts": {},
"made": 0,
"open": 0
}Erreurs
defaultErreur
Modifier un lien (pickupPlaceId "" et dispatch null les effacent)
PATCH https://nways.ng/maps/v1/fleet/inbound/{id}
Paramètres
| Nom | Où | Type | Description |
|---|---|---|---|
id | chemin | string | Obligatoire. |
Corps de la requête
| Champ | Type | Description |
|---|---|---|
name | string | Obligatoire à la création. 80 caractères au plus. |
format | string | Au choix: generic, woocommerce. Par défaut: generic. |
pickupPlaceId | string | Un de vos lieux d’enlèvement : l’enlèvement des commandes. |
dispatch | string | object | L’envoi propre à une commande : auto, hold ou manual, ou un objet ; ce qu’il omet vient de vos règles d’automatisation. |
idPrefix | string | Les id de livraison sont <idPrefix>-<id de commande> (par défaut : le format). |
readyStatus | string | WooCommerce : le statut de commande qui veut dire prête à être récupérée (par ex. ready-for-pickup). |
test | boolean | Ses commandes sont des livraisons d’essai, jamais confiées à un livreur ou un chauffeur. |
active | boolean | Par défaut: true. |
curl -X PATCH "https://nways.ng/maps/v1/fleet/inbound/string" \
-H "X-NWays-Api-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{"name":"string","format":"generic","pickupPlaceId":"string","dispatch":"auto","idPrefix":"string","readyStatus":"string","test":true,"active":true}'const res = await fetch('https://nways.ng/maps/v1/fleet/inbound/string', {
method: 'PATCH',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
"name": "string",
"format": "generic",
"pickupPlaceId": "string",
"dispatch": "auto",
"idPrefix": "string",
"readyStatus": "string",
"test": true,
"active": true
}),
})
const data = await res.json()import os
import requests
res = requests.patch(
"https://nways.ng/maps/v1/fleet/inbound/string",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
json={"name": "string", "format": "generic", "pickupPlaceId": "string", "dispatch": "auto", "idPrefix": "string", "readyStatus": "string", "test": True, "active": True},
timeout=10,
)
data = res.json()Réponse
Lien
| Champ | Type | Description |
|---|---|---|
id | string | |
name | string | |
format | string | Au choix: generic, woocommerce. |
url | string | |
secret | string | Seulement à la création ou au renouvellement. |
pickupPlaceId | string | null | |
dispatch | string | object | null | |
idPrefix | string | |
readyStatus | string | |
test | boolean | |
active | boolean | |
createdAt | string (date-time) | |
updatedAt | string (date-time) | |
lastAt | string (date-time) | null | |
counts | object | Appels journalisés (30 jours) par état. |
made | integer | Les livraisons créées par ses appels (30 jours), y compris celles en attente de leur adresse. |
open | integer | Ce qui vous attend encore : les livraisons toujours en attente de leur adresse, et les appels en échec sans rien reçu pour cette commande depuis. |
{
"id": "inl_4fQ9xLm2Za",
"name": "string",
"format": "generic",
"url": "https://map.nways.ng/v1/in/in_…",
"secret": "string",
"pickupPlaceId": "string",
"dispatch": "auto",
"idPrefix": "string",
"readyStatus": "string",
"test": true,
"active": true,
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00",
"lastAt": "2026-10-15T09:00:00+01:00",
"counts": {},
"made": 0,
"open": 0
}Erreurs
defaultErreur
Supprimer un lien et son journal (son adresse s’arrête aussitôt)
DELETE https://nways.ng/maps/v1/fleet/inbound/{id}
Paramètres
| Nom | Où | Type | Description |
|---|---|---|---|
id | chemin | string | Obligatoire. |
curl -X DELETE "https://nways.ng/maps/v1/fleet/inbound/string" \
-H "X-NWays-Api-Key: VOTRE_CLE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/inbound/string', {
method: 'DELETE',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY },
})
const data = await res.json()import os
import requests
res = requests.delete(
"https://nways.ng/maps/v1/fleet/inbound/string",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Réponse
Supprimé
Pas de contenu.
Erreurs
defaultErreur
Une nouvelle adresse et un nouveau secret (affichés une fois) ; les anciens s’arrêtent aussitôt
POST https://nways.ng/maps/v1/fleet/inbound/{id}/rotate
Paramètres
| Nom | Où | Type | Description |
|---|---|---|---|
id | chemin | string | Obligatoire. |
curl -X POST "https://nways.ng/maps/v1/fleet/inbound/string/rotate" \
-H "X-NWays-Api-Key: VOTRE_CLE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/inbound/string/rotate', {
method: 'POST',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY },
})
const data = await res.json()import os
import requests
res = requests.post(
"https://nways.ng/maps/v1/fleet/inbound/string/rotate",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Réponse
Lien avec secret
| Champ | Type | Description |
|---|---|---|
id | string | |
name | string | |
format | string | Au choix: generic, woocommerce. |
url | string | |
secret | string | Seulement à la création ou au renouvellement. |
pickupPlaceId | string | null | |
dispatch | string | object | null | |
idPrefix | string | |
readyStatus | string | |
test | boolean | |
active | boolean | |
createdAt | string (date-time) | |
updatedAt | string (date-time) | |
lastAt | string (date-time) | null | |
counts | object | Appels journalisés (30 jours) par état. |
made | integer | Les livraisons créées par ses appels (30 jours), y compris celles en attente de leur adresse. |
open | integer | Ce qui vous attend encore : les livraisons toujours en attente de leur adresse, et les appels en échec sans rien reçu pour cette commande depuis. |
{
"id": "inl_4fQ9xLm2Za",
"name": "string",
"format": "generic",
"url": "https://map.nways.ng/v1/in/in_…",
"secret": "string",
"pickupPlaceId": "string",
"dispatch": "auto",
"idPrefix": "string",
"readyStatus": "string",
"test": true,
"active": true,
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00",
"lastAt": "2026-10-15T09:00:00+01:00",
"counts": {},
"made": 0,
"open": 0
}Erreurs
defaultErreur
Le journal du lien, du plus récent au plus ancien (30 jours)
GET https://nways.ng/maps/v1/fleet/inbound/{id}/events
Paramètres
| Nom | Où | Type | Description |
|---|---|---|---|
id | chemin | string | Obligatoire. |
state | requête | string | Au choix: created, updated, duplicate, ignored, needs_address, failed. |
limit | requête | integer | Par défaut: 50. ≥ 1, ≤ 200. |
pageToken | requête | string |
curl "https://nways.ng/maps/v1/fleet/inbound/string/events" \
-H "X-NWays-Api-Key: VOTRE_CLE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/inbound/string/events', {
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY },
})
const data = await res.json()import os
import requests
res = requests.get(
"https://nways.ng/maps/v1/fleet/inbound/string/events",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Réponse
Journal
| Champ | Type | Description |
|---|---|---|
events | InboundEvent[] | |
events[].id | string | |
events[].event | string | |
events[].orderId | string | |
events[].taskId | string | La livraison créée ou modifiée ("" si aucune). |
events[].state | string | Au choix: created, updated, duplicate, ignored, needs_address, failed. |
events[].reason | string | |
events[].attempts | integer | |
events[].retryable | boolean | |
events[].payload | any | L’appel tel qu’il est arrivé (null s’il n’a pas été gardé). |
events[].createdAt | string (date-time) | |
events[].updatedAt | string (date-time) | |
total | integer | |
counts | object | |
nextPageToken | string | null |
{
"events": [
{
"id": "ine_Qa71ZcR0mX",
"event": "order.created",
"orderId": "string",
"taskId": "string",
"state": "created",
"reason": "Delivery #1042 made.",
"attempts": 0,
"retryable": true,
"payload": "string",
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00"
}
],
"total": 0,
"counts": {},
"nextPageToken": "string"
}Erreurs
defaultErreur
Relancer un appel journalisé tel qu’il est arrivé (409 NOT_RETRYABLE s’il n’a pas été gardé)
POST https://nways.ng/maps/v1/fleet/inbound/{id}/events/{eid}/retry
Paramètres
| Nom | Où | Type | Description |
|---|---|---|---|
id | chemin | string | Obligatoire. |
eid | chemin | string | Obligatoire. |
curl -X POST "https://nways.ng/maps/v1/fleet/inbound/string/events/string/retry" \
-H "X-NWays-Api-Key: VOTRE_CLE_API"const res = await fetch('https://nways.ng/maps/v1/fleet/inbound/string/events/string/retry', {
method: 'POST',
headers: { 'X-NWays-Api-Key': process.env.NWAYS_API_KEY },
})
const data = await res.json()import os
import requests
res = requests.post(
"https://nways.ng/maps/v1/fleet/inbound/string/events/string/retry",
headers={"X-NWays-Api-Key": os.environ["NWAYS_API_KEY"]},
timeout=10,
)
data = res.json()Réponse
L’entrée avec son nouveau résultat
| Champ | Type | Description |
|---|---|---|
id | string | |
event | string | |
orderId | string | |
taskId | string | La livraison créée ou modifiée ("" si aucune). |
state | string | Au choix: created, updated, duplicate, ignored, needs_address, failed. |
reason | string | |
attempts | integer | |
retryable | boolean | |
payload | any | L’appel tel qu’il est arrivé (null s’il n’a pas été gardé). |
createdAt | string (date-time) | |
updatedAt | string (date-time) |
{
"id": "ine_Qa71ZcR0mX",
"event": "order.created",
"orderId": "string",
"taskId": "string",
"state": "created",
"reason": "Delivery #1042 made.",
"attempts": 0,
"retryable": true,
"payload": "string",
"createdAt": "2026-10-15T09:00:00+01:00",
"updatedAt": "2026-10-15T09:00:00+01:00"
}Erreurs
defaultErreur