{
    "info": {
        "name": "Superroute Open Platform",
        "description": "Stateless logistics computation. Nothing you send is stored: there are no orders, no shipments and no history here. Every request carries an HMAC signature or a short-lived session token, and every billable response reports what it cost.",
        "version": "1.0.0",
        "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
    },
    "auth": {
        "type": "bearer",
        "bearer": [
            {
                "key": "token",
                "value": "{{token}}",
                "type": "string"
            }
        ]
    },
    "variable": [
        {
            "key": "baseUrl",
            "value": "https://open.superroute.ca"
        },
        {
            "key": "token",
            "value": ""
        }
    ],
    "item": [
        {
            "name": "platform",
            "item": [
                {
                    "name": "Revoke a session token",
                    "request": {
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/auth/session",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "auth",
                                "session"
                            ]
                        },
                        "description": "Invalidates a session token before its expiry. Revoking the key invalidates all sessions issued from it; this endpoint withdraws a single session.\n\nExchange an API token for a short-lived session token."
                    }
                },
                {
                    "name": "Get a session token",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/auth/session",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "auth",
                                "session"
                            ]
                        },
                        "description": "Exchanges an API token for a short-lived bearer token, for clients that should not hold the key secret itself: MCP clients and the documentation console. A session may only narrow the scopes held by the key.\n\nExchange an API token for a short-lived session token.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"audience\": \"mcp\",\n    \"ttl_seconds\": 900\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "List capabilities",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/capabilities",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "capabilities"
                            ]
                        },
                        "description": "Reports which capabilities the presented credential may call, the unit each is billed in, and its price. Capabilities the account has not subscribed to are included, so that \"not enabled\" can be distinguished from \"not available\".\n\nList what this key can call, at what price, against which quota."
                    }
                },
                {
                    "name": "Get one capability",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/capabilities/:code",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "capabilities",
                                ":code"
                            ],
                            "variable": [
                                {
                                    "key": "code",
                                    "value": ""
                                }
                            ]
                        },
                        "description": "The same report for a single capability, including the reason for refusal where one applies.\n\nList what this key can call, at what price, against which quota."
                    }
                },
                {
                    "name": "Geocoding coverage",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/geo/coverage",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "geo",
                                "coverage"
                            ]
                        },
                        "description": "Reports the countries covered by the geocoding chain and the quality of coverage in each. Free of charge, so that market coverage can be established before purchase.\n\nList what this key can call, at what price, against which quota."
                    }
                },
                {
                    "name": "List jobs",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/jobs",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "jobs"
                            ]
                        },
                        "description": "Lists recent asynchronous jobs for the account, most recent first.\n\nTrack a long-running solve and collect its result."
                    }
                },
                {
                    "name": "Get job status",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/jobs/:jobId",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "jobs",
                                ":jobId"
                            ],
                            "variable": [
                                {
                                    "key": "jobId",
                                    "value": ""
                                }
                            ]
                        },
                        "description": "Reports the status and progress of a single job. Free of charge, as the work has already been billed.\n\nTrack a long-running solve and collect its result."
                    }
                },
                {
                    "name": "Cancel a job",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/jobs/:jobId/cancel",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "jobs",
                                ":jobId",
                                "cancel"
                            ],
                            "variable": [
                                {
                                    "key": "jobId",
                                    "value": ""
                                }
                            ]
                        },
                        "description": "Cancels a job that is queued or running. A completed job cannot be cancelled and remains billable.\n\nTrack a long-running solve and collect its result."
                    }
                },
                {
                    "name": "List webhook deliveries",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/jobs/:jobId/deliveries",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "jobs",
                                ":jobId",
                                "deliveries"
                            ],
                            "variable": [
                                {
                                    "key": "jobId",
                                    "value": ""
                                }
                            ]
                        },
                        "description": "Lists every webhook delivery attempt for a job, with endpoint, status, attempt count and error. This is the diagnostic surface for callbacks that did not arrive.\n\nTrack a long-running solve and collect its result."
                    }
                },
                {
                    "name": "Replay a webhook delivery",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/jobs/:jobId/deliveries/:deliveryId/replay",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "jobs",
                                ":jobId",
                                "deliveries",
                                ":deliveryId",
                                "replay"
                            ],
                            "variable": [
                                {
                                    "key": "jobId",
                                    "value": ""
                                },
                                {
                                    "key": "deliveryId",
                                    "value": ""
                                }
                            ]
                        },
                        "description": "Re-sends a webhook delivery to the registered endpoint, for cases where the receiver was unavailable and the automatic retries were exhausted.\n\nTrack a long-running solve and collect its result."
                    }
                },
                {
                    "name": "Collect a job result",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/jobs/:jobId/result",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "jobs",
                                ":jobId",
                                "result"
                            ],
                            "variable": [
                                {
                                    "key": "jobId",
                                    "value": ""
                                }
                            ]
                        },
                        "description": "Collects the result of a completed job. Results remain available for 24 hours after completion and should be persisted by the client.\n\nTrack a long-running solve and collect its result."
                    }
                },
                {
                    "name": "Open a distance snapshot",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/plan/matrix",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "plan",
                                "matrix"
                            ]
                        },
                        "description": "Opens a distance snapshot for editing one plan, for a `region` (default NA) and a vehicle `profile` (default car). Send the answered `matrix` id with plan re-costing, plan validation, route reordering, stop moves and stop removal of the same region and profile: a road leg measured once is then read from the snapshot and only new legs are measured. Every answer is the same as without the snapshot and is billed the same; the `X-Plan-Matrix` response header says whether the snapshot was used. A snapshot holds the plan's points and their legs only. It is removed one hour after its last use, and eight hours after it was opened at the latest. A refused opening answers SNAPSHOT_LIMIT_REACHED with the limit reached in `limit`. Free; available to an account with any plan capability.\n\nUpload a fleet, depot or plan once and reference it by id.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"region\": \"NA\",\n    \"profile\": \"car\",\n    \"points\": [\n        {\n            \"lat\": 45.5017,\n            \"lng\": -73.5673\n        },\n        {\n            \"lat\": 45.5088,\n            \"lng\": -73.554\n        },\n        {\n            \"lat\": 45.4972,\n            \"lng\": -73.5786\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Close a distance snapshot",
                    "request": {
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/plan/matrix/:matrixId",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "plan",
                                "matrix",
                                ":matrixId"
                            ],
                            "variable": [
                                {
                                    "key": "matrixId",
                                    "value": ""
                                }
                            ]
                        },
                        "description": "Removes a distance snapshot at once. `closed` is false when it was already gone. Free; available to an account with any plan capability.\n\nUpload a fleet, depot or plan once and reference it by id."
                    }
                },
                {
                    "name": "Measure new points of a distance snapshot",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/plan/matrix/:matrixId/points",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "plan",
                                "matrix",
                                ":matrixId",
                                "points"
                            ],
                            "variable": [
                                {
                                    "key": "matrixId",
                                    "value": ""
                                }
                            ]
                        },
                        "description": "Names new points of a distance snapshot, such as a stop dropped on the map or an address chosen for insertion. Their road legs are measured into the snapshot at once, so the next insert or move finds them. The answer is sent at once; with `wait_ms` (up to 1000) it is sent once the legs are held or the time has run out, and `ready` says which. Entries that are not a coordinate are left out, and at most 50 points are used per call. An unknown or expired snapshot, or one of another account, answers RESOURCE_EXPIRED. Free; available to an account with any plan capability.\n\nUpload a fleet, depot or plan once and reference it by id.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"points\": [\n        {\n            \"lat\": 45.5231,\n            \"lng\": -73.5817\n        }\n    ],\n    \"wait_ms\": 1000\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Get a plan editor token",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/plan/token",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "plan",
                                "token"
                            ]
                        },
                        "description": "Exchanges an API token for a short-lived token for a plan editor in a browser or an app. The token calls the plan endpoints only (the plan calls and distance snapshots) with the plan capabilities of the key, and its calls are billed like the key's. `ttl_seconds` sets its life (default 15 minutes, at most one hour); `origins` limits it to these web origins. Call this endpoint from your server, never from the page.\n\nExchange an API token for a short-lived session token.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"ttl_seconds\": 900,\n    \"origins\": [\n        \"dispatch.example.com\"\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "List balance presets",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/routing/presets",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "routing",
                                "presets"
                            ]
                        },
                        "description": "Lists the engine's balance presets and the objective each optimizes for, together with the tolerance band the platform enforces itself and the percentage range it accepts. Free of charge, as it is required in order to determine the valid values of a request field.\n\nList what this key can call, at what price, against which quota."
                    }
                },
                {
                    "name": "Verify a webhook endpoint",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/webhooks/verify",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "webhooks",
                                "verify"
                            ]
                        },
                        "description": "Performs a handshake against a callback URL before it may be used. An unverified URL is rejected at job submission rather than after the solve has been billed.\n\nTrack a long-running solve and collect its result.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"url\": \"https://hooks.example.com/superroute\",\n    \"secret\": \"whsec_0123456789abcdef\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "directions",
            "item": [
                {
                    "name": "Compute directions",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/directions",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "directions"
                            ]
                        },
                        "description": "Computes road distance, duration and geometry along the supplied waypoints in the order given. It renders a route that has already been determined; routing.optimize determines one.\n\nRoad geometry, distance and duration between waypoints.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"waypoints\": [\n        {\n            \"id\": \"depot\",\n            \"lat\": 45.5017,\n            \"lng\": -73.5673\n        },\n        {\n            \"id\": \"order-1001\",\n            \"lat\": 45.5088,\n            \"lng\": -73.554\n        },\n        {\n            \"id\": \"order-1002\",\n            \"lat\": 45.4972,\n            \"lng\": -73.5786\n        }\n    ],\n    \"options\": {\n        \"geometry\": true\n    }\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "document",
            "item": [
                {
                    "name": "Verify a document",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/document/verify",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "document",
                                "verify"
                            ]
                        },
                        "description": "Reads the PDF in `pdf_base64` and returns its `status`: `authentic` (issued by Superroute and unchanged), `tampered` (issued by Superroute and changed since), `unknown` (not issued by Superroute, or its mark was removed) or `not_pdf`; with `issued_by_us`, `intact`, the file's SHA-256 and size. Who issued the document and for which record is never told. The request body may be at most 1 MB, so the PDF at most about 750 KB. Nothing is stored. Billed one call.\n\nCheck whether a PDF was issued by Superroute and is unchanged since.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"pdf_base64\": \"JVBERi0xLjcKMSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZwovT3V0bGluZXMgMiAwIFIKL1BhZ2VzIDMgMCBSID4+CmVuZG9iagoyIDAgb2JqCjw8IC9UeXBlIC9PdXRsaW5lcyAvQ291bnQgMCA+PgplbmRvYmoKMyAwIG9iago8PCAvVHlwZSAvUGFnZXMKL0tpZHMgWzYgMCBSCl0KL0NvdW50IDEKL1Jlc291cmNlcyA8PAovUHJvY1NldCA0IDAgUgovRm9udCA8PCAKL0YxIDggMCBSCi9GMiA5IDAgUgo+Pgo+PgovTWVkaWFCb3ggWzAuMDAwIDAuMDAwIDU5NS4yODAgODQxLjg5MF0KID4+CmVuZG9iago0IDAgb2JqClsvUERGIC9UZXh0IF0KZW5kb2JqCjUgMCBvYmoKPDwKL1Byb2R1Y2VyICj+/wBkAG8AbQBwAGQAZgAgADMALgAxAC4ANgAgACsAIABDAFAARABGKQovQ3JlYXRpb25EYXRlIChEOjIwMjYxMDIzMTY1NDU4LTA0JzAwJykKL01vZERhdGUgKEQ6MjAyNjEwMjMxNjU0NTgtMDQnMDAnKQo+PgplbmRvYmoKNiAwIG9iago8PCAvVHlwZSAvUGFnZQovTWVkaWFCb3ggWzAuMDAwIDAuMDAwIDU5NS4yODAgODQxLjg5MF0KL1BhcmVudCAzIDAgUgovQ29udGVudHMgNyAwIFIKPj4KZW5kb2JqCjcgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUKL0xlbmd0aCAxMDQgPj4Kc3RyZWFtCnic4zLQMzAwUEAmi9K5nEIUjE30DAzNFMzNLPSMTQ0VQlIU9N0MFYyAogohaQoK0RoBicnZmXnpCsU5mQWasQohXgquIcgagbSZhSVEo5GCoRFco39RSmqRQrC/rqGBgSFMJwAMfh99CmVuZHN0cmVhbQplbmRvYmoKOCAwIG9iago8PCAvVHlwZSAvRm9udAovU3VidHlwZSAvVHlwZTEKL05hbWUgL0YxCi9CYXNlRm9udCAvSGVsdmV0aWNhLUJvbGQKL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcKPj4KZW5kb2JqCjkgMCBvYmoKPDwgL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9OYW1lIC9GMgovQmFzZUZvbnQgL0hlbHZldGljYQovRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKeHJlZgowIDEwCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAwOSAwMDAwMCBuIAowMDAwMDAwMDc0IDAwMDAwIG4gCjAwMDAwMDAxMjAgMDAwMDAgbiAKMDAwMDAwMDI4NCAwMDAwMCBuIAowMDAwMDAwMzEzIDAwMDAwIG4gCjAwMDAwMDA0NjIgMDAwMDAgbiAKMDAwMDAwMDU2NSAwMDAwMCBuIAowMDAwMDAwNzQxIDAwMDAwIG4gCjAwMDAwMDA4NTMgMDAwMDAgbiAKdHJhaWxlcgo8PAovU2l6ZSAxMAovUm9vdCAxIDAgUgovSW5mbyA1IDAgUgovSURbPDNjZTEyNGMwNjIzMjg1MDYxZDYxMzAxMjZhZmJjZmU4PjwzY2UxMjRjMDYyMzI4NTA2MWQ2MTMwMTI2YWZiY2ZlOD5dCj4+CnN0YXJ0eHJlZgo5NjAKJSVFT0YKMTAgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAxNjkgPj4Kc3RyZWFtCnicAZ4AYf8A4x/3nkBmRqmXV0RDMMBRFe/SEzSdOBG9uhuZ/s5UtPf0AVy6btZQhdivf2xZDn8ZG6/7JUWH10MgDgpD7tG6T8IRsm9CbWX9+IZUHlaWr2qHhiwvOrwmtizWU+8F4CIaIKFqoNJw0WB9z9ptHaaWc/DeEdaaTWTyBJunkbNAai8jofoq5K4XRvpJ371P2xkEkWiyYabenbwK9ruywG3WTiIKZW5kc3RyZWFtCmVuZG9iagp4cmVmCjEwIDEKMDAwMDAwMTMxMSAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDExIC9Sb290IDEgMCBSIC9JbmZvIDUgMCBSIC9JRCBbPDNjZTEyNGMwNjIzMjg1MDYxZDYxMzAxMjZhZmJjZmU4PjwzY2UxMjRjMDYyMzI4NTA2MWQ2MTMwMTI2YWZiY2ZlOD5dIC9QcmV2IDk2MCA+PgpzdGFydHhyZWYKMTU1MwolJUVPRgo=\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "eta",
            "item": [
                {
                    "name": "Estimate arrival times",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/eta",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "eta"
                            ]
                        },
                        "description": "Projects the remaining arrival times of a route from the most recent completed event. This is a projection of the submitted plan, not a traffic forecast: no pace correction is applied and no traffic service is consulted.\n\nRecompute arrival times along a route from progress so far.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"departed_at\": \"2026-11-02T09:00:00-05:00\",\n    \"now\": \"2026-11-02T09:20:00-05:00\",\n    \"stops\": [\n        {\n            \"id\": \"order-1001\",\n            \"travel_seconds\": 600,\n            \"service_seconds\": 300,\n            \"completed_at\": \"2026-11-02T09:15:00-05:00\"\n        },\n        {\n            \"id\": \"order-1002\",\n            \"travel_seconds\": 720,\n            \"service_seconds\": 300,\n            \"time_window\": {\n                \"from\": \"2026-11-02T09:00:00-05:00\",\n                \"to\": \"2026-11-02T09:25:00-05:00\"\n            }\n        },\n        {\n            \"id\": \"order-1003\",\n            \"travel_seconds\": 540,\n            \"service_seconds\": 240\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "geo",
            "item": [
                {
                    "name": "Suggest addresses",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/geo/autocomplete",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "geo",
                                "autocomplete"
                            ]
                        },
                        "description": "Returns up to five address suggestions for `input` (at least 3 characters), each with a `place_id`, its full `description` and its `main_text` and `secondary_text`. `countries` (up to five ISO codes) limits the suggestions, `near` with `radius_meters` prefers those around a point, `types` is `address` (default), `geocode` or `establishment`, and `language` sets the language of the text. Generate a `session_token` when typing starts and send it with every suggestion request and the final place lookup, so the session is one search. Nothing is stored. Billed one call.\n\nSuggest addresses while they are typed, then give the chosen one as a structured address with coordinates.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"input\": \"1000 rue de la Gauchetiere\",\n    \"countries\": [\n        \"ca\"\n    ],\n    \"session_token\": \"6f1c2a8e-4b1d-4a39-9d0e-5b8f3c7a21de\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Geocode an address",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/geo/forward",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "geo",
                                "forward"
                            ]
                        },
                        "description": "Resolves a street address to coordinates, with the matched address components and the provider that answered.\n\nTurn an address into coordinates through a per-country provider chain.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"address1\": \"1000 Rue De La Gauchetière O\",\n    \"city\": \"Montreal\",\n    \"province\": \"QC\",\n    \"country\": \"CA\",\n    \"postcode\": \"H3B 4W5\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Geocode many addresses",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/geo/forward/batch",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "geo",
                                "forward",
                                "batch"
                            ]
                        },
                        "description": "Resolves up to one thousand addresses in a single request. Billed on addresses submitted: an unmatched address still consumes a provider lookup.\n\nGeocode many addresses in one call, billed per thousand points.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"addresses\": [\n        {\n            \"address1\": \"1000 Rue De La Gauchetière O\",\n            \"city\": \"Montreal\",\n            \"country\": \"CA\"\n        },\n        {\n            \"address1\": \"290 Bremner Blvd\",\n            \"city\": \"Toronto\",\n            \"country\": \"CA\"\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Get a suggestion's address",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/geo/place",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "geo",
                                "place"
                            ]
                        },
                        "description": "Returns the address of a suggestion's `place_id` as `formatted_address`, structured `address` (number, street, `address_1`, `address_2`, city, province code, ISO country code, postcode) and `location` coordinates. Send the `session_token` used while typing. Nothing is stored. Billed one call, under address autocomplete.\n\nSuggest addresses while they are typed, then give the chosen one as a structured address with coordinates.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"place_id\": \"ChIJWeWFxFwayUwRgP5QVJUn5ww\",\n    \"session_token\": \"6f1c2a8e-4b1d-4a39-9d0e-5b8f3c7a21de\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Reverse geocode a coordinate",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/geo/reverse",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "geo",
                                "reverse"
                            ]
                        },
                        "description": "Resolves a coordinate to a structured address.\n\nTurn coordinates into a structured address.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"lat\": 45.4985,\n    \"lng\": -73.5664\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Reverse geocode many coordinates",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/geo/reverse/batch",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "geo",
                                "reverse",
                                "batch"
                            ]
                        },
                        "description": "Resolves multiple coordinates in a single request.\n\nGeocode many addresses in one call, billed per thousand points.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"points\": [\n        {\n            \"lat\": 45.4985,\n            \"lng\": -73.5664\n        },\n        {\n            \"lat\": 43.6426,\n            \"lng\": -79.3871\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Validate an address",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/geo/validate",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "geo",
                                "validate"
                            ]
                        },
                        "description": "Normalizes an address and validates its postcode format, PO Box status and telephone number against the rules for the specified country. No geocoding lookup is performed.\n\nNormalize an address and check its postcode, PO Box status and phone number.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"address1\": \"1000 Rue De La Gauchetière O\",\n    \"city\": \"Montreal\",\n    \"province\": \"QC\",\n    \"country\": \"CA\",\n    \"postcode\": \"H3B 4W5\",\n    \"phone\": \"514 555 0134\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "isochrone",
            "item": [
                {
                    "name": "Draw reach areas",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/isochrone",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "isochrone"
                            ]
                        },
                        "description": "Draws, for each of up to four values in `minutes` (1 to 120), the area that can be reached from `location` within that time for the vehicle `profile`, or with `direction: to` the area from which `location` is reached (one-way streets make the two differ). Each area is a GeoJSON MultiPolygon ([lng, lat]) with its surface in `area_km2`, smallest first. Times use the road network's typical speeds, not live traffic. A point too far from any road the profile may use is refused with `UNROUTABLE`. Nothing is stored. Billed one call.\n\nDraw the areas reachable from a point within given drive times.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"location\": {\n        \"lat\": 45.5017,\n        \"lng\": -73.5673\n    },\n    \"minutes\": [\n        5,\n        10\n    ],\n    \"profile\": \"car\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "label",
            "item": [
                {
                    "name": "Draw a barcode",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/label/barcode",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "label",
                                "barcode"
                            ]
                        },
                        "description": "Draws `value` in `symbology`: `code128` (default), `code39`, `code93`, `ean13`, `ean8`, `upca`, `upce`, `itf`, `codabar`, `code11`, or the 2D codes `qr`, `datamatrix` and `pdf417`. `format` is `png` (base64 in `image_base64`, on white with a quiet zone unless `quiet_zone` is false, with its `width` and `height` in pixels) or `svg` (the markup in `svg`). `module` is the width of the narrowest bar, or the size of a 2D module, in pixels; `height` is the bar height of a linear code; `text` prints the value under a linear code; `error_correction` (L, M, Q, H; default M) applies to QR codes. A value the symbology cannot hold is refused with `NOT_ENCODABLE`. Nothing is stored. Billed one call.\n\nDraw a barcode or a QR, Data Matrix or PDF417 code as an image.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"value\": \"1Z999AA10123456784\",\n    \"symbology\": \"code128\",\n    \"text\": true\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "loading",
            "item": [
                {
                    "name": "Plan a container load",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/loading/solve",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "loading",
                                "solve"
                            ]
                        },
                        "description": "Places cargo within a trailer or container in three dimensions, accounting for centre of gravity, stacking rules and an optional unload sequence.\n\nPlace cargo in a trailer or container with centre of gravity and unload order.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"container\": {\n        \"preset\": \"custom\",\n        \"length_cm\": 600,\n        \"width_cm\": 240,\n        \"height_cm\": 240,\n        \"max_payload_kg\": 24000\n    },\n    \"items\": [\n        {\n            \"id\": \"PAL-1\",\n            \"quantity\": 4,\n            \"length_cm\": 120,\n            \"width_cm\": 100,\n            \"height_cm\": 120,\n            \"weight_kg\": 400\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "map",
            "item": [
                {
                    "name": "Draw a static map",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/map/static",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "map",
                                "static"
                            ]
                        },
                        "description": "Draws the submitted GeoJSON features — lines, points with labels of up to four characters, and areas — on the street map and returns the map as a base64-encoded PNG in `data.image_base64`, with its pixel `width` and `height` and the `zoom` used. Give `width` and `height` in CSS pixels (at most 2048) and `scale` 1 or 2; the view fits the features unless `center` and `zoom` are given. `flavor` picks one of five colour schemes and `language` the language of place and street names. Styles are read from each feature's `properties`: lines `stroke`, `stroke_width`, `dashed`, `arrows`; points `marker` (pin or circle), `fill`, `label`, `size`; areas `fill`, `fill_opacity`, `stroke`. Every image carries the OpenStreetMap credit. Nothing is stored. Billed one call.\n\nDraw your own lines, points and areas on the street map and receive a PNG image.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"width\": 400,\n    \"height\": 300,\n    \"features\": {\n        \"type\": \"FeatureCollection\",\n        \"features\": [\n            {\n                \"type\": \"Feature\",\n                \"geometry\": {\n                    \"type\": \"Point\",\n                    \"coordinates\": [\n                        -73.5673,\n                        45.5017\n                    ]\n                },\n                \"properties\": {\n                    \"marker-color\": \"#1e88e5\"\n                }\n            },\n            {\n                \"type\": \"Feature\",\n                \"geometry\": {\n                    \"type\": \"LineString\",\n                    \"coordinates\": [\n                        [\n                            -73.5673,\n                            45.5017\n                        ],\n                        [\n                            -73.554,\n                            45.5088\n                        ]\n                    ]\n                },\n                \"properties\": {\n                    \"stroke\": \"#1e88e5\"\n                }\n            }\n        ]\n    }\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Issue a map token",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/map/token",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "map",
                                "token"
                            ]
                        },
                        "description": "Issues a short-lived token that your apps and pages use to load map tiles from the map service. Give `ttl_seconds` from 60 to 86400 (default 3600). The answer has the `token`, its `expires_at`, the map service address `base_url` and the `subject` under which the tiles are counted. Ask for tokens from your server: a token is the stronger alternative to a map key, which is built into an app and limited by its allowlist. Map keys are kept on the Map keys page of the Open Platform portal. Nothing is stored. The call bills nothing; tiles loaded with the token or with your map keys are billed per thousand.\n\nMap keys and short-lived tokens for your own apps and pages; tiles are billed per thousand.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"ttl_seconds\": 3600\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "matrix",
            "item": [
                {
                    "name": "Compute a distance matrix",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/matrix",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "matrix"
                            ]
                        },
                        "description": "Computes road distances and durations between multiple origins and destinations. Cost scales with the number of origin rows, each of which requires an engine round trip. Where a matrix is required in order to plan routes, routing.optimize constructs it internally and is the cheaper call.\n\nDistances and durations between many origins and destinations.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"origins\": [\n        {\n            \"id\": \"depot\",\n            \"lat\": 45.5017,\n            \"lng\": -73.5673\n        }\n    ],\n    \"destinations\": [\n        {\n            \"id\": \"order-1001\",\n            \"lat\": 45.5088,\n            \"lng\": -73.554\n        },\n        {\n            \"id\": \"order-1002\",\n            \"lat\": 45.4972,\n            \"lng\": -73.5786\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "network",
            "item": [
                {
                    "name": "Compare network scenarios",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/network/site-scenario",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "network",
                                "site-scenario"
                            ]
                        },
                        "description": "Routes up to seven `days` of your deliveries as they are (the base) and with each of up to three `scenarios`, and compares them. Give the `depots`, the `orders` (each with its `date`, and the `depot` that serves it, else the nearest one serves it), the `vehicles` per depot (a `count`, optionally per `date`, with shift hours and a package capacity), the `time_zone` and optionally the `driver_cost` (per hour, per km, per day, per delivery) in `currency`. A scenario holds up to three changes: `add_depot` (a new depot at `lat`, `lng` that takes the orders within `radius_km`, with its own `vehicles`), `fleet` (all depots, or one `depot`, at `factor_percent` of today's vehicles or a number of `vehicles`) and `shift` (`work_from` and `work_to`, for all depots or one). Every figure comes from a routed day: the base and each scenario give km, hours, vehicles, unassigned and late orders and a cost score (money only with `driver_cost`), and each scenario its difference from the base. Always answered as a job, usually within minutes and at most about twelve; a scenario not finished in that time comes back `routed: false`. One question of the Open Platform's runs at a time; another meanwhile is refused with CONCURRENCY_LIMIT. Nothing is applied anywhere. The planning engine keeps a question up to 24 hours. Billed one job.\n\nCompare your delivery days as they are with a new depot, a different fleet size or other shift hours.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"time_zone\": \"America/Toronto\",\n    \"currency\": \"CAD\",\n    \"days\": {\n        \"from\": \"2026-11-03\",\n        \"to\": \"2026-11-03\"\n    },\n    \"depots\": [\n        {\n            \"id\": \"MTL-West\",\n            \"name\": \"Montreal West\",\n            \"lat\": 45.4706,\n            \"lng\": -73.7408\n        },\n        {\n            \"id\": \"MTL-Centre\",\n            \"name\": \"Montreal Centre\",\n            \"lat\": 45.4972,\n            \"lng\": -73.5786\n        }\n    ],\n    \"orders\": [\n        {\n            \"id\": \"SO-2001\",\n            \"lat\": 45.49524,\n            \"lng\": -73.59163,\n            \"date\": \"2026-11-03\",\n            \"packages\": 2\n        },\n        {\n            \"id\": \"SO-2002\",\n            \"lat\": 45.49518,\n            \"lng\": -73.55029,\n            \"date\": \"2026-11-03\",\n            \"packages\": 1\n        },\n        {\n            \"id\": \"SO-2003\",\n            \"lat\": 45.46847,\n            \"lng\": -73.59833,\n            \"date\": \"2026-11-03\",\n            \"packages\": 3\n        },\n        {\n            \"id\": \"SO-2004\",\n            \"lat\": 45.5114,\n            \"lng\": -73.64394,\n            \"date\": \"2026-11-03\",\n            \"packages\": 2\n        },\n        {\n            \"id\": \"SO-2005\",\n            \"lat\": 45.48034,\n            \"lng\": -73.65731,\n            \"date\": \"2026-11-03\",\n            \"packages\": 3\n        },\n        {\n            \"id\": \"SO-2006\",\n            \"lat\": 45.51345,\n            \"lng\": -73.58664,\n            \"date\": \"2026-11-03\",\n            \"packages\": 2\n        },\n        {\n            \"id\": \"SO-2007\",\n            \"lat\": 45.54648,\n            \"lng\": -73.57845,\n            \"date\": \"2026-11-03\",\n            \"packages\": 3\n        },\n        {\n            \"id\": \"SO-2008\",\n            \"lat\": 45.51501,\n            \"lng\": -73.58276,\n            \"date\": \"2026-11-03\",\n            \"packages\": 3\n        },\n        {\n            \"id\": \"SO-2009\",\n            \"lat\": 45.45632,\n            \"lng\": -73.66501,\n            \"date\": \"2026-11-03\",\n            \"packages\": 1\n        },\n        {\n            \"id\": \"SO-2010\",\n            \"lat\": 45.50996,\n            \"lng\": -73.56106,\n            \"date\": \"2026-11-03\",\n            \"packages\": 2\n        }\n    ],\n    \"vehicles\": [\n        {\n            \"depot\": \"MTL-West\",\n            \"count\": 2,\n            \"work_from\": \"08:00\",\n            \"work_to\": \"17:00\"\n        },\n        {\n            \"depot\": \"MTL-Centre\",\n            \"count\": 2,\n            \"work_from\": \"08:00\",\n            \"work_to\": \"17:00\"\n        }\n    ],\n    \"driver_cost\": {\n        \"per_hour\": 24,\n        \"per_km\": 0.45\n    },\n    \"scenarios\": [\n        {\n            \"id\": \"east-depot\",\n            \"name\": \"Depot in Anjou\",\n            \"changes\": [\n                {\n                    \"type\": \"add_depot\",\n                    \"name\": \"Anjou\",\n                    \"lat\": 45.604,\n                    \"lng\": -73.56,\n                    \"radius_km\": 6,\n                    \"vehicles\": 1\n                }\n            ]\n        },\n        {\n            \"id\": \"bigger-fleet\",\n            \"name\": \"Half as many vans again\",\n            \"changes\": [\n                {\n                    \"type\": \"fleet\",\n                    \"factor_percent\": 150\n                }\n            ]\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "packing",
            "item": [
                {
                    "name": "Choose cartons",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/packing/solve",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "packing",
                                "solve"
                            ]
                        },
                        "description": "Selects the packagings to use for a set of items and the allocation of items across them, ranked by total volume, package count and cost.\n\nChoose packaging and produce a 3D packing arrangement for a set of items.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"packagings\": [\n        {\n            \"key\": \"box-m\",\n            \"name\": \"Medium box\",\n            \"inner_length_cm\": 40,\n            \"inner_width_cm\": 30,\n            \"inner_height_cm\": 30,\n            \"max_payload_kg\": 20,\n            \"unit_cost\": 1.2\n        },\n        {\n            \"key\": \"box-s\",\n            \"name\": \"Small box\",\n            \"inner_length_cm\": 25,\n            \"inner_width_cm\": 20,\n            \"inner_height_cm\": 15,\n            \"max_payload_kg\": 10,\n            \"unit_cost\": 0.6\n        }\n    ],\n    \"items\": [\n        {\n            \"id\": \"SKU-1\",\n            \"name\": \"Mug\",\n            \"quantity\": 4,\n            \"length_cm\": 12,\n            \"width_cm\": 10,\n            \"height_cm\": 10,\n            \"weight_kg\": 0.4\n        },\n        {\n            \"id\": \"SKU-2\",\n            \"name\": \"Kettle\",\n            \"quantity\": 1,\n            \"length_cm\": 25,\n            \"width_cm\": 20,\n            \"height_cm\": 25,\n            \"weight_kg\": 1.5\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "picking",
            "item": [
                {
                    "name": "Batch picks",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/picking/batch",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "picking",
                                "batch"
                            ]
                        },
                        "description": "Groups the submitted orders into pick batches (carts) and returns, for each batch, its orders and the stops in walking order with what to pick at each. Every order line names its bin in `location`; give the bins in `locations` with their `position` in metres along the pick path, or in `matrix` with the metres between every pair. Picking starts and ends at `start` and `end` (on a path, at position 0 when not given). `limits` caps each batch by `weight_kg`, `volume_l`, `orders`, `skus`, `units` and `slots` (the cart's order slots); `group_by` keeps orders with different values of the named attributes apart, and `rules` give orders matching a condition their own batch, their own limits, or leave them out. `objective` is `walk` (shortest total walk, the default), `batches` (fewest batches) or `balance` (even batches). `sorting` is `in_cart` (each order in its own slot) or `after_pick` (sorted after picking). `fixed_batches` evaluates batches as given: walk order, totals and `over_limits`. Orders that fit no batch are listed in `unplaced` with the reason. Nothing is stored. Billed one job.\n\nGroup warehouse orders into pick batches and receive the walk through the bins for each batch.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"orders\": [\n        {\n            \"id\": \"SO-1001\",\n            \"lines\": [\n                {\n                    \"sku\": \"MUG-BLUE\",\n                    \"quantity\": 2,\n                    \"location\": \"A-01-02\",\n                    \"weight_kg\": 0.4,\n                    \"volume_l\": 0.9\n                },\n                {\n                    \"sku\": \"TEA-50\",\n                    \"location\": \"C-04-01\",\n                    \"weight_kg\": 0.2,\n                    \"volume_l\": 0.5\n                }\n            ],\n            \"attributes\": {\n                \"carrier\": \"canada_post\"\n            }\n        },\n        {\n            \"id\": \"SO-1002\",\n            \"lines\": [\n                {\n                    \"sku\": \"TEA-50\",\n                    \"quantity\": 3,\n                    \"location\": \"C-04-01\",\n                    \"weight_kg\": 0.2,\n                    \"volume_l\": 0.5\n                }\n            ],\n            \"attributes\": {\n                \"carrier\": \"canada_post\"\n            }\n        },\n        {\n            \"id\": \"SO-1003\",\n            \"lines\": [\n                {\n                    \"sku\": \"KETTLE\",\n                    \"location\": \"B-02-03\",\n                    \"weight_kg\": 1.6,\n                    \"volume_l\": 6\n                },\n                {\n                    \"sku\": \"MUG-BLUE\",\n                    \"location\": \"A-01-02\",\n                    \"weight_kg\": 0.4,\n                    \"volume_l\": 0.9\n                }\n            ],\n            \"attributes\": {\n                \"carrier\": \"ups\"\n            }\n        },\n        {\n            \"id\": \"SO-1004\",\n            \"lines\": [\n                {\n                    \"sku\": \"KETTLE\",\n                    \"quantity\": 2,\n                    \"location\": \"B-02-03\",\n                    \"weight_kg\": 1.6,\n                    \"volume_l\": 6\n                }\n            ],\n            \"attributes\": {\n                \"carrier\": \"ups\"\n            }\n        },\n        {\n            \"id\": \"SO-1005\",\n            \"lines\": [\n                {\n                    \"sku\": \"SPOON-SET\",\n                    \"location\": \"D-01-01\",\n                    \"weight_kg\": 0.3,\n                    \"volume_l\": 0.4\n                }\n            ],\n            \"attributes\": {\n                \"carrier\": \"canada_post\"\n            }\n        }\n    ],\n    \"locations\": [\n        {\n            \"id\": \"A-01-02\",\n            \"position\": 4\n        },\n        {\n            \"id\": \"B-02-03\",\n            \"position\": 18\n        },\n        {\n            \"id\": \"C-04-01\",\n            \"position\": 31\n        },\n        {\n            \"id\": \"D-01-01\",\n            \"position\": 46\n        }\n    ],\n    \"limits\": {\n        \"orders\": 3,\n        \"weight_kg\": 15,\n        \"slots\": 3\n    },\n    \"group_by\": [\n        \"carrier\"\n    ],\n    \"single_piece_batches\": false\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "plan",
            "item": [
                {
                    "name": "Insert jobs",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/plan/insert",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "plan",
                                "insert"
                            ]
                        },
                        "description": "Places the jobs in `insert` (1-20), in the order given, each at the position that keeps the plan within its stated rules and adds the least driver time (`objective` `duration`, driving plus waiting) or distance (`distance`); nothing else in the plan is re-ordered. The plan is given as for plan re-costing, with an `id` on every vehicle and job and a `start` on every vehicle. The plan with the jobs placed is priced exactly as plan re-costing prices it. The answer adds `plan`, the plan in the shape it is sent, and `insert`: per job, whether it was `placed`, and up to `limit` choices, best first (route, position, the stop it follows, added distance, driving and waiting time, arrival), each measured on the road. A job no position can take is left unassigned. With `matrix`, a distance snapshot, the positions are ranked on its road matrix; without one, the positions beside the `nearest` stops are measured. Nothing is stored. Billed per node: the stops of the plan plus the new jobs.\n\nPlace new jobs in a plan you hold at their cheapest positions, without re-planning the rest, and receive the plan priced with the positions to choose from.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"departed_at\": \"2026-10-23T09:30:00-04:00\",\n    \"vehicles\": [\n        {\n            \"id\": \"van-1\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": {\n                \"parcels\": 10\n            }\n        },\n        {\n            \"id\": \"van-2\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": {\n                \"parcels\": 10\n            }\n        }\n    ],\n    \"jobs\": [\n        {\n            \"id\": \"order-1001\",\n            \"location\": {\n                \"lat\": 45.5088,\n                \"lng\": -73.554\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 2\n            }\n        },\n        {\n            \"id\": \"order-1002\",\n            \"location\": {\n                \"lat\": 45.4972,\n                \"lng\": -73.5786\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 3\n            }\n        },\n        {\n            \"id\": \"order-1003\",\n            \"location\": {\n                \"lat\": 45.5231,\n                \"lng\": -73.5817\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 1\n            }\n        },\n        {\n            \"id\": \"order-1004\",\n            \"location\": {\n                \"lat\": 45.5302,\n                \"lng\": -73.6125\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 2\n            }\n        }\n    ],\n    \"routes\": [\n        {\n            \"vehicle_id\": \"van-1\",\n            \"stops\": [\n                \"order-1001\",\n                \"order-1002\",\n                \"order-1003\"\n            ]\n        }\n    ],\n    \"options\": {\n        \"geometry\": false\n    },\n    \"matrix\": \"tile2.3f0c9a5e7b1d4c2a9e8f6d5c4b3a2910\",\n    \"insert\": [\n        {\n            \"id\": \"order-1005\",\n            \"location\": {\n                \"lat\": 45.5149,\n                \"lng\": -73.5734\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 1\n            }\n        }\n    ],\n    \"limit\": 2\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Move stops",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/plan/move",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "plan",
                                "move"
                            ]
                        },
                        "description": "Moves the jobs in `stops`, in the order given, to the route of `vehicle_id` as one block at `position` (1 = first, counted without the moved stops; omitted = after the last stop). A stop may come from any route, the target route included, or be a job on no route. The edited plan is priced exactly as plan re-costing prices it. The answer adds `plan`, the edited plan in the shape it is sent, and `move`: where each stop came from, and `feasible`, true when the routes the move touched keep every stated rule. Violations are reported, never refused. An optional `matrix`, a distance snapshot, makes repeated calls on the same plan faster; the answer is the same. Nothing is stored. Billed per node: the stops priced.\n\nMove stops of a plan you hold to a route at a chosen position and receive the edited plan priced, with whether the routes it touched keep their rules.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"departed_at\": \"2026-10-23T09:30:00-04:00\",\n    \"vehicles\": [\n        {\n            \"id\": \"van-1\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": {\n                \"parcels\": 10\n            }\n        },\n        {\n            \"id\": \"van-2\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": {\n                \"parcels\": 10\n            }\n        }\n    ],\n    \"jobs\": [\n        {\n            \"id\": \"order-1001\",\n            \"location\": {\n                \"lat\": 45.5088,\n                \"lng\": -73.554\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 2\n            }\n        },\n        {\n            \"id\": \"order-1002\",\n            \"location\": {\n                \"lat\": 45.4972,\n                \"lng\": -73.5786\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 3\n            }\n        },\n        {\n            \"id\": \"order-1003\",\n            \"location\": {\n                \"lat\": 45.5231,\n                \"lng\": -73.5817\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 1\n            }\n        }\n    ],\n    \"routes\": [\n        {\n            \"vehicle_id\": \"van-1\",\n            \"stops\": [\n                \"order-1001\",\n                \"order-1002\",\n                \"order-1003\"\n            ]\n        }\n    ],\n    \"options\": {\n        \"geometry\": false\n    },\n    \"matrix\": \"tile2.3f0c9a5e7b1d4c2a9e8f6d5c4b3a2910\",\n    \"stops\": [\n        \"order-1003\"\n    ],\n    \"vehicle_id\": \"van-2\",\n    \"position\": 1\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Re-cost a plan",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/plan/recost",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "plan",
                                "recost"
                            ]
                        },
                        "description": "Prices the submitted plan exactly as given and never resequences it: every leg is measured on the road network with distance, duration and geometry, and arrival times are projected from the departure instant. Use it after editing a plan — inserting a stop at a chosen position, removing one, reordering or reversing a route, or changing a start or end point. To have the engine choose where a new stop goes, call routing refine with the existing stops frozen instead. An optional `matrix`, a distance snapshot, makes repeated calls on the same plan faster; the answer is the same.\n\nPrice an edited plan exactly as given — per-leg distance, duration and road geometry, with arrival times — without resequencing it. Stated constraints (time windows, capacity, skills, vehicle ceilings) are judged and reported as violations, never refused.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"vehicles\": [\n        {\n            \"id\": \"van-1\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": [\n                10\n            ]\n        }\n    ],\n    \"jobs\": [\n        {\n            \"id\": \"order-1001\",\n            \"location\": {\n                \"lat\": 45.5088,\n                \"lng\": -73.554\n            },\n            \"service_seconds\": 300,\n            \"amount\": [\n                2\n            ]\n        },\n        {\n            \"id\": \"order-1002\",\n            \"location\": {\n                \"lat\": 45.4972,\n                \"lng\": -73.5786\n            },\n            \"service_seconds\": 300,\n            \"amount\": [\n                3\n            ]\n        }\n    ],\n    \"routes\": [\n        {\n            \"vehicle_id\": \"van-1\",\n            \"stops\": [\n                \"order-1001\",\n                \"order-1002\"\n            ]\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Refine routes",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/plan/refine",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "plan",
                                "refine"
                            ]
                        },
                        "description": "Re-orders the stops of the routes of `vehicle_ids` (every route sent when omitted) within and between those routes; stops in `freeze` stay on their route in their order, and frozen stops that lead a route stay first. No other route and no unassigned job takes part. The new order is priced exactly as plan re-costing prices it and kept only when it is better than the plan as sent: fewer unreachable legs, then fewer violations, then less driver time, then less distance. The answer adds `plan` and `refine`: `changed`, `moved` (the stops whose route or place changed) and `before` (the totals of the plan as sent). With `matrix`, a distance snapshot, up to 600 stops are refined; without a usable snapshot, up to 60 stops on 5 routes are refined by the routing engine. Single jobs only: pickup and delivery pairs are refused. A refine that cannot be answered here is refused with PLAN_REFINE_REFUSED and the reason in `reason`; refine such a plan with routing refine. Nothing is stored. Billed per node: the stops priced.\n\nRe-order the stops of chosen routes of a plan you hold around stops you lock, and receive the plan priced; a new order is kept only when it is better.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"departed_at\": \"2026-10-23T09:30:00-04:00\",\n    \"vehicles\": [\n        {\n            \"id\": \"van-1\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": {\n                \"parcels\": 10\n            }\n        },\n        {\n            \"id\": \"van-2\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": {\n                \"parcels\": 10\n            }\n        }\n    ],\n    \"jobs\": [\n        {\n            \"id\": \"order-1001\",\n            \"location\": {\n                \"lat\": 45.5088,\n                \"lng\": -73.554\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 2\n            }\n        },\n        {\n            \"id\": \"order-1002\",\n            \"location\": {\n                \"lat\": 45.4972,\n                \"lng\": -73.5786\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 3\n            }\n        },\n        {\n            \"id\": \"order-1003\",\n            \"location\": {\n                \"lat\": 45.5231,\n                \"lng\": -73.5817\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 1\n            }\n        },\n        {\n            \"id\": \"order-1004\",\n            \"location\": {\n                \"lat\": 45.5302,\n                \"lng\": -73.6125\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 2\n            }\n        }\n    ],\n    \"routes\": [\n        {\n            \"vehicle_id\": \"van-1\",\n            \"stops\": [\n                \"order-1002\",\n                \"order-1004\",\n                \"order-1001\",\n                \"order-1003\"\n            ]\n        }\n    ],\n    \"options\": {\n        \"geometry\": false\n    },\n    \"matrix\": \"tile2.3f0c9a5e7b1d4c2a9e8f6d5c4b3a2910\",\n    \"freeze\": [\n        \"order-1002\"\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Remove stops",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/plan/remove",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "plan",
                                "remove"
                            ]
                        },
                        "description": "Takes the jobs in `stops` off their routes into the unassigned pool and prices the edited plan exactly as plan re-costing prices it; a route left without stops is priced from its start to its end. The answer adds `plan`, the edited plan in the shape it is sent, with the removed jobs in `unassigned`, and `removed`: the route and position each was taken from. A job on no route is refused. An optional `matrix`, a distance snapshot, makes repeated calls on the same plan faster; the answer is the same. Nothing is stored. Billed per node: the stops priced.\n\nTake stops of a plan you hold off their routes into the unassigned pool and receive the edited plan priced.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"departed_at\": \"2026-10-23T09:30:00-04:00\",\n    \"vehicles\": [\n        {\n            \"id\": \"van-1\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": {\n                \"parcels\": 10\n            }\n        },\n        {\n            \"id\": \"van-2\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": {\n                \"parcels\": 10\n            }\n        }\n    ],\n    \"jobs\": [\n        {\n            \"id\": \"order-1001\",\n            \"location\": {\n                \"lat\": 45.5088,\n                \"lng\": -73.554\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 2\n            }\n        },\n        {\n            \"id\": \"order-1002\",\n            \"location\": {\n                \"lat\": 45.4972,\n                \"lng\": -73.5786\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 3\n            }\n        },\n        {\n            \"id\": \"order-1003\",\n            \"location\": {\n                \"lat\": 45.5231,\n                \"lng\": -73.5817\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 1\n            }\n        }\n    ],\n    \"routes\": [\n        {\n            \"vehicle_id\": \"van-1\",\n            \"stops\": [\n                \"order-1001\",\n                \"order-1002\",\n                \"order-1003\"\n            ]\n        }\n    ],\n    \"options\": {\n        \"geometry\": false\n    },\n    \"matrix\": \"tile2.3f0c9a5e7b1d4c2a9e8f6d5c4b3a2910\",\n    \"stops\": [\n        \"order-1002\"\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Reorder a route",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/plan/resequence",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "plan",
                                "resequence"
                            ]
                        },
                        "description": "Gives the route of `vehicle_id` the stop order in `stops`, which must list every stop of that route once and no other, and prices the whole edited plan exactly as plan re-costing prices it: routes, summary and violations. The plan is given as for plan re-costing, with an `id` on every vehicle and job. The answer adds `plan`, the edited plan in the shape it is sent (routes with ordered stop ids, and `unassigned`: every job on no route), and `resequence.changed`. An optional `matrix`, a distance snapshot, makes repeated calls on the same plan faster; the answer is the same. Nothing is stored. Billed per node: the stops priced.\n\nGive one route of a plan you hold a new stop order and receive the edited plan priced, with every violation named.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"departed_at\": \"2026-10-23T09:30:00-04:00\",\n    \"vehicles\": [\n        {\n            \"id\": \"van-1\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": {\n                \"parcels\": 10\n            }\n        },\n        {\n            \"id\": \"van-2\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": {\n                \"parcels\": 10\n            }\n        }\n    ],\n    \"jobs\": [\n        {\n            \"id\": \"order-1001\",\n            \"location\": {\n                \"lat\": 45.5088,\n                \"lng\": -73.554\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 2\n            }\n        },\n        {\n            \"id\": \"order-1002\",\n            \"location\": {\n                \"lat\": 45.4972,\n                \"lng\": -73.5786\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 3\n            }\n        },\n        {\n            \"id\": \"order-1003\",\n            \"location\": {\n                \"lat\": 45.5231,\n                \"lng\": -73.5817\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 1\n            }\n        }\n    ],\n    \"routes\": [\n        {\n            \"vehicle_id\": \"van-1\",\n            \"stops\": [\n                \"order-1001\",\n                \"order-1002\",\n                \"order-1003\"\n            ]\n        }\n    ],\n    \"options\": {\n        \"geometry\": false\n    },\n    \"matrix\": \"tile2.3f0c9a5e7b1d4c2a9e8f6d5c4b3a2910\",\n    \"vehicle_id\": \"van-1\",\n    \"stops\": [\n        \"order-1002\",\n        \"order-1001\",\n        \"order-1003\"\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Validate a plan",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/plan/validate",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "plan",
                                "validate"
                            ]
                        },
                        "description": "Judges the submitted plan exactly as given, with the solver's own semantics: arriving before a window waits and shifts later arrivals, arriving after every window is late, capacity is the summed load per dimension, skills are set-containment, and the vehicle's window, distance, travel-time and stop-count ceilings are checked against the finished walk. Every violation is returned on the stop or route at fault, with arrival and waiting times — never a refusal. It is the re-costing evaluator with leg geometry and per-leg figures stripped, for callers who only want the verdict. An optional `matrix`, a distance snapshot, makes repeated calls on the same plan faster; the answer is the same.\n\nJudge a plan against its stated constraints — time windows, capacity, skills, vehicle ceilings — with every violation named. The same evaluator as re-costing, without the map payload.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"departed_at\": \"2026-11-02T08:00:00-05:00\",\n    \"vehicles\": [\n        {\n            \"id\": \"van-1\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": [\n                10\n            ]\n        }\n    ],\n    \"jobs\": [\n        {\n            \"id\": \"order-1001\",\n            \"location\": {\n                \"lat\": 45.5088,\n                \"lng\": -73.554\n            },\n            \"service_seconds\": 300,\n            \"amount\": [\n                2\n            ]\n        },\n        {\n            \"id\": \"order-1002\",\n            \"location\": {\n                \"lat\": 45.4972,\n                \"lng\": -73.5786\n            },\n            \"service_seconds\": 300,\n            \"amount\": [\n                9\n            ],\n            \"time_windows\": [\n                [\n                    \"2026-11-02T08:00:00-05:00\",\n                    \"2026-11-02T08:05:00-05:00\"\n                ]\n            ]\n        }\n    ],\n    \"routes\": [\n        {\n            \"vehicle_id\": \"van-1\",\n            \"stops\": [\n                \"order-1001\",\n                \"order-1002\"\n            ]\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Compare plans",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/plan/what-if",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "plan",
                                "what-if"
                            ]
                        },
                        "description": "Prices and judges each of the `plans` (2-10, each with `routes` as plan re-costing takes them and an optional `id`) with the `vehicles` and `jobs` of the request, exactly as plan re-costing does, and ranks them: fewer unreachable legs first, then fewer violations, then the `objective`: driver time (`duration`, driving plus waiting) or distance. The answer holds `plans` (each with its rank, objective value, summary and routes), `ranking` (the plan indices, best first) and `best`. Leg geometry is returned only with `options.geometry`. With `rank_only` and `matrix`, a distance snapshot, the plans are ranked by their travel on its road matrix without being priced (`scored` is false). At most 4,000 stops over all plans. Nothing is stored. Billed per node: the stops of every plan.\n\nPrice and judge several alternative plans of the same vehicles and jobs and receive them ranked.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"departed_at\": \"2026-10-23T09:30:00-04:00\",\n    \"vehicles\": [\n        {\n            \"id\": \"van-1\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": {\n                \"parcels\": 10\n            }\n        },\n        {\n            \"id\": \"van-2\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": {\n                \"parcels\": 10\n            }\n        }\n    ],\n    \"jobs\": [\n        {\n            \"id\": \"order-1001\",\n            \"location\": {\n                \"lat\": 45.5088,\n                \"lng\": -73.554\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 2\n            }\n        },\n        {\n            \"id\": \"order-1002\",\n            \"location\": {\n                \"lat\": 45.4972,\n                \"lng\": -73.5786\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 3\n            }\n        },\n        {\n            \"id\": \"order-1003\",\n            \"location\": {\n                \"lat\": 45.5231,\n                \"lng\": -73.5817\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 1\n            }\n        },\n        {\n            \"id\": \"order-1004\",\n            \"location\": {\n                \"lat\": 45.5302,\n                \"lng\": -73.6125\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 2\n            }\n        }\n    ],\n    \"options\": {\n        \"geometry\": false\n    },\n    \"matrix\": \"tile2.3f0c9a5e7b1d4c2a9e8f6d5c4b3a2910\",\n    \"plans\": [\n        {\n            \"id\": \"one-van\",\n            \"routes\": [\n                {\n                    \"vehicle_id\": \"van-1\",\n                    \"stops\": [\n                        \"order-1001\",\n                        \"order-1002\",\n                        \"order-1004\",\n                        \"order-1003\"\n                    ]\n                }\n            ]\n        },\n        {\n            \"id\": \"two-vans\",\n            \"routes\": [\n                {\n                    \"vehicle_id\": \"van-1\",\n                    \"stops\": [\n                        \"order-1001\",\n                        \"order-1002\"\n                    ]\n                },\n                {\n                    \"vehicle_id\": \"van-2\",\n                    \"stops\": [\n                        \"order-1003\",\n                        \"order-1004\"\n                    ]\n                }\n            ]\n        }\n    ],\n    \"objective\": \"duration\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "routing",
            "item": [
                {
                    "name": "Insert stops",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/routing/insert",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "routing",
                                "insert"
                            ]
                        },
                        "description": "Places each job in `insert`, in the order given, at the position that adds the least driver time (driving plus waiting; `objective: distance` ranks by added distance) while the plan keeps every rule it kept before: time windows, capacity, skills and the vehicles' windows and ceilings, judged exactly as plan re-costing judges them. No other stop moves. The plan is given as for plan re-costing: `vehicles` (each with a `start`), `jobs` and `routes` with ordered stop ids; a vehicle without a route may receive stops. Positions are tried next to the `nearest` stops to each new job (25 by default) and in every empty route. Returns each placement (`vehicle_id`, `position` from 1, the stop it follows, added distance, duration and waiting, arrival and service start) with up to `alternatives` other acceptable positions, the jobs that fit nowhere with the closest position and what it would break, and the updated routes priced. Nothing is stored. Billed per node: the plan's stops plus the new jobs.\n\nPlace new jobs in a plan you hold at the positions that cost least, without resequencing the rest.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"departed_at\": \"2026-11-02T08:00:00-05:00\",\n    \"vehicles\": [\n        {\n            \"id\": \"van-1\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": {\n                \"parcels\": 10\n            },\n            \"time_window\": [\n                \"2026-11-02T08:00:00-05:00\",\n                \"2026-11-02T17:00:00-05:00\"\n            ]\n        },\n        {\n            \"id\": \"van-2\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": {\n                \"parcels\": 10\n            }\n        }\n    ],\n    \"jobs\": [\n        {\n            \"id\": \"order-1001\",\n            \"location\": {\n                \"lat\": 45.5088,\n                \"lng\": -73.554\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 2\n            }\n        },\n        {\n            \"id\": \"order-1002\",\n            \"location\": {\n                \"lat\": 45.4972,\n                \"lng\": -73.5786\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 3\n            },\n            \"time_windows\": [\n                [\n                    \"2026-11-02T09:00:00-05:00\",\n                    \"2026-11-02T12:00:00-05:00\"\n                ]\n            ]\n        },\n        {\n            \"id\": \"order-1003\",\n            \"location\": {\n                \"lat\": 45.5231,\n                \"lng\": -73.5817\n            },\n            \"service_seconds\": 240,\n            \"amount\": {\n                \"parcels\": 1\n            }\n        }\n    ],\n    \"routes\": [\n        {\n            \"vehicle_id\": \"van-1\",\n            \"stops\": [\n                \"order-1001\",\n                \"order-1002\"\n            ]\n        },\n        {\n            \"vehicle_id\": \"van-2\",\n            \"stops\": [\n                \"order-1003\"\n            ]\n        }\n    ],\n    \"insert\": [\n        {\n            \"id\": \"order-1004\",\n            \"location\": {\n                \"lat\": 45.5155,\n                \"lng\": -73.5605\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 2\n            }\n        },\n        {\n            \"id\": \"order-1005\",\n            \"location\": {\n                \"lat\": 45.492,\n                \"lng\": -73.583\n            },\n            \"service_seconds\": 180,\n            \"amount\": {\n                \"parcels\": 9\n            }\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Optimize routes",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/routing/optimize",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "routing",
                                "optimize"
                            ]
                        },
                        "description": "Plans routes across a fleet from jobs, shipments and vehicles. Problems above a small size return a job reference rather than a plan, as a full solve takes minutes.\n\nPlan routes across a fleet from jobs, vehicles and constraints you supply.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"vehicles\": [\n        {\n            \"id\": \"van-1\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": [\n                10\n            ],\n            \"time_window\": [\n                \"2026-11-02T08:00:00-05:00\",\n                \"2026-11-02T17:00:00-05:00\"\n            ]\n        },\n        {\n            \"id\": \"van-2\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": [\n                10\n            ]\n        }\n    ],\n    \"jobs\": [\n        {\n            \"id\": \"order-1001\",\n            \"location\": {\n                \"lat\": 45.5088,\n                \"lng\": -73.554\n            },\n            \"service_seconds\": 300,\n            \"amount\": [\n                2\n            ]\n        },\n        {\n            \"id\": \"order-1002\",\n            \"location\": {\n                \"lat\": 45.4972,\n                \"lng\": -73.5786\n            },\n            \"service_seconds\": 300,\n            \"amount\": [\n                3\n            ],\n            \"time_windows\": [\n                [\n                    \"2026-11-02T09:00:00-05:00\",\n                    \"2026-11-02T12:00:00-05:00\"\n                ]\n            ]\n        },\n        {\n            \"id\": \"order-1003\",\n            \"location\": {\n                \"lat\": 45.5231,\n                \"lng\": -73.5817\n            },\n            \"service_seconds\": 240,\n            \"amount\": [\n                1\n            ]\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Refine an existing plan",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/routing/refine",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "routing",
                                "refine"
                            ]
                        },
                        "description": "Re-optimizes an existing plan, optionally freezing stops that must not move. Intended for use after a manual edit, in place of a full re-solve.\n\nRe-optimize an existing plan locally or globally, keeping chosen stops frozen.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"vehicles\": [\n        {\n            \"id\": \"van-1\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": [\n                10\n            ],\n            \"time_window\": [\n                \"2026-11-02T08:00:00-05:00\",\n                \"2026-11-02T17:00:00-05:00\"\n            ]\n        },\n        {\n            \"id\": \"van-2\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": [\n                10\n            ]\n        }\n    ],\n    \"jobs\": [\n        {\n            \"id\": \"order-1001\",\n            \"location\": {\n                \"lat\": 45.5088,\n                \"lng\": -73.554\n            },\n            \"service_seconds\": 300,\n            \"amount\": [\n                2\n            ]\n        },\n        {\n            \"id\": \"order-1002\",\n            \"location\": {\n                \"lat\": 45.4972,\n                \"lng\": -73.5786\n            },\n            \"service_seconds\": 300,\n            \"amount\": [\n                3\n            ],\n            \"time_windows\": [\n                [\n                    \"2026-11-02T09:00:00-05:00\",\n                    \"2026-11-02T12:00:00-05:00\"\n                ]\n            ]\n        },\n        {\n            \"id\": \"order-1003\",\n            \"location\": {\n                \"lat\": 45.5231,\n                \"lng\": -73.5817\n            },\n            \"service_seconds\": 240,\n            \"amount\": [\n                1\n            ]\n        }\n    ],\n    \"existing_routes\": [\n        {\n            \"vehicle_id\": \"van-1\",\n            \"stops\": [\n                {\n                    \"id\": \"order-1001\"\n                },\n                {\n                    \"id\": \"order-1002\"\n                }\n            ]\n        },\n        {\n            \"vehicle_id\": \"van-2\",\n            \"stops\": [\n                {\n                    \"id\": \"order-1003\"\n                }\n            ]\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                },
                {
                    "name": "Compare alternative plans",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/routing/what-if",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "routing",
                                "what-if"
                            ]
                        },
                        "description": "Scores several alternative plans against one another without committing to any of them. Always synchronous, as it is used interactively.\n\nScore several alternative plans side by side without committing to any.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"vehicles\": [\n        {\n            \"id\": \"van-1\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": [\n                10\n            ],\n            \"time_window\": [\n                \"2026-11-02T08:00:00-05:00\",\n                \"2026-11-02T17:00:00-05:00\"\n            ]\n        },\n        {\n            \"id\": \"van-2\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": [\n                10\n            ]\n        }\n    ],\n    \"jobs\": [\n        {\n            \"id\": \"order-1001\",\n            \"location\": {\n                \"lat\": 45.5088,\n                \"lng\": -73.554\n            },\n            \"service_seconds\": 300,\n            \"amount\": [\n                2\n            ]\n        },\n        {\n            \"id\": \"order-1002\",\n            \"location\": {\n                \"lat\": 45.4972,\n                \"lng\": -73.5786\n            },\n            \"service_seconds\": 300,\n            \"amount\": [\n                3\n            ],\n            \"time_windows\": [\n                [\n                    \"2026-11-02T09:00:00-05:00\",\n                    \"2026-11-02T12:00:00-05:00\"\n                ]\n            ]\n        },\n        {\n            \"id\": \"order-1003\",\n            \"location\": {\n                \"lat\": 45.5231,\n                \"lng\": -73.5817\n            },\n            \"service_seconds\": 240,\n            \"amount\": [\n                1\n            ]\n        }\n    ],\n    \"existing_routes\": [\n        {\n            \"vehicle_id\": \"van-1\",\n            \"stops\": [\n                {\n                    \"id\": \"order-1001\"\n                },\n                {\n                    \"id\": \"order-1002\"\n                }\n            ]\n        },\n        {\n            \"vehicle_id\": \"van-2\",\n            \"stops\": [\n                {\n                    \"id\": \"order-1003\"\n                }\n            ]\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "slots",
            "item": [
                {
                    "name": "Quote delivery slots",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/slots/quote",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "slots",
                                "quote"
                            ]
                        },
                        "description": "Prices the new `job` once for every slot in `slots` (each with `from` and `to`, ISO 8601 with an offset): the job takes the slot as its time window and is placed in the plan as stop insertion places it, at the position that adds the least driver time without breaking any rule the plan keeps. Each slot comes back `feasible` or not, with the best vehicle and position, the added distance, duration and waiting, arrival and service start, and a `rank` among the feasible slots, cheapest first. The plan is given as for stop insertion. Nothing is stored. Billed per node: the plan's stops plus one, however many slots are asked.\n\nFor one new job, find which delivery slots a plan you hold can take and what each costs.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"departed_at\": \"2026-11-02T08:00:00-05:00\",\n    \"vehicles\": [\n        {\n            \"id\": \"van-1\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": {\n                \"parcels\": 10\n            },\n            \"time_window\": [\n                \"2026-11-02T08:00:00-05:00\",\n                \"2026-11-02T17:00:00-05:00\"\n            ]\n        },\n        {\n            \"id\": \"van-2\",\n            \"start\": {\n                \"lat\": 45.5017,\n                \"lng\": -73.5673\n            },\n            \"return_to_start\": true,\n            \"capacity\": {\n                \"parcels\": 10\n            }\n        }\n    ],\n    \"jobs\": [\n        {\n            \"id\": \"order-1001\",\n            \"location\": {\n                \"lat\": 45.5088,\n                \"lng\": -73.554\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 2\n            }\n        },\n        {\n            \"id\": \"order-1002\",\n            \"location\": {\n                \"lat\": 45.4972,\n                \"lng\": -73.5786\n            },\n            \"service_seconds\": 300,\n            \"amount\": {\n                \"parcels\": 3\n            },\n            \"time_windows\": [\n                [\n                    \"2026-11-02T09:00:00-05:00\",\n                    \"2026-11-02T12:00:00-05:00\"\n                ]\n            ]\n        },\n        {\n            \"id\": \"order-1003\",\n            \"location\": {\n                \"lat\": 45.5231,\n                \"lng\": -73.5817\n            },\n            \"service_seconds\": 240,\n            \"amount\": {\n                \"parcels\": 1\n            }\n        }\n    ],\n    \"routes\": [\n        {\n            \"vehicle_id\": \"van-1\",\n            \"stops\": [\n                \"order-1001\",\n                \"order-1002\"\n            ]\n        },\n        {\n            \"vehicle_id\": \"van-2\",\n            \"stops\": [\n                \"order-1003\"\n            ]\n        }\n    ],\n    \"job\": {\n        \"id\": \"order-2001\",\n        \"location\": {\n            \"lat\": 45.5155,\n            \"lng\": -73.5605\n        },\n        \"service_seconds\": 300,\n        \"amount\": {\n            \"parcels\": 1\n        }\n    },\n    \"slots\": [\n        {\n            \"id\": \"08-10\",\n            \"from\": \"2026-11-02T08:00:00-05:00\",\n            \"to\": \"2026-11-02T10:00:00-05:00\"\n        },\n        {\n            \"id\": \"10-12\",\n            \"from\": \"2026-11-02T10:00:00-05:00\",\n            \"to\": \"2026-11-02T12:00:00-05:00\"\n        },\n        {\n            \"id\": \"12-14\",\n            \"from\": \"2026-11-02T12:00:00-05:00\",\n            \"to\": \"2026-11-02T14:00:00-05:00\"\n        },\n        {\n            \"id\": \"17-19\",\n            \"from\": \"2026-11-02T17:00:00-05:00\",\n            \"to\": \"2026-11-02T19:00:00-05:00\"\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "territory",
            "item": [
                {
                    "name": "Design territories",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/territory/design",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "territory",
                                "design"
                            ]
                        },
                        "description": "Assigns every submitted point to one of the territories so that each territory is compact, territories never overlap, and each carries its share of the total `weight` within `tolerance_percent` (default 10). Ask for `count` territories, or name them in `zones` with an optional `anchor` (a depot the territory grows around) and a `share` (relative size, default 1). A point may be fixed to a territory with `zone` or limited to some with `allowed_zones`. Returns each territory's centre, point count, weight and target, its convex `outline` as a GeoJSON polygon (set `outline` to false to leave it out), the territory of every point, and the points that fit none. Distances are straight-line: road travel is not considered. Points times territories may be at most 500 000; above 50 000 the request is run as a job unless `mode` is `sync`. Nothing is stored. Billed per point, invoiced per thousand.\n\nCut weighted points into compact, non-overlapping territories that each carry a balanced share of the work.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"points\": [\n        {\n            \"id\": \"stop-1\",\n            \"lat\": 45.48886,\n            \"lng\": -73.63285,\n            \"weight\": 1\n        },\n        {\n            \"id\": \"stop-2\",\n            \"lat\": 45.45869,\n            \"lng\": -73.56354,\n            \"weight\": 3\n        },\n        {\n            \"id\": \"stop-3\",\n            \"lat\": 45.51993,\n            \"lng\": -73.49625,\n            \"weight\": 2\n        },\n        {\n            \"id\": \"stop-4\",\n            \"lat\": 45.4545,\n            \"lng\": -73.58194,\n            \"weight\": 1\n        },\n        {\n            \"id\": \"stop-5\",\n            \"lat\": 45.47888,\n            \"lng\": -73.56081,\n            \"weight\": 1\n        },\n        {\n            \"id\": \"stop-6\",\n            \"lat\": 45.54922,\n            \"lng\": -73.63772,\n            \"weight\": 2\n        },\n        {\n            \"id\": \"stop-7\",\n            \"lat\": 45.52568,\n            \"lng\": -73.55506,\n            \"weight\": 1\n        },\n        {\n            \"id\": \"stop-8\",\n            \"lat\": 45.51925,\n            \"lng\": -73.5886,\n            \"weight\": 2\n        },\n        {\n            \"id\": \"stop-9\",\n            \"lat\": 45.45559,\n            \"lng\": -73.50548,\n            \"weight\": 3\n        },\n        {\n            \"id\": \"stop-10\",\n            \"lat\": 45.5003,\n            \"lng\": -73.56268,\n            \"weight\": 3\n        },\n        {\n            \"id\": \"stop-11\",\n            \"lat\": 45.51723,\n            \"lng\": -73.53724,\n            \"weight\": 1\n        },\n        {\n            \"id\": \"stop-12\",\n            \"lat\": 45.51979,\n            \"lng\": -73.545,\n            \"weight\": 3\n        }\n    ],\n    \"zones\": [\n        {\n            \"id\": \"east\",\n            \"anchor\": {\n                \"lat\": 45.5,\n                \"lng\": -73.55\n            }\n        },\n        {\n            \"id\": \"west\",\n            \"anchor\": {\n                \"lat\": 45.5,\n                \"lng\": -73.64\n            }\n        },\n        {\n            \"id\": \"north\",\n            \"share\": 0.5\n        }\n    ],\n    \"tolerance_percent\": 20\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "trace",
            "item": [
                {
                    "name": "Match a GPS trace",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/trace/match",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "trace",
                                "match"
                            ]
                        },
                        "description": "Places each point of `points` (2 to 5000, in driving order, each with `lat`, `lng` and optionally an `id` and a `time` in ISO 8601 with an offset) on the road it was most likely driven on for the vehicle `profile`. Each point comes back with its `type` (`matched`, `interpolated` or `unmatched`), its position on the road, how far it was moved and the road's name; `roads` lists the roads driven in order with their class, speed and distance; `summary.distance_meters` is the length of the drive; `geometry` is the driven line as a GeoJSON LineString (set `geometry` to false to leave it out). `search_radius_meters` (at most 200) limits how far a point may be moved. Times help with sparse or noisy traces. Nothing is stored. Billed per point, invoiced per thousand.\n\nSnap a GPS trace to the roads it was driven on and measure the drive.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"points\": [\n        {\n            \"id\": \"fix-1\",\n            \"lat\": 45.498348,\n            \"lng\": -73.571617,\n            \"time\": \"2026-11-02T08:00:00-05:00\"\n        },\n        {\n            \"id\": \"fix-2\",\n            \"lat\": 45.499071,\n            \"lng\": -73.569882,\n            \"time\": \"2026-11-02T08:00:21-05:00\"\n        },\n        {\n            \"id\": \"fix-3\",\n            \"lat\": 45.501306,\n            \"lng\": -73.567881,\n            \"time\": \"2026-11-02T08:00:42-05:00\"\n        },\n        {\n            \"id\": \"fix-4\",\n            \"lat\": 45.502841,\n            \"lng\": -73.566375,\n            \"time\": \"2026-11-02T08:01:03-05:00\"\n        },\n        {\n            \"id\": \"fix-5\",\n            \"lat\": 45.502257,\n            \"lng\": -73.564575,\n            \"time\": \"2026-11-02T08:01:24-05:00\"\n        },\n        {\n            \"id\": \"fix-6\",\n            \"lat\": 45.502093,\n            \"lng\": -73.563383,\n            \"time\": \"2026-11-02T08:01:45-05:00\"\n        },\n        {\n            \"id\": \"fix-7\",\n            \"lat\": 45.502914,\n            \"lng\": -73.560675,\n            \"time\": \"2026-11-02T08:02:07-05:00\"\n        },\n        {\n            \"id\": \"fix-8\",\n            \"lat\": 45.504991,\n            \"lng\": -73.558915,\n            \"time\": \"2026-11-02T08:02:28-05:00\"\n        }\n    ],\n    \"profile\": \"car\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "name": "weight",
            "item": [
                {
                    "name": "Work out chargeable weight",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/weight/chargeable",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "weight",
                                "chargeable"
                            ]
                        },
                        "description": "For each package in `packages` (weight with `weight_unit` g, kg, oz or lb; length, width and height with `dimension_unit` mm, cm, m or in; optional `quantity`) returns the actual weight, the volumetric weight (volume divided by `divisor`) and the chargeable weight, the greater of the two, with which one decided it. `divisor` is in cm³ per kg (`divisor_unit: cm3_kg`, default 5000) or in in³ per lb (`in3_lb`, default 139); results are in `weight_unit` (kg, or lb with an in³/lb divisor). `increment` rounds every chargeable weight up to a multiple (0.5 kg, 1 lb). `totals` gives the packages' sum, billed package by package, and `shipment_chargeable_weight`, the whole shipment taken at once. Nothing is stored. Billed one call.\n\nWork out the weight a carrier bills: the greater of actual and volumetric weight.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"packages\": [\n        {\n            \"id\": \"box-1\",\n            \"weight\": 2.4,\n            \"weight_unit\": \"kg\",\n            \"length\": 40,\n            \"width\": 30,\n            \"height\": 30,\n            \"dimension_unit\": \"cm\"\n        },\n        {\n            \"id\": \"box-2\",\n            \"quantity\": 2,\n            \"weight\": 9,\n            \"weight_unit\": \"kg\",\n            \"length\": 30,\n            \"width\": 20,\n            \"height\": 15,\n            \"dimension_unit\": \"cm\"\n        }\n    ],\n    \"divisor\": 5000,\n    \"divisor_unit\": \"cm3_kg\",\n    \"increment\": 0.5\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    }
                }
            ]
        }
    ]
}
