{
  "item": [
    {
      "id": "74e2ed56-f689-4aff-b5b9-f9d05567e47f",
      "name": "Authentication",
      "description": {
        "content": "Exchange your client id and secret for a one-hour bearer access token (OAuth 2.0 client credentials).\nThe same endpoint serves every Reeds API; v1 has one scope, `shipping`.\n",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "752e4d01-e06a-4b93-bc78-8782fd89b4f1",
          "name": "Get an access token",
          "request": {
            "name": "Get an access token",
            "description": {
              "content": "Exchange your client id and client secret for a bearer access token (OAuth 2.0 client credentials grant).\nSend `grant_type=client_credentials`, `client_id` and `client_secret` as a form-encoded body or as JSON, or send the\nid and secret as HTTP Basic credentials.\n\n- The credentials decide the mode: `rci_test_` ids give a test-mode token, `rci_live_` ids a live-mode one. The response carries `livemode`.\n- A token lasts one hour (`expires_in: 3600`). Cache it and fetch a new one shortly before it expires.\n- Revoking a secret also ends every token issued with it, within a minute.\n- If the account has turned on the optional live IP allowlist, a `rci_live_` client id is accepted only from an IP address on the list; from any other, the request fails with `unauthorized_client` and no token is issued. Test credentials are never restricted. See [Restrict live credentials by IP](https://developer.getreeds.co/docs/getting-started/authentication#recommended-restrict-live-credentials-by-ip).\n- This endpoint serves every Reeds API, not only shipping. It allows 60 requests a minute per client.\n- From a web page (the dashboard's API console, or this site's \"try it\"), only test credentials are accepted: a `rci_live_` client id sent with such a page's `Origin` gets `400 unauthorized_client`, and its secret isn't checked. Live credentials belong on your own servers.\n- Unlike the rest of the API, errors here use the standard OAuth shape (`{\"error\": \"invalid_client\"}`), not the Reeds failure envelope. The one exception is `429`, which uses the Reeds failure envelope (`RATE_LIMITED`, with `Retry-After`) like every other endpoint, so one rate-limit handler covers the whole API.\n- When Reeds is overloaded, the endpoint answers `503` with `{\"error\": \"temporarily_unavailable\"}` (the OAuth code for an overloaded server) and `Retry-After`. Nothing was checked or spent: send the same request again after that many seconds.\n",
              "type": "text/plain"
            },
            "url": {
              "protocol": "https",
              "path": [
                "oauth",
                "token"
              ],
              "host": [
                "api",
                "getreeds",
                "co"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/x-www-form-urlencoded"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "urlencoded",
              "urlencoded": [
                {
                  "disabled": false,
                  "key": "grant_type",
                  "value": "client_credentials",
                  "description": "(Required) "
                },
                {
                  "disabled": true,
                  "key": "client_id",
                  "value": "rci_test_xxxxxxxxxxxx",
                  "description": "Starts `rci_test_` or `rci_live_`."
                },
                {
                  "disabled": true,
                  "key": "client_secret",
                  "value": "rcs_test_xxxxxxxxxxxx",
                  "description": "Starts `rcs_test_` or `rcs_live_`."
                }
              ]
            }
          },
          "response": [
            {
              "id": "52aaa2e9-f4a1-49c5-b98b-4e87a56a5985",
              "name": "Access token issued.",
              "originalRequest": {
                "url": {
                  "protocol": "https",
                  "path": [
                    "oauth",
                    "token"
                  ],
                  "host": [
                    "api",
                    "getreeds",
                    "co"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "urlencoded",
                  "urlencoded": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ",
                        "type": "text/plain"
                      },
                      "key": "grant_type",
                      "value": "client_credentials"
                    },
                    {
                      "disabled": true,
                      "description": {
                        "content": "Starts `rci_test_` or `rci_live_`.",
                        "type": "text/plain"
                      },
                      "key": "client_id",
                      "value": "rci_test_xxxxxxxxxxxx"
                    },
                    {
                      "disabled": true,
                      "description": {
                        "content": "Starts `rcs_test_` or `rcs_live_`.",
                        "type": "text/plain"
                      },
                      "key": "client_secret",
                      "value": "rcs_test_xxxxxxxxxxxx"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"access_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJyY2lfdGVzdF94eHgifQ.c2lnbmF0dXJl\",\n  \"token_type\": \"Bearer\",\n  \"expires_in\": 3600,\n  \"scope\": \"shipping\",\n  \"livemode\": false\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e4b236e2-1d2e-4dda-bcbb-e0739ebeff9e",
              "name": "The request can't be served. `invalid_request`: a required field is missing, the body can't be read, or the credentials came both in the body and as HTTP Basic. `unsupported_grant_type`: `grant_type` isn't `client_credentials`. `invalid_scope`: `scope` isn't `shipping`. `unauthorized_client`: the client isn't allowed to ask for a token from here, either because a `rci_live_` client id came from a web page (the API console takes test credentials only) or because the account has a live IP allowlist and the request came from an IP address that isn't on it. No token is issued; for `unauthorized_client` the secret isn't checked, so a wrong secret from an allowed place still gets `401`.\n",
              "originalRequest": {
                "url": {
                  "protocol": "https",
                  "path": [
                    "oauth",
                    "token"
                  ],
                  "host": [
                    "api",
                    "getreeds",
                    "co"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "urlencoded",
                  "urlencoded": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ",
                        "type": "text/plain"
                      },
                      "key": "grant_type",
                      "value": "client_credentials"
                    },
                    {
                      "disabled": true,
                      "description": {
                        "content": "Starts `rci_test_` or `rci_live_`.",
                        "type": "text/plain"
                      },
                      "key": "client_id",
                      "value": "rci_test_xxxxxxxxxxxx"
                    },
                    {
                      "disabled": true,
                      "description": {
                        "content": "Starts `rcs_test_` or `rcs_live_`.",
                        "type": "text/plain"
                      },
                      "key": "client_secret",
                      "value": "rcs_test_xxxxxxxxxxxx"
                    }
                  ]
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"unauthorized_client\",\n  \"error_description\": \"This IP address isn't on the account's live IP allowlist.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "da11031f-146d-457a-be17-d2a6830e836c",
              "name": "Wrong client id or secret, a revoked secret, or credentials the account can't use (for example live credentials before the account is approved).",
              "originalRequest": {
                "url": {
                  "protocol": "https",
                  "path": [
                    "oauth",
                    "token"
                  ],
                  "host": [
                    "api",
                    "getreeds",
                    "co"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "urlencoded",
                  "urlencoded": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ",
                        "type": "text/plain"
                      },
                      "key": "grant_type",
                      "value": "client_credentials"
                    },
                    {
                      "disabled": true,
                      "description": {
                        "content": "Starts `rci_test_` or `rci_live_`.",
                        "type": "text/plain"
                      },
                      "key": "client_id",
                      "value": "rci_test_xxxxxxxxxxxx"
                    },
                    {
                      "disabled": true,
                      "description": {
                        "content": "Starts `rcs_test_` or `rcs_live_`.",
                        "type": "text/plain"
                      },
                      "key": "client_secret",
                      "value": "rcs_test_xxxxxxxxxxxx"
                    }
                  ]
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_client\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "988ce386-4fd2-4bfe-96eb-2d8bac45e05b",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "protocol": "https",
                  "path": [
                    "oauth",
                    "token"
                  ],
                  "host": [
                    "api",
                    "getreeds",
                    "co"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "urlencoded",
                  "urlencoded": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ",
                        "type": "text/plain"
                      },
                      "key": "grant_type",
                      "value": "client_credentials"
                    },
                    {
                      "disabled": true,
                      "description": {
                        "content": "Starts `rci_test_` or `rci_live_`.",
                        "type": "text/plain"
                      },
                      "key": "client_id",
                      "value": "rci_test_xxxxxxxxxxxx"
                    },
                    {
                      "disabled": true,
                      "description": {
                        "content": "Starts `rcs_test_` or `rcs_live_`.",
                        "type": "text/plain"
                      },
                      "key": "client_secret",
                      "value": "rcs_test_xxxxxxxxxxxx"
                    }
                  ]
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "bb96ca37-62be-49ea-80ce-292184261f10",
              "name": "Reeds is overloaded and shed this request (`temporarily_unavailable`). Nothing was checked or spent. Wait `Retry-After` seconds and send the same request again.",
              "originalRequest": {
                "url": {
                  "protocol": "https",
                  "path": [
                    "oauth",
                    "token"
                  ],
                  "host": [
                    "api",
                    "getreeds",
                    "co"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "urlencoded",
                  "urlencoded": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ",
                        "type": "text/plain"
                      },
                      "key": "grant_type",
                      "value": "client_credentials"
                    },
                    {
                      "disabled": true,
                      "description": {
                        "content": "Starts `rci_test_` or `rci_live_`.",
                        "type": "text/plain"
                      },
                      "key": "client_id",
                      "value": "rci_test_xxxxxxxxxxxx"
                    },
                    {
                      "disabled": true,
                      "description": {
                        "content": "Starts `rcs_test_` or `rcs_live_`.",
                        "type": "text/plain"
                      },
                      "key": "client_secret",
                      "value": "rcs_test_xxxxxxxxxxxx"
                    }
                  ]
                }
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"temporarily_unavailable\",\n  \"error_description\": \"The server is busy. Retry after the number of seconds in Retry-After.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "dbc0bdee-8f87-42f6-9ce9-dff95c8bb5a9",
      "name": "Addresses",
      "description": {
        "content": "An address is a place plus a contact: who to collect from, or who to deliver to. Save it once and reuse its id.\nAn address Reeds cannot match exactly is saved as `needs_confirmation` and must be confirmed before a rider is ever sent.\n",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "48a0ca5c-d5a8-4eb3-b75e-70c112aef3f1",
          "name": "Create an address",
          "request": {
            "name": "Create an address",
            "description": {
              "content": "Saves a place plus a contact and tells you whether Reeds could match it exactly.\n\n**How Reeds resolves it**\n\n1. With a `place_id`, Reeds looks the place up. A precise place (a street address, a building or a business) is `verified`. A broad one, such as an area like Lekki or a whole road, is `needs_confirmation`, because its pin is only the middle of that area.\n2. Otherwise, with `latitude` and `longitude`, the pin is trusted and Reeds fills in the area and state from it. The address is `verified`.\n3. Otherwise Reeds geocodes the text, restricted to Nigeria. An exact match (rooftop or street-number level) is `verified`. An approximate match, or several candidates, is `needs_confirmation` with Reeds' best suggestion. No match is `needs_confirmation` with no suggestion.\n4. Every resolved location is checked against Reeds' coverage. An address outside it is saved with `serviceable: false` and a `reason`. It cannot be quoted or booked, but stays saved in case coverage grows.\n\nSaving the same place with the same contact again, within one account and mode, returns the existing address as it is instead of creating a duplicate (its `notes` and `metadata` are not changed: use `PATCH` for that).\n\nPhone numbers are accepted in `+234` and `0` forms and returned in the `0XXXXXXXXXX` form. Include the area and state in `address` for the best match.\n\nThis endpoint is limited to 30 requests a minute on business accounts and 300 on platform accounts, because each call may use a map lookup.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "addresses"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Ada Okafor\",\n  \"phone\": \"08031234567\",\n  \"email\": \"ada@example.com\",\n  \"address\": \"23 Allen Avenue, Ikeja, Lagos\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "b5a04fce-42e5-4398-84fd-712c7f40c2c5",
              "name": "Address saved (or an existing identical address returned).",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Ada Okafor\",\n  \"phone\": \"08031234567\",\n  \"email\": \"ada@example.com\",\n  \"address\": \"23 Allen Avenue, Ikeja, Lagos\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"id\": \"adr_7Hq2Lk9P\",\n    \"livemode\": true,\n    \"status\": \"verified\",\n    \"serviceable\": true,\n    \"reason\": null,\n    \"contact\": {\n      \"name\": \"Ada Okafor\",\n      \"phone\": \"08031234567\",\n      \"email\": \"ada@example.com\"\n    },\n    \"submitted_address\": \"23 Allen Avenue, Ikeja\",\n    \"location\": {\n      \"formatted_address\": \"23 Allen Ave, Ikeja, Lagos 101233, Nigeria\",\n      \"place_id\": \"ChIJN1t_tDeuEmsRUsoyG83frY4\",\n      \"latitude\": 6.6018,\n      \"longitude\": 3.3515,\n      \"lga\": \"Ikeja\",\n      \"state\": \"Lagos\",\n      \"country\": \"NG\"\n    },\n    \"match\": {\n      \"source\": \"text\",\n      \"confidence\": \"exact\"\n    },\n    \"suggestion\": null,\n    \"notes\": null,\n    \"metadata\": {},\n    \"created_at\": \"2026-10-26T10:15:00+01:00\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5a2b6ee4-828e-4c16-991d-12dc6874922f",
              "name": "Malformed request, such as invalid JSON or a missing required header.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Ada Okafor\",\n  \"phone\": \"08031234567\",\n  \"email\": \"ada@example.com\",\n  \"address\": \"23 Allen Avenue, Ikeja, Lagos\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_JSON\",\n    \"message\": \"The request body is not valid JSON.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_JSON\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2316876c-386a-4e9f-9369-fa5439843393",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Ada Okafor\",\n  \"phone\": \"08031234567\",\n  \"email\": \"ada@example.com\",\n  \"address\": \"23 Allen Avenue, Ikeja, Lagos\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "09d43155-49b8-465b-a4c9-d2aa3eb69aa9",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Ada Okafor\",\n  \"phone\": \"08031234567\",\n  \"email\": \"ada@example.com\",\n  \"address\": \"23 Allen Avenue, Ikeja, Lagos\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e123dfa4-ab3b-4bbc-98a4-a832b8de226b",
              "name": "Validation failed. `error.fields` lists each problem.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Ada Okafor\",\n  \"phone\": \"08031234567\",\n  \"email\": \"ada@example.com\",\n  \"address\": \"23 Allen Avenue, Ikeja, Lagos\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_REQUEST\",\n    \"message\": \"One or more fields are invalid.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_REQUEST\",\n    \"fields\": [\n      {\n        \"field\": \"phone\",\n        \"message\": \"Enter a valid Nigerian mobile number\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f5cc81ed-2c96-4d0c-819b-ee40a5fb22cd",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Ada Okafor\",\n  \"phone\": \"08031234567\",\n  \"email\": \"ada@example.com\",\n  \"address\": \"23 Allen Avenue, Ikeja, Lagos\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f70e45f1-261f-4e95-a808-8b093a36f765",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Ada Okafor\",\n  \"phone\": \"08031234567\",\n  \"email\": \"ada@example.com\",\n  \"address\": \"23 Allen Avenue, Ikeja, Lagos\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4ea10646-a5e3-444b-806f-b958a92623e3",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Ada Okafor\",\n  \"phone\": \"08031234567\",\n  \"email\": \"ada@example.com\",\n  \"address\": \"23 Allen Avenue, Ikeja, Lagos\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "dee5b7a6-a266-450c-8cfd-60edf690cc59",
          "name": "List addresses",
          "request": {
            "name": "List addresses",
            "description": {
              "content": "Returns your saved addresses, newest first. Paginate with `limit` and `starting_after`; there is no total count.\nAddresses saved inline by `POST /quotes` are not listed; `GET /addresses/{id}` still returns them.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "addresses"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "status",
                  "value": "verified",
                  "description": "Only addresses with this status."
                },
                {
                  "disabled": true,
                  "key": "limit",
                  "value": "50",
                  "description": "How many objects to return, from 1 to 100."
                },
                {
                  "disabled": true,
                  "key": "starting_after",
                  "value": "dlv_9Kd3Qx7M",
                  "description": "Cursor for the next page. Pass the id of the last object you received."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [
            {
              "id": "1cea14df-a1a4-43af-99ad-1ae4fab6fa09",
              "name": "A page of addresses.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "verified"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": [\n    {\n      \"id\": \"adr_3Mz8Rt1Q\",\n      \"livemode\": true,\n      \"status\": \"needs_confirmation\",\n      \"serviceable\": null,\n      \"reason\": null,\n      \"contact\": {\n        \"name\": \"Bola Adeyemi\",\n        \"phone\": \"08024567890\",\n        \"email\": null\n      },\n      \"submitted_address\": \"12 Church Street\",\n      \"location\": null,\n      \"match\": {\n        \"source\": \"text\",\n        \"confidence\": \"approximate\"\n      },\n      \"suggestion\": {\n        \"formatted_address\": \"12 Church St, Ebute Metta, Lagos, Nigeria\",\n        \"place_id\": \"ChIJd8BlQ2nPOxARf0mS5xWm1Q8\",\n        \"latitude\": 6.4853,\n        \"longitude\": 3.3816,\n        \"lga\": \"Lagos Mainland\",\n        \"state\": \"Lagos\"\n      },\n      \"notes\": null,\n      \"metadata\": {},\n      \"created_at\": \"2026-10-26T10:16:00+01:00\"\n    },\n    {\n      \"id\": \"adr_7Hq2Lk9P\",\n      \"livemode\": true,\n      \"status\": \"verified\",\n      \"serviceable\": true,\n      \"reason\": null,\n      \"contact\": {\n        \"name\": \"Ada Okafor\",\n        \"phone\": \"08031234567\",\n        \"email\": \"ada@example.com\"\n      },\n      \"submitted_address\": \"23 Allen Avenue, Ikeja\",\n      \"location\": {\n        \"formatted_address\": \"23 Allen Ave, Ikeja, Lagos 101233, Nigeria\",\n        \"place_id\": \"ChIJN1t_tDeuEmsRUsoyG83frY4\",\n        \"latitude\": 6.6018,\n        \"longitude\": 3.3515,\n        \"lga\": \"Ikeja\",\n        \"state\": \"Lagos\",\n        \"country\": \"NG\"\n      },\n      \"match\": {\n        \"source\": \"text\",\n        \"confidence\": \"exact\"\n      },\n      \"suggestion\": null,\n      \"notes\": null,\n      \"metadata\": {},\n      \"created_at\": \"2026-10-26T10:15:00+01:00\"\n    }\n  ],\n  \"has_more\": false\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "295ed9fd-67d9-42ac-b955-3f1dde6b5c4e",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "verified"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "eddadf5f-620e-493f-8ca9-0004df39d3f4",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "verified"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "33c26b31-4c75-42a5-bab1-0627e49df58d",
              "name": "Validation failed. `error.fields` lists each problem.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "verified"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_REQUEST\",\n    \"message\": \"One or more fields are invalid.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_REQUEST\",\n    \"fields\": [\n      {\n        \"field\": \"phone\",\n        \"message\": \"Enter a valid Nigerian mobile number\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8c314bc0-7657-4376-82ff-f2a909fd1aaa",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "verified"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "6f54928d-23dd-41a5-a7fc-fe55217768cd",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "verified"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "97e850a2-520f-4130-b13f-e89a39f79991",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "verified"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "65304a3a-8421-4381-a9b4-4caa7e2b83d4",
          "name": "Retrieve an address",
          "request": {
            "name": "Retrieve an address",
            "description": {
              "content": "Returns one saved address. Another account's address id returns `404 NOT_FOUND`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "addresses",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "adr_7Hq2Lk9P",
                  "key": "id",
                  "description": "(Required) The address id."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [
            {
              "id": "17766ac5-9f8e-4208-82c2-34985b79fa9d",
              "name": "The address.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"id\": \"adr_7Hq2Lk9P\",\n    \"livemode\": true,\n    \"status\": \"verified\",\n    \"serviceable\": true,\n    \"reason\": null,\n    \"contact\": {\n      \"name\": \"Ada Okafor\",\n      \"phone\": \"08031234567\",\n      \"email\": \"ada@example.com\"\n    },\n    \"submitted_address\": \"23 Allen Avenue, Ikeja\",\n    \"location\": {\n      \"formatted_address\": \"23 Allen Ave, Ikeja, Lagos 101233, Nigeria\",\n      \"place_id\": \"ChIJN1t_tDeuEmsRUsoyG83frY4\",\n      \"latitude\": 6.6018,\n      \"longitude\": 3.3515,\n      \"lga\": \"Ikeja\",\n      \"state\": \"Lagos\",\n      \"country\": \"NG\"\n    },\n    \"match\": {\n      \"source\": \"text\",\n      \"confidence\": \"exact\"\n    },\n    \"suggestion\": null,\n    \"notes\": null,\n    \"metadata\": {},\n    \"created_at\": \"2026-10-26T10:15:00+01:00\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "79590a35-72ca-42bb-b49f-dd76c6ab97e2",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1c6b7ceb-5fc8-4f4a-a27c-216d09cac7ea",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "52eba976-6c05-4bc5-81bd-1ecd6f90f0f5",
              "name": "No such object for this account. Another account's id also returns 404.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"No such delivery.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/NOT_FOUND\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "bf1d381b-41a5-4de0-97b8-820859a66606",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "37c1706d-3301-46af-99ea-a9506ee84d85",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e2719fcd-21df-4407-a0c7-7dc5d3b668fe",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "c04cb0d2-fa92-4b21-b047-f80b0b175f74",
          "name": "Update an address",
          "request": {
            "name": "Update an address",
            "description": {
              "content": "Changes contact fields, `notes` and `metadata`. The location cannot be edited: sending `address`, `place_id`, `latitude` or `longitude` is `422 INVALID_REQUEST`; save a new address instead.\n\nA change never reaches deliveries already booked, because each delivery keeps a copy of its addresses taken at booking.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "addresses",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "adr_7Hq2Lk9P",
                  "key": "id",
                  "description": "(Required) The address id."
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phone\": \"08031234000\",\n  \"notes\": \"Security desk on the ground floor\",\n  \"metadata\": {\n    \"branch\": \"ikeja\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "1dde538d-13fa-4da2-aa37-c6b5ae2caaf5",
              "name": "The updated address.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"phone\": \"08031234000\",\n  \"notes\": \"Security desk on the ground floor\",\n  \"metadata\": {\n    \"branch\": \"ikeja\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"id\": \"adr_7Hq2Lk9P\",\n    \"livemode\": true,\n    \"status\": \"verified\",\n    \"serviceable\": true,\n    \"reason\": null,\n    \"contact\": {\n      \"name\": \"Ada Okafor\",\n      \"phone\": \"08031234567\",\n      \"email\": \"ada@example.com\"\n    },\n    \"submitted_address\": \"23 Allen Avenue, Ikeja\",\n    \"location\": {\n      \"formatted_address\": \"23 Allen Ave, Ikeja, Lagos 101233, Nigeria\",\n      \"place_id\": \"ChIJN1t_tDeuEmsRUsoyG83frY4\",\n      \"latitude\": 6.6018,\n      \"longitude\": 3.3515,\n      \"lga\": \"Ikeja\",\n      \"state\": \"Lagos\",\n      \"country\": \"NG\"\n    },\n    \"match\": {\n      \"source\": \"text\",\n      \"confidence\": \"exact\"\n    },\n    \"suggestion\": null,\n    \"notes\": null,\n    \"metadata\": {},\n    \"created_at\": \"2026-10-26T10:15:00+01:00\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "c0174742-e1b4-4270-873f-a2f7df72e9a3",
              "name": "Malformed request, such as invalid JSON or a missing required header.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"phone\": \"08031234000\",\n  \"notes\": \"Security desk on the ground floor\",\n  \"metadata\": {\n    \"branch\": \"ikeja\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_JSON\",\n    \"message\": \"The request body is not valid JSON.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_JSON\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9c1eb639-7b60-4eca-bc8a-8c84fc8d9cb2",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"phone\": \"08031234000\",\n  \"notes\": \"Security desk on the ground floor\",\n  \"metadata\": {\n    \"branch\": \"ikeja\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "cdddc4fd-2d9f-4450-85b1-da390a32e1a4",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"phone\": \"08031234000\",\n  \"notes\": \"Security desk on the ground floor\",\n  \"metadata\": {\n    \"branch\": \"ikeja\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d03b9e87-f103-42d8-926a-a43896a0a463",
              "name": "No such object for this account. Another account's id also returns 404.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"phone\": \"08031234000\",\n  \"notes\": \"Security desk on the ground floor\",\n  \"metadata\": {\n    \"branch\": \"ikeja\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"No such delivery.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/NOT_FOUND\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e876d7d0-d4bc-4cc0-928f-584ae56f3f51",
              "name": "Validation failed. `error.fields` lists each problem.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"phone\": \"08031234000\",\n  \"notes\": \"Security desk on the ground floor\",\n  \"metadata\": {\n    \"branch\": \"ikeja\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_REQUEST\",\n    \"message\": \"One or more fields are invalid.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_REQUEST\",\n    \"fields\": [\n      {\n        \"field\": \"phone\",\n        \"message\": \"Enter a valid Nigerian mobile number\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b27a527d-2e85-474d-b6a8-7d735743c316",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"phone\": \"08031234000\",\n  \"notes\": \"Security desk on the ground floor\",\n  \"metadata\": {\n    \"branch\": \"ikeja\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b420ace0-6ed1-42be-bfe9-678ff8b5bfa9",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"phone\": \"08031234000\",\n  \"notes\": \"Security desk on the ground floor\",\n  \"metadata\": {\n    \"branch\": \"ikeja\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "fcd488fa-ded5-4a67-953b-42d057502c44",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"phone\": \"08031234000\",\n  \"notes\": \"Security desk on the ground floor\",\n  \"metadata\": {\n    \"branch\": \"ikeja\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "9000d333-8c1c-4bf3-ac32-270d9fe9c32b",
          "name": "Delete an address",
          "request": {
            "name": "Delete an address",
            "description": {
              "content": "Deletes a saved address and its contact details, for example when a receiver asks to be erased.\n\n- Deliveries already booked keep their own copy of the address.\n- While a draft uses the address, the delete is refused with `409 ADDRESS_IN_USE`. Cancel the draft first.\n- Unused quotes for the address expire at once, so booking one returns `409 QUOTE_EXPIRED`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "addresses",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "adr_7Hq2Lk9P",
                  "key": "id",
                  "description": "(Required) The address id."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "DELETE"
          },
          "response": [
            {
              "id": "67fecfd4-768e-498a-bdd1-106143eb06ea",
              "name": "The address was deleted.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"id\": \"adr_7Hq2Lk9P\",\n    \"deleted\": true\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ac2f786e-671b-40d4-ad0b-58911e280a04",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "22e10fab-771f-416d-80e4-b20593ed3bdc",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "bc928082-abe0-4ac1-a453-055a9377f07e",
              "name": "No such object for this account. Another account's id also returns 404.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"No such delivery.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/NOT_FOUND\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "53c5fbfb-3c8d-4b87-a56d-9c902be14aa1",
              "name": "A draft still uses this address.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"ADDRESS_IN_USE\",\n    \"message\": \"Draft dlv_8Pq4Ns2L still uses this address. Cancel it first.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/ADDRESS_IN_USE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3313174d-7dc1-44ad-a65a-665ed957fc2a",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "176aebae-1e84-49fc-9ee8-282f54a87566",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "468f4506-f3fb-4d85-a5df-e22e8b56493e",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "044dd7ca-d658-4ebc-8e65-ca72f5d26a6d",
          "name": "Confirm an address",
          "request": {
            "name": "Confirm an address",
            "description": {
              "content": "Only for addresses with status `needs_confirmation`. Send exactly one of three bodies: accept Reeds' suggestion,\npick another Google place, or give coordinates.\n\nThe address becomes `verified` and any drafts waiting on it move on: they are priced, and booked at once if they were\ncreated with `auto_book: true` and the account can pay. The `address.confirmed` webhook fires.\n\nConfirming an address that is already `verified` returns `409 ACTION_NOT_ALLOWED`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "addresses",
                ":id",
                "confirm"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "adr_7Hq2Lk9P",
                  "key": "id",
                  "description": "(Required) The address id."
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"accept_suggestion\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "4edd85e8-1fc9-4b89-b669-f522dcd3272e",
              "name": "The address, now verified.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"accept_suggestion\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"id\": \"adr_3Mz8Rt1Q\",\n    \"livemode\": true,\n    \"status\": \"verified\",\n    \"serviceable\": true,\n    \"reason\": null,\n    \"contact\": {\n      \"name\": \"Bola Adeyemi\",\n      \"phone\": \"08024567890\",\n      \"email\": null\n    },\n    \"submitted_address\": \"12 Church Street\",\n    \"location\": {\n      \"formatted_address\": \"12 Church St, Ebute Metta, Lagos, Nigeria\",\n      \"place_id\": \"ChIJd8BlQ2nPOxARf0mS5xWm1Q8\",\n      \"latitude\": 6.4853,\n      \"longitude\": 3.3816,\n      \"lga\": \"Lagos Mainland\",\n      \"state\": \"Lagos\",\n      \"country\": \"NG\"\n    },\n    \"match\": {\n      \"source\": \"place_id\",\n      \"confidence\": \"exact\"\n    },\n    \"suggestion\": null,\n    \"notes\": null,\n    \"metadata\": {},\n    \"created_at\": \"2026-10-26T10:16:00+01:00\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b08665c6-1c27-4412-8285-251e5b030d42",
              "name": "Malformed request, such as invalid JSON or a missing required header.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"accept_suggestion\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_JSON\",\n    \"message\": \"The request body is not valid JSON.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_JSON\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7678af52-a206-41d9-acfd-3ef6ed458485",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"accept_suggestion\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8697b319-ace2-46ee-88cd-6701cf648143",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"accept_suggestion\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "41869025-ed26-4724-bc88-a24f13fd62a7",
              "name": "No such object for this account. Another account's id also returns 404.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"accept_suggestion\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"No such delivery.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/NOT_FOUND\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "069bce05-d98a-4066-819b-571651c7498e",
              "name": "The request conflicts with the current state of the object.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"accept_suggestion\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"ACTION_NOT_ALLOWED\",\n    \"message\": \"The delivery's addresses are not confirmed yet.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/ACTION_NOT_ALLOWED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ef9b6c33-9de2-47cb-8702-26f82d331a5a",
              "name": "Validation failed. `error.fields` lists each problem.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"accept_suggestion\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_REQUEST\",\n    \"message\": \"One or more fields are invalid.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_REQUEST\",\n    \"fields\": [\n      {\n        \"field\": \"phone\",\n        \"message\": \"Enter a valid Nigerian mobile number\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9c921547-2d2b-4280-947c-0629346a3ce6",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"accept_suggestion\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f2d60e47-f28d-4d6f-934b-892a1d2922a1",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"accept_suggestion\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "cd73cd0c-6d66-4a7f-8635-e89ff8e23521",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "addresses",
                    ":id",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "adr_7Hq2Lk9P",
                      "key": "id",
                      "description": "(Required) The address id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"accept_suggestion\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "732880af-f777-4a36-b124-48947a560804",
      "name": "Coverage",
      "description": {
        "content": "The states and zones Reeds serves, and the state-to-state routes it runs.\n",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "889ee76b-b9b1-43dd-a2f3-425e40cce9c9",
          "name": "Get coverage",
          "request": {
            "name": "Get coverage",
            "description": {
              "content": "Lists the states and zones Reeds serves for pickup and delivery, and the state-to-state routes.\nWhether Reeds serves an address is decided by its state, when it is saved (`serviceable`); `zones` is for\ndisplay, and its names don't always match an address's `location.lga`.\nAn inter-state route with `available: false` is listed but isn't available through the API.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "coverage"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [
            {
              "id": "4cd8a6bd-ad36-44db-948d-91319dd81a01",
              "name": "Current coverage.",
              "originalRequest": {
                "url": {
                  "path": [
                    "coverage"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"states\": [\n      {\n        \"state\": \"Lagos\",\n        \"pickup\": true,\n        \"delivery\": true,\n        \"zones\": [\n          \"Ikeja\",\n          \"Lekki\",\n          \"Yaba\",\n          \"Surulere\"\n        ]\n      }\n    ],\n    \"interstate\": [\n      {\n        \"from\": \"Lagos\",\n        \"to\": \"FCT\",\n        \"promise\": \"3-5 working days\",\n        \"available\": false\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "37b910be-02a9-4ccc-ade9-fbfb60f1edab",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "coverage"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "aebe501a-c035-4b24-8e49-cbe65e18f09e",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "coverage"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9fc15af5-650f-49f4-91e8-b82b08c32035",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "coverage"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1feae7bd-9e4b-480a-a61f-2bf00c7c1cbb",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "coverage"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "98fe7016-143c-45cd-9eb7-912a8c45d6c6",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "coverage"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "060d7789-730f-48b5-9e21-e63336f12e1c",
      "name": "Quotes",
      "description": {
        "content": "A quote prices one route and package, and holds that price for 24 hours. A route Reeds cannot serve is not an error: the quote comes back with `available: false` and a reason.\n",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "c7494577-c678-4487-b1b1-10e4ce35f389",
          "name": "Create a quote",
          "request": {
            "name": "Create a quote",
            "description": {
              "content": "Prices a route and package. Send the pickup and drop-off either as saved address ids\n(`pickup_address_id`, `dropoff_address_id`) or inline as address objects (`pickup`, `dropoff`) with the same fields as\n`POST /addresses`. Inline addresses are saved and their ids returned. This is the one-call quote platforms use at checkout.\n\n- A quote lasts 24 hours and books one delivery. The price is locked: booking within 24 hours pays exactly the quoted total.\n- `service` is `standard` (within a state, a two-day range). `interstate` is reserved for inter-state delivery, which isn't available through the API.\n- `schedule` is the promise if you book now. A delivery's own schedule is worked out when it is booked and ready, so a quote booked after the day's cut-off gets later dates. The price doesn't change.\n- `route.type` is `direct` (under 7 km: one rider, no hub) or `via_hub` (collected into the nearest Reeds hub, then delivered).\n- When Reeds cannot serve the route the response is **not** an error: you get `200` with `available: false` and a `reason`. Treat it as \"Reeds is not an option for this checkout\".\n- Send coordinates or a place id for the best results. A text-only address that matches only approximately makes the quote unavailable with `ADDRESS_NEEDS_CONFIRMATION`.\n- Inline addresses are never de-duplicated, and are deleted after 30 days if the quote never becomes a delivery.\n- If Reeds can't measure the route right now (its maps service is unavailable) the answer is `503 SERVICE_UNAVAILABLE`, not `available: false`: retry shortly.\n- Limited to 30 requests a minute on business accounts and 300 on platform accounts; ask Reeds to raise it for checkout use.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "quotes"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"pickup_address_id\": \"adr_7Hq2Lk9P\",\n  \"dropoff_address_id\": \"adr_5Vb1Jc8D\",\n  \"package\": {\n    \"description\": \"2 pairs of sneakers\",\n    \"quantity\": 1,\n    \"weight_kg\": 1.5,\n    \"declared_value\": 4500000\n  },\n  \"pickup_date\": \"2026-10-26\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "35887768-1d10-4ddb-bbe3-7d38d9db7d77",
              "name": "Reeds cannot serve this route. Not an error.",
              "originalRequest": {
                "url": {
                  "path": [
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"pickup_address_id\": \"adr_7Hq2Lk9P\",\n  \"dropoff_address_id\": \"adr_5Vb1Jc8D\",\n  \"package\": {\n    \"description\": \"2 pairs of sneakers\",\n    \"quantity\": 1,\n    \"weight_kg\": 1.5,\n    \"declared_value\": 4500000\n  },\n  \"pickup_date\": \"2026-10-26\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"available\": false,\n    \"reason\": {\n      \"code\": \"ADDRESS_NOT_SERVICEABLE\",\n      \"message\": \"The drop-off is outside Reeds' coverage\"\n    },\n    \"pickup_address_id\": \"adr_7Hq2Lk9P\",\n    \"dropoff_address_id\": \"adr_6Tn3Wd5R\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5ed0c50f-d306-4984-bfd7-0a812f57dd7d",
              "name": "A priced quote.",
              "originalRequest": {
                "url": {
                  "path": [
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"pickup_address_id\": \"adr_7Hq2Lk9P\",\n  \"dropoff_address_id\": \"adr_5Vb1Jc8D\",\n  \"package\": {\n    \"description\": \"2 pairs of sneakers\",\n    \"quantity\": 1,\n    \"weight_kg\": 1.5,\n    \"declared_value\": 4500000\n  },\n  \"pickup_date\": \"2026-10-26\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"id\": \"qt_2bX9Wn4K\",\n    \"available\": true,\n    \"livemode\": true,\n    \"expires_at\": \"2026-10-27T10:20:00+01:00\",\n    \"pickup_address_id\": \"adr_7Hq2Lk9P\",\n    \"dropoff_address_id\": \"adr_5Vb1Jc8D\",\n    \"service\": \"standard\",\n    \"route\": {\n      \"type\": \"via_hub\",\n      \"distance_km\": 13.5\n    },\n    \"fee\": {\n      \"delivery_fee\": 255000,\n      \"vat\": 19125,\n      \"service_charge\": 5875,\n      \"discount\": 0,\n      \"total\": 280000,\n      \"currency\": \"NGN\"\n    },\n    \"schedule\": {\n      \"pickup_by\": \"2026-10-26T19:00:00+01:00\",\n      \"deliver_by\": \"2026-10-27T19:00:00+01:00\",\n      \"earliest_delivery\": \"2026-10-26T19:00:00+01:00\"\n    },\n    \"package\": {\n      \"description\": \"2 pairs of sneakers\",\n      \"quantity\": 1,\n      \"weight_kg\": 1.5,\n      \"declared_value\": 4500000\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f6a90de9-a4eb-432d-ad2f-a37d164d32ba",
              "name": "Malformed request, such as invalid JSON or a missing required header.",
              "originalRequest": {
                "url": {
                  "path": [
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"pickup_address_id\": \"adr_7Hq2Lk9P\",\n  \"dropoff_address_id\": \"adr_5Vb1Jc8D\",\n  \"package\": {\n    \"description\": \"2 pairs of sneakers\",\n    \"quantity\": 1,\n    \"weight_kg\": 1.5,\n    \"declared_value\": 4500000\n  },\n  \"pickup_date\": \"2026-10-26\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_JSON\",\n    \"message\": \"The request body is not valid JSON.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_JSON\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "67ae4e56-0c7b-4a8b-a983-95ec11348bf5",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"pickup_address_id\": \"adr_7Hq2Lk9P\",\n  \"dropoff_address_id\": \"adr_5Vb1Jc8D\",\n  \"package\": {\n    \"description\": \"2 pairs of sneakers\",\n    \"quantity\": 1,\n    \"weight_kg\": 1.5,\n    \"declared_value\": 4500000\n  },\n  \"pickup_date\": \"2026-10-26\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d6b43fc8-3089-4c1e-abe8-1307ce527d6d",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"pickup_address_id\": \"adr_7Hq2Lk9P\",\n  \"dropoff_address_id\": \"adr_5Vb1Jc8D\",\n  \"package\": {\n    \"description\": \"2 pairs of sneakers\",\n    \"quantity\": 1,\n    \"weight_kg\": 1.5,\n    \"declared_value\": 4500000\n  },\n  \"pickup_date\": \"2026-10-26\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f7d523f5-0b1d-4c84-ad3e-bd967450e1d4",
              "name": "No such object for this account. Another account's id also returns 404.",
              "originalRequest": {
                "url": {
                  "path": [
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"pickup_address_id\": \"adr_7Hq2Lk9P\",\n  \"dropoff_address_id\": \"adr_5Vb1Jc8D\",\n  \"package\": {\n    \"description\": \"2 pairs of sneakers\",\n    \"quantity\": 1,\n    \"weight_kg\": 1.5,\n    \"declared_value\": 4500000\n  },\n  \"pickup_date\": \"2026-10-26\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"No such delivery.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/NOT_FOUND\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b30ddf8b-d427-41cd-92fd-b38d1d6ed70a",
              "name": "Validation failed. `error.fields` lists each problem.",
              "originalRequest": {
                "url": {
                  "path": [
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"pickup_address_id\": \"adr_7Hq2Lk9P\",\n  \"dropoff_address_id\": \"adr_5Vb1Jc8D\",\n  \"package\": {\n    \"description\": \"2 pairs of sneakers\",\n    \"quantity\": 1,\n    \"weight_kg\": 1.5,\n    \"declared_value\": 4500000\n  },\n  \"pickup_date\": \"2026-10-26\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_REQUEST\",\n    \"message\": \"One or more fields are invalid.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_REQUEST\",\n    \"fields\": [\n      {\n        \"field\": \"phone\",\n        \"message\": \"Enter a valid Nigerian mobile number\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7c324866-1fe0-4324-bfe4-2e0a162971e6",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"pickup_address_id\": \"adr_7Hq2Lk9P\",\n  \"dropoff_address_id\": \"adr_5Vb1Jc8D\",\n  \"package\": {\n    \"description\": \"2 pairs of sneakers\",\n    \"quantity\": 1,\n    \"weight_kg\": 1.5,\n    \"declared_value\": 4500000\n  },\n  \"pickup_date\": \"2026-10-26\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a9f1e9d0-1a6f-4114-9fed-af1fbffe0273",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"pickup_address_id\": \"adr_7Hq2Lk9P\",\n  \"dropoff_address_id\": \"adr_5Vb1Jc8D\",\n  \"package\": {\n    \"description\": \"2 pairs of sneakers\",\n    \"quantity\": 1,\n    \"weight_kg\": 1.5,\n    \"declared_value\": 4500000\n  },\n  \"pickup_date\": \"2026-10-26\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "c2f1dead-1653-4ac1-8780-99b2208cc384",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "quotes"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"pickup_address_id\": \"adr_7Hq2Lk9P\",\n  \"dropoff_address_id\": \"adr_5Vb1Jc8D\",\n  \"package\": {\n    \"description\": \"2 pairs of sneakers\",\n    \"quantity\": 1,\n    \"weight_kg\": 1.5,\n    \"declared_value\": 4500000\n  },\n  \"pickup_date\": \"2026-10-26\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "12189728-44d1-4878-8a44-67c6864a3d6b",
      "name": "Deliveries",
      "description": {
        "content": "Book a delivery from a quote, or create a draft when something is missing. Creating a delivery and starting it are different things:\nReeds never sends a rider to an address nobody has confirmed. A draft waits in `requires_action` until every required action is cleared.\n",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "94e60b6a-b453-4ffa-8e2b-15b3c99ac9a5",
          "name": "Create a delivery",
          "request": {
            "name": "Create a delivery",
            "description": {
              "content": "Books a delivery from a quote, or creates a draft. **Requires an `Idempotency-Key` header.**\n\n**Book from a quote.** Send `quote_id` (an unexpired, unused quote). The delivery is booked, the wallet is debited (or the delivery\nis added to the month's invoice), and the status is `scheduled`. The tracking code is returned at once; Reeds sets the delivery up with its riders and hubs\nwithin seconds. If Reeds can't set it up within 30 minutes, the delivery is cancelled with a full refund and `delivery.cancelled`\nfires with the reason `processing_failed`.\n\n**Create a draft.** Leave out `quote_id` and send `pickup_address_id`, `dropoff_address_id` and `package`. Use this when an address still\nneeds confirmation, or when you want Reeds to price and book in one call. A draft has status `requires_action` and a list of\n`required_actions`; nothing is charged. A delivery that is created but blocked is a success (`201`), never an error.\n\n- Reeds prices the draft as soon as both addresses are verified. With `auto_book: true` it books itself as soon as both addresses are confirmed and the account can pay, with no further call from you. `max_total` (kobo) caps what auto-booking will pay; above it the draft waits with the `BOOK` action.\n- Booking from a quote charges at once: if the wallet doesn't cover it you get `402 INSUFFICIENT_BALANCE` (`402 CREDIT_LIMIT_REACHED` for an invoice account), nothing is created and the quote stays unused, so fund the wallet and retry with the same `Idempotency-Key`. A draft never gets a 402: it waits with `FUND_WALLET` and books itself once the money lands (with `auto_book`).\n- `pickup_instructions` and `dropoff_instructions` are for this delivery only (the address's own `notes` stay on the address); the rider sees them first. Change them later with `PATCH /deliveries/{id}`.\n- Send `ready: false` if the item is not packed yet. The delivery waits in `requires_action` with `MARK_READY` until you call `POST /deliveries/{id}/ready`, and the pickup is scheduled from that moment.\n- Platform accounts must send `shipper` (`422 SHIPPER_REQUIRED` without it). Business accounts leave it out; it is ignored if sent.\n- Reeds carries parcels up to 30 kg (`422 PARCEL_TOO_HEAVY`) with no side longer than 120 cm (`422 PARCEL_TOO_LARGE`), and never cash, weapons, drugs, hazardous goods (petrol and other fuels, gas cylinders, explosives, chemicals) or perishable food (`422 PROHIBITED_ITEM`, naming the category). The description is screened by keyword; if an allowed item is refused, describe it differently or contact Reeds support.\n- The declared value is accepted at any amount. Reeds covers loss or damage up to the declared value, at most ₦50,000 per delivery; `liability` on the delivery says what is covered.\n- Nothing waits forever: a draft that is not booked within 7 days, and a booked delivery that is not marked ready within 7 days, are cancelled with the reason `expired`, and a charged delivery is refunded in full. You are reminded on day 3 and day 6 through `delivery.expiring`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "deliveries"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"quote_id\": \"qt_2bX9Wn4K\",\n  \"reference\": \"ORDER-10045\",\n  \"pickup_instructions\": \"Call on arrival\",\n  \"metadata\": {\n    \"store_id\": \"42\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "ffdb9605-d3f6-4d12-9ffe-f4438c5ed105",
              "name": "Delivery booked, or draft created.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"quote_id\": \"qt_2bX9Wn4K\",\n  \"reference\": \"ORDER-10045\",\n  \"pickup_instructions\": \"Call on arrival\",\n  \"metadata\": {\n    \"store_id\": \"42\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "disabled": true,
                  "description": "`true` when this response is the saved result of an earlier request with the same idempotency key.",
                  "key": "Idempotent-Replayed",
                  "value": "true"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"id\": \"dlv_9Kd3Qx7M\",\n    \"livemode\": true,\n    \"channel\": \"direct\",\n    \"shipper\": null,\n    \"reference\": \"ORDER-10045\",\n    \"status\": \"scheduled\",\n    \"required_actions\": [],\n    \"cancellable\": true,\n    \"tracking_code\": \"HQ3W5F2\",\n    \"tracking_url\": \"https://getreeds.co/packages/HQ3W5F2\",\n    \"service\": \"standard\",\n    \"route\": {\n      \"type\": \"via_hub\",\n      \"distance_km\": 13.5\n    },\n    \"pickup\": {\n      \"address\": {\n        \"id\": \"adr_7Hq2Lk9P\",\n        \"contact\": {\n          \"name\": \"Ada Okafor\",\n          \"phone\": \"08031234567\",\n          \"email\": \"ada@example.com\"\n        },\n        \"location\": {\n          \"formatted_address\": \"23 Allen Ave, Ikeja, Lagos 101233, Nigeria\",\n          \"place_id\": \"ChIJN1t_tDeuEmsRUsoyG83frY4\",\n          \"latitude\": 6.6018,\n          \"longitude\": 3.3515,\n          \"lga\": \"Ikeja\",\n          \"state\": \"Lagos\",\n          \"country\": \"NG\"\n        }\n      },\n      \"instructions\": \"Call on arrival\",\n      \"completed_at\": null\n    },\n    \"dropoff\": {\n      \"address\": {\n        \"id\": \"adr_5Vb1Jc8D\",\n        \"contact\": {\n          \"name\": \"Chinedu Eze\",\n          \"phone\": \"08098765432\",\n          \"email\": null\n        },\n        \"location\": {\n          \"formatted_address\": \"14 Admiralty Way, Lekki Phase 1, Lagos, Nigeria\",\n          \"place_id\": \"ChIJ8TQy0JKLOxARmZ9bJc2sVkA\",\n          \"latitude\": 6.4474,\n          \"longitude\": 3.4723,\n          \"lga\": \"Eti-Osa\",\n          \"state\": \"Lagos\",\n          \"country\": \"NG\"\n        }\n      },\n      \"instructions\": null,\n      \"completed_at\": null\n    },\n    \"package\": {\n      \"description\": \"2 pairs of sneakers\",\n      \"quantity\": 1,\n      \"weight_kg\": 1.5,\n      \"declared_value\": 4500000\n    },\n    \"fee\": {\n      \"delivery_fee\": 255000,\n      \"vat\": 19125,\n      \"service_charge\": 5875,\n      \"discount\": 0,\n      \"total\": 280000,\n      \"currency\": \"NGN\",\n      \"status\": \"charged\",\n      \"billing\": \"wallet\"\n    },\n    \"schedule\": {\n      \"pickup_by\": \"2026-10-26T19:00:00+01:00\",\n      \"deliver_by\": \"2026-10-27T19:00:00+01:00\",\n      \"earliest_delivery\": \"2026-10-26T19:00:00+01:00\"\n    },\n    \"ready\": true,\n    \"auto_book\": false,\n    \"rider\": null,\n    \"hold_reason\": null,\n    \"cancellation\": null,\n    \"events\": [\n      {\n        \"status\": \"scheduled\",\n        \"at\": \"2026-10-26T10:20:00+01:00\",\n        \"note\": null\n      }\n    ],\n    \"metadata\": {\n      \"store_id\": \"42\"\n    },\n    \"created_at\": \"2026-10-26T10:20:00+01:00\",\n    \"booked_at\": \"2026-10-26T10:20:00+01:00\",\n    \"updated_at\": \"2026-10-26T10:20:00+01:00\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "c354a0ab-0321-437b-aabc-5b8a4bdcc5fa",
              "name": "Malformed request, such as invalid JSON or a missing required header.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"quote_id\": \"qt_2bX9Wn4K\",\n  \"reference\": \"ORDER-10045\",\n  \"pickup_instructions\": \"Call on arrival\",\n  \"metadata\": {\n    \"store_id\": \"42\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_JSON\",\n    \"message\": \"The request body is not valid JSON.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_JSON\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "fd115cb9-3273-47c4-82fe-9c8905174c0c",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"quote_id\": \"qt_2bX9Wn4K\",\n  \"reference\": \"ORDER-10045\",\n  \"pickup_instructions\": \"Call on arrival\",\n  \"metadata\": {\n    \"store_id\": \"42\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b26ac364-cc38-4d2f-9dd9-1c5216c145d9",
              "name": "The wallet does not cover the total, or the invoice account has reached its credit limit.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"quote_id\": \"qt_2bX9Wn4K\",\n  \"reference\": \"ORDER-10045\",\n  \"pickup_instructions\": \"Call on arrival\",\n  \"metadata\": {\n    \"store_id\": \"42\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Payment Required",
              "code": 402,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_BALANCE\",\n    \"message\": \"The wallet balance (NGN 1,200.00) does not cover this delivery (NGN 2,800.00). Fund the wallet and retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_BALANCE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "fd8345ce-729b-437f-9031-2f5142320e77",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"quote_id\": \"qt_2bX9Wn4K\",\n  \"reference\": \"ORDER-10045\",\n  \"pickup_instructions\": \"Call on arrival\",\n  \"metadata\": {\n    \"store_id\": \"42\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ddc1e558-7543-4682-beb4-95a40f53e53b",
              "name": "No such object for this account. Another account's id also returns 404.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"quote_id\": \"qt_2bX9Wn4K\",\n  \"reference\": \"ORDER-10045\",\n  \"pickup_instructions\": \"Call on arrival\",\n  \"metadata\": {\n    \"store_id\": \"42\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"No such delivery.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/NOT_FOUND\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7d10f045-6489-44e5-8307-8c4c106c6cae",
              "name": "The quote expired or was already used, or the same idempotency key is still running.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"quote_id\": \"qt_2bX9Wn4K\",\n  \"reference\": \"ORDER-10045\",\n  \"pickup_instructions\": \"Call on arrival\",\n  \"metadata\": {\n    \"store_id\": \"42\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"QUOTE_EXPIRED\",\n    \"message\": \"Quote qt_2bX9Wn4K is older than 24 hours. Request a new quote.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/QUOTE_EXPIRED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "574ba828-5311-4886-9751-e407b8a11ee2",
              "name": "Validation failed, or the idempotency key was reused with a different body.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"quote_id\": \"qt_2bX9Wn4K\",\n  \"reference\": \"ORDER-10045\",\n  \"pickup_instructions\": \"Call on arrival\",\n  \"metadata\": {\n    \"store_id\": \"42\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_REQUEST\",\n    \"message\": \"One or more fields are invalid.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_REQUEST\",\n    \"fields\": [\n      {\n        \"field\": \"package.description\",\n        \"message\": \"description is required\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "205fc293-73f5-4519-b94f-e74f279b7f48",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"quote_id\": \"qt_2bX9Wn4K\",\n  \"reference\": \"ORDER-10045\",\n  \"pickup_instructions\": \"Call on arrival\",\n  \"metadata\": {\n    \"store_id\": \"42\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0db350a9-6ec2-4270-a46c-6b3086855cc3",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"quote_id\": \"qt_2bX9Wn4K\",\n  \"reference\": \"ORDER-10045\",\n  \"pickup_instructions\": \"Call on arrival\",\n  \"metadata\": {\n    \"store_id\": \"42\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7061730a-1c8a-4122-903c-2cc3311f5768",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"quote_id\": \"qt_2bX9Wn4K\",\n  \"reference\": \"ORDER-10045\",\n  \"pickup_instructions\": \"Call on arrival\",\n  \"metadata\": {\n    \"store_id\": \"42\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "1ad51825-2c6b-4c64-8981-e9429ac2e236",
          "name": "List deliveries",
          "request": {
            "name": "List deliveries",
            "description": {
              "content": "Returns your deliveries, newest first, filtered by any combination of the query parameters.\nUse `ids` to fetch up to 50 specific deliveries in one call.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "deliveries"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "status",
                  "value": "in_transit",
                  "description": "Only deliveries with this status."
                },
                {
                  "disabled": true,
                  "key": "merchant_id",
                  "value": "m_8812",
                  "description": "Platform accounts. Only deliveries for this merchant (`shipper.merchant_id`)."
                },
                {
                  "disabled": true,
                  "key": "reference",
                  "value": "ORDER-10045",
                  "description": "Only deliveries booked with this `reference` (your order number)."
                },
                {
                  "disabled": true,
                  "key": "created_from",
                  "value": "2026-10-01",
                  "description": "Only deliveries created on or after this date (Lagos time)."
                },
                {
                  "disabled": true,
                  "key": "created_to",
                  "value": "2026-10-26",
                  "description": "Only deliveries created on or before this date (Lagos time)."
                },
                {
                  "disabled": true,
                  "key": "ids",
                  "value": "dlv_9Kd3Qx7M,dlv_8Pq4Ns2L",
                  "description": "Comma-separated delivery ids, up to 50."
                },
                {
                  "disabled": true,
                  "key": "limit",
                  "value": "50",
                  "description": "How many objects to return, from 1 to 100."
                },
                {
                  "disabled": true,
                  "key": "starting_after",
                  "value": "dlv_9Kd3Qx7M",
                  "description": "Cursor for the next page. Pass the id of the last object you received."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [
            {
              "id": "7fc0f7f4-37bf-4f57-a5e8-bfa535eaa130",
              "name": "A page of deliveries.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "in_transit"
                    },
                    {
                      "key": "merchant_id",
                      "value": "m_8812"
                    },
                    {
                      "key": "reference",
                      "value": "ORDER-10045"
                    },
                    {
                      "key": "created_from",
                      "value": "2026-10-01"
                    },
                    {
                      "key": "created_to",
                      "value": "2026-10-26"
                    },
                    {
                      "key": "ids",
                      "value": "dlv_9Kd3Qx7M,dlv_8Pq4Ns2L"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": [\n    {\n      \"id\": \"dlv_8Pq4Ns2L\",\n      \"livemode\": true,\n      \"channel\": \"direct\",\n      \"shipper\": null,\n      \"reference\": \"ORDER-10046\",\n      \"status\": \"requires_action\",\n      \"required_actions\": [\n        {\n          \"type\": \"CONFIRM_PICKUP_ADDRESS\",\n          \"address_id\": \"adr_3Mz8Rt1Q\",\n          \"message\": \"Pickup address needs confirmation\"\n        }\n      ],\n      \"cancellable\": true,\n      \"tracking_code\": null,\n      \"tracking_url\": null,\n      \"service\": null,\n      \"route\": null,\n      \"pickup\": {\n        \"address\": {\n          \"id\": \"adr_3Mz8Rt1Q\",\n          \"contact\": {\n            \"name\": \"Bola Adeyemi\",\n            \"phone\": \"08024567890\",\n            \"email\": null\n          },\n          \"location\": null\n        },\n        \"instructions\": null,\n        \"completed_at\": null\n      },\n      \"dropoff\": {\n        \"address\": {\n          \"id\": \"adr_5Vb1Jc8D\",\n          \"contact\": {\n            \"name\": \"Chinedu Eze\",\n            \"phone\": \"08098765432\",\n            \"email\": null\n          },\n          \"location\": {\n            \"formatted_address\": \"14 Admiralty Way, Lekki Phase 1, Lagos, Nigeria\",\n            \"place_id\": \"ChIJ8TQy0JKLOxARmZ9bJc2sVkA\",\n            \"latitude\": 6.4474,\n            \"longitude\": 3.4723,\n            \"lga\": \"Eti-Osa\",\n            \"state\": \"Lagos\",\n            \"country\": \"NG\"\n          }\n        },\n        \"instructions\": null,\n        \"completed_at\": null\n      },\n      \"package\": {\n        \"description\": \"2 pairs of sneakers\",\n        \"quantity\": 1,\n        \"weight_kg\": 1.5,\n        \"declared_value\": 4500000\n      },\n      \"fee\": null,\n      \"schedule\": null,\n      \"ready\": true,\n      \"auto_book\": true,\n      \"rider\": null,\n      \"hold_reason\": null,\n      \"cancellation\": null,\n      \"events\": [],\n      \"metadata\": {},\n      \"created_at\": \"2026-10-26T10:18:00+01:00\",\n      \"booked_at\": null,\n      \"updated_at\": \"2026-10-26T10:18:00+01:00\"\n    },\n    {\n      \"id\": \"dlv_9Kd3Qx7M\",\n      \"livemode\": true,\n      \"channel\": \"platform\",\n      \"shipper\": {\n        \"business_name\": \"Tola Fabrics\",\n        \"phone\": \"08051234567\",\n        \"merchant_id\": \"m_8812\"\n      },\n      \"reference\": \"ORDER-10045\",\n      \"status\": \"picked_up\",\n      \"required_actions\": [],\n      \"cancellable\": false,\n      \"tracking_code\": \"HQ3W5F2\",\n      \"tracking_url\": \"https://getreeds.co/packages/HQ3W5F2\",\n      \"service\": \"standard\",\n      \"route\": {\n        \"type\": \"via_hub\",\n        \"distance_km\": 13.5\n      },\n      \"pickup\": {\n        \"address\": {\n          \"id\": \"adr_7Hq2Lk9P\",\n          \"contact\": {\n            \"name\": \"Ada Okafor\",\n            \"phone\": \"08031234567\",\n            \"email\": \"ada@example.com\"\n          },\n          \"location\": {\n            \"formatted_address\": \"23 Allen Ave, Ikeja, Lagos 101233, Nigeria\",\n            \"place_id\": \"ChIJN1t_tDeuEmsRUsoyG83frY4\",\n            \"latitude\": 6.6018,\n            \"longitude\": 3.3515,\n            \"lga\": \"Ikeja\",\n            \"state\": \"Lagos\",\n            \"country\": \"NG\"\n          }\n        },\n        \"instructions\": \"Call on arrival\",\n        \"completed_at\": \"2026-10-26T13:05:00+01:00\"\n      },\n      \"dropoff\": {\n        \"address\": {\n          \"id\": \"adr_5Vb1Jc8D\",\n          \"contact\": {\n            \"name\": \"Chinedu Eze\",\n            \"phone\": \"08098765432\",\n            \"email\": null\n          },\n          \"location\": {\n            \"formatted_address\": \"14 Admiralty Way, Lekki Phase 1, Lagos, Nigeria\",\n            \"place_id\": \"ChIJ8TQy0JKLOxARmZ9bJc2sVkA\",\n            \"latitude\": 6.4474,\n            \"longitude\": 3.4723,\n            \"lga\": \"Eti-Osa\",\n            \"state\": \"Lagos\",\n            \"country\": \"NG\"\n          }\n        },\n        \"instructions\": null,\n        \"completed_at\": null\n      },\n      \"package\": {\n        \"description\": \"2 pairs of sneakers\",\n        \"quantity\": 1,\n        \"weight_kg\": 1.5,\n        \"declared_value\": 4500000\n      },\n      \"fee\": {\n        \"delivery_fee\": 255000,\n        \"vat\": 19125,\n        \"service_charge\": 5875,\n        \"discount\": 0,\n        \"total\": 280000,\n        \"currency\": \"NGN\",\n        \"status\": \"charged\",\n        \"billing\": \"invoice\"\n      },\n      \"schedule\": {\n        \"pickup_by\": \"2026-10-26T19:00:00+01:00\",\n        \"deliver_by\": \"2026-10-27T19:00:00+01:00\",\n        \"earliest_delivery\": \"2026-10-26T19:00:00+01:00\"\n      },\n      \"ready\": true,\n      \"auto_book\": false,\n      \"rider\": {\n        \"first_name\": \"Tunde\"\n      },\n      \"hold_reason\": null,\n      \"cancellation\": null,\n      \"events\": [\n        {\n          \"status\": \"scheduled\",\n          \"at\": \"2026-10-26T10:20:00+01:00\",\n          \"note\": null\n        },\n        {\n          \"status\": \"rider_assigned\",\n          \"at\": \"2026-10-26T11:40:00+01:00\",\n          \"note\": null\n        },\n        {\n          \"status\": \"picked_up\",\n          \"at\": \"2026-10-26T13:05:00+01:00\",\n          \"note\": null\n        }\n      ],\n      \"metadata\": {\n        \"store_id\": \"42\"\n      },\n      \"created_at\": \"2026-10-26T10:20:00+01:00\",\n      \"booked_at\": \"2026-10-26T10:20:00+01:00\",\n      \"updated_at\": \"2026-10-26T13:05:00+01:00\"\n    }\n  ],\n  \"has_more\": true\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "49f173fc-9592-496e-93e3-a431eb216dfd",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "in_transit"
                    },
                    {
                      "key": "merchant_id",
                      "value": "m_8812"
                    },
                    {
                      "key": "reference",
                      "value": "ORDER-10045"
                    },
                    {
                      "key": "created_from",
                      "value": "2026-10-01"
                    },
                    {
                      "key": "created_to",
                      "value": "2026-10-26"
                    },
                    {
                      "key": "ids",
                      "value": "dlv_9Kd3Qx7M,dlv_8Pq4Ns2L"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5e6fe475-627f-4880-9d4d-3e9516c4b0a2",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "in_transit"
                    },
                    {
                      "key": "merchant_id",
                      "value": "m_8812"
                    },
                    {
                      "key": "reference",
                      "value": "ORDER-10045"
                    },
                    {
                      "key": "created_from",
                      "value": "2026-10-01"
                    },
                    {
                      "key": "created_to",
                      "value": "2026-10-26"
                    },
                    {
                      "key": "ids",
                      "value": "dlv_9Kd3Qx7M,dlv_8Pq4Ns2L"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ac2b4b56-80f2-4045-8097-5e661ca02a4f",
              "name": "Validation failed. `error.fields` lists each problem.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "in_transit"
                    },
                    {
                      "key": "merchant_id",
                      "value": "m_8812"
                    },
                    {
                      "key": "reference",
                      "value": "ORDER-10045"
                    },
                    {
                      "key": "created_from",
                      "value": "2026-10-01"
                    },
                    {
                      "key": "created_to",
                      "value": "2026-10-26"
                    },
                    {
                      "key": "ids",
                      "value": "dlv_9Kd3Qx7M,dlv_8Pq4Ns2L"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_REQUEST\",\n    \"message\": \"One or more fields are invalid.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_REQUEST\",\n    \"fields\": [\n      {\n        \"field\": \"phone\",\n        \"message\": \"Enter a valid Nigerian mobile number\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7d399c83-af0b-4049-b37d-44faef7146fe",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "in_transit"
                    },
                    {
                      "key": "merchant_id",
                      "value": "m_8812"
                    },
                    {
                      "key": "reference",
                      "value": "ORDER-10045"
                    },
                    {
                      "key": "created_from",
                      "value": "2026-10-01"
                    },
                    {
                      "key": "created_to",
                      "value": "2026-10-26"
                    },
                    {
                      "key": "ids",
                      "value": "dlv_9Kd3Qx7M,dlv_8Pq4Ns2L"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4a4f5878-b46e-47ae-bfa7-b19e1289c3f7",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "in_transit"
                    },
                    {
                      "key": "merchant_id",
                      "value": "m_8812"
                    },
                    {
                      "key": "reference",
                      "value": "ORDER-10045"
                    },
                    {
                      "key": "created_from",
                      "value": "2026-10-01"
                    },
                    {
                      "key": "created_to",
                      "value": "2026-10-26"
                    },
                    {
                      "key": "ids",
                      "value": "dlv_9Kd3Qx7M,dlv_8Pq4Ns2L"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8e4bcfc9-df09-47ce-8742-4cefa27aa74a",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "in_transit"
                    },
                    {
                      "key": "merchant_id",
                      "value": "m_8812"
                    },
                    {
                      "key": "reference",
                      "value": "ORDER-10045"
                    },
                    {
                      "key": "created_from",
                      "value": "2026-10-01"
                    },
                    {
                      "key": "created_to",
                      "value": "2026-10-26"
                    },
                    {
                      "key": "ids",
                      "value": "dlv_9Kd3Qx7M,dlv_8Pq4Ns2L"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "f3dd5653-5f5e-4c9b-9491-12cdd173aa79",
          "name": "Retrieve a delivery",
          "request": {
            "name": "Retrieve a delivery",
            "description": {
              "content": "Returns one delivery with its current status, required actions, schedule and event history.\n`pickup.address` and `dropoff.address` are the copies taken at booking. Another account's delivery id returns `404 NOT_FOUND`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "deliveries",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "dlv_9Kd3Qx7M",
                  "key": "id",
                  "description": "(Required) The delivery id."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [
            {
              "id": "cb5e3c07-f9df-41c2-bcdd-240a4cde4715",
              "name": "The delivery.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"id\": \"dlv_9Kd3Qx7M\",\n    \"livemode\": true,\n    \"channel\": \"platform\",\n    \"shipper\": {\n      \"business_name\": \"Tola Fabrics\",\n      \"phone\": \"08051234567\",\n      \"merchant_id\": \"m_8812\"\n    },\n    \"reference\": \"ORDER-10045\",\n    \"status\": \"picked_up\",\n    \"required_actions\": [],\n    \"cancellable\": false,\n    \"tracking_code\": \"HQ3W5F2\",\n    \"tracking_url\": \"https://getreeds.co/packages/HQ3W5F2\",\n    \"service\": \"standard\",\n    \"route\": {\n      \"type\": \"via_hub\",\n      \"distance_km\": 13.5\n    },\n    \"pickup\": {\n      \"address\": {\n        \"id\": \"adr_7Hq2Lk9P\",\n        \"contact\": {\n          \"name\": \"Ada Okafor\",\n          \"phone\": \"08031234567\",\n          \"email\": \"ada@example.com\"\n        },\n        \"location\": {\n          \"formatted_address\": \"23 Allen Ave, Ikeja, Lagos 101233, Nigeria\",\n          \"place_id\": \"ChIJN1t_tDeuEmsRUsoyG83frY4\",\n          \"latitude\": 6.6018,\n          \"longitude\": 3.3515,\n          \"lga\": \"Ikeja\",\n          \"state\": \"Lagos\",\n          \"country\": \"NG\"\n        }\n      },\n      \"instructions\": \"Call on arrival\",\n      \"completed_at\": \"2026-10-26T13:05:00+01:00\"\n    },\n    \"dropoff\": {\n      \"address\": {\n        \"id\": \"adr_5Vb1Jc8D\",\n        \"contact\": {\n          \"name\": \"Chinedu Eze\",\n          \"phone\": \"08098765432\",\n          \"email\": null\n        },\n        \"location\": {\n          \"formatted_address\": \"14 Admiralty Way, Lekki Phase 1, Lagos, Nigeria\",\n          \"place_id\": \"ChIJ8TQy0JKLOxARmZ9bJc2sVkA\",\n          \"latitude\": 6.4474,\n          \"longitude\": 3.4723,\n          \"lga\": \"Eti-Osa\",\n          \"state\": \"Lagos\",\n          \"country\": \"NG\"\n        }\n      },\n      \"instructions\": null,\n      \"completed_at\": null\n    },\n    \"package\": {\n      \"description\": \"2 pairs of sneakers\",\n      \"quantity\": 1,\n      \"weight_kg\": 1.5,\n      \"declared_value\": 4500000\n    },\n    \"fee\": {\n      \"delivery_fee\": 255000,\n      \"vat\": 19125,\n      \"service_charge\": 5875,\n      \"discount\": 0,\n      \"total\": 280000,\n      \"currency\": \"NGN\",\n      \"status\": \"charged\",\n      \"billing\": \"invoice\"\n    },\n    \"schedule\": {\n      \"pickup_by\": \"2026-10-26T19:00:00+01:00\",\n      \"deliver_by\": \"2026-10-27T19:00:00+01:00\",\n      \"earliest_delivery\": \"2026-10-26T19:00:00+01:00\"\n    },\n    \"ready\": true,\n    \"auto_book\": false,\n    \"rider\": {\n      \"first_name\": \"Tunde\"\n    },\n    \"hold_reason\": null,\n    \"cancellation\": null,\n    \"events\": [\n      {\n        \"status\": \"scheduled\",\n        \"at\": \"2026-10-26T10:20:00+01:00\",\n        \"note\": null\n      },\n      {\n        \"status\": \"rider_assigned\",\n        \"at\": \"2026-10-26T11:40:00+01:00\",\n        \"note\": null\n      },\n      {\n        \"status\": \"picked_up\",\n        \"at\": \"2026-10-26T13:05:00+01:00\",\n        \"note\": null\n      }\n    ],\n    \"metadata\": {\n      \"store_id\": \"42\"\n    },\n    \"created_at\": \"2026-10-26T10:20:00+01:00\",\n    \"booked_at\": \"2026-10-26T10:20:00+01:00\",\n    \"updated_at\": \"2026-10-26T13:05:00+01:00\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e7fadb05-409a-4568-8d46-daed9458b720",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3f990ee5-2c61-4600-bfd4-320a57102c91",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "59070721-0242-4744-8550-6ac23e561951",
              "name": "No such object for this account. Another account's id also returns 404.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"No such delivery.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/NOT_FOUND\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "059ab8e7-62b9-43f3-b7e5-87d47951f3a6",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8cffc3e8-e50f-464c-9870-42e4db59cc31",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ba21a428-4f71-466e-8fb0-e4f1b77d3023",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "882b15fd-2cce-46cc-ab15-3d03b003b247",
          "name": "Update a delivery",
          "request": {
            "name": "Update a delivery",
            "description": {
              "content": "Changes `reference`, `pickup_instructions`, `dropoff_instructions` or `metadata`. An address cannot be changed through the API after\nbooking; contact Reeds support, who can move it and charge or refund the price difference through your wallet.\n\nSend only the fields to change; `null` clears one. `metadata` replaces the whole object. The pickup instructions can change until the rider has collected the parcel, and the drop-off instructions until it is delivered (`409 ACTION_NOT_ALLOWED` after that, and on a cancelled delivery). The rider sees the new text at once, also once the delivery is on its way. Sending an address, the package or another fixed field is `422 INVALID_REQUEST`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "deliveries",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "dlv_9Kd3Qx7M",
                  "key": "id",
                  "description": "(Required) The delivery id."
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reference\": \"ORDER-10045-B\",\n  \"dropoff_instructions\": \"Leave with the gateman\",\n  \"metadata\": {\n    \"store_id\": \"42\",\n    \"gift\": \"true\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "3b248c83-8e6b-4e40-b8cd-b7638eaad11e",
              "name": "The updated delivery.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reference\": \"ORDER-10045-B\",\n  \"dropoff_instructions\": \"Leave with the gateman\",\n  \"metadata\": {\n    \"store_id\": \"42\",\n    \"gift\": \"true\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"id\": \"dlv_9Kd3Qx7M\",\n    \"livemode\": true,\n    \"channel\": \"direct\",\n    \"shipper\": null,\n    \"reference\": \"ORDER-10045\",\n    \"status\": \"scheduled\",\n    \"required_actions\": [],\n    \"cancellable\": true,\n    \"tracking_code\": \"HQ3W5F2\",\n    \"tracking_url\": \"https://getreeds.co/packages/HQ3W5F2\",\n    \"service\": \"standard\",\n    \"route\": {\n      \"type\": \"via_hub\",\n      \"distance_km\": 13.5\n    },\n    \"pickup\": {\n      \"address\": {\n        \"id\": \"adr_7Hq2Lk9P\",\n        \"contact\": {\n          \"name\": \"Ada Okafor\",\n          \"phone\": \"08031234567\",\n          \"email\": \"ada@example.com\"\n        },\n        \"location\": {\n          \"formatted_address\": \"23 Allen Ave, Ikeja, Lagos 101233, Nigeria\",\n          \"place_id\": \"ChIJN1t_tDeuEmsRUsoyG83frY4\",\n          \"latitude\": 6.6018,\n          \"longitude\": 3.3515,\n          \"lga\": \"Ikeja\",\n          \"state\": \"Lagos\",\n          \"country\": \"NG\"\n        }\n      },\n      \"instructions\": \"Call on arrival\",\n      \"completed_at\": null\n    },\n    \"dropoff\": {\n      \"address\": {\n        \"id\": \"adr_5Vb1Jc8D\",\n        \"contact\": {\n          \"name\": \"Chinedu Eze\",\n          \"phone\": \"08098765432\",\n          \"email\": null\n        },\n        \"location\": {\n          \"formatted_address\": \"14 Admiralty Way, Lekki Phase 1, Lagos, Nigeria\",\n          \"place_id\": \"ChIJ8TQy0JKLOxARmZ9bJc2sVkA\",\n          \"latitude\": 6.4474,\n          \"longitude\": 3.4723,\n          \"lga\": \"Eti-Osa\",\n          \"state\": \"Lagos\",\n          \"country\": \"NG\"\n        }\n      },\n      \"instructions\": null,\n      \"completed_at\": null\n    },\n    \"package\": {\n      \"description\": \"2 pairs of sneakers\",\n      \"quantity\": 1,\n      \"weight_kg\": 1.5,\n      \"declared_value\": 4500000\n    },\n    \"fee\": {\n      \"delivery_fee\": 255000,\n      \"vat\": 19125,\n      \"service_charge\": 5875,\n      \"discount\": 0,\n      \"total\": 280000,\n      \"currency\": \"NGN\",\n      \"status\": \"charged\",\n      \"billing\": \"wallet\"\n    },\n    \"schedule\": {\n      \"pickup_by\": \"2026-10-26T19:00:00+01:00\",\n      \"deliver_by\": \"2026-10-27T19:00:00+01:00\",\n      \"earliest_delivery\": \"2026-10-26T19:00:00+01:00\"\n    },\n    \"ready\": true,\n    \"auto_book\": false,\n    \"rider\": null,\n    \"hold_reason\": null,\n    \"cancellation\": null,\n    \"events\": [\n      {\n        \"status\": \"scheduled\",\n        \"at\": \"2026-10-26T10:20:00+01:00\",\n        \"note\": null\n      }\n    ],\n    \"metadata\": {\n      \"store_id\": \"42\"\n    },\n    \"created_at\": \"2026-10-26T10:20:00+01:00\",\n    \"booked_at\": \"2026-10-26T10:20:00+01:00\",\n    \"updated_at\": \"2026-10-26T10:20:00+01:00\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "6f5983d8-982c-499b-aeca-5951012b88f1",
              "name": "Malformed request, such as invalid JSON or a missing required header.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reference\": \"ORDER-10045-B\",\n  \"dropoff_instructions\": \"Leave with the gateman\",\n  \"metadata\": {\n    \"store_id\": \"42\",\n    \"gift\": \"true\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_JSON\",\n    \"message\": \"The request body is not valid JSON.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_JSON\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d192ce12-0aa4-4a45-9f54-fb0f991b08ea",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reference\": \"ORDER-10045-B\",\n  \"dropoff_instructions\": \"Leave with the gateman\",\n  \"metadata\": {\n    \"store_id\": \"42\",\n    \"gift\": \"true\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3d0561f3-44f7-4d7f-911e-83bba95642d9",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reference\": \"ORDER-10045-B\",\n  \"dropoff_instructions\": \"Leave with the gateman\",\n  \"metadata\": {\n    \"store_id\": \"42\",\n    \"gift\": \"true\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f4c4e5ed-fb63-4315-862c-f955b1d62f29",
              "name": "No such object for this account. Another account's id also returns 404.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reference\": \"ORDER-10045-B\",\n  \"dropoff_instructions\": \"Leave with the gateman\",\n  \"metadata\": {\n    \"store_id\": \"42\",\n    \"gift\": \"true\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"No such delivery.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/NOT_FOUND\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1c12c2b0-692a-43cc-81b1-6e6890dd8c33",
              "name": "The delivery was cancelled, or the stop the instructions are for is already done.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reference\": \"ORDER-10045-B\",\n  \"dropoff_instructions\": \"Leave with the gateman\",\n  \"metadata\": {\n    \"store_id\": \"42\",\n    \"gift\": \"true\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"ACTION_NOT_ALLOWED\",\n    \"message\": \"The rider has already collected the parcel, so the pickup instructions can't change.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/ACTION_NOT_ALLOWED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "fc1160b3-5c6b-4443-ac27-8d52037fabd4",
              "name": "Validation failed. `error.fields` lists each problem.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reference\": \"ORDER-10045-B\",\n  \"dropoff_instructions\": \"Leave with the gateman\",\n  \"metadata\": {\n    \"store_id\": \"42\",\n    \"gift\": \"true\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_REQUEST\",\n    \"message\": \"One or more fields are invalid.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_REQUEST\",\n    \"fields\": [\n      {\n        \"field\": \"phone\",\n        \"message\": \"Enter a valid Nigerian mobile number\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "91c66558-0197-4f2a-91ad-1b91e6440e79",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reference\": \"ORDER-10045-B\",\n  \"dropoff_instructions\": \"Leave with the gateman\",\n  \"metadata\": {\n    \"store_id\": \"42\",\n    \"gift\": \"true\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "db61f921-e509-4a8e-b285-aae1c117c30d",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reference\": \"ORDER-10045-B\",\n  \"dropoff_instructions\": \"Leave with the gateman\",\n  \"metadata\": {\n    \"store_id\": \"42\",\n    \"gift\": \"true\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1e4aa9b6-5e03-413d-9130-94f2eeaebb6d",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reference\": \"ORDER-10045-B\",\n  \"dropoff_instructions\": \"Leave with the gateman\",\n  \"metadata\": {\n    \"store_id\": \"42\",\n    \"gift\": \"true\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "2f58ebd1-7800-4efe-9e47-8f0d40f819e8",
          "name": "Book a draft",
          "request": {
            "name": "Book a draft",
            "description": {
              "content": "Books a priced draft and charges it (wallet debit, or added to the month's invoice). **Requires an `Idempotency-Key` header.**\nUse it when the draft shows the `BOOK` required action. No request body.\n\nA draft that is not yet priced, or whose addresses are not confirmed, returns `409 ACTION_NOT_ALLOWED`. If the wallet is short\nyou get `402 INSUFFICIENT_BALANCE` (an invoice account at its limit, `402 CREDIT_LIMIT_REACHED`); fund the wallet and retry with the same `Idempotency-Key`. An explicit book ignores `max_total`: that cap is only for auto-booking.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "deliveries",
                ":id",
                "book"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "dlv_9Kd3Qx7M",
                  "key": "id",
                  "description": "(Required) The delivery id."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST"
          },
          "response": [
            {
              "id": "5c62b358-0055-4cea-984c-2173e1e32d18",
              "name": "The booked delivery, status `scheduled` (or `requires_action` if `MARK_READY` is still outstanding).",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "book"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": true,
                  "description": "`true` when this response is the saved result of an earlier request with the same idempotency key.",
                  "key": "Idempotent-Replayed",
                  "value": "true"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"id\": \"dlv_9Kd3Qx7M\",\n    \"livemode\": true,\n    \"channel\": \"direct\",\n    \"shipper\": null,\n    \"reference\": \"ORDER-10045\",\n    \"status\": \"scheduled\",\n    \"required_actions\": [],\n    \"cancellable\": true,\n    \"tracking_code\": \"HQ3W5F2\",\n    \"tracking_url\": \"https://getreeds.co/packages/HQ3W5F2\",\n    \"service\": \"standard\",\n    \"route\": {\n      \"type\": \"via_hub\",\n      \"distance_km\": 13.5\n    },\n    \"pickup\": {\n      \"address\": {\n        \"id\": \"adr_7Hq2Lk9P\",\n        \"contact\": {\n          \"name\": \"Ada Okafor\",\n          \"phone\": \"08031234567\",\n          \"email\": \"ada@example.com\"\n        },\n        \"location\": {\n          \"formatted_address\": \"23 Allen Ave, Ikeja, Lagos 101233, Nigeria\",\n          \"place_id\": \"ChIJN1t_tDeuEmsRUsoyG83frY4\",\n          \"latitude\": 6.6018,\n          \"longitude\": 3.3515,\n          \"lga\": \"Ikeja\",\n          \"state\": \"Lagos\",\n          \"country\": \"NG\"\n        }\n      },\n      \"instructions\": \"Call on arrival\",\n      \"completed_at\": null\n    },\n    \"dropoff\": {\n      \"address\": {\n        \"id\": \"adr_5Vb1Jc8D\",\n        \"contact\": {\n          \"name\": \"Chinedu Eze\",\n          \"phone\": \"08098765432\",\n          \"email\": null\n        },\n        \"location\": {\n          \"formatted_address\": \"14 Admiralty Way, Lekki Phase 1, Lagos, Nigeria\",\n          \"place_id\": \"ChIJ8TQy0JKLOxARmZ9bJc2sVkA\",\n          \"latitude\": 6.4474,\n          \"longitude\": 3.4723,\n          \"lga\": \"Eti-Osa\",\n          \"state\": \"Lagos\",\n          \"country\": \"NG\"\n        }\n      },\n      \"instructions\": null,\n      \"completed_at\": null\n    },\n    \"package\": {\n      \"description\": \"2 pairs of sneakers\",\n      \"quantity\": 1,\n      \"weight_kg\": 1.5,\n      \"declared_value\": 4500000\n    },\n    \"fee\": {\n      \"delivery_fee\": 255000,\n      \"vat\": 19125,\n      \"service_charge\": 5875,\n      \"discount\": 0,\n      \"total\": 280000,\n      \"currency\": \"NGN\",\n      \"status\": \"charged\",\n      \"billing\": \"wallet\"\n    },\n    \"schedule\": {\n      \"pickup_by\": \"2026-10-26T19:00:00+01:00\",\n      \"deliver_by\": \"2026-10-27T19:00:00+01:00\",\n      \"earliest_delivery\": \"2026-10-26T19:00:00+01:00\"\n    },\n    \"ready\": true,\n    \"auto_book\": false,\n    \"rider\": null,\n    \"hold_reason\": null,\n    \"cancellation\": null,\n    \"events\": [\n      {\n        \"status\": \"scheduled\",\n        \"at\": \"2026-10-26T10:20:00+01:00\",\n        \"note\": null\n      }\n    ],\n    \"metadata\": {\n      \"store_id\": \"42\"\n    },\n    \"created_at\": \"2026-10-26T10:20:00+01:00\",\n    \"booked_at\": \"2026-10-26T10:20:00+01:00\",\n    \"updated_at\": \"2026-10-26T10:20:00+01:00\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8c1359e5-ae90-4fa6-9535-6b249aacc04d",
              "name": "Malformed request, such as invalid JSON or a missing required header.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "book"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_JSON\",\n    \"message\": \"The request body is not valid JSON.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_JSON\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "365393ad-100b-4c85-92db-7d72b71daaf0",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "book"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "48972d90-9879-4617-a96c-dd259a69c17c",
              "name": "The wallet does not cover the total, or the invoice account has reached its credit limit.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "book"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Payment Required",
              "code": 402,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_BALANCE\",\n    \"message\": \"The wallet balance (NGN 1,200.00) does not cover this delivery (NGN 2,800.00). Fund the wallet and retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_BALANCE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "25703476-6c36-47ae-88d0-da884f27e6ad",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "book"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "addfd5b1-c6a5-459a-9eb2-3e52e69827c7",
              "name": "No such object for this account. Another account's id also returns 404.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "book"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"No such delivery.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/NOT_FOUND\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4d289e89-d083-41ff-b13c-b8bc637994fe",
              "name": "The request conflicts with the current state of the object.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "book"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"ACTION_NOT_ALLOWED\",\n    \"message\": \"The delivery's addresses are not confirmed yet.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/ACTION_NOT_ALLOWED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5dd62320-fc8f-45f0-9cc5-72d5613b8056",
              "name": "Validation failed. `error.fields` lists each problem.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "book"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_REQUEST\",\n    \"message\": \"One or more fields are invalid.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_REQUEST\",\n    \"fields\": [\n      {\n        \"field\": \"phone\",\n        \"message\": \"Enter a valid Nigerian mobile number\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f80c3d51-e152-4ff7-b699-6c692480b5da",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "book"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a8c24a9f-7f1d-46fa-b93e-1cd5980f38df",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "book"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "acae42b2-85bd-4705-babc-86340942fb4f",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "book"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "9204e7c8-bbc8-454d-83de-998e379d215a",
          "name": "Mark a delivery ready",
          "request": {
            "name": "Mark a delivery ready",
            "description": {
              "content": "Tells Reeds the item is packed. The pickup is scheduled from now, and `schedule.pickup_by`, `schedule.earliest_delivery` and `schedule.deliver_by` are set from this moment.\nUse it when the delivery shows the `MARK_READY` required action. No request body.\n\nThere is no `ready` delivery status: this endpoint and the `ready` field only mean the item is packed. Marking a delivered or cancelled delivery ready returns `409 ACTION_NOT_ALLOWED`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "deliveries",
                ":id",
                "ready"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "dlv_9Kd3Qx7M",
                  "key": "id",
                  "description": "(Required) The delivery id."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST"
          },
          "response": [
            {
              "id": "d6af23ec-3676-4465-b76b-ef6e7529c0a0",
              "name": "The delivery, now ready.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "ready"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"id\": \"dlv_9Kd3Qx7M\",\n    \"livemode\": true,\n    \"channel\": \"direct\",\n    \"shipper\": null,\n    \"reference\": \"ORDER-10045\",\n    \"status\": \"scheduled\",\n    \"required_actions\": [],\n    \"cancellable\": true,\n    \"tracking_code\": \"HQ3W5F2\",\n    \"tracking_url\": \"https://getreeds.co/packages/HQ3W5F2\",\n    \"service\": \"standard\",\n    \"route\": {\n      \"type\": \"via_hub\",\n      \"distance_km\": 13.5\n    },\n    \"pickup\": {\n      \"address\": {\n        \"id\": \"adr_7Hq2Lk9P\",\n        \"contact\": {\n          \"name\": \"Ada Okafor\",\n          \"phone\": \"08031234567\",\n          \"email\": \"ada@example.com\"\n        },\n        \"location\": {\n          \"formatted_address\": \"23 Allen Ave, Ikeja, Lagos 101233, Nigeria\",\n          \"place_id\": \"ChIJN1t_tDeuEmsRUsoyG83frY4\",\n          \"latitude\": 6.6018,\n          \"longitude\": 3.3515,\n          \"lga\": \"Ikeja\",\n          \"state\": \"Lagos\",\n          \"country\": \"NG\"\n        }\n      },\n      \"instructions\": \"Call on arrival\",\n      \"completed_at\": null\n    },\n    \"dropoff\": {\n      \"address\": {\n        \"id\": \"adr_5Vb1Jc8D\",\n        \"contact\": {\n          \"name\": \"Chinedu Eze\",\n          \"phone\": \"08098765432\",\n          \"email\": null\n        },\n        \"location\": {\n          \"formatted_address\": \"14 Admiralty Way, Lekki Phase 1, Lagos, Nigeria\",\n          \"place_id\": \"ChIJ8TQy0JKLOxARmZ9bJc2sVkA\",\n          \"latitude\": 6.4474,\n          \"longitude\": 3.4723,\n          \"lga\": \"Eti-Osa\",\n          \"state\": \"Lagos\",\n          \"country\": \"NG\"\n        }\n      },\n      \"instructions\": null,\n      \"completed_at\": null\n    },\n    \"package\": {\n      \"description\": \"2 pairs of sneakers\",\n      \"quantity\": 1,\n      \"weight_kg\": 1.5,\n      \"declared_value\": 4500000\n    },\n    \"fee\": {\n      \"delivery_fee\": 255000,\n      \"vat\": 19125,\n      \"service_charge\": 5875,\n      \"discount\": 0,\n      \"total\": 280000,\n      \"currency\": \"NGN\",\n      \"status\": \"charged\",\n      \"billing\": \"wallet\"\n    },\n    \"schedule\": {\n      \"pickup_by\": \"2026-10-26T19:00:00+01:00\",\n      \"deliver_by\": \"2026-10-27T19:00:00+01:00\",\n      \"earliest_delivery\": \"2026-10-26T19:00:00+01:00\"\n    },\n    \"ready\": true,\n    \"auto_book\": false,\n    \"rider\": null,\n    \"hold_reason\": null,\n    \"cancellation\": null,\n    \"events\": [\n      {\n        \"status\": \"scheduled\",\n        \"at\": \"2026-10-26T10:20:00+01:00\",\n        \"note\": null\n      }\n    ],\n    \"metadata\": {\n      \"store_id\": \"42\"\n    },\n    \"created_at\": \"2026-10-26T10:20:00+01:00\",\n    \"booked_at\": \"2026-10-26T10:20:00+01:00\",\n    \"updated_at\": \"2026-10-26T10:20:00+01:00\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "40cd8ff6-a5bd-417c-9176-8aa96cfad99d",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "ready"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2bfb2b71-1d07-4d64-8ba4-8a0fb6f85c5b",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "ready"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "6db36d4e-12c5-4059-b3e8-70ef9f289fb5",
              "name": "No such object for this account. Another account's id also returns 404.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "ready"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"No such delivery.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/NOT_FOUND\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a9657835-695a-4f2a-a2eb-ac35dc30303f",
              "name": "The request conflicts with the current state of the object.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "ready"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"ACTION_NOT_ALLOWED\",\n    \"message\": \"The delivery's addresses are not confirmed yet.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/ACTION_NOT_ALLOWED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "646eaad8-d807-4f7e-93bd-5ce64a17e1ec",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "ready"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e6e5ca2d-853a-41bb-866d-a79937f36efc",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "ready"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "74a1863d-7112-4ebc-a045-a92e58c7708c",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "ready"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "3d99c141-4ec9-4dce-a520-ab1bad70cd26",
          "name": "Cancel a delivery",
          "request": {
            "name": "Cancel a delivery",
            "description": {
              "content": "Cancels a delivery while its `cancellable` field is `true`, which it is until the rider sets off for the pickup. After that you get\n`409 CANCEL_NOT_ALLOWED`. **Requires an `Idempotency-Key` header.**\n\nA charged delivery is refunded in full to the wallet (or removed from the invoice). The response carries the `cancellation` block and\n`delivery.cancelled` fires. Cancelling a draft also frees the addresses it held, so they can be deleted.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "deliveries",
                ":id",
                "cancel"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "dlv_9Kd3Qx7M",
                  "key": "id",
                  "description": "(Required) The delivery id."
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reason\": \"Customer cancelled the order\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "a41bb0aa-c7c9-4bf0-8a35-849546470a4b",
              "name": "The cancelled delivery.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "cancel"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Customer cancelled the order\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": true,
                  "description": "`true` when this response is the saved result of an earlier request with the same idempotency key.",
                  "key": "Idempotent-Replayed",
                  "value": "true"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"id\": \"dlv_9Kd3Qx7M\",\n    \"livemode\": true,\n    \"channel\": \"direct\",\n    \"shipper\": null,\n    \"reference\": \"ORDER-10045\",\n    \"status\": \"cancelled\",\n    \"required_actions\": [],\n    \"cancellable\": false,\n    \"tracking_code\": \"HQ3W5F2\",\n    \"tracking_url\": \"https://getreeds.co/packages/HQ3W5F2\",\n    \"service\": \"standard\",\n    \"route\": {\n      \"type\": \"via_hub\",\n      \"distance_km\": 13.5\n    },\n    \"pickup\": {\n      \"address\": {\n        \"id\": \"adr_7Hq2Lk9P\",\n        \"contact\": {\n          \"name\": \"Ada Okafor\",\n          \"phone\": \"08031234567\",\n          \"email\": \"ada@example.com\"\n        },\n        \"location\": {\n          \"formatted_address\": \"23 Allen Ave, Ikeja, Lagos 101233, Nigeria\",\n          \"place_id\": \"ChIJN1t_tDeuEmsRUsoyG83frY4\",\n          \"latitude\": 6.6018,\n          \"longitude\": 3.3515,\n          \"lga\": \"Ikeja\",\n          \"state\": \"Lagos\",\n          \"country\": \"NG\"\n        }\n      },\n      \"instructions\": \"Call on arrival\",\n      \"completed_at\": null\n    },\n    \"dropoff\": {\n      \"address\": {\n        \"id\": \"adr_5Vb1Jc8D\",\n        \"contact\": {\n          \"name\": \"Chinedu Eze\",\n          \"phone\": \"08098765432\",\n          \"email\": null\n        },\n        \"location\": {\n          \"formatted_address\": \"14 Admiralty Way, Lekki Phase 1, Lagos, Nigeria\",\n          \"place_id\": \"ChIJ8TQy0JKLOxARmZ9bJc2sVkA\",\n          \"latitude\": 6.4474,\n          \"longitude\": 3.4723,\n          \"lga\": \"Eti-Osa\",\n          \"state\": \"Lagos\",\n          \"country\": \"NG\"\n        }\n      },\n      \"instructions\": null,\n      \"completed_at\": null\n    },\n    \"package\": {\n      \"description\": \"2 pairs of sneakers\",\n      \"quantity\": 1,\n      \"weight_kg\": 1.5,\n      \"declared_value\": 4500000\n    },\n    \"fee\": {\n      \"delivery_fee\": 255000,\n      \"vat\": 19125,\n      \"service_charge\": 5875,\n      \"discount\": 0,\n      \"total\": 280000,\n      \"currency\": \"NGN\",\n      \"status\": \"refunded\",\n      \"billing\": \"wallet\"\n    },\n    \"schedule\": {\n      \"pickup_by\": \"2026-10-26T19:00:00+01:00\",\n      \"deliver_by\": \"2026-10-27T19:00:00+01:00\",\n      \"earliest_delivery\": \"2026-10-26T19:00:00+01:00\"\n    },\n    \"ready\": true,\n    \"auto_book\": false,\n    \"rider\": null,\n    \"hold_reason\": null,\n    \"cancellation\": {\n      \"reason\": \"business\",\n      \"cancelled_by\": \"api\",\n      \"note\": \"Customer cancelled the order\",\n      \"refunded_amount\": 280000,\n      \"cancelled_at\": \"2026-10-26T10:45:00+01:00\"\n    },\n    \"events\": [\n      {\n        \"status\": \"scheduled\",\n        \"at\": \"2026-10-26T10:20:00+01:00\",\n        \"note\": null\n      },\n      {\n        \"status\": \"cancelled\",\n        \"at\": \"2026-10-26T10:45:00+01:00\",\n        \"note\": \"Customer cancelled the order\"\n      }\n    ],\n    \"metadata\": {\n      \"store_id\": \"42\"\n    },\n    \"created_at\": \"2026-10-26T10:20:00+01:00\",\n    \"booked_at\": \"2026-10-26T10:20:00+01:00\",\n    \"updated_at\": \"2026-10-26T10:45:00+01:00\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "27090b0f-0867-4fcf-af91-b8eefc82d2cb",
              "name": "Malformed request, such as invalid JSON or a missing required header.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "cancel"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Customer cancelled the order\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_JSON\",\n    \"message\": \"The request body is not valid JSON.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_JSON\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "eeea0513-6c75-4e10-bc78-f2c7713ffa7a",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "cancel"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Customer cancelled the order\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d2b61465-ad7f-4376-b4c4-99096936e06e",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "cancel"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Customer cancelled the order\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "fed072b0-29e5-4f0b-b07b-e8c1b33738bd",
              "name": "No such object for this account. Another account's id also returns 404.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "cancel"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Customer cancelled the order\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"No such delivery.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/NOT_FOUND\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5d45d32f-0cc4-4082-98e9-ce1e8a372e88",
              "name": "The rider has already set off, or the same idempotency key is still running.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "cancel"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Customer cancelled the order\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"CANCEL_NOT_ALLOWED\",\n    \"message\": \"The rider has already set off for the pickup.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/CANCEL_NOT_ALLOWED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b97b625b-bfae-4a19-8e71-280a386c8102",
              "name": "Validation failed. `error.fields` lists each problem.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "cancel"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Customer cancelled the order\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_REQUEST\",\n    \"message\": \"One or more fields are invalid.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_REQUEST\",\n    \"fields\": [\n      {\n        \"field\": \"phone\",\n        \"message\": \"Enter a valid Nigerian mobile number\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "315f57ea-631d-441c-91bc-01006e653082",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "cancel"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Customer cancelled the order\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0cdc28ee-ca83-475f-85ae-1fa85f7481b4",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "cancel"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Customer cancelled the order\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4ba3fd42-7541-4f50-98e5-500e9fc6c552",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "cancel"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Customer cancelled the order\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "74c6061f-4da4-4b11-ba63-288d30cea5d8",
          "name": "Download the parcel label",
          "request": {
            "name": "Download the parcel label",
            "description": {
              "content": "Returns the parcel label as a PDF (A6): the tracking code as a barcode and QR code, the drop-off area and the hub.\nHubs sort parcels by this label, so print it and stick it on before pickup.\n\nA draft has no tracking code yet, so its label returns `409 ACTION_NOT_ALLOWED` until it is booked.\nA parcel without a label is labelled by the rider at pickup.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "deliveries",
                ":id",
                "label"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "dlv_9Kd3Qx7M",
                  "key": "id",
                  "description": "(Required) The delivery id."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/pdf"
              }
            ],
            "method": "GET"
          },
          "response": [
            {
              "id": "d63234db-c410-4696-82c8-9caadc328928",
              "name": "The label.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "label"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/pdf"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/pdf"
                }
              ],
              "body": "string",
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "16548ddb-1ff3-4b6a-868f-716127d94361",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "label"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e20a45a7-19e1-4252-b9d2-4664766f0538",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "label"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1e633f83-7f80-40ee-b8d3-a42708bb15ce",
              "name": "No such object for this account. Another account's id also returns 404.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "label"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"No such delivery.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/NOT_FOUND\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7732e8c4-3491-403a-a47c-7f62165a01e2",
              "name": "The request conflicts with the current state of the object.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "label"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"ACTION_NOT_ALLOWED\",\n    \"message\": \"The delivery's addresses are not confirmed yet.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/ACTION_NOT_ALLOWED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "c4ba86e3-2e2d-4d37-adc6-f33444c51662",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "label"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "33b409b9-3db5-4e26-91d6-1674f2475030",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "label"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "40fee91e-444a-4279-a6a4-a57885934e87",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "deliveries",
                    ":id",
                    "label"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "9827653f-4748-424b-b9ca-7d59cc89726c",
      "name": "Wallet",
      "description": {
        "content": "Prepaid accounts pay from a Naira wallet debited at booking. Invoice accounts book against a credit limit and read their room from the same endpoint.\n",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "8a7ccb22-a612-44c9-83f6-e720ffb6e92f",
          "name": "Get the wallet",
          "request": {
            "name": "Get the wallet",
            "description": {
              "content": "Returns the balance and billing mode. Prepaid accounts see `billing_mode: \"prepaid\"` and a `low_balance_threshold`.\nInvoice accounts see `billing_mode: \"invoice\"` and a `credit` block. `credit.available` is the limit less unbilled deliveries\nand unpaid invoices, the same sum the credit-limit check uses, so you can check your room before a busy period.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "wallet"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [
            {
              "id": "c2265ff2-1ec0-460a-8d84-6ef1b3f6742b",
              "name": "The wallet.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"livemode\": true,\n    \"balance\": 4720000,\n    \"currency\": \"NGN\",\n    \"billing_mode\": \"prepaid\",\n    \"low_balance_threshold\": 1000000,\n    \"credit\": null\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "32ad4dba-f4c9-41af-a2d0-8a2e1d51271e",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "c491eb3f-3bf9-44b9-be09-667bfc1a8346",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "fae5ecfa-3aa5-4ab8-be57-6d73da5a368d",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "68b7425f-7cb0-499a-9316-7ac6c5803c7d",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e8bee5bf-5f41-4a99-bba0-456dfd880968",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "6c68ada0-2cad-48f2-85da-0c46b72e34e7",
          "name": "Fund the wallet",
          "request": {
            "name": "Fund the wallet",
            "description": {
              "content": "Starts a top-up and returns a Paystack `payment_url` for the payer to open. **Requires an `Idempotency-Key` header.** Live mode only:\nin test mode use `POST /sandbox/wallet/fund` (a test token gets `409 ACTION_NOT_ALLOWED`). Your credentials act for the account, not for a person, so any live credentials can start a top-up; Paystack sends the receipt to the account Owner's email. Invoice accounts have no wallet to fund (`409 ACTION_NOT_ALLOWED`).\n\nReeds pays Paystack's fee, so the wallet is credited the full amount paid. The credit lands when payment completes and `wallet.funded` fires, with the same `reference`.\nDrafts waiting on `FUND_WALLET` are booked automatically once the money lands.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "wallet",
                "fund"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 5000000\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "d1224600-87ad-4b7c-9ca3-68e496285979",
              "name": "Top-up started.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet",
                    "fund"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 5000000\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "disabled": true,
                  "description": "`true` when this response is the saved result of an earlier request with the same idempotency key.",
                  "key": "Idempotent-Replayed",
                  "value": "true"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"amount\": 5000000,\n    \"currency\": \"NGN\",\n    \"payment_url\": \"https://checkout.paystack.com/2x4k9d7m1q\",\n    \"reference\": \"fund-8f3a1c7e5b2d4a6f9e0c\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9c457e38-c355-470b-ba1b-aad0f8d4abae",
              "name": "Malformed request, such as invalid JSON or a missing required header.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet",
                    "fund"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 5000000\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_JSON\",\n    \"message\": \"The request body is not valid JSON.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_JSON\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1b20bfc5-8fa7-427e-ac32-939293974ce6",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet",
                    "fund"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 5000000\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ae9b175f-4b25-4cb8-afda-34f413ba1622",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet",
                    "fund"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 5000000\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1a9875ab-682f-4b11-8922-f87cda768db3",
              "name": "A test token (use `POST /sandbox/wallet/fund`), an invoice account, or the same idempotency key still running.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet",
                    "fund"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 5000000\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"ACTION_NOT_ALLOWED\",\n    \"message\": \"In test mode use POST /sandbox/wallet/fund: it credits the sandbox wallet at once.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/ACTION_NOT_ALLOWED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3e516c3b-f792-49a7-900c-99201525bf01",
              "name": "Validation failed. `error.fields` lists each problem.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet",
                    "fund"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 5000000\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_REQUEST\",\n    \"message\": \"One or more fields are invalid.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_REQUEST\",\n    \"fields\": [\n      {\n        \"field\": \"phone\",\n        \"message\": \"Enter a valid Nigerian mobile number\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "05ece9f1-0b7b-4e5f-9a72-30ac3aa70ce1",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet",
                    "fund"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 5000000\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8786d712-f64c-4d4e-913b-91801bd6f6ba",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet",
                    "fund"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 5000000\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "82cd6ffa-817e-4925-a266-55d52efc804c",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet",
                    "fund"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "disabled": false,
                    "description": "(Required) A unique string you generate for this attempt, up to 200 characters, such as `order-10045-delivery-1`. Keys are scoped to the account\nand mode and kept for 24 hours. Same key and same body replays the original response with `Idempotent-Replayed: true`; same key with a\ndifferent body gets `422 IDEMPOTENCY_KEY_REUSED`; same key while the first request is running gets `409 REQUEST_IN_PROGRESS`.\nRequests that fail with 401, 402, 403, 409 or 429 release the key, so you can retry with it once the cause is fixed. Answers with 400, 404 or 422 are saved and replayed like a success: fix the request and send it with a new key. A 5xx releases it only if nothing was saved: if the work was saved and the request failed afterwards, a retry with the same key replays the saved result.\n",
                    "key": "Idempotency-Key",
                    "value": "{{$guid}}"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 5000000\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "03478b6a-4850-47b6-b9a8-050971f161aa",
          "name": "List wallet transactions",
          "request": {
            "name": "List wallet transactions",
            "description": {
              "content": "Lists debits (bookings) and credits (top-ups and refunds), newest first. Each transaction linked to a delivery carries its `delivery_id`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "wallet",
                "transactions"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "limit",
                  "value": "50",
                  "description": "How many objects to return, from 1 to 100."
                },
                {
                  "disabled": true,
                  "key": "starting_after",
                  "value": "dlv_9Kd3Qx7M",
                  "description": "Cursor for the next page. Pass the id of the last object you received."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [
            {
              "id": "c455befe-92df-4756-8fb5-5c53814a4e4c",
              "name": "A page of transactions.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet",
                    "transactions"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": [\n    {\n      \"id\": \"txn_Hd5Rw2Zx\",\n      \"livemode\": true,\n      \"type\": \"debit\",\n      \"amount\": 280000,\n      \"currency\": \"NGN\",\n      \"balance_after\": 4720000,\n      \"delivery_id\": \"dlv_9Kd3Qx7M\",\n      \"description\": \"Delivery dlv_9Kd3Qx7M booked\",\n      \"created_at\": \"2026-10-26T10:20:00+01:00\"\n    },\n    {\n      \"id\": \"txn_Rt7Bn1Qk\",\n      \"livemode\": true,\n      \"type\": \"credit\",\n      \"amount\": 5000000,\n      \"currency\": \"NGN\",\n      \"balance_after\": 5000000,\n      \"delivery_id\": null,\n      \"description\": \"Wallet top-up\",\n      \"created_at\": \"2026-10-25T16:02:00+01:00\"\n    }\n  ],\n  \"has_more\": false\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ae63a812-dc91-4f91-b0ad-bda2d8883334",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet",
                    "transactions"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "34c7a1eb-fb36-4a64-83f2-5ad3f114fc84",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet",
                    "transactions"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "648b9826-34c4-4e13-94ce-ff60f24f43d1",
              "name": "Validation failed. `error.fields` lists each problem.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet",
                    "transactions"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_REQUEST\",\n    \"message\": \"One or more fields are invalid.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_REQUEST\",\n    \"fields\": [\n      {\n        \"field\": \"phone\",\n        \"message\": \"Enter a valid Nigerian mobile number\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "84c11d98-e956-4bfa-a1b3-2b9503b5f63d",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet",
                    "transactions"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7510500b-b9f3-45ae-b4d4-6147d9b973c1",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet",
                    "transactions"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "303a9c79-cf96-45d4-a56c-554c10383d1c",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "wallet",
                    "transactions"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "50470ec1-a619-4e22-9295-f7290902291f",
      "name": "Invoices",
      "description": {
        "content": "Platform accounts are billed monthly. An invoice is issued on the 1st for the previous month; an overdue invoice puts the account on hold. A business becomes a platform by applying in the dashboard; Reeds approves it with an agreement (a rate card, a credit limit and payment terms).\n",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "fbbecdfc-8322-4a6d-ac58-b9b7c9f679de",
          "name": "List invoices",
          "request": {
            "name": "List invoices",
            "description": {
              "content": "Lists your monthly invoices, newest first. Invoices show VAT on the delivery fee only; the service charge carries no VAT.\nAn invoice is issued on the 1st of each month for the previous month. If it becomes overdue, the account goes on hold:\nnew bookings get `403 ACCOUNT_ON_HOLD`, while deliveries already moving carry on.\n\nEach invoice has a `number` (`RDS-2026-000123`; `TEST-2026-000123` in test mode, numbered separately, with no gaps). `amount_due` is what is still owed after payments and credits. A `void` invoice was cancelled by Reeds and owes nothing; a corrected one is issued in its place with a new number. A charge and its refund in the same month cancel out, and a month that nets to zero or less issues no invoice: it carries forward.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "invoices"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "status",
                  "value": "overdue",
                  "description": "Only invoices with this status."
                },
                {
                  "disabled": true,
                  "key": "limit",
                  "value": "50",
                  "description": "How many objects to return, from 1 to 100."
                },
                {
                  "disabled": true,
                  "key": "starting_after",
                  "value": "dlv_9Kd3Qx7M",
                  "description": "Cursor for the next page. Pass the id of the last object you received."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [
            {
              "id": "a9c2e416-5197-4145-983c-422963669c3b",
              "name": "A page of invoices.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "overdue"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": [\n    {\n      \"id\": \"inv_6Gc4Yt8N\",\n      \"number\": \"RDS-2026-000123\",\n      \"livemode\": true,\n      \"status\": \"issued\",\n      \"period\": \"2026-09\",\n      \"delivery_count\": 412,\n      \"delivery_fees\": 98400000,\n      \"vat\": 7380000,\n      \"service_charges\": 2420000,\n      \"discounts\": 0,\n      \"adjustments\": 0,\n      \"total\": 108200000,\n      \"amount_paid\": 0,\n      \"amount_credited\": 0,\n      \"amount_due\": 108200000,\n      \"currency\": \"NGN\",\n      \"issued_at\": \"2026-10-01T06:00:00+01:00\",\n      \"due_at\": \"2026-10-15T23:59:59+01:00\",\n      \"paid_at\": null,\n      \"voided_at\": null\n    }\n  ],\n  \"has_more\": false\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9e4d64f8-7681-42f8-8ae3-6a50877fcdbe",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "overdue"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e47739fa-0a96-407c-8ece-d15cd53bc10b",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "overdue"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "09f2cefe-4506-4cbd-8641-eec7945fd767",
              "name": "Validation failed. `error.fields` lists each problem.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "overdue"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_REQUEST\",\n    \"message\": \"One or more fields are invalid.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_REQUEST\",\n    \"fields\": [\n      {\n        \"field\": \"phone\",\n        \"message\": \"Enter a valid Nigerian mobile number\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5861255d-f33a-4066-b224-ccf2d49f2cc6",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "overdue"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b359b15d-ec86-4889-955e-f7e3b020e5e2",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "overdue"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7e0b4e41-98a5-49ca-adbb-be134091c260",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "status",
                      "value": "overdue"
                    },
                    {
                      "key": "limit",
                      "value": "50"
                    },
                    {
                      "key": "starting_after",
                      "value": "dlv_9Kd3Qx7M"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "6afd6215-2165-4f7d-a9e9-6ace37d8b355",
          "name": "Retrieve an invoice",
          "request": {
            "name": "Retrieve an invoice",
            "description": {
              "content": "Returns one invoice. Another account's invoice id returns `404 NOT_FOUND`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "invoices",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "inv_6Gc4Yt8N",
                  "key": "id",
                  "description": "(Required) The invoice id."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET"
          },
          "response": [
            {
              "id": "2cbd9c44-c237-4f2e-85cd-5a9e37052e46",
              "name": "The invoice.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "inv_6Gc4Yt8N",
                      "key": "id",
                      "description": "(Required) The invoice id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"id\": \"inv_6Gc4Yt8N\",\n    \"number\": \"RDS-2026-000123\",\n    \"livemode\": true,\n    \"status\": \"issued\",\n    \"period\": \"2026-09\",\n    \"delivery_count\": 412,\n    \"delivery_fees\": 98400000,\n    \"vat\": 7380000,\n    \"service_charges\": 2420000,\n    \"discounts\": 0,\n    \"adjustments\": 0,\n    \"total\": 108200000,\n    \"amount_paid\": 0,\n    \"amount_credited\": 0,\n    \"amount_due\": 108200000,\n    \"currency\": \"NGN\",\n    \"issued_at\": \"2026-10-01T06:00:00+01:00\",\n    \"due_at\": \"2026-10-15T23:59:59+01:00\",\n    \"paid_at\": null,\n    \"voided_at\": null\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7a69d984-ee4f-43c6-8d03-48a2c3e5d722",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "inv_6Gc4Yt8N",
                      "key": "id",
                      "description": "(Required) The invoice id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ad24f4e0-c5dc-44f7-ac8c-a5193ad7a2e0",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "inv_6Gc4Yt8N",
                      "key": "id",
                      "description": "(Required) The invoice id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "062de996-4e53-412a-81da-a2e7e342bde8",
              "name": "No such object for this account. Another account's id also returns 404.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "inv_6Gc4Yt8N",
                      "key": "id",
                      "description": "(Required) The invoice id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"No such delivery.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/NOT_FOUND\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5db4613d-43bd-441a-be0d-68a0c3eb2229",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "inv_6Gc4Yt8N",
                      "key": "id",
                      "description": "(Required) The invoice id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "62c3031b-1be5-4b91-90f8-a34bf325f8a8",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "inv_6Gc4Yt8N",
                      "key": "id",
                      "description": "(Required) The invoice id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d50aae8b-7e69-4b43-83fd-6213b6e03ae6",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "inv_6Gc4Yt8N",
                      "key": "id",
                      "description": "(Required) The invoice id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "2e964b11-db54-4004-b59b-eb4dbe88c6da",
          "name": "Download the invoice PDF",
          "request": {
            "name": "Download the invoice PDF",
            "description": {
              "content": "Returns the invoice as a PDF (A4): the bill-to, the period, issue and due dates, the summary (delivery fees, VAT on the delivery fees only, service charges, adjustments, total, paid, credited, amount due) and every line. Answers `304` to a matching `If-None-Match`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "invoices",
                ":id",
                "pdf"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "inv_6Gc4Yt8N",
                  "key": "id",
                  "description": "(Required) The invoice id."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/pdf"
              }
            ],
            "method": "GET"
          },
          "response": [
            {
              "id": "b1ff7338-a876-45f0-9235-fc11f8ff4521",
              "name": "The invoice.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices",
                    ":id",
                    "pdf"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "inv_6Gc4Yt8N",
                      "key": "id",
                      "description": "(Required) The invoice id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/pdf"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "disabled": true,
                  "description": "Changes when anything on the invoice changes.",
                  "key": "ETag",
                  "value": "string"
                },
                {
                  "key": "Content-Type",
                  "value": "application/pdf"
                }
              ],
              "body": "string",
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "ea1a27fd-a1e6-4597-9729-f6f8d9b4f1a1",
              "name": "Not modified: the copy you have (its `ETag`) is current.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices",
                    ":id",
                    "pdf"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "inv_6Gc4Yt8N",
                      "key": "id",
                      "description": "(Required) The invoice id."
                    }
                  ]
                },
                "method": "GET",
                "body": {}
              },
              "status": "Not Modified",
              "code": 304,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "text/plain"
                }
              ],
              "body": "",
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "58ea7b68-cfef-41f8-8baf-01a02313c2de",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices",
                    ":id",
                    "pdf"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "inv_6Gc4Yt8N",
                      "key": "id",
                      "description": "(Required) The invoice id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b6072f63-425a-4fd7-815d-5747415a0322",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices",
                    ":id",
                    "pdf"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "inv_6Gc4Yt8N",
                      "key": "id",
                      "description": "(Required) The invoice id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "93a54333-90b5-4757-8748-6f7218fe9054",
              "name": "No such object for this account. Another account's id also returns 404.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices",
                    ":id",
                    "pdf"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "inv_6Gc4Yt8N",
                      "key": "id",
                      "description": "(Required) The invoice id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"No such delivery.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/NOT_FOUND\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1aae3c81-6525-453c-83d7-741a5b698cc9",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices",
                    ":id",
                    "pdf"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "inv_6Gc4Yt8N",
                      "key": "id",
                      "description": "(Required) The invoice id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d6aaddc2-441a-41fc-a709-4a9302efe52b",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices",
                    ":id",
                    "pdf"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "inv_6Gc4Yt8N",
                      "key": "id",
                      "description": "(Required) The invoice id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ac2bedbe-a265-469c-8e91-e0ae403ca436",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "invoices",
                    ":id",
                    "pdf"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "inv_6Gc4Yt8N",
                      "key": "id",
                      "description": "(Required) The invoice id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "b4ee16f1-0ae6-4728-844f-42c16e06448d",
      "name": "Webhooks",
      "description": {
        "content": "Reeds posts signed events to your HTTPS endpoint as deliveries and money move. Use this endpoint to send yourself a test event of any type.\nThe events themselves are documented under Webhooks in the sidebar.\n",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "1b64ff87-3d4e-47e2-90a0-2e0817f8923c",
          "name": "Send a test webhook",
          "request": {
            "name": "Send a test webhook",
            "description": {
              "content": "Sends a test event to the webhook endpoint you saved for the current mode (Dashboard, then Developers). The event is signed\nlike a real one, with its own `evt_` id, so you can check your signature verification and your handler end to end.\nReturns `422` if no endpoint is saved for the mode, or for a `type` that isn't an event type, and `409` while Reeds has turned the endpoint off (nothing is sent to it then; contact support). `sent` is `true` when your endpoint answered `2xx` within 10 seconds. A test event is in the dashboard's event log like a real one, but it is sent once and never retried. At most 10 test events a minute per client.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "webhooks",
                "test"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"delivery.status_changed\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "194c8373-3249-4d11-b855-cd0c05d3c98e",
              "name": "The event was sent.",
              "originalRequest": {
                "url": {
                  "path": [
                    "webhooks",
                    "test"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"delivery.status_changed\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"event_id\": \"evt_4fQ7Hd2X\",\n    \"type\": \"delivery.status_changed\",\n    \"sent\": true\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "23124b23-0b59-4e4b-b5a1-e124ff89feb1",
              "name": "Malformed request, such as invalid JSON or a missing required header.",
              "originalRequest": {
                "url": {
                  "path": [
                    "webhooks",
                    "test"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"delivery.status_changed\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_JSON\",\n    \"message\": \"The request body is not valid JSON.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_JSON\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "05317c42-0aad-4566-8436-a6427016bdd3",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "webhooks",
                    "test"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"delivery.status_changed\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2ef4407c-f2fd-4d71-aeec-c4de05b7a362",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "webhooks",
                    "test"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"delivery.status_changed\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "fe42b5b8-d9d8-46c9-bc08-0dac05f223ed",
              "name": "Reeds turned the endpoint off. Nothing is sent to it, test events included, until Reeds turns it back on; contact support.",
              "originalRequest": {
                "url": {
                  "path": [
                    "webhooks",
                    "test"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"delivery.status_changed\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"ACTION_NOT_ALLOWED\",\n    \"message\": \"Reeds turned this webhook endpoint off. Contact Reeds support to turn it back on.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/ACTION_NOT_ALLOWED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3cc44ae6-31b3-454a-a9de-4944c314c374",
              "name": "Validation failed. `error.fields` lists each problem.",
              "originalRequest": {
                "url": {
                  "path": [
                    "webhooks",
                    "test"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"delivery.status_changed\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_REQUEST\",\n    \"message\": \"One or more fields are invalid.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_REQUEST\",\n    \"fields\": [\n      {\n        \"field\": \"phone\",\n        \"message\": \"Enter a valid Nigerian mobile number\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e782384e-c508-4407-b386-9e4a5225d542",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "webhooks",
                    "test"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"delivery.status_changed\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a1fbc204-136f-445b-90b3-da894bbfe8c4",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "webhooks",
                    "test"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"delivery.status_changed\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "40fd851c-2c05-49ac-b67f-5342bda94604",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "webhooks",
                    "test"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"delivery.status_changed\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "091a3c7e-37a2-4623-a369-190969eb07ee",
      "name": "Sandbox",
      "description": {
        "content": "Test-mode helpers: top up the sandbox wallet and move a sandbox delivery through its statuses. They only work with `rci_test_` credentials.\n",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "75744451-0f44-4a7e-bb6d-b412881a37a7",
          "name": "Top up the sandbox wallet",
          "request": {
            "name": "Top up the sandbox wallet",
            "description": {
              "content": "Credits the test-mode wallet instantly. The sandbox wallet starts at NGN 100,000 (`10000000` kobo). Only works with `rci_test_` credentials;\nlive credentials get `403 TEST_MODE_ONLY`. Sandbox data is kept for 90 days.\n\nDrafts waiting on `FUND_WALLET` are booked at once, oldest first, and `wallet.funded` fires, as after a live top-up. An `Idempotency-Key` header is optional here: a retry with the same key never credits twice. Invoice accounts have no wallet (`409 ACTION_NOT_ALLOWED`).\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "sandbox",
                "wallet",
                "fund"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 5000000\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "7684f728-da78-4748-8430-062821d72708",
              "name": "The sandbox wallet after the top-up.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "wallet",
                    "fund"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 5000000\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"livemode\": false,\n    \"balance\": 15000000,\n    \"currency\": \"NGN\",\n    \"billing_mode\": \"prepaid\",\n    \"low_balance_threshold\": 1000000,\n    \"credit\": null\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5c70be22-e989-4828-ad7c-be6d5de1df04",
              "name": "Malformed request, such as invalid JSON or a missing required header.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "wallet",
                    "fund"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 5000000\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_JSON\",\n    \"message\": \"The request body is not valid JSON.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_JSON\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "89bd4a1c-68ff-4b42-be53-c3037fa92cc9",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "wallet",
                    "fund"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 5000000\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a32dae1c-901f-4d45-95b5-d40cd5667bf4",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "wallet",
                    "fund"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 5000000\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "67d575a3-8aba-49c9-add6-997bc1573761",
              "name": "The account is billed by invoice, so it has no wallet.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "wallet",
                    "fund"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 5000000\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"ACTION_NOT_ALLOWED\",\n    \"message\": \"This account is billed by invoice, so it has no wallet to top up.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/ACTION_NOT_ALLOWED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "fc9a4de6-c742-4b49-977b-457140c36c43",
              "name": "Validation failed. `error.fields` lists each problem.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "wallet",
                    "fund"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 5000000\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_REQUEST\",\n    \"message\": \"One or more fields are invalid.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_REQUEST\",\n    \"fields\": [\n      {\n        \"field\": \"phone\",\n        \"message\": \"Enter a valid Nigerian mobile number\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b7e1076c-a00a-4291-a48e-dde8ff3a76fc",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "wallet",
                    "fund"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 5000000\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4f1f21f8-b532-426a-825e-0c9d19acf75b",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "wallet",
                    "fund"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 5000000\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8211c2bd-bfcf-46fa-b0e8-3583fe99aadc",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "wallet",
                    "fund"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 5000000\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "6bd9bc5f-ceeb-4562-b35f-c564c1a1ae2d",
          "name": "Advance a sandbox delivery",
          "request": {
            "name": "Advance a sandbox delivery",
            "description": {
              "content": "Moves a sandbox delivery to the status you send and fires the real webhooks, so you can test your handler without waiting for a rider.\nIt can also simulate `failed_attempt`, `on_hold` (send `hold_reason`) and a schedule change (send `deliver_by` and `reason`, and `delivery.schedule_changed` fires).\n\nSandbox deliveries never reach Reeds operations: no package, no rider, no SMS. Only works with `rci_test_` credentials, on test-mode deliveries.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "sandbox",
                "deliveries",
                ":id",
                "advance"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "dlv_9Kd3Qx7M",
                  "key": "id",
                  "description": "(Required) The delivery id."
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"picked_up\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "0a5e1459-c9ff-4d4a-aee1-e30a90a32db5",
              "name": "The advanced delivery.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "deliveries",
                    ":id",
                    "advance"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"picked_up\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"success\",\n  \"data\": {\n    \"id\": \"dlv_9Kd3Qx7M\",\n    \"livemode\": false,\n    \"channel\": \"platform\",\n    \"shipper\": {\n      \"business_name\": \"Tola Fabrics\",\n      \"phone\": \"08051234567\",\n      \"merchant_id\": \"m_8812\"\n    },\n    \"reference\": \"ORDER-10045\",\n    \"status\": \"picked_up\",\n    \"required_actions\": [],\n    \"cancellable\": false,\n    \"tracking_code\": \"HQ3W5F2\",\n    \"tracking_url\": \"https://getreeds.co/packages/HQ3W5F2\",\n    \"service\": \"standard\",\n    \"route\": {\n      \"type\": \"via_hub\",\n      \"distance_km\": 13.5\n    },\n    \"pickup\": {\n      \"address\": {\n        \"id\": \"adr_7Hq2Lk9P\",\n        \"contact\": {\n          \"name\": \"Ada Okafor\",\n          \"phone\": \"08031234567\",\n          \"email\": \"ada@example.com\"\n        },\n        \"location\": {\n          \"formatted_address\": \"23 Allen Ave, Ikeja, Lagos 101233, Nigeria\",\n          \"place_id\": \"ChIJN1t_tDeuEmsRUsoyG83frY4\",\n          \"latitude\": 6.6018,\n          \"longitude\": 3.3515,\n          \"lga\": \"Ikeja\",\n          \"state\": \"Lagos\",\n          \"country\": \"NG\"\n        }\n      },\n      \"instructions\": \"Call on arrival\",\n      \"completed_at\": \"2026-10-26T13:05:00+01:00\"\n    },\n    \"dropoff\": {\n      \"address\": {\n        \"id\": \"adr_5Vb1Jc8D\",\n        \"contact\": {\n          \"name\": \"Chinedu Eze\",\n          \"phone\": \"08098765432\",\n          \"email\": null\n        },\n        \"location\": {\n          \"formatted_address\": \"14 Admiralty Way, Lekki Phase 1, Lagos, Nigeria\",\n          \"place_id\": \"ChIJ8TQy0JKLOxARmZ9bJc2sVkA\",\n          \"latitude\": 6.4474,\n          \"longitude\": 3.4723,\n          \"lga\": \"Eti-Osa\",\n          \"state\": \"Lagos\",\n          \"country\": \"NG\"\n        }\n      },\n      \"instructions\": null,\n      \"completed_at\": null\n    },\n    \"package\": {\n      \"description\": \"2 pairs of sneakers\",\n      \"quantity\": 1,\n      \"weight_kg\": 1.5,\n      \"declared_value\": 4500000\n    },\n    \"fee\": {\n      \"delivery_fee\": 255000,\n      \"vat\": 19125,\n      \"service_charge\": 5875,\n      \"discount\": 0,\n      \"total\": 280000,\n      \"currency\": \"NGN\",\n      \"status\": \"charged\",\n      \"billing\": \"invoice\"\n    },\n    \"schedule\": {\n      \"pickup_by\": \"2026-10-26T19:00:00+01:00\",\n      \"deliver_by\": \"2026-10-27T19:00:00+01:00\",\n      \"earliest_delivery\": \"2026-10-26T19:00:00+01:00\"\n    },\n    \"ready\": true,\n    \"auto_book\": false,\n    \"rider\": {\n      \"first_name\": \"Tunde\"\n    },\n    \"hold_reason\": null,\n    \"cancellation\": null,\n    \"events\": [\n      {\n        \"status\": \"scheduled\",\n        \"at\": \"2026-10-26T10:20:00+01:00\",\n        \"note\": null\n      },\n      {\n        \"status\": \"rider_assigned\",\n        \"at\": \"2026-10-26T11:40:00+01:00\",\n        \"note\": null\n      },\n      {\n        \"status\": \"picked_up\",\n        \"at\": \"2026-10-26T13:05:00+01:00\",\n        \"note\": null\n      }\n    ],\n    \"metadata\": {\n      \"store_id\": \"42\"\n    },\n    \"created_at\": \"2026-10-26T10:20:00+01:00\",\n    \"booked_at\": \"2026-10-26T10:20:00+01:00\",\n    \"updated_at\": \"2026-10-26T13:05:00+01:00\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d0739079-889f-43ce-96be-0fc5dc261f48",
              "name": "Malformed request, such as invalid JSON or a missing required header.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "deliveries",
                    ":id",
                    "advance"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"picked_up\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_JSON\",\n    \"message\": \"The request body is not valid JSON.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_JSON\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d6a92d73-af2f-4766-9bbe-8e59d87ea636",
              "name": "The access token is missing, invalid, expired or revoked.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "deliveries",
                    ":id",
                    "advance"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"picked_up\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"UNAUTHENTICATED\",\n    \"message\": \"Missing, invalid or revoked access token.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/UNAUTHENTICATED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5690cda3-3240-481c-afce-93c08ef2e523",
              "name": "The token lacks the scope, the account is on hold, a live token is used from an IP address that isn't on the account's live IP allowlist, a live token is sent from a web page (the API console works with test tokens only), or a sandbox endpoint is called with live credentials.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "deliveries",
                    ":id",
                    "advance"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"picked_up\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INSUFFICIENT_SCOPE\",\n    \"message\": \"The token does not carry the scope this endpoint needs.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INSUFFICIENT_SCOPE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "6aad2490-b71e-4b12-901f-04e1a5b46dd5",
              "name": "No such object for this account. Another account's id also returns 404.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "deliveries",
                    ":id",
                    "advance"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"picked_up\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"No such delivery.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/NOT_FOUND\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0b9f3b7b-8c4e-44f0-92fe-778012e0b186",
              "name": "The request conflicts with the current state of the object.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "deliveries",
                    ":id",
                    "advance"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"picked_up\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"ACTION_NOT_ALLOWED\",\n    \"message\": \"The delivery's addresses are not confirmed yet.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/ACTION_NOT_ALLOWED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "69d07583-4f68-44e5-b0ec-78c0ac9aa7d0",
              "name": "Validation failed. `error.fields` lists each problem.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "deliveries",
                    ":id",
                    "advance"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"picked_up\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INVALID_REQUEST\",\n    \"message\": \"One or more fields are invalid.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INVALID_REQUEST\",\n    \"fields\": [\n      {\n        \"field\": \"phone\",\n        \"message\": \"Enter a valid Nigerian mobile number\"\n      }\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "29ecdd0a-8e91-4eb7-af77-f1e9ea88261e",
              "name": "Rate limit reached, or (on the endpoints that look up addresses or price a route: creating, updating and confirming addresses, quotes, and creating deliveries) the account has used its daily allowance for address lookups and pricing, which resets at midnight Lagos time. Both are `RATE_LIMITED`; the message says which. Wait `Retry-After` seconds (for the daily allowance, until midnight in Lagos).",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "deliveries",
                    ":id",
                    "advance"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"picked_up\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying.",
                  "key": "Retry-After",
                  "value": "23"
                },
                {
                  "disabled": true,
                  "description": "Requests allowed per minute for this endpoint group.",
                  "key": "X-RateLimit-Limit",
                  "value": "120"
                },
                {
                  "disabled": true,
                  "description": "Requests left in the current window.",
                  "key": "X-RateLimit-Remaining",
                  "value": "0"
                },
                {
                  "disabled": true,
                  "description": "Unix time (seconds) when the window resets.",
                  "key": "X-RateLimit-Reset",
                  "value": "1793016360"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"RATE_LIMITED\",\n    \"message\": \"Too many requests. Retry in 23 seconds.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/RATE_LIMITED\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "00a60f84-9e3d-4ebf-adce-1bf3c30780a6",
              "name": "Something failed inside Reeds. Safe to retry with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "deliveries",
                    ":id",
                    "advance"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"picked_up\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"INTERNAL_ERROR\",\n    \"message\": \"Something went wrong on our side. Retry with the same Idempotency-Key.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/INTERNAL_ERROR\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "6b58d62e-e6a0-4a39-b02c-f8045e7681e2",
              "name": "Reeds can't serve the request right now, and nothing was done. Either Reeds is overloaded and shed it (any endpoint; `Retry-After` says how many seconds to wait), or a service Reeds depends on (maps, payments) is unavailable. Wait `Retry-After` seconds when it is present (otherwise back off), then send the same request again with the same `Idempotency-Key`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "sandbox",
                    "deliveries",
                    ":id",
                    "advance"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "dlv_9Kd3Qx7M",
                      "key": "id",
                      "description": "(Required) The delivery id."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"picked_up\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds to wait before retrying. Always sent when Reeds is shedding load; a dependency being down may leave it out.",
                  "key": "Retry-After",
                  "value": "2"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"failed\",\n  \"error\": {\n    \"code\": \"SERVICE_UNAVAILABLE\",\n    \"message\": \"Reeds is busy right now. Retry after the number of seconds in Retry-After.\",\n    \"doc_url\": \"https://developer.getreeds.co/errors/SERVICE_UNAVAILABLE\",\n    \"fields\": []\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    }
  ],
  "event": [],
  "variable": [
    {
      "type": "string",
      "value": "https://api.getreeds.co/shipping/v1",
      "key": "baseUrl"
    },
    {
      "key": "clientId",
      "value": "rci_test_xxxxxxxxxxxx",
      "type": "string"
    },
    {
      "key": "clientSecret",
      "value": "rcs_test_xxxxxxxxxxxx",
      "type": "string"
    }
  ],
  "auth": {
    "type": "oauth2",
    "oauth2": [
      {
        "key": "grant_type",
        "value": "client_credentials",
        "type": "string"
      },
      {
        "key": "accessTokenUrl",
        "value": "https://api.getreeds.co/oauth/token",
        "type": "string"
      },
      {
        "key": "clientId",
        "value": "{{clientId}}",
        "type": "string"
      },
      {
        "key": "clientSecret",
        "value": "{{clientSecret}}",
        "type": "string"
      },
      {
        "key": "scope",
        "value": "shipping",
        "type": "string"
      },
      {
        "key": "client_authentication",
        "value": "body",
        "type": "string"
      },
      {
        "key": "addTokenTo",
        "value": "header",
        "type": "string"
      }
    ]
  },
  "info": {
    "_postman_id": "c40fa10b-9463-4b55-b7bc-8cfc122fb58d",
    "name": "Reeds Shipping API v1",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": "Generated from https://developer.getreeds.co/openapi/shipping-v1.yaml. Set the clientId and clientSecret collection variables to your TEST credentials (rci_test_ / rcs_test_); Postman fetches the access token from /oauth/token."
  }
}