N-Ways
Developer docsReceiving links

Receiving links

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.

On this page
Note:

Send your key as key=YOUR_API_KEY on the address, or in the X-NWays-Api-Key header. API keys

Base address: https://nways.ng/maps/v1/fleet

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

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

Links

FieldTypeDescription
linksInboundLink[]
links[].idstring
links[].namestring
links[].formatstringOne of: generic, woocommerce.
links[].urlstring
links[].secretstringOnly when made or rotated.
links[].pickupPlaceIdstring | null
links[].dispatchstring | object | null
links[].idPrefixstring
links[].readyStatusstring
links[].testboolean
links[].activeboolean
links[].createdAtstring (date-time)
links[].updatedAtstring (date-time)
links[].lastAtstring (date-time) | null
links[].countsobjectCalls logged (30 days) by state.
links[].madeintegerDeliveries its calls made (30 days), those held for their address too.
links[].openintegerWhat still needs you: deliveries still held for their address, and failed calls with nothing taken from that order since.
formatsobject[]
formats[].idstring
formats[].namestring
formats[].signaturestring
formats[].platformsstring[]
200 OK
{
  "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"
      ]
    }
  ]
}
  • default Error

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

FieldTypeDescription
namestringRequired when making one. Up to 80 characters.
formatstringOne of: generic, woocommerce. Default: generic.
pickupPlaceIdstringOne of your pickup places: the orders' pickup.
dispatchstring | objectAn order's own dispatch: auto, hold or manual, or an object; what it leaves out comes from your automation rules.
idPrefixstringDelivery ids are <idPrefix>-<order id> (default: the format).
readyStatusstringWooCommerce: the order status that means ready for pickup (e.g. ready-for-pickup).
testbooleanIts orders are test deliveries, never given to a rider or driver.
activebooleanDefault: true.
cURL
curl -X POST "https://nways.ng/maps/v1/fleet/inbound" \
  -H "X-NWays-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"My shop","format":"woocommerce","pickupPlaceId":"plc_4fQ9xLm2Za","readyStatus":"ready-for-pickup"}'
JavaScript
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()
Python
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()

Link with secret

FieldTypeDescription
idstring
namestring
formatstringOne of: generic, woocommerce.
urlstring
secretstringOnly when made or rotated.
pickupPlaceIdstring | null
dispatchstring | object | null
idPrefixstring
readyStatusstring
testboolean
activeboolean
createdAtstring (date-time)
updatedAtstring (date-time)
lastAtstring (date-time) | null
countsobjectCalls logged (30 days) by state.
madeintegerDeliveries its calls made (30 days), those held for their address too.
openintegerWhat still needs you: deliveries still held for their address, and failed calls with nothing taken from that order since.
201 OK
{
  "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
}
  • default Error

GET https://nways.ng/maps/v1/fleet/inbound/{id}

NameInTypeDescription
idpathstringRequired.
cURL
curl "https://nways.ng/maps/v1/fleet/inbound/string" \
  -H "X-NWays-Api-Key: YOUR_API_KEY"
JavaScript
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()
Python
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()

Link

FieldTypeDescription
idstring
namestring
formatstringOne of: generic, woocommerce.
urlstring
secretstringOnly when made or rotated.
pickupPlaceIdstring | null
dispatchstring | object | null
idPrefixstring
readyStatusstring
testboolean
activeboolean
createdAtstring (date-time)
updatedAtstring (date-time)
lastAtstring (date-time) | null
countsobjectCalls logged (30 days) by state.
madeintegerDeliveries its calls made (30 days), those held for their address too.
openintegerWhat still needs you: deliveries still held for their address, and failed calls with nothing taken from that order since.
200 OK
{
  "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
}
  • default Error

PATCH https://nways.ng/maps/v1/fleet/inbound/{id}

NameInTypeDescription
idpathstringRequired.
FieldTypeDescription
namestringRequired when making one. Up to 80 characters.
formatstringOne of: generic, woocommerce. Default: generic.
pickupPlaceIdstringOne of your pickup places: the orders' pickup.
dispatchstring | objectAn order's own dispatch: auto, hold or manual, or an object; what it leaves out comes from your automation rules.
idPrefixstringDelivery ids are <idPrefix>-<order id> (default: the format).
readyStatusstringWooCommerce: the order status that means ready for pickup (e.g. ready-for-pickup).
testbooleanIts orders are test deliveries, never given to a rider or driver.
activebooleanDefault: true.
cURL
curl -X PATCH "https://nways.ng/maps/v1/fleet/inbound/string" \
  -H "X-NWays-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","format":"generic","pickupPlaceId":"string","dispatch":"auto","idPrefix":"string","readyStatus":"string","test":true,"active":true}'
JavaScript
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()
Python
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()

Link

FieldTypeDescription
idstring
namestring
formatstringOne of: generic, woocommerce.
urlstring
secretstringOnly when made or rotated.
pickupPlaceIdstring | null
dispatchstring | object | null
idPrefixstring
readyStatusstring
testboolean
activeboolean
createdAtstring (date-time)
updatedAtstring (date-time)
lastAtstring (date-time) | null
countsobjectCalls logged (30 days) by state.
madeintegerDeliveries its calls made (30 days), those held for their address too.
openintegerWhat still needs you: deliveries still held for their address, and failed calls with nothing taken from that order since.
200 OK
{
  "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
}
  • default Error

DELETE https://nways.ng/maps/v1/fleet/inbound/{id}

NameInTypeDescription
idpathstringRequired.
cURL
curl -X DELETE "https://nways.ng/maps/v1/fleet/inbound/string" \
  -H "X-NWays-Api-Key: YOUR_API_KEY"
JavaScript
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()
Python
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()

Deleted

No content.

  • default Error

POST https://nways.ng/maps/v1/fleet/inbound/{id}/rotate

NameInTypeDescription
idpathstringRequired.
cURL
curl -X POST "https://nways.ng/maps/v1/fleet/inbound/string/rotate" \
  -H "X-NWays-Api-Key: YOUR_API_KEY"
JavaScript
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()
Python
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()

Link with secret

FieldTypeDescription
idstring
namestring
formatstringOne of: generic, woocommerce.
urlstring
secretstringOnly when made or rotated.
pickupPlaceIdstring | null
dispatchstring | object | null
idPrefixstring
readyStatusstring
testboolean
activeboolean
createdAtstring (date-time)
updatedAtstring (date-time)
lastAtstring (date-time) | null
countsobjectCalls logged (30 days) by state.
madeintegerDeliveries its calls made (30 days), those held for their address too.
openintegerWhat still needs you: deliveries still held for their address, and failed calls with nothing taken from that order since.
200 OK
{
  "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
}
  • default Error

The link's log, newest first (30 days)

GET https://nways.ng/maps/v1/fleet/inbound/{id}/events

Parameters

NameInTypeDescription
idpathstringRequired.
statequerystringOne of: created, updated, duplicate, ignored, needs_address, failed.
limitqueryintegerDefault: 50. ≥ 1, ≤ 200.
pageTokenquerystring
cURL
curl "https://nways.ng/maps/v1/fleet/inbound/string/events" \
  -H "X-NWays-Api-Key: YOUR_API_KEY"
JavaScript
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()
Python
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()

Response

Log

FieldTypeDescription
eventsInboundEvent[]
events[].idstring
events[].eventstring
events[].orderIdstring
events[].taskIdstringThe delivery made or changed ("" when none).
events[].statestringOne of: created, updated, duplicate, ignored, needs_address, failed.
events[].reasonstring
events[].attemptsinteger
events[].retryableboolean
events[].payloadanyThe call as it came (null when not kept).
events[].createdAtstring (date-time)
events[].updatedAtstring (date-time)
totalinteger
countsobject
nextPageTokenstring | null
200 OK
{
  "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"
}

Errors

  • default Error

Run a logged call again as it came (409 NOT_RETRYABLE when it wasn't kept)

POST https://nways.ng/maps/v1/fleet/inbound/{id}/events/{eid}/retry

Parameters

NameInTypeDescription
idpathstringRequired.
eidpathstringRequired.
cURL
curl -X POST "https://nways.ng/maps/v1/fleet/inbound/string/events/string/retry" \
  -H "X-NWays-Api-Key: YOUR_API_KEY"
JavaScript
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()
Python
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()

Response

The entry with its new outcome

FieldTypeDescription
idstring
eventstring
orderIdstring
taskIdstringThe delivery made or changed ("" when none).
statestringOne of: created, updated, duplicate, ignored, needs_address, failed.
reasonstring
attemptsinteger
retryableboolean
payloadanyThe call as it came (null when not kept).
createdAtstring (date-time)
updatedAtstring (date-time)
200 OK
{
  "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"
}

Errors

  • default Error