{
  "info": {
    "name": "N-Ways Maps Platform",
    "description": "Every N-Ways Maps Platform request. Set apiKey to your key (restrict it to your servers’ IP addresses for use from Postman). Docs: https://nways.ng/developers/reference",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://nways.ng"
    },
    {
      "key": "apiKey",
      "value": "YOUR_API_KEY"
    }
  ],
  "item": [
    {
      "name": "Maps",
      "description": "Hosted styles, vector tiles, fonts and static map images.",
      "item": [
        {
          "name": "A hosted map style (one map load)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/styles/{style}.json",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "styles",
                "{style}.json"
              ],
              "query": [
                {
                  "key": "lang",
                  "value": "en",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "format",
                  "value": "mvt",
                  "description": "",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "style",
                  "value": "streets-light",
                  "description": ""
                }
              ]
            },
            "description": "A MapLibre style for the N-Ways street map with the key on every N-Ways URL (tiles, fonts). Point MapLibre GL JS\nor MapLibre Native at it: `style: 'https://nways.ng/maps/v1/styles/streets-light.json?key=nw_…'`. Each read is\none map load (SKU `map_loads`, product `tiles`). Tiles come one at a time (`/tiles/base/{z}/{x}/{y}.mvt`, every\ncountry, with `bounds` around all of them), or from each country's PMTiles archive with `format=pmtiles` (needs\nthe pmtiles protocol, as the web SDK registers): then the style has one source per country (`nways-ng`,\n`nways-gh`, …) and each layer once per country (`roads-ng`, `roads-gh`, …).\nReasons: STYLE_NOT_FOUND, LANG_INVALID, FORMAT_INVALID.\n"
          },
          "response": []
        },
        {
          "name": "Every country's tile archives",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/tiles/countries.json",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "tiles",
                "countries.json"
              ],
              "query": [],
              "variable": []
            },
            "description": "The countries N-Ways maps today, each with its ISO code, box (`bbox`: west, south, east, north), outline (GeoJSON\nMultiPolygon coordinates) and its PMTiles archives (`files.base`, `files.detail`, `files.transit`; a kind may be\nmissing while a country is being built). Read a tile from the archive of the country whose outline holds the\ntile's centre, then any other whose box it touches. Only the archives listed here are served (any other name is\nTILESET_NOT_FOUND), so read the list again rather than keeping file names. Free with any Maps key (counted,\nnever charged). TILES_UNAVAILABLE when the server has no map data.\n"
          },
          "response": []
        },
        {
          "name": "Read a country's PMTiles archive (range requests)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/tiles/{tileset}.pmtiles",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "tiles",
                "{tileset}.pmtiles"
              ],
              "query": [],
              "variable": [
                {
                  "key": "tileset",
                  "value": "COUNTRY",
                  "description": "A file name from /tiles/countries.json, without .pmtiles"
                }
              ]
            },
            "description": "One country's vector tiles as a PMTiles v3 archive: `<country>.pmtiles` (Protomaps basemap schema, zoom 0–15),\n`<country>-detail.pmtiles` (zoom 12–16) or `<country>-transit.pmtiles` (zoom 5–15), as listed in\n`/tiles/countries.json`, read in pieces with `Range: bytes=a-b` (at most 8 MB a read; the whole archive is never\nserved). The key is checked on the first read of an archive session from a site (every archive) and counted as\none `tiles` call; the next reads within 2 minutes ride on that check. Reasons: TILESET_NOT_FOUND, RANGE_REQUIRED,\nRANGE_TOO_LARGE, TILES_UNAVAILABLE.\n"
          },
          "response": []
        },
        {
          "name": "One vector tile",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/tiles/:tileset/:z/:x/{y}.mvt",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "tiles",
                ":tileset",
                ":z",
                ":x",
                "{y}.mvt"
              ],
              "query": [],
              "variable": [
                {
                  "key": "tileset",
                  "value": "base",
                  "description": ""
                },
                {
                  "key": "z",
                  "value": "0",
                  "description": ""
                },
                {
                  "key": "x",
                  "value": "0",
                  "description": ""
                },
                {
                  "key": "y",
                  "value": "0",
                  "description": ""
                }
              ]
            },
            "description": "A Mapbox Vector Tile (one `tiles` call) from the archive of the country it lies in, so every country is in every\ntileset: `base` (zoom 0–15), `detail` (12–16) or `transit` (5–15). Gzipped when the client accepts it. 204 where\nthere's no tile (open sea). Beyond the top zoom, overzoom (the style's source says `maxzoom: 15`). Reasons:\nTILESET_NOT_FOUND, TILE_INVALID, TILE_NOT_FOUND, TILES_UNAVAILABLE.\n"
          },
          "response": []
        },
        {
          "name": "Font glyphs for map labels (free)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fonts/:stack/{range}.pbf",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fonts",
                ":stack",
                "{range}.pbf"
              ],
              "query": [],
              "variable": [
                {
                  "key": "stack",
                  "value": "Inter-Medium",
                  "description": ""
                },
                {
                  "key": "range",
                  "value": "0-255",
                  "description": ""
                }
              ]
            },
            "description": "Glyph ranges for the style's fonts (Inter-Regular, Inter-Medium, Inter-SemiBold, Inter-Bold, Inter-Italic). Counted, never charged. Reasons: FONT_RANGE_INVALID, FONT_NOT_FOUND."
          },
          "response": []
        },
        {
          "name": "A map image",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/staticmap",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "staticmap"
              ],
              "query": [
                {
                  "key": "center",
                  "value": "6.4474,3.4720",
                  "description": "lat,lng",
                  "disabled": true
                },
                {
                  "key": "zoom",
                  "value": "15",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "size",
                  "value": "640x400",
                  "description": "WIDTHxHEIGHT, 32–1280 px each",
                  "disabled": true
                },
                {
                  "key": "scale",
                  "value": "1",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "theme",
                  "value": "light",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "format",
                  "value": "png",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "markers",
                  "value": "string",
                  "description": "Repeatable: styles, then points, by `|`: `color:red|label:A|size:small|6.45,3.47|6.46,3.48`. Colours: red, green, blue, orange, yellow, purple, black, white, gray, or 0xRRGGBB[AA]. Sizes tiny, small, mid. At most 100 markers.",
                  "disabled": true
                },
                {
                  "key": "path",
                  "value": "string",
                  "description": "Repeatable: `color:0x1e6fe8cc|weight:5|fillcolor:0x…|6.45,3.47|6.46,3.48`, or an encoded polyline (precision 5) last: `weight:4|enc:_p~iF~ps|U…`. At most 10 paths, 2,000 points each.",
                  "disabled": true
                },
                {
                  "key": "signature",
                  "value": "string",
                  "description": "",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "A PNG or JPEG of the map, drawn by N-Ways from its own tiles, with markers and lines. Give `center` and `zoom`, or\nonly markers and paths to frame them. One `static_maps` call.\n\n**Signed URLs.** Add `signature=` (last) to use a URL anywhere (an e-mail, an app with no Referer) whatever the\nkey's application restriction: the base64url HMAC-SHA256 of the URL's path and query (from `/maps/v1/staticmap?`,\nwithout `signature`) with the key's signing secret (base64url; N-Ways gives it to you with the key). A changed URL\nor a wrong signature: `403 SIGNATURE_INVALID`.\n\nReasons: SIZE_INVALID, SCALE_INVALID, THEME_INVALID, FORMAT_INVALID, MARKERS_INVALID, PATH_INVALID,\nCENTER_REQUIRED, CENTER_INVALID, ZOOM_INVALID, URL_TOO_LONG, SIGNATURE_INVALID.\n"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Geocoding",
      "description": "Search for places and addresses, what's at a point, and NIPOST, GhanaPost and Plus Code lookups.",
      "item": [
        {
          "name": "Search for places, addresses and codes",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/geocode?q=Ikeja City Mall",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "geocode"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "Ikeja City Mall",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "near",
                  "value": "6.5244,3.3792",
                  "description": "lat,lng: rank and pick results near it.",
                  "disabled": true
                },
                {
                  "key": "country",
                  "value": "NG,GH",
                  "description": "Comma list of NG, GH, BJ, TG, GA, CI, LR, GN, SL, GW, SN, CM, BF, CV, GM.",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "8",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "lang",
                  "value": "en",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "fields",
                  "value": "name,location",
                  "description": "Comma list of the fields to keep in each result (`a.b` reaches into objects; `id` is always kept; `*` = all).",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Places, streets, addresses, landmarks, businesses and areas in every covered country, with typos and\nlocal nicknames; a NIPOST postcode finds its building, a GhanaPost GPS address its point. Nearer results first\nwhen `near` is given. Reasons: QUERY_REQUIRED, QUERY_TOO_LONG, NEAR_INVALID, COUNTRY_INVALID, LIMIT_INVALID,\nLANG_INVALID.\n"
          },
          "response": []
        },
        {
          "name": "What's at a point",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/reverse?lat=6.4474&lng=3.472",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "reverse"
              ],
              "query": [
                {
                  "key": "lat",
                  "value": "6.4474",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "lng",
                  "value": "3.472",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "radius",
                  "value": "200",
                  "description": "How far to look for an address, street or landmark (metres).",
                  "disabled": true
                },
                {
                  "key": "lang",
                  "value": "en",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "fields",
                  "value": "name,location",
                  "description": "Comma list of the fields to keep in each result (`a.b` reaches into objects; `id` is always kept; `*` = all).",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "One shape in every covered country: the country and region, the Plus Code, Nigeria's NIPOST postcode (the building\nwithin reach), Ghana's nearest known GhanaPost GPS address, and the nearest named address, street or landmark\n(else the area), with a one-line address. Reasons: LAT_LNG_REQUIRED, RADIUS_INVALID, LANG_INVALID.\n"
          },
          "response": []
        },
        {
          "name": "A NIPOST postcode",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/postcodes/:code",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "postcodes",
                ":code"
              ],
              "query": [
                {
                  "key": "fields",
                  "value": "name,location",
                  "description": "Comma list of the fields to keep in each result (`a.b` reaches into objects; `id` is always kept; `*` = all).",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "code",
                  "value": "LA08A09DB09",
                  "description": ""
                }
              ]
            },
            "description": "The building a NIPOST postcode names (any written form: `LA 08 A09 DB 09`, `la-08-a09-db-09`), its entrances\n(route to the first), its parts and their names; or, for a code we haven't placed yet, where it is estimated to\nbe from the codes around it (`estimated`, `accuracyM`). Reasons: POSTCODE_INVALID, POSTCODE_NOT_FOUND_CHECK,\nPOSTCODE_NOT_NIPOST.\n"
          },
          "response": []
        },
        {
          "name": "Up to 100 NIPOST postcodes at once",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/postcodes/batch",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "postcodes",
                "batch"
              ],
              "query": [
                {
                  "key": "fields",
                  "value": "name,location",
                  "description": "Comma list of the fields to keep in each result (`a.b` reaches into objects; `id` is always kept; `*` = all).",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"codes\": [\n    \"LA08A09DB09\",\n    \"FC 02 A09 DB 09\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Each code counts as one geocode call. An answer per code, in order, with its own error when it has one. Reasons (whole call) CODES_INVALID."
          },
          "response": []
        },
        {
          "name": "A GhanaPost GPS address",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/ghanapost/:code",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "ghanapost",
                ":code"
              ],
              "query": [
                {
                  "key": "fields",
                  "value": "name,location",
                  "description": "Comma list of the fields to keep in each result (`a.b` reaches into objects; `id` is always kept; `*` = all).",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "code",
                  "value": "GA-183-8164",
                  "description": ""
                }
              ]
            },
            "description": "Where a GhanaPost GPS digital address is: mapped in OpenStreetMap or published by its owner, else (in districts\nwhere the method has been checked) estimated from the codes mapped around it (`estimated`, `accuracyM`). Never\ncalls Ghana Post. Reasons: GHANAPOST_INVALID, GHANAPOST_UNKNOWN.\n"
          },
          "response": []
        },
        {
          "name": "A Plus Code's area and what's there",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/pluscodes/:code",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "pluscodes",
                ":code"
              ],
              "query": [
                {
                  "key": "near",
                  "value": "6.5244,3.3792",
                  "description": "lat,lng: rank and pick results near it.",
                  "disabled": true
                },
                {
                  "key": "lang",
                  "value": "en",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "fields",
                  "value": "name,location",
                  "description": "Comma list of the fields to keep in each result (`a.b` reaches into objects; `id` is always kept; `*` = all).",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "code",
                  "value": "6FR5J975+P4W",
                  "description": ""
                }
              ]
            },
            "description": "A full Plus Code (`6FR5J975+P4W`), or a short one with a reference: `near=lat,lng`, or a town after it\n(`J975+P4 Ikeja`, URL-encoded). The answer is the reverse geocoding of the code's centre, with the full code and\nits bounds. Reasons: PLUSCODE_INVALID, PLUSCODE_SHORT, LOCALITY_NOT_FOUND, NEAR_INVALID.\n"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Autocomplete",
      "description": "",
      "item": [
        {
          "name": "Suggestions as someone types (billed per session)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/autocomplete?q=lekki ph",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "autocomplete"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "lekki ph",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "session",
                  "value": "7d2c2b6e-5b7f-4f0e-9a51-2f4f3c1d9e10",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "near",
                  "value": "6.5244,3.3792",
                  "description": "lat,lng: rank and pick results near it.",
                  "disabled": true
                },
                {
                  "key": "country",
                  "value": "NG,GH",
                  "description": "Comma list of NG, GH, BJ, TG, GA, CI, LR, GN, SL, GW, SN, CM, BF, CV, GM.",
                  "disabled": true
                },
                {
                  "key": "types",
                  "value": "address,business",
                  "description": "Comma list of address, street, business, place, area, postcode, ghanapost.",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "5",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "lang",
                  "value": "en",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "fields",
                  "value": "name,location",
                  "description": "Comma list of the fields to keep in each result (`a.b` reaches into objects; `id` is always kept; `*` = all).",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Send the same `session` token (8–64 of `A–Z a–z 0–9 - _`, a UUID is fine) from the first letter until the user\npicks a result: the session's first request is billed (one `autocomplete` session); the rest are counted towards\nthe rate limit but not charged, for up to 3 minutes between requests, 15 minutes and 100 requests in all. Start a\nnew token after a pick. Without a token every request is a session. `X-NWays-Session-Billed: 1|0` says which.\nReasons: as /geocode, and SESSION_INVALID, TYPES_INVALID.\n"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Address validation",
      "description": "",
      "item": [
        {
          "name": "Is this address real, where is it, what is it properly?",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/addresses/validate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "addresses",
                "validate"
              ],
              "query": [
                {
                  "key": "fields",
                  "value": "name,location",
                  "description": "Comma list of the fields to keep in each result (`a.b` reaches into objects; `id` is always kept; `*` = all).",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"address\": \"12 Admiralty Way, Lekki, LA 08 A09 DB 09\",\n  \"country\": \"NG\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "A NIPOST postcode, GhanaPost GPS address or Plus Code in the address is resolved first; the words are geocoded and\nchecked against the code; the components come from what is at the point, and a missing NIPOST postcode is filled\nin from the building there (`verdict.inferredPostcode`). Reasons: ADDRESS_REQUIRED, COUNTRY_INVALID, NEAR_INVALID,\nLANG_INVALID.\n"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Places",
      "description": "",
      "item": [
        {
          "name": "Businesses and places near a point",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/places/nearby?lat=6.4474&lng=3.472",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "places",
                "nearby"
              ],
              "query": [
                {
                  "key": "lat",
                  "value": "6.4474",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "lng",
                  "value": "3.472",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "category",
                  "value": "petrol",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "q",
                  "value": "string",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "radius",
                  "value": "0",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "40",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "pageToken",
                  "value": "string",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "fields",
                  "value": "name,location,phone",
                  "description": "Basic (SKU search): id, name, category, location, formattedAddress, plusCode, country, distanceM, businessStatus, attribution. Contact (places_contact): phone, email, website, openingHours. Atmosphere (places_atmosphere): rating, amenities, details. Default: basic.",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "By category (ranked by nearness and prominence, 40 a page; ATM and cash lists put paying machines first) and/or name.\nfields= sets the SKU: basic fields (default) `search`; any contact field `places_contact`; any atmosphere field\n`places_atmosphere`. Reasons: LAT_LNG_REQUIRED, CATEGORY_INVALID, CATEGORY_OR_QUERY_REQUIRED, RADIUS_INVALID,\nPAGE_TOKEN_INVALID, FIELDS_INVALID.\n"
          },
          "response": []
        },
        {
          "name": "Businesses and places by text",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/places/search?q=pharmacy Yaba",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "places",
                "search"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "pharmacy Yaba",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "near",
                  "value": "6.5244,3.3792",
                  "description": "lat,lng: rank and pick results near it.",
                  "disabled": true
                },
                {
                  "key": "radius",
                  "value": "0",
                  "description": "With near.",
                  "disabled": true
                },
                {
                  "key": "country",
                  "value": "NG,GH",
                  "description": "Comma list of NG, GH, BJ, TG, GA, CI, LR, GN, SL, GW, SN, CM, BF, CV, GM.",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "10",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "lang",
                  "value": "en",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "fields",
                  "value": "name,location,phone",
                  "description": "Basic (SKU search): id, name, category, location, formattedAddress, plusCode, country, distanceM, businessStatus, attribution. Contact (places_contact): phone, email, website, openingHours. Atmosphere (places_atmosphere): rating, amenities, details. Default: basic.",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "\"Zenith Bank Ikeja\", \"pharmacy near Yaba\". SKUs as /places/nearby. Reasons: as /geocode, and RADIUS_INVALID, FIELDS_INVALID."
          },
          "response": []
        },
        {
          "name": "One place's details",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/places/:id?fields=name,location,phone,openingHours",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "places",
                ":id"
              ],
              "query": [
                {
                  "key": "fields",
                  "value": "name,location,phone,openingHours",
                  "description": "",
                  "disabled": false
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "osm:n2987189855",
                  "description": ""
                }
              ]
            },
            "description": "`fields` is required: the fields you need (they set the SKU), or `*` for all (places_atmosphere). Reasons: PLACE_ID_INVALID, FIELDS_REQUIRED, FIELDS_INVALID, PLACE_NOT_FOUND."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Routes",
      "description": "",
      "item": [
        {
          "name": "A route, with up to 25 intermediates",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/routes/compute",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "routes",
                "compute"
              ],
              "query": [
                {
                  "key": "fields",
                  "value": "name,location",
                  "description": "Comma list of the fields to keep in each result (`a.b` reaches into objects; `id` is always kept; `*` = all).",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"origin\": {\n    \"lat\": 6.4474,\n    \"lng\": 3.472\n  },\n  \"destination\": {\n    \"postcode\": \"LA08A09DB10\"\n  },\n  \"mode\": \"drive\",\n  \"routingPreference\": \"traffic_aware\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Drive, van, okada (motorbike taxi; keeps to okada bans, walks past a ban area's edge), motorbike (your own) and\ndispatch (couriers' bikes: exempt from passenger-okada bans),\nkeke and danfo (keep to their bans), walk, bicycle, boat (passenger boats and jetties) and train. Postcodes route\nto the building's best entrance; where the road stops short of the door the route says where to stop and how to\nfinish (`lastMile`); tolls in their currencies, border crossings, gated estates, bans avoided with their sources.\nfields= picks fields of each route. Reasons: MODE_INVALID, LANG_INVALID, ROUTING_PREFERENCE_INVALID,\nTOO_MANY_INTERMEDIATES, INTERMEDIATES_NOT_SUPPORTED, AVOID_INVALID, TOLL_VEHICLE_INVALID, LAST_MILE_INVALID,\nACCESS_INVALID, WAYPOINT_INVALID, POSTCODE_INVALID, POSTCODE_NOT_FOUND, GHANAPOST_INVALID, GHANAPOST_NOT_FOUND,\nPLUSCODE_INVALID, NO_ROUTE, NO_ROAD_ROUTE, ROUTE_TOO_FAR, ROUTING_UNAVAILABLE, OKADA_BANNED_ORIGIN, OKADA_BANNED_DESTINATION, OKADA_BANNED_ROUTE,\nKEKE_BANNED_*, DANFO_BANNED_*, MOTORBIKE_BANNED_*, ROUTING_UNAVAILABLE (503).\n"
          },
          "response": []
        },
        {
          "name": "Travel times from many origins to many destinations (per element)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/routes/matrix",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "routes",
                "matrix"
              ],
              "query": [
                {
                  "key": "fields",
                  "value": "name,location",
                  "description": "Comma list of the fields to keep in each result (`a.b` reaches into objects; `id` is always kept; `*` = all).",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"origins\": [\n    {\n      \"lat\": 6.4474,\n      \"lng\": 3.472\n    },\n    {\n      \"postcode\": \"LA08A09DB09\"\n    }\n  ],\n  \"destinations\": [\n    {\n      \"lat\": 6.43,\n      \"lng\": 3.42\n    },\n    {\n      \"lat\": 6.45,\n      \"lng\": 3.4\n    }\n  ],\n  \"mode\": \"motorbike\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Up to 50 origins and 50 destinations, 625 elements (origins × destinations), each billed as one `route_matrix`\nunit. Modes drive, van, walk, bicycle; okada, keke and danfo keep to their bans as /routes/compute does (an element\nfrom or to a ban area is NOT_ALLOWED, with the ban); motorbike and dispatch to bans on every motorcycle only. Points at most 400 km apart by car, 200 km otherwise. Reasons: MODE_INVALID, MATRIX_TOO_LARGE,\nMATRIX_TOO_FAR, WAYPOINT_INVALID, POSTCODE_INVALID, POSTCODE_NOT_FOUND, GHANAPOST_INVALID, GHANAPOST_NOT_FOUND, PLUSCODE_INVALID, ROUTING_UNAVAILABLE (503).\n"
          },
          "response": []
        },
        {
          "name": "Which vehicle visits which stops, in what order",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/routes/optimize",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "routes",
                "optimize"
              ],
              "query": [],
              "variable": []
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"stops\": [\n    {\n      \"id\": \"order-1\",\n      \"location\": {\n        \"lat\": 6.44,\n        \"lng\": 3.4\n      },\n      \"serviceS\": 120\n    },\n    {\n      \"id\": \"order-2\",\n      \"location\": {\n        \"postcode\": \"LA08A09DB09\"\n      },\n      \"demand\": 2\n    }\n  ],\n  \"vehicles\": [\n    {\n      \"id\": \"bike-1\",\n      \"start\": {\n        \"lat\": 6.4474,\n        \"lng\": 3.472\n      },\n      \"capacity\": 6\n    }\n  ],\n  \"mode\": \"motorbike\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Modes as /routes/matrix: stops inside a ban area for the mode are unassigned and listed in notAllowed.\nUp to 50 stops and 5 vehicles (start, optional end, capacity): the least total time within each vehicle's capacity,\nby a fast heuristic on the engine's travel times (not a guaranteed optimum). Each vehicle's route is planned like\n/routes/compute unless `geometry` is false. One `route_optimization` call. Reasons: MODE_INVALID, STOPS_INVALID,\nVEHICLES_INVALID, STOP_ID_INVALID, VEHICLE_ID_INVALID, STOP_INVALID, CAPACITY_INVALID, STOPS_TOO_FAR,\nWAYPOINT_INVALID, POSTCODE_INVALID, POSTCODE_NOT_FOUND, GHANAPOST_INVALID, GHANAPOST_NOT_FOUND, PLUSCODE_INVALID, LANG_INVALID, ROUTING_UNAVAILABLE (503).\n"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Fares",
      "description": "",
      "item": [
        {
          "name": "What a ride costs",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fares/estimate?from=6.4474,3.4720&to=6.5244,3.3792",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fares",
                "estimate"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "6.4474,3.4720",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "to",
                  "value": "6.5244,3.3792",
                  "description": "",
                  "disabled": false
                },
                {
                  "key": "mode",
                  "value": "taxi,okada",
                  "description": "Comma list of taxi, shared_taxi, okada, keke, danfo, ridehail, boat (default all).",
                  "disabled": true
                },
                {
                  "key": "at",
                  "value": "2026-10-15T09:00:00+01:00",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "distanceM",
                  "value": "0",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "durationS",
                  "value": "0",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "charter",
                  "value": "true",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "rain",
                  "value": "true",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "lang",
                  "value": "en",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "fields",
                  "value": "name,location",
                  "description": "Comma list of the fields to keep in each result (`a.b` reaches into objects; `id` is always kept; `*` = all).",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Taxi, shared taxi, okada, keke, danfo/bus, ride-hail and boat fares in NGN, GHS or XOF, from riders' reports\n(`basis: crowd`) or published sources (`basis: guide`), with night, rush hour, rain and charter. Modes the law\nkeeps off the trip are in `notAllowed`, with the rule's source. Pass the route's distanceM and durationS when you\nhave them. Reasons: FROM_TO_REQUIRED, MODE_INVALID, AT_INVALID, DISTANCEM_INVALID, DURATIONS_INVALID, LANG_INVALID.\n"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Traffic",
      "description": "",
      "item": [
        {
          "name": "Live traffic in an area",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/traffic?bbox=3.30,6.40,3.50,6.60",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "traffic"
              ],
              "query": [
                {
                  "key": "bbox",
                  "value": "3.30,6.40,3.50,6.60",
                  "description": "minLng,minLat,maxLng,maxLat, under 3° across.",
                  "disabled": false
                }
              ],
              "variable": []
            },
            "description": "Roads with live readings from N-Ways' phones (anonymised), as GeoJSON lines with a congestion level. Reasons: BBOX_INVALID."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Settings",
      "description": "",
      "item": [
        {
          "name": "Get the project's fleet settings",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/settings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "settings"
              ],
              "query": [],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Change fleet settings (fields left out keep their value)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/settings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "settings"
              ],
              "query": [],
              "variable": []
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"brandName\": \"Chowtime\",\n  \"offlineAfterS\": 300\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": ""
          },
          "response": []
        }
      ]
    },
    {
      "name": "Drivers",
      "description": "",
      "item": [
        {
          "name": "List drivers",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/drivers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "drivers"
              ],
              "query": [],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Add a driver",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/drivers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "drivers"
              ],
              "query": [],
              "variable": []
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"string\",\n  \"name\": \"string\",\n  \"phone\": \"string\",\n  \"firstName\": \"string\",\n  \"lastName\": \"string\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Get a driver",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/drivers/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "drivers",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Change a driver",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/drivers/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "drivers",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"string\",\n  \"phone\": \"string\",\n  \"firstName\": \"string\",\n  \"lastName\": \"string\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Delete a driver (vehicles keep running without one)",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/drivers/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "drivers",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        }
      ]
    },
    {
      "name": "Vehicles",
      "description": "",
      "item": [
        {
          "name": "List vehicles with their last known positions",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/vehicles",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "vehicles"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "online",
                  "description": "Only vehicles heard from within `offlineAfterS` (online) or not.",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Add a vehicle",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/vehicles",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "vehicles"
              ],
              "query": [],
              "variable": []
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"bike-17\",\n  \"name\": \"Bike 17\",\n  \"mode\": \"motorcycle\",\n  \"plate\": \"LAG 123 XY\",\n  \"driverId\": \"d-4\",\n  \"group\": \"Yaba\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Get a vehicle and its last known position",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/vehicles/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "vehicles",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Change a vehicle (driverId \"\" removes the driver)",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/vehicles/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "vehicles",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"string\",\n  \"mode\": \"motorcycle\",\n  \"plate\": \"string\",\n  \"driverId\": \"string\",\n  \"group\": \"string\",\n  \"colour\": \"blue\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Delete a vehicle and its trip history",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/vehicles/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "vehicles",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "A vehicle's trip history (oldest first)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/vehicles/:id/history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "vehicles",
                ":id",
                "history"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "2026-10-15T09:00:00+01:00",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "2026-10-15T09:00:00+01:00",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "taskId",
                  "value": "string",
                  "description": "Only positions sent while this task was under way.",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "0",
                  "description": "",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": "Default the last 24 hours; at most 7 days per call and 10,000 positions. History older than `retentionDays` is deleted."
          },
          "response": []
        },
        {
          "name": "A vehicle's timeline from its tracker (ignition on and off, power cut and back), newest first",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/vehicles/:id/events",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "vehicles",
                ":id",
                "events"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "2026-10-15T09:00:00+01:00",
                  "description": "Default: 24 hours ago.",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "2026-10-15T09:00:00+01:00",
                  "description": "At most 7 days after from.",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "500",
                  "description": "",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        }
      ]
    },
    {
      "name": "Locations",
      "description": "",
      "item": [
        {
          "name": "Send positions (batched)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/locations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "locations"
              ],
              "query": [],
              "variable": []
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"updates\": [\n    {\n      \"vehicleId\": \"bike-17\",\n      \"lat\": 6.512,\n      \"lng\": 3.375,\n      \"t\": \"2026-10-15T09:12:03Z\",\n      \"speedMps\": 6.2,\n      \"heading\": 210,\n      \"accuracyM\": 8\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Rider apps send their fixes in batches, for one vehicle or many (1–1,000 per call). Fixes up to\n24 hours old are kept as history (an app back online sends what it buffered); the newest moves the\nvehicle's last known position. A fresh fix (10 minutes or newer) re-times the vehicle's open task\nwith our router and live traffic (at most every 10 s per task), and marks it `arriving` when the\ndrop-off is within its `arrivingS` or 250 m. Fixes that can't be used are listed in `rejected`\nby index; the rest are accepted. Send every 5–15 s while on a task.\n"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Tasks",
      "description": "",
      "item": [
        {
          "name": "The task's proof of delivery (photos, signatures) and the rider's note",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/tasks/:id/proofs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "tasks",
                ":id",
                "proofs"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "A proof's image (JPEG, PNG or WebP), kept as long as its task",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/proofs/:proofId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "proofs",
                ":proofId"
              ],
              "query": [],
              "variable": [
                {
                  "key": "proofId",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "List tasks, newest first",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/tasks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "tasks"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "created",
                  "description": "`active` = assigned, picked_up or arriving.",
                  "disabled": true
                },
                {
                  "key": "vehicleId",
                  "value": "string",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "100",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "pageToken",
                  "value": "string",
                  "description": "`nextPageToken` from the previous page.",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Create a delivery",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/tasks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "tasks"
              ],
              "query": [],
              "variable": []
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"order-88412\",\n  \"pickup\": {\n    \"lat\": 6.5095,\n    \"lng\": 3.3711,\n    \"name\": \"Mama Put\",\n    \"Yaba\": null,\n    \"address\": \"12 Herbert Macaulay Way\"\n  },\n  \"dropoff\": {\n    \"lat\": 6.4969,\n    \"lng\": 3.3539,\n    \"name\": \"Home\",\n    \"address\": \"4 Adeniran Ogunsanya St\"\n  },\n  \"lang\": \"en\",\n  \"vehicleId\": \"bike-17\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "A task has an optional pickup and a drop-off. Give `vehicleId` to assign it at once. The answer has the\nrecipient's `trackingUrl` (valid 72 hours, or until an hour after the task ends). Events:\n`task.created` (and `task.assigned`).\n"
          },
          "response": []
        },
        {
          "name": "Get a task with its live ETA",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/tasks/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "tasks",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Edit a delivery",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/tasks/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "tasks",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"dropoff\": {\n    \"lat\": 6.4549,\n    \"lng\": 3.4246,\n    \"name\": \"Office\",\n    \"address\": \"2 Kingsway Rd\",\n    \"Ikoyi\": null\n  },\n  \"dueAt\": \"2026-10-17T15:00:00Z\",\n  \"notes\": \"Call on arrival\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Changes any of the fields below, checked as creating a task checks them; leave out what stays, send `null`\nto clear an optional field. Answers the task, with the changed fields in `editedFields` and the\n`X-NWays-Changed` header (nothing changed: no event).\n\n**When.** Everything can change until the delivery is picked up (`editable: all`): it's `created`, or\n`assigned` with no `pickedUpAt` (and, for an N-Ways driver, before they start it: their request may be\nwaiting or accepted). Then only `notes` and `dueAt` until it ends (`editable: limited`); other fields\nanswer 409 `TASK_UNDER_WAY`, an ended task 409 `TASK_ENDED`. Who has it changes with\n`POST /tasks/{id}/assign` or `/dispatch`, never here.\n\n**Afterwards.** The ETA is worked out again and the tracking link stays the same. Event\n`task.updated` (`data.task`, `data.changed`). A request still waiting for an N-Ways driver stays the\nsame request with the new details (and at least a minute left to answer); the driver is told when the\npickup, drop-off or times changed. A driver who accepted it (N-Ways or N-Ways Business) is told what\nchanged. A customer N-Ways already emailed gets an \"updated\" email when the drop-off or a time changed, at\nmost one every 10 minutes.\n"
          },
          "response": []
        },
        {
          "name": "Assign (or reassign) a vehicle — created|assigned → assigned; event task.assigned",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/tasks/:id/assign",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "tasks",
                ":id",
                "assign"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"vehicleId\": \"string\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Mark picked up — assigned → picked_up",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/tasks/:id/pickup",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "tasks",
                ":id",
                "pickup"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Mark delivered — assigned|picked_up|arriving → completed; event task.completed",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/tasks/:id/complete",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "tasks",
                ":id",
                "complete"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Mark failed — any open status → failed; event task.failed",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/tasks/:id/fail",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "tasks",
                ":id",
                "fail"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reason\": \"string\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Cancel — any open status → cancelled",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/tasks/:id/cancel",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "tasks",
                ":id",
                "cancel"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Send the customer's delivery PIN to their email",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/tasks/:id/pin-email",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "tasks",
                ":id",
                "pin-email"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"ngozi@example.com\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "For a delivery that asks for a PIN, until it ends: keeps the email on the delivery and sends the PIN to it (the fix when `pinDelivery.needsEmail` is true). You never see the PIN."
          },
          "response": []
        },
        {
          "name": "Whether a delivery PIN can go to a number on WhatsApp",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/whatsapp/number",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "whatsapp",
                "number"
              ],
              "query": [
                {
                  "key": "phone",
                  "value": "string",
                  "description": "As typed: +234…, or the local way for your country.",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "WhatsApp can't say ahead whether a number is on WhatsApp: `known` is a number your customer got a PIN on before, `unreachable` one WhatsApp couldn't reach lately (a delivery asking for a PIN then needs `recipientEmail`)."
          },
          "response": []
        },
        {
          "name": "Set or clear a delivery's own area",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/tasks/:id/area",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "tasks",
                ":id",
                "area"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"area\": {\n    \"type\": \"circle\",\n    \"lat\": 6.48,\n    \"lng\": 3.43,\n    \"radiusM\": 2500\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Leaving it raises `asset.geofence_exit` (through your geofence_exit rules with area `dispatch`, or a default one)."
          },
          "response": []
        }
      ]
    },
    {
      "name": "GPS trackers",
      "description": "The trackers fitted to your cars, bikes and trucks (Concox, Jimi, Micodus, Teltonika, Sinotrack, Coban, Queclink, Meitrack,\nRuptela, Suntech, Galileosky, iStartek, JT/T 808 and more, and phones running Traccar Client or OsmAnd). Add one by its IMEI\n(14 digits are fine: the check digit is worked out), and put it on a vehicle now or later (POST /trackers/assign; a vehicle\ncan have several, its position from the best current fix, the primary first); send it the setup SMS steps (`setup`), and its\npositions appear as that vehicle's, with ignition, power and battery. First claim wins: a tracker another organisation\nholds is refused (TRACKER_CLAIMED_ELSEWHERE: move it with /tracker-transfers). Devices report to `trk.nways.ng` on their\nprotocol's port (GT06 5023, Teltonika 5027, H02 5013, the catalogue lists each; 5000 works any of them out); ones that report\nunder a shorter id (TK103, watches, JT/T 808 by terminal or SIM number) are matched to their IMEI;\nphones to `https://nways.ng/v1/trackers/osmand?id=<tracker id>&lat=&lon=&timestamp=&speed=` (OsmAnd's protocol).\nAlarms (SOS, power cut, overspeed, low battery) are alerts of kind `tracker_alarm` and the webhook `asset.tracker_alarm`.\nTry it without hardware: `POST /trackers/{trackerId}/virtual` drives a virtual tracker speaking the device's own protocol,\nor run `go run ./cmd/trackersim` (the backend repository) against your own gateway.\n\n**Supported devices.** `GET https://nways.ng/v1/trackers/catalogue` (no key) lists every brand and model N-Ways supports\n(`status`: supported, or coming for one whose protocol isn't read yet), each model's connection methods (`sms`, `configurator`, `platform`, `app`) and its\nfamily's setup SMS, configurator steps and commands. The same list is at https://nways.ng/developers/gps-trackers.\n\n**Keep your tracking platform.** Already on Traccar, Wialon, Navixy, GPSWox, flespi or your own? Turn on forwarding\n(`POST /trackers/forwarding`) and point your platform at your organisation's address; units are matched to your trackers by\nIMEI or unit id, and units you haven't added are listed (`GET /trackers/forwarding`) for one-tap adding. The addresses\n(https://nways.ng, no API key: the token in the address is the key, so keep it secret and rotate it if it leaks):\n\n- Traccar (and GPSWox): `forward.url = https://nways.ng/v1/trackers/forward/<token>/traccar` with `forward.json = true`\n  (positions) and `event.forward.url` the same (events: ignitionOn/Off, alarms). Or the URL template form,\n  `…/<token>/osmand?id={uniqueId}&lat={latitude}&lon={longitude}&timestamp={fixTime}&speed={speed}&bearing={course}`.\n- flespi: an HTTP stream to `…/<token>/flespi` (its arrays of messages).\n- Wialon (and Navixy) retranslation, Wialon IPS: server `trk.nways.ng`, port 5039, each unit's IMEI as its unique id and\n  your token as its password.\n- Anything else: `POST https://nways.ng/v1/trackers/forward/<token>/webhook` (or `…/forward/webhook` with\n  `Authorization: Bearer <token>`), JSON: one position, an array, or `{\"positions\": [...]}`, at most 500 per request:\n  `unitId` (or `imei`; 4–40 letters, digits, - or _), `lat`, `lng` (or `lon`), `time` (ISO 8601 or epoch seconds or ms;\n  default now), `speedKmh`, `heading`, `altitude`, `accuracy` (m), `sats`, `ignition`, `extVoltage` (V), `batteryV`,\n  `batteryPct`, `odometerKm`, `alarms` (sos, power_cut, overspeed, low_battery, tow, crash, vibration, geofence, removal),\n  `valid` (false: kept in the log, never on the map), `name`. Answer: `{\"taken\": n, \"unknown\": [\"<unit ids not added>\"]}`;\n  401 INVALID_FORWARDING_TOKEN, 400 with what's wrong in which position, 413 above 2 MB or 500 positions.\n\n**Commands** (owners and admins): locate now, restart, reporting interval and heartbeat, over the device's open\nconnection to N-Ways' gateway where its protocol allows, else as the SMS to send it (with its SIM's number). Nothing changes\nwhat the vehicle does: there is no engine cut-off.\n\n**Moving a tracker here** from another organisation: `POST /tracker-transfers`, send the device its restart SMS, then\n`POST /tracker-transfers/{id}/start`; a fresh login within 3 minutes moves it (the other organisation is told).\n",
      "item": [
        {
          "name": "List your trackers, with counts by state",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers"
              ],
              "query": [
                {
                  "key": "state",
                  "value": "awaiting_first_fix",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "model",
                  "value": "string",
                  "description": "A catalogue model id.",
                  "disabled": true
                },
                {
                  "key": "q",
                  "value": "string",
                  "description": "Finds a name, IMEI, vehicle or SIM number.",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Add a tracker by its IMEI (first claim wins)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers"
              ],
              "query": [],
              "variable": []
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"imei\": \"356307042441013\",\n  \"vehicleId\": \"truck-12\",\n  \"model\": \"concox-gt06n\",\n  \"network\": \"mtn\",\n  \"simNumber\": \"+2348030000000\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Errors: INVALID_IMEI (not 15 digits, or the Luhn check digit is wrong), INVALID_DEVICE_ID (a phone's id), TRACKER_EXISTS (already yours), TRACKER_CLAIMED_ELSEWHERE (another organisation holds it), VEHICLE_NOT_FOUND."
          },
          "response": []
        },
        {
          "name": "The device catalogue, your country's SIM networks and their APNs, and where devices report",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers/catalog",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers",
                "catalog"
              ],
              "query": [],
              "variable": []
            },
            "description": "models: every model (with status supported | coming, its methods and family), then forwarded and not-sure. brands, families, protocols, counts: as GET https://nways.ng/v1/trackers/catalogue. networks: your country's; unverified: an APN from a public listing not yet checked on a real SIM."
          },
          "response": []
        },
        {
          "name": "Add many trackers from a CSV (check it first with dryRun)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers/import",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers",
                "import"
              ],
              "query": [],
              "variable": []
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"csv\": \"imei,vehicle,model,sim,network\\n356307042441013,Hiace 2,Concox GT06N,08030000000,MTN\\n\",\n  \"dryRun\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Columns by header, any order, commas or semicolons: imei, vehicle (one of yours by id, name or plate, or a new one by that name), model (a catalogue id or \"Brand Model\"; empty: not sure), sim, network, and optionally apn, name, plate, type. At most 1,000 rows. Each row says what's wrong (issues: imei_missing, imei_invalid, imei_check_digit, imei_duplicate, imei_yours, imei_elsewhere, model_unknown, network_unknown, vehicle_missing, mode_unknown); with dryRun false the good rows are added and the rest left out."
          },
          "response": []
        },
        {
          "name": "The installers' sheet, every tracker's setup SMS in order (CSV)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers/setup.csv",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers",
                "setup.csv"
              ],
              "query": [
                {
                  "key": "ids",
                  "value": "string",
                  "description": "Tracker ids, comma-separated. Default: the trackers not on the map yet.",
                  "disabled": true
                },
                {
                  "key": "lang",
                  "value": "en",
                  "description": "",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Forwarding from your tracking platform, its addresses, and the units it sends",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers/forwarding",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers",
                "forwarding"
              ],
              "query": [],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Turn forwarding on, or give it a new token (the old one stops at once)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers/forwarding",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers",
                "forwarding"
              ],
              "query": [],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Turn forwarding off (the units stay listed)",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers/forwarding",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers",
                "forwarding"
              ],
              "query": [],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Add a forwarded unit as one of your trackers (a new vehicle named after it, unless you give one)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers/forwarding/units/:unitId/add",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers",
                "forwarding",
                "units",
                ":unitId",
                "add"
              ],
              "query": [],
              "variable": [
                {
                  "key": "unitId",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"imei\": \"string\",\n  \"name\": \"string\",\n  \"vehicleId\": \"string\",\n  \"vehicle\": {\n    \"name\": \"string\",\n    \"mode\": \"string\",\n    \"plate\": \"string\"\n  },\n  \"model\": \"string\",\n  \"simNumber\": \"string\",\n  \"network\": \"string\",\n  \"apn\": \"string\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Forget a forwarded unit (it comes back if your platform sends it again)",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers/forwarding/units/:unitId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers",
                "forwarding",
                "units",
                ":unitId"
              ],
              "query": [],
              "variable": [
                {
                  "key": "unitId",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Your requests to move trackers here, and trackers that moved away",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/tracker-transfers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "tracker-transfers"
              ],
              "query": [],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Ask for a tracker another organisation holds (owners and admins)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/tracker-transfers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "tracker-transfers"
              ],
              "query": [],
              "variable": []
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"imei\": \"string\",\n  \"vehicleId\": \"string\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Errors: TRACKER_NOT_CLAIMED (nobody holds it: add it), TRACKER_EXISTS (yours already), TRANSFER_NOT_PROVABLE (a phone or forwarded unit: its organisation removes it)."
          },
          "response": []
        },
        {
          "name": "You're making the device log in afresh now (its restart SMS); a fresh login within 3 minutes moves it",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/tracker-transfers/:transferId/start",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "tracker-transfers",
                ":transferId",
                "start"
              ],
              "query": [],
              "variable": [
                {
                  "key": "transferId",
                  "value": "trf_4fQ9xLm2Za",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Withdraw a request",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/tracker-transfers/:transferId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "tracker-transfers",
                ":transferId"
              ],
              "query": [],
              "variable": [
                {
                  "key": "transferId",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Get a tracker, its setup steps and what's wrong",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers/:trackerId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers",
                ":trackerId"
              ],
              "query": [],
              "variable": [
                {
                  "key": "trackerId",
                  "value": "trk_4fQ9xLm2Za",
                  "description": "Its id, or its IMEI."
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Edit a tracker (its vehicle, model, SIM)",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers/:trackerId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers",
                ":trackerId"
              ],
              "query": [],
              "variable": [
                {
                  "key": "trackerId",
                  "value": "trk_4fQ9xLm2Za",
                  "description": "Its id, or its IMEI."
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"imei\": \"string\",\n  \"name\": \"string\",\n  \"vehicleId\": \"string\",\n  \"vehicle\": {\n    \"name\": \"string\",\n    \"mode\": \"string\",\n    \"plate\": \"string\"\n  },\n  \"model\": \"string\",\n  \"simNumber\": \"string\",\n  \"network\": \"string\",\n  \"apn\": \"string\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Remove a tracker (it can then be added by anyone)",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers/:trackerId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers",
                ":trackerId"
              ],
              "query": [],
              "variable": [
                {
                  "key": "trackerId",
                  "value": "trk_4fQ9xLm2Za",
                  "description": "Its id, or its IMEI."
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "The device log (connections, raw frames, decoded fields, answers sent, errors), oldest first",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers/:trackerId/log",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers",
                ":trackerId",
                "log"
              ],
              "query": [
                {
                  "key": "after",
                  "value": "string",
                  "description": "An entry id: only later entries.",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "200",
                  "description": "",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "trackerId",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": "The last 500 entries and 7 days are kept. Without `after`, the last `limit` entries."
          },
          "response": []
        },
        {
          "name": "The device log and state as they change (server-sent events)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers/:trackerId/stream",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers",
                ":trackerId",
                "stream"
              ],
              "query": [],
              "variable": [
                {
                  "key": "trackerId",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": "`event: state` (the Tracker) and `event: log` (a TrackerLogEntry), starting with the state and the last 50 entries (or those after `?after=`). A comment every 15 s keeps it open."
          },
          "response": []
        },
        {
          "name": "Drive a virtual tracker for this one (its own protocol, through N-Ways' gateway)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers/:trackerId/virtual",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers",
                ":trackerId",
                "virtual"
              ],
              "query": [],
              "variable": [
                {
                  "key": "trackerId",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"minutes\": 3,\n  \"sos\": true,\n  \"powerCut\": true,\n  \"noAckWait\": true,\n  \"badCrc\": true,\n  \"invalidFix\": true,\n  \"clockSkewH\": 0,\n  \"backlog\": 0,\n  \"lang\": \"string\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "A short road in your country, a position every 3 s, answers checked byte for byte. Faults to try: noAckWait, badCrc, invalidFix, clockSkewH (8: a tracker on China time), backlog. Errors: VIRTUAL_RUNNING, TRACKER_NO_VEHICLE, TRACKER_CONNECTED (the real one is connected), VIRTUAL_TRACKER_UNAVAILABLE."
          },
          "response": []
        },
        {
          "name": "Stop its virtual tracker",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers/:trackerId/virtual",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers",
                ":trackerId",
                "virtual"
              ],
              "query": [],
              "variable": [
                {
                  "key": "trackerId",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Commands sent to a tracker (the last 30), and which it takes",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers/:trackerId/commands",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers",
                ":trackerId",
                "commands"
              ],
              "query": [],
              "variable": [
                {
                  "key": "trackerId",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Send a command (owners and admins); its answer comes in the device log",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/trackers/:trackerId/commands",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "trackers",
                ":trackerId",
                "commands"
              ],
              "query": [],
              "variable": [
                {
                  "key": "trackerId",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"kind\": \"interval\",\n  \"seconds\": 30\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Connected and its protocol takes it over the connection: sent, then answered. Otherwise: offline or sms, with the SMS to send it (sms, smsTo). Errors: COMMAND_NOT_SUPPORTED, COMMANDS_NOT_SUPPORTED (a phone or forwarded unit)."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Pickup places",
      "description": "Your stores and warehouses, to choose a delivery's pickup from (`pickupPlaceId`) instead of placing it each time.",
      "item": [
        {
          "name": "List your pickup places (the default first)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/places",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "places"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "string",
                  "description": "Finds a name, address or door code.",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Add a pickup place (up to 200)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/places",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "places"
              ],
              "query": [],
              "variable": []
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Yaba warehouse\",\n  \"doorCode\": \"LA14A18BE13\",\n  \"address\": \"12 Herbert Macaulay Way\",\n  \"lat\": 6.5095,\n  \"lng\": 3.3711,\n  \"phone\": \"+234 803 000 0000\",\n  \"hours\": \"Mon–Sat 8:00–18:00\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Your first place is the default unless you say otherwise; making one the default unsets the others."
          },
          "response": []
        },
        {
          "name": "Get a pickup place",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/places/:placeId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "places",
                ":placeId"
              ],
              "query": [],
              "variable": [
                {
                  "key": "placeId",
                  "value": "plc_4fQ9xLm2Za",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Edit a pickup place",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/places/:placeId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "places",
                ":placeId"
              ],
              "query": [],
              "variable": [
                {
                  "key": "placeId",
                  "value": "plc_4fQ9xLm2Za",
                  "description": ""
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"string\",\n  \"doorCode\": \"string\",\n  \"address\": \"string\",\n  \"lat\": 0,\n  \"lng\": 0,\n  \"phone\": \"string\",\n  \"hours\": \"string\",\n  \"default\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Deliveries already made from it keep the pickup they were given."
          },
          "response": []
        },
        {
          "name": "Delete a pickup place",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/places/:placeId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "places",
                ":placeId"
              ],
              "query": [],
              "variable": [
                {
                  "key": "placeId",
                  "value": "plc_4fQ9xLm2Za",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        }
      ]
    },
    {
      "name": "Customers",
      "description": "Who you deliver to and each one's drop-offs, kept from your deliveries, to send the next one in a few taps.",
      "item": [
        {
          "name": "List your customers, most recent delivery first",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/customers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "customers"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "string",
                  "description": "Finds a name, an email, or any part of a phone number.",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "25",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "pageToken",
                  "value": "string",
                  "description": "`nextPageToken` (or `prevPageToken`) from another page.",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "A customer is everyone your deliveries went to with the same phone (however it was written), else the same\nemail, else the same name. Kept from your deliveries as they're made and edited, a year after their last\ndelivery.\n"
          },
          "response": []
        },
        {
          "name": "Get a customer",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/customers/:customerId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "customers",
                ":customerId"
              ],
              "query": [],
              "variable": [
                {
                  "key": "customerId",
                  "value": "cus_4fQ9xLm2Za",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Forget a customer and their addresses",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/customers/:customerId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "customers",
                ":customerId"
              ],
              "query": [],
              "variable": [
                {
                  "key": "customerId",
                  "value": "cus_4fQ9xLm2Za",
                  "description": ""
                }
              ]
            },
            "description": "For a customer who asks to be forgotten. Their deliveries stay, with your fleet's retention; a new delivery to them starts a new customer."
          },
          "response": []
        },
        {
          "name": "List a customer's addresses, last used first",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/customers/:customerId/addresses",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "customers",
                ":customerId",
                "addresses"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "string",
                  "description": "Finds a name, address or door code.",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "25",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "pageToken",
                  "value": "string",
                  "description": "",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "customerId",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": "Each distinct drop-off (to about 11 m) with its latest name, address and door code, how often it was used and when last."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Live",
      "description": "",
      "item": [
        {
          "name": "Every vehicle now, with its rider, state, current delivery and zones",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/live",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "live"
              ],
              "query": [],
              "variable": []
            },
            "description": "`state`: `moving`, `stopped` (stayed within 50 m for 2 minutes or more; `stoppedSince` says since when), `offline`\n(silent longer than `offlineAfterS`) or `never` (no position yet). `task` is the open delivery assigned last;\n`openTasks` counts them all. `counts` sums the fleet and its open deliveries (`unassigned` = created, no vehicle;\n`late` = open and past `dueAt`, or expected after it).\n"
          },
          "response": []
        },
        {
          "name": "What needs a look now, most urgent first",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/alerts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "alerts"
              ],
              "query": [],
              "variable": []
            },
            "description": "`offline`: a vehicle with an open delivery silent longer than `offlineAfterS`; `late`: an open delivery past\n`dueAt` or expected after it; `stopped`: a vehicle with an open delivery stopped longer than `stopAlertS`.\n"
          },
          "response": []
        },
        {
          "name": "Where each vehicle on a delivery is going",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/routes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "routes"
              ],
              "query": [
                {
                  "key": "vehicleId",
                  "value": "string",
                  "description": "One vehicle only.",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "For every vehicle with an open delivery: the road it has travelled since its first open (or today's finished)\ndelivery began (`done`, at most 6 hours, a point every 15 s at most), the road ahead from its last position\nthrough every stop it hasn't reached (`ahead`, from the routing engine; straight lines while `routed` is false),\nand its stops in order: today's finished ones first, then each open delivery's pickup and drop-off. Lines are\n[lng, lat] (GeoJSON order) and simplified. The road ahead is worked out again when the stops change and every few\nminutes, not on every position: trim it to the vehicle's live position on your map.\n"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Zones",
      "description": "",
      "item": [
        {
          "name": "The project's zones (circles), each with how many vehicles are in it now",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/zones",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "zones"
              ],
              "query": [],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Add a zone (at most 200 a project)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/zones",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "zones"
              ],
              "query": [],
              "variable": []
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"depot-yaba\",\n  \"name\": \"Yaba depot\",\n  \"lat\": 6.5095,\n  \"lng\": 3.3711,\n  \"radiusM\": 300\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Vehicles entering and leaving it send `zone.entered` and `zone.exited`, from each vehicle's newest position."
          },
          "response": []
        },
        {
          "name": "Get a zone",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/zones/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "zones",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Rename, move or resize a zone (lat and lng together)",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/zones/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "zones",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"string\",\n  \"lat\": 0,\n  \"lng\": 0,\n  \"radiusM\": 0\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Delete a zone",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/zones/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "zones",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        }
      ]
    },
    {
      "name": "Rider links",
      "description": "",
      "item": [
        {
          "name": "The vehicle's rider links (never their addresses), newest first",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/vehicles/:id/links",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "vehicles",
                ":id",
                "links"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "A link a rider opens on their phone to share its position for this vehicle (no app needed)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/vehicles/:id/links",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "vehicles",
                ":id",
                "links"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"days\": 30\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "The answer's `url` (https://nways.ng/d/…) is shown once: send it to the rider. The page asks the rider to agree,\nthen shares the phone's position while it's open and sharing is on, shows their open deliveries and lets them\nmark one picked up or delivered. Positions count like `POST /locations` for this vehicle.\n"
          },
          "response": []
        },
        {
          "name": "Stop a rider link at once (its page then says it has ended)",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/links/:linkId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "links",
                ":linkId"
              ],
              "query": [],
              "variable": [
                {
                  "key": "linkId",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        }
      ]
    },
    {
      "name": "Rider app",
      "description": "Invite riders to N-Ways Business, the companies' phone app (background position sharing, jobs, proof of delivery).",
      "item": [
        {
          "name": "The rider's invitations to N-Ways Business (never their codes), newest first",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/drivers/:id/invites",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "drivers",
                ":id",
                "invites"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Invite the rider to N-Ways Business",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/drivers/:id/invites",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "drivers",
                ":id",
                "invites"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"days\": 7\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "The answer's `code` (8 characters, shown as XXXX-XXXX) and `url` (https://nways.ng/r/…) are shown once: send them\nto the rider. On a phone with N-Ways Business the link opens the app; otherwise the rider installs it, signs in\nwith their N-Ways account and types the code. Joining binds the rider's account to this driver: the app then\nshares the phone's position in the background while the rider is on duty (for the vehicle whose `driverId` is\nthis driver), shows that vehicle's tasks and marks them picked up, delivered or failed with photo or signature\nproof. A new invitation replaces the rider's earlier ones; each works once.\n"
          },
          "response": []
        },
        {
          "name": "Withdraw an invitation (its code stops working)",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/invites/:inviteId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "invites",
                ":inviteId"
              ],
              "query": [],
              "variable": [
                {
                  "key": "inviteId",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Take the rider's N-Ways account off this driver",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/drivers/:id/app",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "drivers",
                ":id",
                "app"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": "The app stops sharing the rider's position and showing their jobs at once. Invite them again to bring them back."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Tracking",
      "description": "",
      "item": [
        {
          "name": "The recipient's tracking link (a new one if it expired; none once the task ended)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/tasks/:id/share",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "tasks",
                ":id",
                "share"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        }
      ]
    },
    {
      "name": "Alerts",
      "description": "Rules you set up (leaves an area, enters a zone, not heard from, stopped too long) and the alerts they raise, with acknowledge and resolve.",
      "item": [
        {
          "name": "List alert rules",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/alert-rules",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "alert-rules"
              ],
              "query": [],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Add an alert rule (up to 100)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/alert-rules",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "alert-rules"
              ],
              "query": [],
              "variable": []
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Boats leave their route area\",\n  \"kind\": \"geofence_exit\",\n  \"area\": \"dispatch\",\n  \"scope\": {\n    \"modes\": [\n      \"boat\"\n    ]\n  },\n  \"channels\": [\n    \"webhook\",\n    \"email\",\n    \"push\"\n  ],\n  \"email\": {\n    \"roles\": [\n      \"owner\",\n      \"dispatcher\"\n    ],\n    \"addresses\": [\n      \"ops@example.ng\"\n    ]\n  },\n  \"push\": {\n    \"roles\": [\n      \"dispatcher\"\n    ]\n  },\n  \"quietHours\": {\n    \"from\": \"22:00\",\n    \"to\": \"06:00\"\n  },\n  \"realertS\": 900\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Evaluated on our servers whether or not anyone has the console open: geofences on each position you send,\nsilent and idle every 30 seconds. One open alert per rule, asset and subject; one that cleared isn't opened\nagain for 5 minutes; reminders every `realertS` until acknowledged.\n"
          },
          "response": []
        },
        {
          "name": "Get a rule",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/alert-rules/:ruleId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "alert-rules",
                ":ruleId"
              ],
              "query": [],
              "variable": [
                {
                  "key": "ruleId",
                  "value": "rule_4fQ9xLm2Za",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Change a rule (the kind stays); active false pauses it and resolves its open alerts",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/alert-rules/:ruleId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "alert-rules",
                ":ruleId"
              ],
              "query": [],
              "variable": [
                {
                  "key": "ruleId",
                  "value": "rule_4fQ9xLm2Za",
                  "description": ""
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Boats leave their route area\",\n  \"kind\": \"geofence_exit\",\n  \"area\": \"dispatch\",\n  \"scope\": {\n    \"modes\": [\n      \"boat\"\n    ]\n  },\n  \"channels\": [\n    \"webhook\",\n    \"email\",\n    \"push\"\n  ],\n  \"email\": {\n    \"roles\": [\n      \"owner\",\n      \"dispatcher\"\n    ],\n    \"addresses\": [\n      \"ops@example.ng\"\n    ]\n  },\n  \"push\": {\n    \"roles\": [\n      \"dispatcher\"\n    ]\n  },\n  \"quietHours\": {\n    \"from\": \"22:00\",\n    \"to\": \"06:00\"\n  },\n  \"realertS\": 900\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Delete a rule (its open alerts are resolved)",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/alert-rules/:ruleId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "alert-rules",
                ":ruleId"
              ],
              "query": [],
              "variable": [
                {
                  "key": "ruleId",
                  "value": "rule_4fQ9xLm2Za",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Alerts raised, newest first",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/alert-events",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "alert-events"
              ],
              "query": [
                {
                  "key": "state",
                  "value": "open",
                  "description": "`active` = open or acknowledged.",
                  "disabled": true
                },
                {
                  "key": "vehicleId",
                  "value": "string",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "kind",
                  "value": "geofence_exit",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "100",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "pageToken",
                  "value": "string",
                  "description": "",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Get an alert",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/alert-events/:alertId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "alert-events",
                ":alertId"
              ],
              "query": [],
              "variable": [
                {
                  "key": "alertId",
                  "value": "alr_8KwP2nVd5T",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Acknowledge an open alert (no more reminders; it stays until it clears or is resolved)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/alert-events/:alertId/acknowledge",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "alert-events",
                ":alertId",
                "acknowledge"
              ],
              "query": [],
              "variable": [
                {
                  "key": "alertId",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Resolve an alert (sends asset.alert_resolved)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/alert-events/:alertId/resolve",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "alert-events",
                ":alertId",
                "resolve"
              ],
              "query": [],
              "variable": [
                {
                  "key": "alertId",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        }
      ]
    },
    {
      "name": "Events",
      "description": "Every event, as webhooks receive it, downloadable for a sheet, Excel or your own systems.",
      "item": [
        {
          "name": "Download every event (CSV for Excel or Google Sheets, or JSON)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/events/export",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "events",
                "export"
              ],
              "query": [
                {
                  "key": "format",
                  "value": "csv",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "from",
                  "value": "string",
                  "description": "RFC 3339, or YYYY-MM-DD (Lagos day).",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "string",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "type",
                  "value": "string",
                  "description": "A prefix: asset. or task.",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "The same payloads webhooks get, kept as long as your history (retentionDays). At most 100,000 per download."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Webhooks",
      "description": "",
      "item": [
        {
          "name": "List webhook endpoints",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/webhooks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "webhooks"
              ],
              "query": [],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Add an endpoint (up to 10); the answer has its signing secret, shown once",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/webhooks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "webhooks"
              ],
              "query": [],
              "variable": []
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"string\",\n  \"events\": [\n    \"task.created\"\n  ],\n  \"headers\": {}\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Change an endpoint's url, events or active",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/webhooks/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "webhooks",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"string\",\n  \"events\": [\n    \"task.created\"\n  ],\n  \"active\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Delete an endpoint and its delivery log",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/webhooks/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "webhooks",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "A new signing secret (shown once); the old one stops at once",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/webhooks/:id/rotate-secret",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "webhooks",
                ":id",
                "rotate-secret"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Queue a `ping` event to the endpoint",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/webhooks/:id/test",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "webhooks",
                ":id",
                "test"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "The endpoint's delivery log, newest first (kept 30 days)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/webhooks/:id/deliveries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "webhooks",
                ":id",
                "deliveries"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "pending",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "50",
                  "description": "",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "Send a delivery again now (failed, or delivered and wanted again); its attempts are kept",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/webhooks/:id/deliveries/:deliveryId/retry",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "webhooks",
                ":id",
                "deliveries",
                ":deliveryId",
                "retry"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "string",
                  "description": ""
                },
                {
                  "key": "deliveryId",
                  "value": "string",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        }
      ]
    },
    {
      "name": "Traffic feed",
      "description": "",
      "item": [
        {
          "name": "Road speeds in a box (product traffic_feed; enterprise)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/traffic-feed?bbox=3.30,6.42,3.45,6.55",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "traffic-feed"
              ],
              "query": [
                {
                  "key": "bbox",
                  "value": "3.30,6.42,3.45,6.55",
                  "description": "minLng,minLat,maxLng,maxLat; at most 2° across.",
                  "disabled": false
                },
                {
                  "key": "kind",
                  "value": "live",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "at",
                  "value": "2026-10-15T09:00:00+01:00",
                  "description": "kind=typical: the time of week (local day type and 15-minute slot); default now.",
                  "disabled": true
                },
                {
                  "key": "mode",
                  "value": "car",
                  "description": "",
                  "disabled": true
                },
                {
                  "key": "format",
                  "value": "geojson",
                  "description": "ndjson: a FeedInfo line, then one Feature per line (application/x-ndjson).",
                  "disabled": true
                }
              ],
              "variable": []
            },
            "description": "Aggregated speeds per road and direction from N-Ways' self-learning traffic, only where enough\ndistinct devices contributed: live readings (last 30 minutes) need 2, typical speeds (by day type\nand 15-minute slot) need 3. Never a trace, a device count or a session. Geometry is the OSM way\n(GeoJSON `[lng, lat]`); `direction` is along (`forward`) or against (`backward`) its drawing.\n`level`: 0 free, 1 slow, 2 heavy, 3 standstill, against the road's free-flow speed.\n"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Offline packs",
      "description": "",
      "item": [
        {
          "name": "Regions offline packs are made for",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/offline/regions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "offline",
                "regions"
              ],
              "query": [],
              "variable": []
            },
            "description": ""
          },
          "response": []
        },
        {
          "name": "A region's pack manifest (202 while it's built; ask again after Retry-After)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/offline/packs/:region",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "offline",
                "packs",
                ":region"
              ],
              "query": [
                {
                  "key": "bbox",
                  "value": "string",
                  "description": "region=custom: minLng,minLat,maxLng,maxLat, snapped outwards to 0.05°, at most 0.6° across.",
                  "disabled": true
                },
                {
                  "key": "maxzoom",
                  "value": "15",
                  "description": "",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "region",
                  "value": "lagos",
                  "description": "A region id, or `custom` with `bbox`."
                }
              ]
            },
            "description": "A pack is the region's map (`map.pmtiles`, an extract of the archive the Maps SDK draws; open it with\nMapLibre Native's pmtiles:// support) and its routing graph tiles (`routing.tar`, Valhalla level 0–2\ntiles with the engine's own paths) for on-device routing. Built once per map and graph version;\n`version` changes when either does.\n"
          },
          "response": []
        },
        {
          "name": "Download a pack file (Range requests supported; ETag = its hash)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-NWays-Api-Key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/maps/v1/fleet/offline/packs/:region/:file",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "maps",
                "v1",
                "fleet",
                "offline",
                "packs",
                ":region",
                ":file"
              ],
              "query": [
                {
                  "key": "bbox",
                  "value": "string",
                  "description": "region=custom: minLng,minLat,maxLng,maxLat, snapped outwards to 0.05°, at most 0.6° across.",
                  "disabled": true
                },
                {
                  "key": "maxzoom",
                  "value": "15",
                  "description": "",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "region",
                  "value": "lagos",
                  "description": "A region id, or `custom` with `bbox`."
                },
                {
                  "key": "file",
                  "value": "map.pmtiles",
                  "description": ""
                }
              ]
            },
            "description": ""
          },
          "response": []
        }
      ]
    }
  ]
}
