{"componentChunkName":"component---src-templates-redoc-operation-js","path":"/openapi_pages/carrier-connections/operation/get_dispatch_job/","result":{"data":{"contentItem":{"type":"redoc-operation","link":"/openapi_pages/carrier-connections/operation/get_dispatch_job/","data":{"redocStoreStr":"{\"menu\":{\"activeItemIdx\":-1},\"definition\":{\"data\":{\"openapi\":\"3.1.0\",\"info\":{\"title\":\"Direct Carrier Connections\",\"version\":\"1.0.10\",\"description\":\"Shipwell's LTL and VLTL rate-share API: request rates from every eligible carrier on an account, book the one you choose, follow the freight the carrier is moving (by polling, or pushed to your own URL), and pull back the documents it produces along the way.\\n\\n| Capability | Operation | What it does |\\n|---|---|---|\\n| **Rating** | `POST /rating/jobs` | Request rates from every eligible carrier for a shipment. |\\n| | `GET /rating/jobs/{id}` | Read a rating job, and the rates it collected once it's terminal. |\\n| | `GET /rating/jobs/{id}/rates/{rate_id}` | Read one rate on its own — the URL a rate's `self_link` points at. |\\n| **Dispatching** | `POST /dispatching/jobs` | Book freight with a carrier, from a rate or from a stated shipment. |\\n| | `GET /dispatching/jobs/{id}` | Read a dispatch job and the carrier's answer. |\\n| | `POST /dispatching/jobs/{id}/cancel` | Cancel a booked dispatch. |\\n| **Tracking** | `GET /tracking/timelines/{resource_id}` | Read where a booked shipment has got to, and every movement its carrier reported. |\\n| **Tracking webhooks** | `POST /tracking/webhooks` | Register a URL; tracking changes for your freight are POSTed to it, signed. |\\n| | `POST /tracking/webhooks/{id}/test` | Send a signed test delivery and see what your endpoint answered. |\\n| **Documents webhooks** | `POST /tracking/webhooks` | Include `documents.updated` in `event_names`; document changes for your freight are POSTed to the same URL, signed. |\\n| **Documents** | `GET /documents/{resource_id}` | Read every document a carrier has produced for a resource so far. |\\n| | `GET /documents/{resource_id}/{document_type}` | The same collection, narrowed to one document type. |\\n\"},\"servers\":[{\"url\":\"https://sandbox-api.shipwell.com\",\"description\":\"Sandbox\"},{\"url\":\"https://api.shipwell.com\",\"description\":\"Production\"}],\"security\":[{\"APIKeyHeader\":[]}],\"tags\":[{\"name\":\"Rating\",\"description\":\"Request rates from every eligible carrier on an account in one call, and read them back as one normalized list.\"},{\"name\":\"Dispatching\",\"description\":\"Book freight with a carrier, from a rate you already have or from a shipment you state in full, and cancel it where the carrier allows.\"},{\"name\":\"Tracking\",\"description\":\"Read where a booked shipment is, and every movement its carrier reported, by the resource_id the dispatch gave you.\"},{\"name\":\"Tracking Webhooks\",\"description\":\"Have tracking and document changes for your freight pushed to your own system instead of\\npolling. Both arrive on one webhook: one URL and one signing secret per company.\\n\\n## Tracking webhooks: how it works\\n\\n1. **Register your URL, once.** `POST /tracking/webhooks` with your HTTPS `url` and an\\n   `error_contact_email`. The response carries the webhook `id` and its signing `secret`.\\n   **Store the secret now; it is returned only once.**\\n2. **Send a test, once.** `POST /tracking/webhooks/{webhook_id}/test` delivers a signed\\n   `tracking.webhook.test` event to your URL right away and tells you what your endpoint answered.\\n   A `2xx` proves Shipwell reached your endpoint through your firewall and TLS. Make your handler\\n   reject a bad signature, so a `2xx` also means your signature check passed.\\n3. **Receive updates, no further calls.** Book freight as usual with `POST /dispatching/jobs`.\\n   Whenever its tracking changes, a signed `tracking.updated` event is POSTed to your URL, usually\\n   within a minute or two, carrying the full current tracking snapshot. For each one:\\n   verify `X-Shipwell-Signature`, ignore an `id` you have already processed, ignore a `sequence`\\n   lower than the highest you have applied for that `resource_id`, replace your copy of the\\n   shipment's tracking, and answer any 2xx within 10 seconds.\\n4. **Pull when you need to.** `GET /tracking/timelines/{resource_id}` returns the current tracking,\\n   under `data` and paged, for filling gaps such as catching up after downtime. It carries no\\n   `sequence`, so it can't be ordered against deliveries: one retried across your pull may hold an\\n   older snapshot. Keep applying deliveries by `sequence`, but a delivery that arrives after a\\n   pull can overwrite newer pulled contents; no later change is guaranteed to correct the\\n   snapshot, so pull again after applying any delivery that arrives after a pull, since a retry\\n   can come hours later. Never let a snapshot with `is_terminal: false` replace one with\\n   `is_terminal: true`, because a finished shipment sends no further changes.\\n\\nDeliveries that fail with a timeout, network error, 408, 429 or 5xx are retried for about 47\\nhours. Every event payload is described under **Webhooks** in this reference. To pause, change\\nor remove a webhook, use **Company → Webhooks** in the Shipwell app.\\n\\n## Documents webhooks: how it works\\n\\nHave the documents a carrier produces for your freight (BOL, proof of delivery, weight\\ncertificate) pushed to the same URL instead of polling.\\n\\n1. **Subscribe, once.** Include `\\\"documents.updated\\\"` in `event_names` when you register your\\n   URL with `POST /tracking/webhooks`, alongside `\\\"tracking.updated\\\"` or on its own. It must be\\n   enabled for your company first, or the request answers `403 documents_webhooks_not_enabled`.\\n   To add it to a webhook you already registered, tick **Document updates** under **Events** in\\n   **Company → Webhooks** in the Shipwell app.\\n2. **Send a test, once.** `POST /tracking/webhooks/{webhook_id}/test` proves Shipwell reaches\\n   your endpoint and your signature check passes, exactly as for tracking.\\n3. **Receive updates, no further calls.** Whenever a shipment's documents change (retrieval\\n   starts, a document arrives or finishes, retrieval completes or fails), a signed\\n   `documents.updated` event is POSTed to your URL, usually within a minute or two.\\n   `details.documents` is the full current collection that `GET /documents/{resource_id}`\\n   returns, with a download link on each file. Apply it with the same rules as tracking:\\n   verify the signature, skip an `id` you have processed, ignore a `sequence` lower than the\\n   highest you have applied for that `resource_id` and `documents.updated` (it counts\\n   separately from `tracking.updated`), and replace your copy of the collection.\\n4. **Download the files, no API call.** Each file usually carries `content.url`, set when that\\n   delivery was sent: a Shipwell link valid for about 10 minutes, or the carrier's own link.\\n   Download it as soon as the event arrives. If a file has `content: null`, or the link fails,\\n   call the document's `base64_link` with your API key: it returns the files inline. File\\n   content is never inside the webhook itself, so its size stays small.\\n5. **Pull when you need to.** `GET /documents/{resource_id}` returns the current collection;\\n   it carries no `sequence`, so a delivery retried across your pull may hold an older\\n   collection: pull again after applying any delivery that arrives after a pull. A finished\\n   collection can reopen when Shipwell retrieves the documents again, so a later delivery may\\n   go back from `is_terminal: true` to `false`: apply it by `sequence` like any other.\\n\"},{\"name\":\"Documents\",\"description\":\"Read the documents a carrier produced for a booked shipment, such as the bill of lading and delivery receipt.\"}],\"paths\":{\"/dispatching/jobs\":{\"post\":{\"tags\":[\"Dispatching\"],\"summary\":\"Book freight with a carrier.\",\"description\":\"Create a dispatch job. The response carries the job document in ``PROCESSING`` with nothing\\nfrom the carrier yet; the carrier is tendered asynchronously, so poll the job until\\n``is_terminal`` is true.\\n\\nTwo request shapes, told apart by ``rate_id``. With it, everything about the shipment comes\\nfrom the rate. Without it, the shipment is stated in full and the carrier account is named —\\nwhich only an account with ``COLLECT`` billing terms may do.\\n\\n``LTL`` and ``VLTL`` are the only modes this surface books today. ``FTL`` and ``PARCEL``\\ndispatch are not yet available here — a rate quoted for either cannot be booked through this\\nendpoint, even though the rate itself exists.\\n\\n**Rated with both stop contacts?** Send only `rate_id` — the *Book a rate* example. That is\\nthe case when the rating pickup stop carried `company_name`, `first_name` and `phone` and the\\ndelivery stop `company_name` and `phone`, as the `create_rating_job` example does.\\n\\n**Rated without them?** Add `origin_contact` and/or `destination_contact` for the stop that\\nfalls short — the *Book a rate, adding contacts* example.\\n\\n| Field | Required |\\n|---|---|\\n| `rate_id` | **Yes** |\\n| `origin_contact` (`company_name`, `first_name`, `phone`) | **Only if** the rating pickup stop carried no contact with all three; not checked here, but the carrier rejects a pickup with nobody to call |\\n| `destination_contact` (`company_name`, `phone`) | **Only if** the rating delivery stop carried no contact with both; rejected with `400 missing_delivery_contact` otherwise |\\n| `origin_planned_window` / `destination_planned_window` | **No** — only if the date moved since rating |\\n| `references` / `notes_for_carrier` | **No** |\\n\\n**No rate to book against?** Send the shipment in full — the *Book without a rate* example. Sending `rate_id` alongside any of these fields is rejected: the two shapes cannot mix.\\n\\n| Field | Required |\\n|---|---|\\n| `account_id` | **Yes** |\\n| `provider_code` | **Yes** |\\n| `mode` | **Yes** |\\n| `stops` (2 or more) | **Yes** |\\n| `requested_window` on the pickup stop (`earliest`, `latest`) | **Yes** |\\n| `contact.company_name` / `first_name` / `phone` on the pickup stop | **Yes** |\\n| `contact.company_name` / `phone` on the delivery stop | **Yes** |\\n| `handling_units` (1 or more) | **Yes** |\\n| `equipment`, `accessorials`, `service_code`, `carrier_rate_id`, `gross_weight`, `total_declared_value`, `customer_reference_number` | **No** |\",\"operationId\":\"create_dispatch_job\",\"parameters\":[{\"name\":\"Idempotency-Key\",\"in\":\"header\",\"required\":false,\"schema\":{\"description\":\"Optional client-generated key making the create safe to retry. Replaying the same key with the same body returns the original dispatch instead of booking again. Without a key every request books afresh, so a retry tenders a second pickup.\",\"title\":\"Idempotency-Key\",\"type\":\"string\",\"maxLength\":255},\"description\":\"Optional client-generated key making the create safe to retry. Replaying the same key with the same body returns the original dispatch instead of booking again. Without a key every request books afresh, so a retry tenders a second pickup.\"},{\"name\":\"X-Shipwell-Version\",\"in\":\"header\",\"required\":false,\"schema\":{\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\",\"title\":\"X-Shipwell-Version\",\"type\":\"string\"},\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"oneOf\":[{\"$ref\":\"#/components/schemas/PublicRateDispatchRequest\"},{\"$ref\":\"#/components/schemas/PublicObjectDispatchRequest\"}],\"title\":\"Dispatch Request\"},\"examples\":{\"rate_only\":{\"summary\":\"Book a rate\",\"description\":\"The rating request carried both stop contacts, so the rate is a complete booking.\",\"value\":{\"rate_id\":\"01HZKD9M4TQ4Z8XW0NKZ6RYX4J\"}},\"rate_with_contacts\":{\"summary\":\"Book a rate, adding contacts\",\"description\":\"The rating stops carried no contact, or an incomplete one.\",\"value\":{\"rate_id\":\"01HZKD9M4TQ4Z8XW0NKZ6RYX4J\",\"origin_contact\":{\"company_name\":\"Acme\",\"first_name\":\"Dock\",\"last_name\":\"Team\",\"email\":\"dock@acme.com\",\"phone\":\"+15125551234\"},\"destination_contact\":{\"company_name\":\"Beta Receiving\",\"first_name\":\"Receiving\",\"last_name\":\"Desk\",\"email\":\"rec@beta.com\",\"phone\":\"+17135554500\"}}},\"rate_less\":{\"summary\":\"Book without a rate\",\"description\":\"The shipment stated in full, on an account with COLLECT billing terms.\",\"value\":{\"account_id\":\"01KBZ91QKW3D9VDP5PVY4HWQ1G\",\"provider_code\":\"ABF\",\"mode\":\"LTL\",\"stops\":[{\"sequence_number\":1,\"location\":{\"line_1\":\"Cincinnati Museum Ctr\",\"locality\":\"Cincinnati\",\"region\":\"OH\",\"postal_code\":\"45203\",\"country\":\"US\"},\"requested_window\":{\"earliest\":\"2026-08-21T14:00:00Z\",\"latest\":\"2026-08-21T22:00:00Z\"},\"contact\":{\"company_name\":\"Acme\",\"first_name\":\"Dock\",\"last_name\":\"Team\",\"phone\":\"+16124323789\"}},{\"sequence_number\":2,\"location\":{\"line_1\":\"4340 Directors Row\",\"locality\":\"Houston\",\"region\":\"TX\",\"postal_code\":\"77092\",\"country\":\"US\"},\"contact\":{\"company_name\":\"Beta\",\"first_name\":\"Receiving\",\"last_name\":\"Desk\",\"phone\":\"+17136864500\"}}],\"handling_units\":[{\"weight\":{\"unit\":\"LB\",\"value\":500,\"qualifier\":\"PER_ITEM\"},\"quantity\":1,\"freight_class\":\"70\",\"dimensions\":{\"measurement_type\":\"DIMENSIONS\",\"unit\":\"IN\",\"length\":{\"unit\":\"IN\",\"value\":48},\"width\":{\"unit\":\"IN\",\"value\":40},\"height\":{\"unit\":\"IN\",\"value\":50}}}]}}}}}},\"responses\":{\"201\":{\"description\":\"Successful Response\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DispatchJobResponse\"}}}},\"400\":{\"description\":\"Validation Error\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"404\":{\"description\":\"No such rate, or no such dispatch job for this tenant.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"409\":{\"description\":\"The Idempotency-Key is claimed by a create that has not finished.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"500\":{\"description\":\"An unknown internal server issue occured while processing a request. A report is created and logged.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}}},\"x-internal\":false}},\"/dispatching/jobs/{dispatch_job_id}\":{\"get\":{\"tags\":[\"Dispatching\"],\"summary\":\"Read a dispatch job and the carrier's answer.\",\"description\":\"Poll this until ``is_terminal`` is true.\\n\\n``COMPLETED`` means the carrier confirmed, and the pickup and PRO numbers are in\\n``references``. ``ERRORED`` means it refused, and said why in ``errors``. ``EXPIRED`` means it\\nnever answered at all — the tender may still have reached it, so confirm before dispatching\\nthe same freight again.\",\"operationId\":\"get_dispatch_job\",\"parameters\":[{\"name\":\"dispatch_job_id\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"title\":\"Dispatch Job Id\"}},{\"name\":\"X-Shipwell-Version\",\"in\":\"header\",\"required\":false,\"schema\":{\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\",\"title\":\"X-Shipwell-Version\",\"type\":\"string\"},\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\"}],\"responses\":{\"200\":{\"description\":\"Successful Response\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DispatchJobResponse\"}}}},\"400\":{\"description\":\"Validation Error\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"404\":{\"description\":\"No such rate, or no such dispatch job for this tenant.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"500\":{\"description\":\"An unknown internal server issue occured while processing a request. A report is created and logged.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}}},\"x-internal\":false}},\"/dispatching/jobs/{resource_id}/cancel\":{\"post\":{\"tags\":[\"Dispatching\"],\"summary\":\"Cancel a dispatch job.\",\"description\":\"Cancel a booked dispatch, by the same ``resource_id`` the booking response and the dispatch\\njob document both carry.\\n\\nAnswers ``200`` either way, because what the carrier can do is not an HTTP error, the same\\nrule the dispatch job document itself follows. ``carrier_cancellation_requested`` true means\\nGenesis asked the carrier to cancel and is waiting for it to confirm -- poll the dispatch job\\nfor the final status. False means this carrier does not support cancellation through\\nShipwell (``reason`` says so); the dispatch is released on Shipwell's side, but the freight\\nitself must still be cancelled with the carrier directly.\",\"operationId\":\"cancel_dispatch_job\",\"parameters\":[{\"name\":\"resource_id\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"title\":\"Resource Id\"}},{\"name\":\"X-Shipwell-Version\",\"in\":\"header\",\"required\":false,\"schema\":{\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\",\"title\":\"X-Shipwell-Version\",\"type\":\"string\"},\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\"}],\"responses\":{\"200\":{\"description\":\"Successful Response\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/CancelDispatchResponse\"}}}},\"400\":{\"description\":\"Validation Error\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"404\":{\"description\":\"No such rate, or no such dispatch job for this tenant.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"409\":{\"description\":\"The resource being updated or created already exists.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"500\":{\"description\":\"An unknown internal server issue occured while processing a request. A report is created and logged.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}}},\"x-internal\":false}},\"/documents/{resource_id}\":{\"get\":{\"tags\":[\"Documents\"],\"summary\":\"Read every document retrieved for a resource.\",\"description\":\"Poll this until ``is_terminal`` is true.\\n\\nA ``resource_id`` that exists for this tenant but has produced no documents yet answers 200\\nwith an empty ``documents`` array and a non-terminal status -- carriers commonly index\\nimages only after delivery, so \\\"nothing yet\\\" is the normal early answer. A ``resource_id``\\nunknown to this tenant, or belonging to another tenant, answers 404 either way: this surface\\nnever distinguishes the two.\",\"operationId\":\"get_documents_for_resource\",\"parameters\":[{\"name\":\"resource_id\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"title\":\"Resource Id\"}},{\"name\":\"encoding\",\"in\":\"query\",\"required\":false,\"schema\":{\"type\":\"string\",\"pattern\":\"^(url|base64)$\",\"description\":\"'url' (default) returns only the links Genesis already has. 'base64' also inlines file content where one is available and small enough -- it augments the response, it does not replace the link.\",\"default\":\"url\",\"title\":\"Encoding\"},\"description\":\"'url' (default) returns only the links Genesis already has. 'base64' also inlines file content where one is available and small enough -- it augments the response, it does not replace the link.\"},{\"name\":\"X-Shipwell-Version\",\"in\":\"header\",\"required\":false,\"schema\":{\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\",\"title\":\"X-Shipwell-Version\",\"type\":\"string\"},\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\"}],\"responses\":{\"200\":{\"description\":\"Successful Response\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DocumentCollectionResponse\"}}}},\"400\":{\"description\":\"Validation Error\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"404\":{\"description\":\"No such resource_id, or it belongs to another tenant.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"500\":{\"description\":\"An unknown internal server issue occured while processing a request. A report is created and logged.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}}},\"x-internal\":false}},\"/documents/{resource_id}/{document_type}\":{\"get\":{\"tags\":[\"Documents\"],\"summary\":\"Read every document of one type retrieved for a resource.\",\"description\":\"The same collection as ``GET /documents/{resource_id}``, narrowed to one ``document_type``.\\n\\n``document_type`` is not a unique key -- a resource can have more than one document of the\\nsame type (e.g. two BOLs on a multi-stop shipment) -- so this still answers with an array,\\njust a narrower one. ``status``/``is_terminal``/``errors`` describe the resource's retrieval\\ntasks as a whole, identically to the unfiltered endpoint, not the filtered slice: a resource\\nthat is still PROCESSING for other types is still PROCESSING here, even if every document of\\n*this* type already arrived. Zero matches is a 200 with an empty ``documents`` array, the\\nsame \\\"not indexed yet\\\" story the unfiltered endpoint tells for a resource with nothing\\nretrieved at all -- not a 404, which would make an early poll indistinguishable from \\\"this\\ntype will never exist for this resource.\\\"\",\"operationId\":\"get_documents_for_resource_by_type\",\"parameters\":[{\"name\":\"resource_id\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"title\":\"Resource Id\"}},{\"name\":\"document_type\",\"in\":\"path\",\"required\":true,\"schema\":{\"$ref\":\"#/components/schemas/ProviderDocumentTypes\"}},{\"name\":\"encoding\",\"in\":\"query\",\"required\":false,\"schema\":{\"type\":\"string\",\"pattern\":\"^(url|base64)$\",\"description\":\"'url' (default) returns only the links Genesis already has. 'base64' also inlines file content where one is available and small enough -- it augments the response, it does not replace the link.\",\"default\":\"url\",\"title\":\"Encoding\"},\"description\":\"'url' (default) returns only the links Genesis already has. 'base64' also inlines file content where one is available and small enough -- it augments the response, it does not replace the link.\"},{\"name\":\"X-Shipwell-Version\",\"in\":\"header\",\"required\":false,\"schema\":{\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\",\"title\":\"X-Shipwell-Version\",\"type\":\"string\"},\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\"}],\"responses\":{\"200\":{\"description\":\"Successful Response\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DocumentCollectionResponse\"}}}},\"400\":{\"description\":\"Validation Error\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"404\":{\"description\":\"No such resource_id, or it belongs to another tenant.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"500\":{\"description\":\"An unknown internal server issue occured while processing a request. A report is created and logged.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}}},\"x-internal\":false}},\"/tracking/timelines/{resource_id}\":{\"get\":{\"tags\":[\"Tracking\"],\"summary\":\"Read a resource's tracking state and the movements its carrier reported.\",\"description\":\"Poll this until ``is_terminal`` is true, by the ``resource_id`` the dispatch response gave you.\\n\\n``tracking_status`` and ``current_state`` answer different questions and an empty ``events``\\nlist needs both to be read: ``TRACKING`` with no events means Genesis is watching and the\\ncarrier has reported nothing yet, while ``NOT_TRACKED`` means Genesis never watched this\\nresource -- because its carrier has not confirmed the booking, or because the id is not one of\\nyours.\\n\\n``current_state`` is Genesis's reading of what the carrier's own codes mean, derived when you\\nread rather than frozen when the movement arrived, so a correction to a carrier's vocabulary\\nreaches history that was already recorded. A movement whose code means nothing for the\\nshipment's state is published with ``shipment_state: null`` and does not move\\n``current_state``: the carrier reported something real, it simply does not move the freight.\",\"operationId\":\"get_tracking_for_resource\",\"parameters\":[{\"name\":\"resource_id\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"title\":\"Resource Id\"}},{\"name\":\"limit\",\"in\":\"query\",\"required\":false,\"schema\":{\"type\":\"integer\",\"maximum\":250,\"minimum\":1,\"description\":\"How many movements to return. A timeline is normally tens of them.\",\"default\":100,\"title\":\"Limit\"},\"description\":\"How many movements to return. A timeline is normally tens of them.\"},{\"name\":\"cursor\",\"in\":\"query\",\"required\":false,\"schema\":{\"description\":\"The ``next_cursor`` of the previous page, passed back unchanged. Opaque: its contents are not a contract and may gain fields.\\n\\nA walk is live rather than a snapshot. It resumes by position, and a movement's position is the time its carrier gave it, so a movement reported late -- one whose own timestamp falls behind a page you have already read -- is not in the pages that remain. Read without a cursor to see the whole timeline again; ``current_state`` is derived over all of it either way and never depends on where a walk has got to.\",\"title\":\"Cursor\",\"type\":\"string\",\"maxLength\":512},\"description\":\"The ``next_cursor`` of the previous page, passed back unchanged. Opaque: its contents are not a contract and may gain fields.\\n\\nA walk is live rather than a snapshot. It resumes by position, and a movement's position is the time its carrier gave it, so a movement reported late -- one whose own timestamp falls behind a page you have already read -- is not in the pages that remain. Read without a cursor to see the whole timeline again; ``current_state`` is derived over all of it either way and never depends on where a walk has got to.\"},{\"name\":\"X-Shipwell-Version\",\"in\":\"header\",\"required\":false,\"schema\":{\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\",\"title\":\"X-Shipwell-Version\",\"type\":\"string\"},\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\"}],\"responses\":{\"200\":{\"description\":\"Successful Response\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TrackingResponse\"}}}},\"400\":{\"description\":\"Validation Error\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"404\":{\"description\":\"Not returned for a resource_id: an unknown id, or one belonging to another company, answers 200 with tracking_status NOT_TRACKED.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"500\":{\"description\":\"An unknown internal server issue occured while processing a request. A report is created and logged.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}}},\"x-internal\":false}},\"/tracking/webhooks\":{\"post\":{\"tags\":[\"Tracking Webhooks\"],\"summary\":\"Register a URL to receive tracking updates.\",\"description\":\"Register a URL once; from then on tracking changes for freight you booked through\\n``POST /dispatching/jobs`` are POSTed to it as JSON. Each delivery's ``details.tracking`` is\\nthe ``TrackingResult`` that ``GET /tracking/timelines/{resource_id}`` returns under ``data``,\\nwith the whole timeline in one document rather than paged, so you don't need to call back to\\nfetch the remaining movements.\\nThe event payloads are documented under **Webhooks** in this reference.\\n\\n| Field | Required | Notes |\\n|---|---|---|\\n| `url` | **Yes** | HTTPS only, resolving to a public address |\\n| `event_names` | No | `tracking.updated` (the default) and/or `documents.updated`, which must be enabled for your company |\\n| `error_contact_email` | **Yes** | Who Shipwell contacts about delivery problems |\\n| `custom_data` | No | Any JSON object up to 4 KB, echoed back in every delivery |\\n\\nEvery delivery carries the full current snapshot: replace your copy rather than\\nreconstructing it from differences. A `tracking.updated` event carries the shipment's\\ntracking. A `documents.updated` event, if you subscribe to it, carries the shipment's\\ndocument collection, each file usually with a `content.url` download link to fetch right away,\\nand each document with a `base64_link` that returns its files inline through the API.\\n\\nCall `POST /tracking/webhooks/{webhook_id}/test` right after creating the webhook to check\\nyour endpoint receives and acknowledges a delivery.\\n\\n**Store the `secret` from the response now; it is returned only once.** To verify a\\ndelivery, compute hex HMAC-SHA256 of `\\\"{X-Shipwell-Timestamp};{raw request body}\\\"` keyed\\nwith it and compare to `X-Shipwell-Signature`, the same scheme as Shipwell's other webhooks.\\n\\nAnswer with any 2xx within 10 seconds. Timeouts, network errors, 408, 429 and 5xx are\\nretried 9 more times over about 47 hours; any other 4xx is not retried, and 410 disables the\\nwebhook. Deliveries are at least once. The same\\nevent `id` is sent on every retry, and `sequence` increases per `resource_id` and event:\\nignore an `id` you have seen and anything below the highest `sequence` you have applied for\\nthat `resource_id` and `event_name`. A `documents.updated` retry carries fresh download links,\\nso match retries by `id`, never by body.\",\"operationId\":\"create_tracking_webhook\",\"parameters\":[{\"name\":\"X-Shipwell-Version\",\"in\":\"header\",\"required\":false,\"schema\":{\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\",\"title\":\"X-Shipwell-Version\",\"type\":\"string\"},\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/CreateTrackingWebhookRequest\"}}}},\"responses\":{\"201\":{\"description\":\"Successful Response\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/CreatedTrackingWebhookResponse\"}}}},\"400\":{\"description\":\"Validation Error\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"403\":{\"description\":\"Tracking webhooks are not enabled for your company (`webhooks_not_enabled`), or `event_names` includes `documents.updated` and it is not enabled for your company (`documents_webhooks_not_enabled`).\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"409\":{\"description\":\"Your company already has a tracking webhook. Change its URL instead.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"500\":{\"description\":\"An unknown internal server issue occured while processing a request. A report is created and logged.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"503\":{\"description\":\"Tracking webhooks are not enabled in this environment yet.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}}},\"x-internal\":false}},\"/tracking/webhooks/{webhook_id}/test\":{\"post\":{\"tags\":[\"Tracking Webhooks\"],\"summary\":\"Send a test delivery to a tracking webhook.\",\"description\":\"Sends one signed `tracking.webhook.test` event to the webhook's URL now and answers with\\nwhat your endpoint said. A `2xx` proves the URL is reachable and allowed and TLS works,\\nwithout waiting for a real shipment. Shipwell can't see whether you verified the signature:\\nmake your handler reject a bad one, so a `2xx` also means your check passed.\\n\\nNothing is stored or retried. The response is\\n`200` whether or not your endpoint accepted the test; read `delivered`.\",\"operationId\":\"test_tracking_webhook\",\"parameters\":[{\"name\":\"webhook_id\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"title\":\"Webhook Id\"}},{\"name\":\"X-Shipwell-Version\",\"in\":\"header\",\"required\":false,\"schema\":{\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\",\"title\":\"X-Shipwell-Version\",\"type\":\"string\"},\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\"}],\"responses\":{\"200\":{\"description\":\"Successful Response\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TrackingWebhookTestResponse\"}}}},\"400\":{\"description\":\"Validation Error\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"403\":{\"description\":\"Tracking webhooks are not enabled for your company.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"404\":{\"description\":\"No such webhook for this company.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"500\":{\"description\":\"An unknown internal server issue occured while processing a request. A report is created and logged.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"503\":{\"description\":\"Tracking webhooks are not enabled in this environment yet.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}}},\"x-internal\":false}},\"/rating/jobs\":{\"post\":{\"tags\":[\"Rating\"],\"summary\":\"Request rates from every eligible carrier.\",\"description\":\"Create a rating job. The response carries the job document with ``rates`` still empty; the\\ncarriers are contacted asynchronously, so poll the job until ``is_terminal`` is true.\\n\\n``modes`` accepts ``LTL`` and ``VLTL`` today. Rating handles ``FTL`` and ``PARCEL`` internally,\\nbut neither is exposed on this public surface yet — sending either is rejected.\\n\\nThis schema only enforces what every carrier needs just to accept a request — it does not\\nenforce what a *specific* carrier needs to actually return a usable quote, because that varies\\nby carrier. The example above is a real payload that returns usable quotes, with both stop\\ncontacts already in place so the rate can be dispatched with the smallest request. It asks R+L\\nonly; drop `capacity_providers` to quote every eligible carrier. Move `requested_window` to a\\nfuture date before sending it: carriers do not quote a pickup in the past. Start from it rather\\nthan from the bare schema minimum below.\\n\\n| Field | Enforced by this API | Also needed for most direct carriers |\\n|---|---|---|\\n| `modes` | **Yes** | |\\n| `stops` (2 or more) | **Yes** | |\\n| `stops[].location` | **Yes**, an object | Full address (`line_1`, `locality`, `region`, `postal_code`, `country`) — a bare postal code round-trips but SAIA, Peninsula and Pitt Ohio reject it |\\n| `requested_window` on the pickup stop (`earliest`, `latest`) | **Yes** | |\\n| `stops[].contact` | **No** | Not needed to rate, but dispatching this rate by `rate_id` needs a pickup contact (`company_name`, `first_name`, `phone`) and a delivery contact (`company_name`, `phone`). Send them here, as the example does, or later as `origin_contact` / `destination_contact` |\\n| `handling_units` (1 or more) | **Yes** | |\\n| `handling_units[].weight` (`value`, `qualifier`) | **Yes** | |\\n| `handling_units[].freight_class` | **No** | SAIA, Peninsula and Duie Pyle reject the request without it |\\n| `handling_units[].dimensions` | **No** | SAIA requires it |\\n| `total_linear_feet` | **No** | Required when `modes` includes `VLTL` |\\n| `equipment` (1 or more, `equipment_type` = `DRY_VAN`) | **Yes** | Every carrier: LTL and VLTL freight moves in the carrier's standard enclosed dry van, so no other type can be quoted. The rest of the list is kept for FTL and Parcel |\\n| `capacity_providers` | **No** | Omit it to quote every carrier eligible for the account |\\n| `accessorials`, `references`, `gross_weight`, `total_declared_value`, `customer_reference_number`, `preferred_currency` | **No** | Send only what applies |\",\"operationId\":\"create_rating_job\",\"parameters\":[{\"name\":\"Idempotency-Key\",\"in\":\"header\",\"required\":false,\"schema\":{\"description\":\"Optional client-generated key making the create safe to retry. Replaying the same key with the same body returns the original job instead of rating again. Without a key every request rates afresh, so a retry fans out to the carriers a second time.\",\"title\":\"Idempotency-Key\",\"type\":\"string\",\"maxLength\":255},\"description\":\"Optional client-generated key making the create safe to retry. Replaying the same key with the same body returns the original job instead of rating again. Without a key every request rates afresh, so a retry fans out to the carriers a second time.\"},{\"name\":\"X-Shipwell-Version\",\"in\":\"header\",\"required\":false,\"schema\":{\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\",\"title\":\"X-Shipwell-Version\",\"type\":\"string\"},\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/PublicRatingRequest\"}}}},\"responses\":{\"201\":{\"description\":\"Successful Response\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RatingJobResponse\"}}}},\"400\":{\"description\":\"Validation Error\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"404\":{\"description\":\"The resource requested was not found either because you do not have permissions to access it or it does not exist.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"409\":{\"description\":\"The Idempotency-Key is claimed by a create that has not finished.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"500\":{\"description\":\"An unknown internal server issue occured while processing a request. A report is created and logged.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}}},\"x-internal\":false}},\"/rating/jobs/{rating_job_id}\":{\"get\":{\"tags\":[\"Rating\"],\"summary\":\"Read a rating job, and optionally the rates it collected.\",\"description\":\"Poll this until ``is_terminal`` is true, then read it once more with ``?include=rates``.\\n\\nEvery job reaches a terminal status within roughly ``rating_task_min_age_minutes`` (30 by\\ndefault): carrier attempts still processing after that are finalized as errored, so the loop\\nis bounded even when a carrier never answers.\",\"operationId\":\"get_rating_job\",\"parameters\":[{\"name\":\"rating_job_id\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"title\":\"Rating Job Id\"}},{\"name\":\"include\",\"in\":\"query\",\"required\":false,\"schema\":{\"description\":\"Related resources to expand. ``rates`` is the only supported value, and it is not expanded by default.\",\"title\":\"Include\",\"type\":\"string\"},\"description\":\"Related resources to expand. ``rates`` is the only supported value, and it is not expanded by default.\"},{\"name\":\"X-Shipwell-Version\",\"in\":\"header\",\"required\":false,\"schema\":{\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\",\"title\":\"X-Shipwell-Version\",\"type\":\"string\"},\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\"}],\"responses\":{\"200\":{\"description\":\"Successful Response\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RatingJobResponse\"}}}},\"400\":{\"description\":\"Validation Error\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"404\":{\"description\":\"The resource requested was not found either because you do not have permissions to access it or it does not exist.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"500\":{\"description\":\"An unknown internal server issue occured while processing a request. A report is created and logged.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}}},\"x-internal\":false}},\"/rating/jobs/{rating_job_id}/rates/{rate_id}\":{\"get\":{\"tags\":[\"Rating\"],\"summary\":\"Read one rate of a rating job.\",\"description\":\"The canonical URL a rate's ``self_link`` points at: the same resource the collection carries.\",\"operationId\":\"get_rating_job_rate\",\"parameters\":[{\"name\":\"rating_job_id\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"title\":\"Rating Job Id\"}},{\"name\":\"rate_id\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"title\":\"Rate Id\"}},{\"name\":\"X-Shipwell-Version\",\"in\":\"header\",\"required\":false,\"schema\":{\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\",\"title\":\"X-Shipwell-Version\",\"type\":\"string\"},\"description\":\"Pins this request to the API as it behaved on the given ISO date, e.g. 2026-08-25. Omitted or unparseable means the oldest behaviour, so a client that never sends it keeps the behaviour it was written against.\"}],\"responses\":{\"200\":{\"description\":\"Successful Response\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/PublicRateResponse\"}}}},\"400\":{\"description\":\"Validation Error\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"404\":{\"description\":\"The resource requested was not found either because you do not have permissions to access it or it does not exist.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}},\"500\":{\"description\":\"An unknown internal server issue occured while processing a request. A report is created and logged.\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ShipwellApiErrorResponse\"}}}}},\"x-internal\":false}}},\"webhooks\":{\"tracking.updated\":{\"servers\":[{\"url\":\"{webhook_url}\",\"description\":\"The url you registered with POST /tracking/webhooks.\",\"variables\":{\"webhook_url\":{\"default\":\"https://tms.example.com/hooks/shipwell-tracking\"}}}],\"post\":{\"tags\":[\"Tracking Webhooks\"],\"summary\":\"A shipment's tracking changed.\",\"description\":\"Sent when a shipment's tracking changes: new carrier movements, a new `current_state`, or tracking starting or finishing. `details.tracking` is the full, current snapshot: the `TrackingResult` that `GET /tracking/timelines/{resource_id}` returns under `data`, but with the whole timeline in one document rather than paged. Replace your copy rather than reconstructing it from differences.\\n\\nDelivered at least once: the same event may arrive more than once, so dedupe on `id`, and ignore any `sequence` lower than the highest you have applied.\\n\\n**Headers on every delivery**\\n\\n| Header | Value |\\n|---|---|\\n| `Content-Type` | `application/json; charset=utf-8` |\\n| `User-Agent` | `shipwell-webhooks` |\\n| `X-Shipwell-Timestamp` | ISO-8601 time the request was signed |\\n| `X-Shipwell-Signature` | hex HMAC-SHA256 of `\\\"{X-Shipwell-Timestamp};{raw body}\\\"`, keyed with your secret |\\n\\nAnswer with any 2xx within 10 seconds. Timeouts, network errors, `408`, `429` and `5xx` are\\nretried after 30s, 2m, 10m, 30m, 1h, 3h, 6h, 12h and 24h: 10 attempts over about 47 hours. A\\nredirect (`3xx`) or any other `4xx` is not retried, and `410 Gone` disables the webhook. Delivery\\nis at least once: ignore an `id` you have already processed.\",\"operationId\":\"tracking_updated\",\"security\":[],\"parameters\":[{\"name\":\"X-Shipwell-Timestamp\",\"in\":\"header\",\"required\":true,\"description\":\"ISO-8601 time the request was signed.\",\"schema\":{\"type\":\"string\",\"example\":\"2026-09-26T14:05:31.123456+00:00\"}},{\"name\":\"X-Shipwell-Signature\",\"in\":\"header\",\"required\":true,\"description\":\"Hex HMAC-SHA256 of \\\"{X-Shipwell-Timestamp};{raw body}\\\" keyed with your webhook secret. Compare it to your own computation before trusting the body.\",\"schema\":{\"type\":\"string\"}}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TrackingUpdatedEvent\"}}}},\"responses\":{\"2XX\":{\"description\":\"Accepted. Any 2xx stops retries.\"}},\"x-internal\":false}},\"documents.updated\":{\"servers\":[{\"url\":\"{webhook_url}\",\"description\":\"The url you registered with POST /tracking/webhooks.\",\"variables\":{\"webhook_url\":{\"default\":\"https://tms.example.com/hooks/shipwell-tracking\"}}}],\"post\":{\"tags\":[\"Tracking Webhooks\"],\"summary\":\"A shipment's documents changed.\",\"description\":\"Sent when the documents retrieved for a shipment change: a document arrives or finishes, retrieval completes or fails, or a finished retrieval reopens. `details.documents` is the full, current collection that `GET /documents/{resource_id}` returns under `data`. Each file usually carries `content.url`, set when this delivery was sent: a Shipwell link valid for about 10 minutes, or the carrier's own link, which expires on the carrier's schedule, so download it right away. It is null when no link is available. Each document's `base64_link` (its `self_link` with `?encoding=base64`) returns the files inline from the API instead, up to 50 MB per file. Replace your copy rather than reconstructing it from differences. Subscribe with `\\\"documents.updated\\\"` in `event_names`; it must be enabled for your company.\\n\\nDelivered at least once: the same event may arrive more than once, so dedupe on `id`, and ignore any `sequence` lower than the highest you have applied.\\n\\n**Headers on every delivery**\\n\\n| Header | Value |\\n|---|---|\\n| `Content-Type` | `application/json; charset=utf-8` |\\n| `User-Agent` | `shipwell-webhooks` |\\n| `X-Shipwell-Timestamp` | ISO-8601 time the request was signed |\\n| `X-Shipwell-Signature` | hex HMAC-SHA256 of `\\\"{X-Shipwell-Timestamp};{raw body}\\\"`, keyed with your secret |\\n\\nAnswer with any 2xx within 10 seconds. Timeouts, network errors, `408`, `429` and `5xx` are\\nretried after 30s, 2m, 10m, 30m, 1h, 3h, 6h, 12h and 24h: 10 attempts over about 47 hours. A\\nredirect (`3xx`) or any other `4xx` is not retried, and `410 Gone` disables the webhook. Delivery\\nis at least once: ignore an `id` you have already processed.\",\"operationId\":\"documents_updated\",\"security\":[],\"parameters\":[{\"name\":\"X-Shipwell-Timestamp\",\"in\":\"header\",\"required\":true,\"description\":\"ISO-8601 time the request was signed.\",\"schema\":{\"type\":\"string\",\"example\":\"2026-09-26T14:05:31.123456+00:00\"}},{\"name\":\"X-Shipwell-Signature\",\"in\":\"header\",\"required\":true,\"description\":\"Hex HMAC-SHA256 of \\\"{X-Shipwell-Timestamp};{raw body}\\\" keyed with your webhook secret. Compare it to your own computation before trusting the body.\",\"schema\":{\"type\":\"string\"}}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DocumentsUpdatedEvent\"}}}},\"responses\":{\"2XX\":{\"description\":\"Accepted. Any 2xx stops retries.\"}},\"x-internal\":false}},\"tracking.webhook.test\":{\"servers\":[{\"url\":\"{webhook_url}\",\"description\":\"The url you registered with POST /tracking/webhooks.\",\"variables\":{\"webhook_url\":{\"default\":\"https://tms.example.com/hooks/shipwell-tracking\"}}}],\"post\":{\"tags\":[\"Tracking Webhooks\"],\"summary\":\"A test delivery.\",\"description\":\"Sent only by `POST /tracking/webhooks/{webhook_id}/test`. Signed like every other delivery.\\n\\n**Headers on every delivery**\\n\\n| Header | Value |\\n|---|---|\\n| `Content-Type` | `application/json; charset=utf-8` |\\n| `User-Agent` | `shipwell-webhooks` |\\n| `X-Shipwell-Timestamp` | ISO-8601 time the request was signed |\\n| `X-Shipwell-Signature` | hex HMAC-SHA256 of `\\\"{X-Shipwell-Timestamp};{raw body}\\\"`, keyed with your secret |\\n\\nAnswer with any 2xx within 10 seconds. A test is sent once and never retried.\",\"operationId\":\"tracking_webhook_test\",\"security\":[],\"parameters\":[{\"name\":\"X-Shipwell-Timestamp\",\"in\":\"header\",\"required\":true,\"description\":\"ISO-8601 time the request was signed.\",\"schema\":{\"type\":\"string\",\"example\":\"2026-09-26T14:05:31.123456+00:00\"}},{\"name\":\"X-Shipwell-Signature\",\"in\":\"header\",\"required\":true,\"description\":\"Hex HMAC-SHA256 of \\\"{X-Shipwell-Timestamp};{raw body}\\\" keyed with your webhook secret. Compare it to your own computation before trusting the body.\",\"schema\":{\"type\":\"string\"}}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/TrackingWebhookTestEvent\"}}}},\"responses\":{\"2XX\":{\"description\":\"Accepted.\"}},\"x-internal\":false}}},\"components\":{\"schemas\":{\"Accessorials\":{\"type\":\"string\",\"enum\":[\"AFTER_HOURS_DELIVERY\",\"AIRPORT_DELIVERY\",\"AIRPORT_PICKUP\",\"APPOINTMENT_DELIVERY\",\"BLIND_SHIPMENT\",\"CAMP_DELIVERY\",\"CAMP_PICKUP\",\"CAPLOAD\",\"CAPLOADPUP\",\"CAPLOADTRA\",\"CERTIFIED_PICKUP\",\"CFS_DELIVERY\",\"CFS_PICKUP\",\"CHURCH_DELIVERY\",\"CHURCH_PICKUP\",\"COMMERCIAL_DELIVERY\",\"COMMERCIAL_PICKUP\",\"CONSTRUCTION_SITE_DELIVERY\",\"CONSTRUCTION_SITE_PICKUP\",\"CONTAINER_FREIGHT_STATION_DELIVERY\",\"CONTAINER_FREIGHT_STATION_PICKUP\",\"CONVENTION_TRADESHOW_DELIVERY\",\"CONVENTION_TRADESHOW_PICKUP\",\"COUNTRY_CLUB_DELIVERY\",\"COUNTRY_CLUB_PICKUP\",\"DECLARED_VALUE_DELIVERY\",\"DECLARED_VALUE_PICKUP\",\"DELAY_CHARGE\",\"DELIVERY_NOTIFICATION\",\"DISTRIBUTION_CENTER_DELIVERY\",\"DOCK_DELIVERY\",\"DOCK_PICKUP\",\"DOCK_TRANSFER_DELIVERY\",\"DOCK_TRANSFER_PICKUP\",\"DRIVER_ASSIST_DELIVERY\",\"DROP_TRAILER_DELIVERY\",\"EMERGENCY_DELIVERY\",\"EV\",\"EXCESSIVE_LENGTH\",\"EXCESSIVE_LENGTH_6FT\",\"EXCESSIVE_LENGTH_7FT\",\"EXCESSIVE_LENGTH_8FT\",\"EXCESSIVE_LENGTH_9FT\",\"EXCESSIVE_LENGTH_10FT\",\"EXCESSIVE_LENGTH_11FT\",\"EXCESSIVE_LENGTH_12FT\",\"EXCESSIVE_LENGTH_13FT\",\"EXCESSIVE_LENGTH_14FT\",\"EXCESSIVE_LENGTH_15FT\",\"EXCESSIVE_LENGTH_16FT\",\"EXCESSIVE_LENGTH_17FT\",\"EXCESSIVE_LENGTH_18FT\",\"EXCESSIVE_LENGTH_19FT\",\"EXCESSIVE_LENGTH_20FT\",\"EXCESSIVE_LENGTH_21FT\",\"EXCESSIVE_LENGTH_22FT\",\"EXCESSIVE_LENGTH_23FT\",\"EXCESSIVE_LENGTH_24FT\",\"EXCESSIVE_LENGTH_25FT\",\"EXCESSIVE_LENGTH_26FT\",\"EXCESSIVE_LENGTH_27FT\",\"EXCESSIVE_LENGTH_28FT\",\"EXCESSIVE_LENGTH_29FT\",\"EXCESSIVE_LENGTH_30FT\",\"EXHIBITION\",\"EXPEDITED_DELIVERY\",\"EXPORT_SHIPMENT\",\"FAIR_AMUSEMENT_DELIVERY\",\"FAIR_AMUSEMENT_PICKUP\",\"FARM_DELIVERY\",\"FARM_PICKUP\",\"FLATBED\",\"FLATBED_PICKUP\",\"FOOD\",\"FREEZABLE\",\"GOVERNMENT_SITE_DELIVERY\",\"GOVERNMENT_SITE_PICKUP\",\"GROCERY_CONSOLIDATION_DELIVERY\",\"GROCERY_WAREHOUSE_DELIVERY\",\"GROCERY_WAREHOUSE_PICKUP\",\"GUARANTEED\",\"GUARANTEED_BY_10AM\",\"GUARANTEED_BY_11AM\",\"GUARANTEED_BY_15\",\"GUARANTEED_BY_2PM\",\"GUARANTEED_BY_3PM\",\"GUARANTEED_BY_330PM\",\"GUARANTEED_BY_8AM\",\"GUARANTEED_BY_9AM\",\"GUARANTEED_BY_AM\",\"GUARANTEED_MULTI_HOUR_WINDOW\",\"GUARANTEED_SINGLE_HOUR_WINDOW\",\"GUARANTEED_WITHIN_WINDOW\",\"HAZMAT\",\"HAZMAT_PICKUP\",\"HEAT\",\"HIGH_COST_AREA\",\"HOLD_AT_LOCATION\",\"HOLIDAY_DELIVERY\",\"HOLIDAY_PICKUP\",\"HOSPITAL_DELIVERY\",\"HOSPITAL_PICKUP\",\"HOTEL_DELIVERY\",\"HOTEL_PICKUP\",\"INBOUND_SHIPMENT\",\"INSIDE_DELIVERY\",\"INSIDE_EDELIVERY\",\"INSIDE_INGDELIVERY\",\"INSIDE_INNEDELIVERY\",\"INSIDE_PICKUP\",\"LIFT_GATE\",\"LIFTGATE_DELIVERY\",\"LIFTGATE_PICKUP\",\"LIMITED_ACCESS_DELIVERY\",\"LIMITED_ACCESS_PICKUP\",\"LUMPER\",\"MALL_DELIVERY\",\"MALL_PICKUP\",\"MILITARY_INSTALLATION_DELIVERY\",\"MILITARY_INSTALLATION_PICKUP\",\"MINE_SITE_DELIVERY\",\"MINE_SITE_PICKUP\",\"NATIVE_AMERICAN_RESERVATION_DELIVERY\",\"NATIVE_AMERICAN_RESERVATION_PICKUP\",\"NO_ROLLUP\",\"NON_BUSINESS_HOURS_DELIVERY\",\"NON_BUSINESS_HOURS_PICKUP\",\"NON_COMMERCIAL_DELIVERY\",\"NON_COMMERCIAL_PICKUP\",\"NOTIFY_BEFORE_DELIVERY\",\"NURSING_HOME_DELIVERY\",\"NURSING_HOME_PICKUP\",\"OVER_DIMENSION_FREIGHT\",\"OVER_LENGTH\",\"OVERSIZE\",\"OVERSIZED_DELIVERY\",\"OVERSIZED_PICKUP\",\"PALLET\",\"PALLET_EXCHANGE_DELIVERY\",\"PALLET_EXCHANGE_PICKUP\",\"PALLET_JACK_DELIVERY\",\"PALLET_JACK_PICKUP\",\"PICKUP_APPOINTMENT\",\"PICKUP_NOTIFICATION\",\"PIER_DELIVERY\",\"PIER_PICKUP\",\"POISON\",\"PORT_CUSTOMS_PAPERWORK\",\"PRISON_DELIVERY\",\"PRISON_PICKUP\",\"PROTECT_FROM_FREEZING\",\"RESIDENTIAL_DELIVERY\",\"RESIDENTIAL_PICKUP\",\"RESORT_DELIVERY\",\"RESORT_PICKUP\",\"ROOM_OF_CHOICE\",\"SATURDAY_DELIVERY\",\"SATURDAY_PICKUP\",\"SCHOOL_DELIVERY\",\"SCHOOL_PICKUP\",\"SELF_STORAGE_DELIVERY\",\"SELF_STORAGE_PICKUP\",\"SHIPLDPU\",\"SINGLE_SHIPMENT\",\"SORT_AND_SEGREGATE\",\"SORT_AND_SEGREGATE_PICKUP\",\"STOP_OFF\",\"STORAGE\",\"SUNDAY_DELIVERY\",\"SUNDAY_PICKUP\",\"TWO_MAN_DELIVERY\",\"UNLOAD_AT_DESTINATION\",\"UTILITY_SITE_DELIVERY\",\"UTILITY_SITE_PICKUP\",\"WEEKEND_DELIVERY\",\"WEEKEND_PICKUP\",\"WHITE_GLOVE\"],\"title\":\"Accessorials\",\"description\":\"Merged FTL enum class `class FtlOrderAccessorial(StrEnum)` here.\\nMerged FTL enum class `class FtlStopAccessorials(StrEnum)` here.\\nMerged Parcel enum class `class ParcelStopAccessorials(StrEnum)` here.\"},\"BaseRateDistance\":{\"properties\":{\"unit\":{\"$ref\":\"#/components/schemas/DistanceUnit\"},\"value\":{\"type\":\"number\",\"title\":\"Value\",\"description\":\"total distance in Kilometers or Miles\",\"example\":2734.23}},\"type\":\"object\",\"required\":[\"unit\",\"value\"],\"title\":\"BaseRateDistance\"},\"CancelDispatchResponse\":{\"properties\":{\"data\":{\"$ref\":\"#/components/schemas/CancelDispatchResult\"}},\"type\":\"object\",\"required\":[\"data\"],\"title\":\"CancelDispatchResponse\",\"description\":\"A cancel outcome, wrapped as a detail response.\"},\"CancelDispatchResult\":{\"properties\":{\"resource_id\":{\"type\":\"string\",\"title\":\"Resource Id\"},\"carrier_cancellation_requested\":{\"type\":\"boolean\",\"title\":\"Carrier Cancellation Requested\"},\"requires_manual_carrier_cancellation\":{\"type\":\"boolean\",\"title\":\"Requires Manual Carrier Cancellation\"},\"reason\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Reason\",\"description\":\"Why manual carrier cancellation is required. Null when the carrier cancel was requested.\"}},\"type\":\"object\",\"required\":[\"resource_id\",\"carrier_cancellation_requested\",\"requires_manual_carrier_cancellation\"],\"title\":\"CancelDispatchResult\",\"description\":\"The outcome of a cancel request. Always ``200``: what the carrier can or can't do is not an\\nHTTP error, the same rule ``DispatchResult`` already answers dispatch failures with.\\n\\n``carrier_cancellation_requested`` true means Genesis asked the carrier to cancel and is\\nwaiting for it to confirm -- poll the dispatch job for the final status. False means the\\ncarrier does not support cancellation through Shipwell (``reason`` says so) and the dispatch\\nwas released on Shipwell's side only; the freight itself must be cancelled with the carrier\\ndirectly.\",\"example\":{\"carrier_cancellation_requested\":false,\"reason\":\"This carrier does not support dispatch cancellation through Shipwell. You must cancel the load directly with the carrier.\",\"requires_manual_carrier_cancellation\":true,\"resource_id\":\"9f2c1b84-6d3a-4c17-9b0e-2f5a7c48d31e\"}},\"CommonEquipment-Output\":{\"properties\":{\"equipment_type\":{\"$ref\":\"#/components/schemas/EquipmentType\"},\"temperature\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/TemperatureRange\"},{\"type\":\"null\"}],\"title\":\"Temperature\",\"description\":\"Temperature range at which the equipment needs to be kept at.\"}},\"type\":\"object\",\"required\":[\"equipment_type\"],\"title\":\"CommonEquipment\",\"description\":\"Merged FTL schema class `class ftl.schemas.Equipment(pydantic.BaseModel)` here.\"},\"ContactType\":{\"type\":\"string\",\"enum\":[\"ADMINISTRATOR\",\"AFTER_HOURS_CONTACT\",\"APPOINTMENT_SCHEDULER\",\"AGENT\",\"BROKER\",\"OTHER\",\"FORWARDER_CONTACT\",\"RECEIVING_CONTACT\",\"SALES_REP\",\"SHIPPER_CONTACT\",\"ULTIMATE_RECEIVER\"],\"title\":\"ContactType\"},\"CreateTrackingWebhookRequest\":{\"properties\":{\"url\":{\"type\":\"string\",\"maxLength\":2048,\"title\":\"Url\",\"description\":\"Where Shipwell POSTs each event. HTTPS only, and it must resolve to a public address.\"},\"event_names\":{\"items\":{\"type\":\"string\",\"enum\":[\"tracking.updated\",\"documents.updated\"]},\"type\":\"array\",\"minItems\":1,\"title\":\"Event Names\",\"description\":\"Which events to receive. ``tracking.updated`` is sent whenever a shipment's tracking changes and carries the full tracking snapshot. ``documents.updated`` is sent whenever the documents retrieved for a shipment change and carries the document collection without file content; it must be enabled for your company. Defaults to ``tracking.updated``.\"},\"error_contact_email\":{\"type\":\"string\",\"format\":\"email\",\"title\":\"Error Contact Email\",\"description\":\"Who Shipwell contacts about problems delivering to this webhook.\"},\"custom_data\":{\"anyOf\":[{\"additionalProperties\":true,\"type\":\"object\"},{\"type\":\"null\"}],\"title\":\"Custom Data\",\"description\":\"Any JSON object, echoed back as ``custom_data`` in every delivery. At most 4 KB.\"}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"url\",\"error_contact_email\"],\"title\":\"CreateTrackingWebhookRequest\",\"examples\":[{\"custom_data\":{\"tms\":\"example-prod\"},\"error_contact_email\":\"integrations@example.com\",\"url\":\"https://tms.example.com/hooks/shipwell-tracking\"}]},\"CreatedTrackingWebhook\":{\"properties\":{\"id\":{\"type\":\"string\",\"title\":\"Id\"},\"resource_type\":{\"type\":\"string\",\"const\":\"tracking_webhook\",\"title\":\"Resource Type\",\"default\":\"tracking_webhook\"},\"self_link\":{\"type\":\"string\",\"title\":\"Self Link\"},\"url\":{\"type\":\"string\",\"title\":\"Url\"},\"event_names\":{\"items\":{\"type\":\"string\",\"enum\":[\"tracking.updated\",\"documents.updated\"]},\"type\":\"array\",\"title\":\"Event Names\"},\"status\":{\"type\":\"string\",\"enum\":[\"ENABLED\",\"DISABLED\"],\"title\":\"Status\"},\"error_contact_email\":{\"type\":\"string\",\"title\":\"Error Contact Email\"},\"custom_data\":{\"anyOf\":[{\"additionalProperties\":true,\"type\":\"object\"},{\"type\":\"null\"}],\"title\":\"Custom Data\"},\"created_at\":{\"type\":\"string\",\"format\":\"date-time\",\"title\":\"Created At\"},\"updated_at\":{\"type\":\"string\",\"format\":\"date-time\",\"title\":\"Updated At\"},\"secret\":{\"type\":\"string\",\"title\":\"Secret\",\"description\":\"Signs every delivery: ``X-Shipwell-Signature`` is hex HMAC-SHA256 of ``\\\"{X-Shipwell-Timestamp};{body}\\\"`` keyed with this value. Returned only here; store it now.\"}},\"type\":\"object\",\"required\":[\"id\",\"self_link\",\"url\",\"event_names\",\"status\",\"error_contact_email\",\"created_at\",\"updated_at\",\"secret\"],\"title\":\"CreatedTrackingWebhook\",\"examples\":[{\"created_at\":\"2026-09-26T13:00:00Z\",\"custom_data\":{\"tms\":\"example-prod\"},\"error_contact_email\":\"integrations@example.com\",\"event_names\":[\"tracking.updated\"],\"id\":\"01KC6ZWEBHOOK000000000000\",\"resource_type\":\"tracking_webhook\",\"secret\":\"whsec_EXAMPLE_DO_NOT_USE\",\"self_link\":\"https://api.shipwell.com/tracking/webhooks/01KC6ZWEBHOOK000000000000\",\"status\":\"ENABLED\",\"updated_at\":\"2026-09-26T13:00:00Z\",\"url\":\"https://tms.example.com/hooks/shipwell-tracking\"}]},\"CreatedTrackingWebhookResponse\":{\"properties\":{\"data\":{\"$ref\":\"#/components/schemas/CreatedTrackingWebhook\"}},\"type\":\"object\",\"required\":[\"data\"],\"title\":\"CreatedTrackingWebhookResponse\"},\"CurrencyAmount\":{\"properties\":{\"currency\":{\"type\":\"string\",\"title\":\"Currency\",\"default\":\"USD\"},\"amount\":{\"type\":\"number\",\"title\":\"Amount\",\"description\":\"value or total of an item, commodity, handling unit, invoice, or voucher.\",\"example\":9001.01}},\"type\":\"object\",\"required\":[\"amount\"],\"title\":\"CurrencyAmount\",\"description\":\"Currency amount denoted with a three-letter currency code\"},\"DispatchJobResponse\":{\"properties\":{\"data\":{\"$ref\":\"#/components/schemas/DispatchResult\"}},\"type\":\"object\",\"required\":[\"data\"],\"title\":\"DispatchJobResponse\",\"description\":\"A dispatch job, wrapped as a detail response.\"},\"DispatchResult\":{\"properties\":{\"id\":{\"type\":\"string\",\"title\":\"Id\"},\"resource_type\":{\"type\":\"string\",\"const\":\"dispatch_job\",\"title\":\"Resource Type\",\"default\":\"dispatch_job\"},\"self_link\":{\"type\":\"string\",\"title\":\"Self Link\"},\"status\":{\"type\":\"string\",\"enum\":[\"PROCESSING\",\"COMPLETED\",\"ERRORED\",\"EXPIRED\",\"CANCELLED\",\"CANCELLED_INTERNALLY\"],\"title\":\"Status\"},\"is_terminal\":{\"type\":\"boolean\",\"title\":\"Is Terminal\",\"description\":\"Stop polling when true.\"},\"created_at\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}],\"title\":\"Created At\"},\"resource_id\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Resource Id\",\"description\":\"Shipwell's id for the freight this dispatch books. Everything the dispatch spawns is grouped under it, tracking first of all, so keep it if you will read tracking later with ``GET /tracking/timelines/{resource_id}``.\"},\"provider_code\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/ProviderCode\"},{\"type\":\"null\"}],\"description\":\"Which carrier integration booked this dispatch.\"},\"carrier_name\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Carrier Name\",\"description\":\"The carrier behind the account, when the source knew it. A rate-less dispatch leaves it null: a carrier account records no name of its own.\"},\"capacity_provider\":{\"$ref\":\"#/components/schemas/PublicCapacityProviderAccount\"},\"references\":{\"items\":{\"$ref\":\"#/components/schemas/PublicDispatchReference\"},\"type\":\"array\",\"title\":\"References\",\"description\":\"Every identifier this dispatch has, sent and received. The carrier's pickup number and PRO number appear here once it answers.\"},\"errors\":{\"items\":{\"$ref\":\"#/components/schemas/PublicDispatchError\"},\"type\":\"array\",\"title\":\"Errors\",\"description\":\"Non-empty only when the dispatch failed or expired.\"}},\"type\":\"object\",\"required\":[\"id\",\"self_link\",\"status\",\"is_terminal\",\"capacity_provider\"],\"title\":\"DispatchResult\",\"description\":\"A dispatch job: whether the carrier has answered, and what it said.\\n\\nPolling is the only completion signal, and it is bounded: a dispatch the carrier never\\nconfirms is expired by the stale-dispatch cron, so ``is_terminal`` arrives either way.\",\"example\":{\"capacity_provider\":{\"account_id\":\"01KBZ91QKW3D9VDP5PVY4HWQ1G\",\"account_name\":\"ABF - Main\"},\"carrier_name\":\"ABF Freight\",\"created_at\":\"2026-08-19T15:30:32.591Z\",\"errors\":[],\"id\":\"01KBZC9J8Q0000000000000000\",\"is_terminal\":false,\"provider_code\":\"ABF\",\"references\":[{\"qualifier\":\"BOL_NUMBER\",\"value\":\"BOL-77120\"}],\"resource_id\":\"9f2c1b84-6d3a-4c17-9b0e-2f5a7c48d31e\",\"resource_type\":\"dispatch_job\",\"self_link\":\"https://api.shipwell.com/dispatching/jobs/01KBZC9J8Q0000000000000000\",\"status\":\"PROCESSING\"}},\"DistanceUnit\":{\"type\":\"string\",\"enum\":[\"MI\",\"KM\"],\"title\":\"DistanceUnit\"},\"DocumentCollectionResponse\":{\"properties\":{\"data\":{\"$ref\":\"#/components/schemas/DocumentCollectionResult\"}},\"type\":\"object\",\"required\":[\"data\"],\"title\":\"DocumentCollectionResponse\",\"description\":\"A resource's documents, wrapped as a detail response.\"},\"DocumentCollectionResult\":{\"properties\":{\"resource_id\":{\"type\":\"string\",\"title\":\"Resource Id\"},\"resource_type\":{\"type\":\"string\",\"const\":\"document_collection\",\"title\":\"Resource Type\",\"default\":\"document_collection\"},\"self_link\":{\"type\":\"string\",\"title\":\"Self Link\"},\"status\":{\"type\":\"string\",\"enum\":[\"PROCESSING\",\"COMPLETED\",\"ERRORED\"],\"title\":\"Status\"},\"is_terminal\":{\"type\":\"boolean\",\"title\":\"Is Terminal\",\"description\":\"Stop polling when true.\"},\"documents\":{\"items\":{\"$ref\":\"#/components/schemas/PublicDocument\"},\"type\":\"array\",\"title\":\"Documents\"},\"errors\":{\"items\":{\"$ref\":\"#/components/schemas/PublicDocumentError\"},\"type\":\"array\",\"title\":\"Errors\"}},\"type\":\"object\",\"required\":[\"resource_id\",\"self_link\",\"status\",\"is_terminal\"],\"title\":\"DocumentCollectionResult\",\"description\":\"Every document retrieved for one resource_id, deduplicated across however many retrieval\\ntasks produced them.\\n\\nPolling is the completion signal, the same as rating and dispatch: ``is_terminal`` is false\\nfor a resource that exists but has not finished retrieving (including one with no documents\\nat all yet -- carriers commonly index images only after delivery, so an empty ``documents``\\nlist here is the ordinary early answer, not an error).\",\"example\":{\"documents\":[{\"completed_at\":\"2026-08-20T11:04:18.220Z\",\"document_type\":\"BOL\",\"files\":[{\"content\":{\"url\":{\"value\":\"https://example.com/bol-77120.pdf\"}},\"filename\":\"bol-77120.pdf\",\"format\":\"PDF\",\"size_in_bytes\":184223,\"too_large_for_inline\":false}],\"id\":\"01KBZD1P4M0000000000000000\",\"name\":\"Bill of Lading\",\"resource_type\":\"document\",\"status\":\"COMPLETED\"}],\"errors\":[],\"is_terminal\":true,\"resource_id\":\"9f2c1b84-6d3a-4c17-9b0e-2f5a7c48d31e\",\"resource_type\":\"document_collection\",\"self_link\":\"https://api.shipwell.com/documents/9f2c1b84-6d3a-4c17-9b0e-2f5a7c48d31e\",\"status\":\"COMPLETED\"}},\"EquipmentType\":{\"type\":\"string\",\"enum\":[\"AUTO_CARRIER\",\"AUTO_MAX\",\"AUTO_RACK_BI_LEVEL\",\"AUTO_RACK_TRI_LEVEL\",\"AUTOHAULER\",\"B_TRAIN\",\"BOXCAR\",\"BULK\",\"BULKHEAD_FLATCAR\",\"CARGO_VAN\",\"CENTERBEAM_FLATCAR\",\"CHAIN_TIE_DOWN_FLATCAR\",\"CO_FLATBED\",\"CO_STAKE_BED\",\"COAL_CAR\",\"COIL_STEEL_RAILCAR\",\"CONESTOGA\",\"CONESTOGA_48\",\"CONESTOGA_53\",\"CONTAINER\",\"CONTAINER_53_FOOT\",\"CONTAINER_BREAK_BULK\",\"CONTAINER_FLAT_TRACK_20_FOOT\",\"CONTAINER_FLAT_TRACK_40_FOOT\",\"CONTAINER_HEAVY_TESTED_20_FOOT\",\"CONTAINER_HIGH_CUBE_20_FOOT\",\"CONTAINER_HIGH_CUBE_40_FOOT\",\"CONTAINER_HIGH_CUBE_45_FOOT\",\"CONTAINER_INSULATED\",\"CONTAINER_ISO_TANK_20_FOOT\",\"CONTAINER_ISO_TANK_24_FOOT\",\"CONTAINER_ISO_TANK_40_FOOT\",\"CONTAINER_OPEN_TOP_20_FOOT\",\"CONTAINER_OPEN_TOP_40_FOOT\",\"CONTAINER_OVERSIZE\",\"CONTAINER_REEFER_20_FOOT\",\"CONTAINER_REEFER_40_FOOT\",\"CONTAINER_REEFER_TANK_20_FOOT\",\"CONTAINER_REFRIGERATED\",\"CONTAINER_STANDARD_20_FOOT\",\"CONTAINER_STANDARD_40_FOOT\",\"CONVEYOR\",\"COVERED_COIL_RAILCAR\",\"COVERED_HOPPER\",\"CRYO_RAILCAR\",\"CURTAIN_SIDE\",\"CUSTOMER_PICKUP\",\"DOUBLE_DROP\",\"DRIVEAWAY\",\"DROP_DECK\",\"DROP_DECK_LANDOLL\",\"DROP_TRAILER\",\"DRY_BULK_TANKER\",\"DRY_VAN\",\"DUMP_TRAILER\",\"FLATBED\",\"FLATBED_53_FOOT\",\"FLATBED_AIR_RIDE\",\"FLATBED_CONESTOGA\",\"FLATBED_CONESTOGA_48\",\"FLATBED_CONESTOGA_53\",\"FLATBED_DOUBLE\",\"FLATBED_HOTSHOT\",\"FLATBED_MAXI\",\"FLATBED_OVERDIMENSION\",\"FOUR_AXLE_HEAVY_HAUL_TRAILER\",\"GONDOLA\",\"HALF_TON_TRUCK\",\"HOPPER\",\"HOPPER_BOTTOM\",\"INSULATED_VAN\",\"LIQUID_BULK_TANKER\",\"LOWBOY\",\"LOWBOY_OVERDIMENSION\",\"MINI_FLOAT_TRAILER_AND_TRUCK\",\"MINI_VAN\",\"MOVING_VAN\",\"MULTI_COMPARTMENT\",\"ONE_TON_TRUCK\",\"OPEN_TOP_HOPPER\",\"OTHER\",\"PIPE_FLATCAR\",\"PNEUMATIC\",\"POWER_ONLY\",\"REEFER\",\"REEFER_AIR_RIDE\",\"REEFER_DOUBLE\",\"REEFER_INTERMODAL\",\"REFRIGERATED_BOXCAR\",\"REMOVABLE_GOOSENECK\",\"SEDAN\",\"STEP_DECK\",\"STEPDECK_CONESTOGA\",\"STEPDECK_CONESTOGA_48\",\"STEPDECK_CONESTOGA_53\",\"STRAIGHT_BOX_TRUCK\",\"STRETCH_TRAILER\",\"TANKER\",\"TANKER_ALUMINUM\",\"TANKER_INTERMODAL\",\"TANKER_STEEL\",\"TBOX_RAILCAR\",\"TEMP_CONTROLLED_TRAILER\",\"TILT\",\"TILTBED_48_WENCH\",\"TOWING\",\"TRAILER\",\"TRUCK_AND_TRAILER\",\"VAN_AIR_RIDE\",\"VAN_DOUBLE\",\"VAN_INSULATED\",\"VAN_INTERMODAL\",\"VAN_OPEN_TOP\",\"VAN_ROLLER_BED\",\"VAN_SPRINTER\",\"VAN_TRIPLE\",\"VAN_VENTED\",\"VAN_WITH_CURTAINS\",\"WRECKER_TILTBED\"],\"title\":\"EquipmentType\",\"description\":\"Merged FTL enum class `class FtlEquipmentType(StrEnum)` here.\"},\"GeoLocationPoint\":{\"properties\":{\"latitude\":{\"type\":\"number\",\"maximum\":90,\"minimum\":-90,\"title\":\"Latitude\"},\"longitude\":{\"type\":\"number\",\"maximum\":180,\"minimum\":-180,\"title\":\"Longitude\"}},\"type\":\"object\",\"required\":[\"latitude\",\"longitude\"],\"title\":\"GeoLocationPoint\"},\"LengthUnit\":{\"type\":\"string\",\"enum\":[\"CM\",\"FT\",\"IN\",\"M\"],\"title\":\"LengthUnit\"},\"LocationType\":{\"type\":\"string\",\"enum\":[\"EXHIBITION\",\"BUSINESS_WITH_DOCK\",\"OTHER\"],\"title\":\"LocationType\"},\"OrderReferenceTypes\":{\"type\":\"string\",\"enum\":[\"BOL_NUMBER\",\"PRO_NUMBER\",\"PO_NUMBER\",\"SHIPMENT_REF_NUMBER\",\"PICKUP_NUMBER\",\"SO_NUMBER\",\"OTHER\"],\"title\":\"OrderReferenceTypes\",\"description\":\"Merged FTL enum class `class FtlOrderReferenceType(StrEnum)` here.\"},\"PackagingType\":{\"type\":\"string\",\"enum\":[\"AFRAME\",\"BAG\",\"BALE\",\"BARREL\",\"BASKET\",\"BATTERIES\",\"BIN\",\"BOTTLE\",\"BOX\",\"BREAK_BULK\",\"BUCKET\",\"BUNDLE\",\"CAN\",\"CART\",\"CARTON\",\"CASE\",\"CHEST\",\"COIL\",\"CONTAINER\",\"CRATE\",\"CYLINDER\",\"DRUM\",\"ENVELOPE\",\"FLOOR_LOADED\",\"GALLON\",\"GAYLORD\",\"HALF_PALLET\",\"HAMPER\",\"HOPPER\",\"JERRICAN\",\"LIFT_VAN\",\"LOOSE\",\"NONE\",\"OTHER\",\"PACKAGE\",\"PAIL\",\"PALLET\",\"PIECE\",\"PIECES\",\"PLT\",\"PROVIDER_SPECIFIC\",\"RACK\",\"REEL\",\"ROLL\",\"SKID\",\"STACK\",\"TANK\",\"TOTE_BIN\",\"TOTE_CAN\",\"TRUCKLOAD\",\"TUB\",\"TUBE\",\"U_BOX\",\"UNIT\",\"VEHICLE\",\"VOLUME_GAL\",\"VOLUME_L\",\"WHEELS\"],\"title\":\"PackagingType\",\"description\":\"Merged FTL enum class `FtlPackageType(StrEnum)` here.\\nMerged common enum class `PackageType(StrEnum)` here.\"},\"ProviderCode\":{\"type\":\"string\",\"enum\":[\"AMAZON\",\"CHROBINSON\",\"SMC3\",\"UBER\",\"FEDEX\",\"FEDEXFREIGHT\",\"SHIPWELL_FTL\",\"UPS\",\"USPS\",\"PUROLATOR\",\"CANPAR\",\"CANADAPOST\",\"RLC\",\"XPO\",\"ODFL\",\"ESTES\",\"WARD\",\"CLOUDTRUCKS\",\"ABF\",\"AVERITT\",\"AAACOOPER\",\"PITTOHIO\",\"PRIORITYONE\",\"ECHOGL\",\"NUMARK\",\"DAYLIGHT\",\"PENI\",\"AIT\",\"ANY\",\"CENTRALTRANSPORT\",\"DUIEPYLE\",\"PRIMO\",\"SAIA\",\"SEFL\",\"DAYTON\",\"ROADRUNNER\",\"OAKHARBOR\",\"TQL\",\"WWEX\"],\"title\":\"ProviderCode\"},\"ProviderDocumentTypes\":{\"type\":\"string\",\"enum\":[\"COMMERCIAL_INVOICE\",\"CERTIFICATE_OF_ORIGIN\",\"NAFTA_CERTIFICATE_OF_ORIGIN\",\"PRO_FORMA_INVOICE\",\"IMAGE\",\"BOL\",\"DELIVERY_RECEIPT\",\"FUEL\",\"LUMPER\",\"HOS\",\"SIGNATURE\",\"RATE_CONFIRMATION\",\"CUSTOMER_TENDER\",\"WEIGHT_CERTIFICATE\",\"OVERAGES_SHORTAGES_AND_DAMAGES\",\"RENDITION_INVOICE_PACKET\",\"INVENTORY_RELEASE\",\"INVOICE\",\"INSURANCE\",\"SHIPPING_LABEL\",\"CUSTOMS_PAPERWORK\",\"PACKING_SLIPS\",\"OTHER\",\"INSPECTION_CERTIFICATE\",\"NMFC_CERTIFICATE\",\"LETTER_OF_AUTHORIZATION\",\"W9\",\"CLAIM\",\"MASTER_AIRWAY_BILL\"],\"title\":\"ProviderDocumentTypes\"},\"PublicAppointment\":{\"properties\":{\"appointment_number\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"null\"}],\"title\":\"Appointment Number\"},\"begin\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}],\"title\":\"Begin\"},\"end\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}],\"title\":\"End\"},\"location_opens\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}],\"title\":\"Location Opens\",\"description\":\"Time the facility opens\"},\"location_closes\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}],\"title\":\"Location Closes\",\"description\":\"Time the facility closes\"}},\"additionalProperties\":false,\"type\":\"object\",\"title\":\"PublicAppointment\",\"description\":\"A scheduled arrival, as opposed to the window the stop is available.\"},\"PublicCapacityProviderAccount\":{\"properties\":{\"account_id\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Account Id\"},\"account_name\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Account Name\"},\"scac\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Scac\",\"description\":\"SCAC the account reports for itself. For a brokered VLTL rate that identifies the provider that quoted, not the carrier that delivers, and a couple of providers do not report one at all. Always null on a dispatch job: a booking records no identification codes of its own.\"}},\"type\":\"object\",\"title\":\"PublicCapacityProviderAccount\",\"description\":\"The carrier account behind a rate or a booking.\\n\\nA value object rather than a related resource: ``account_id`` is the account you named, or the\\none the rate resolved to, and there is no endpoint to dereference it against. That is also why\\nthe field is ``account_id`` and not ``id`` — a bare ``id`` inside a nested object reads as a\\npointer, and this one points nowhere.\\n\\nNamed for the account rather than the provider because that is what it projects, and because\\n``PublicCapacityProviderOption`` on the rating request is the other thing: a provider a caller\\nasks for by code, not an account anything was booked with.\\n\\nShared by both surfaces so that the same carrier account has one shape wherever it appears —\\na consumer reading a rate and then the dispatch it produced writes one parser, not two. What\\nidentifies the carrier rather than the account — ``provider_code`` and ``carrier_name`` — sits\\nbeside this object on the resource carrying it, since both are columns of the rate or of the\\ndispatch request rather than of the account.\"},\"PublicCapacityProviderOption\":{\"properties\":{\"provider_code\":{\"$ref\":\"#/components/schemas/ProviderCode\"}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"provider_code\"],\"title\":\"PublicCapacityProviderOption\",\"description\":\"One carrier the request asks for by name.\"},\"PublicCharge\":{\"properties\":{\"charge_code\":{\"type\":\"string\",\"title\":\"Charge Code\"},\"description\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Description\"},\"charge_detail\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicChargeDetail\"},{\"type\":\"null\"}]}},\"type\":\"object\",\"required\":[\"charge_code\"],\"title\":\"PublicCharge\",\"description\":\"One line of the carrier's price breakdown.\"},\"PublicChargeDetail\":{\"properties\":{\"unit_rate\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/CurrencyAmount\"},{\"type\":\"null\"}]},\"unit_quantity\":{\"anyOf\":[{\"type\":\"number\"},{\"type\":\"null\"}],\"title\":\"Unit Quantity\",\"description\":\"How many units the rate was applied to. Null when the carrier did not say.\"}},\"type\":\"object\",\"title\":\"PublicChargeDetail\",\"description\":\"What one charge costs, and over how many units.\"},\"PublicCharges\":{\"properties\":{\"total_charges\":{\"$ref\":\"#/components/schemas/CurrencyAmount\"},\"charge_breakdown\":{\"items\":{\"$ref\":\"#/components/schemas/PublicCharge\"},\"type\":\"array\",\"title\":\"Charge Breakdown\"}},\"type\":\"object\",\"required\":[\"total_charges\"],\"title\":\"PublicCharges\",\"description\":\"The carrier's price: one total, and the lines it is made of.\\n\\nOne shape for every mode. Internally a charge carries its money in ``charge_detail`` for LTL,\\nVLTL and FTL but in ``price`` for parcel — two spellings of the same column, the second meant\\nto replace the first. The mapper normalises both onto ``charge_detail``, so enabling parcel\\nadds no second place to look and a consumer never has to check which field it landed in.\"},\"PublicContact\":{\"properties\":{\"contact_id\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Contact Id\",\"description\":\"Optional User specified id for this contact\"},\"contact_type\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/ContactType\"},{\"type\":\"null\"}]},\"company_name\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Company Name\"},\"person_name\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Person Name\",\"description\":\"Full name of the contact\"},\"first_name\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"First Name\",\"description\":\"First name of the contact\"},\"last_name\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":0},{\"type\":\"null\"}],\"title\":\"Last Name\",\"description\":\"Last name of the contact\",\"default\":\"\"},\"email\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"email\"},{\"type\":\"null\"}],\"title\":\"Email\",\"description\":\"Email of the contact\"},\"phone\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Phone\",\"description\":\"Phone number of the contact\",\"example\":\"+19563838383\"},\"phone_ext\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Phone Ext\",\"description\":\"Phone Extension of the contact\"},\"fax\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Fax Number\",\"description\":\"Fax number of the contact\"},\"title\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Title\",\"description\":\"Title of the contact\"}},\"additionalProperties\":false,\"type\":\"object\",\"title\":\"PublicContact\",\"description\":\"Who to reach at a stop.\"},\"PublicCurrencyAmount\":{\"properties\":{\"currency\":{\"type\":\"string\",\"title\":\"Currency\",\"default\":\"USD\"},\"amount\":{\"type\":\"number\",\"title\":\"Amount\",\"description\":\"value or total of an item, commodity, handling unit, invoice, or voucher.\",\"example\":9001.01}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"amount\"],\"title\":\"PublicCurrencyAmount\",\"description\":\"An amount of money, with its ISO 4217 currency.\"},\"PublicDispatchError\":{\"properties\":{\"detail\":{\"type\":\"string\",\"title\":\"Detail\"}},\"type\":\"object\",\"required\":[\"detail\"],\"title\":\"PublicDispatchError\",\"description\":\"Why a dispatch failed.\\n\\nOnly ``detail``, which is the whole of what Shipwell has: one free-text column per dispatch,\\nwritten by whichever carrier answered. A code or a per-carrier classification would have to be\\ninvented rather than mapped, and inventing one is how a consumer ends up branching on\\nsomething that does not mean what it says.\"},\"PublicDispatchReference\":{\"properties\":{\"qualifier\":{\"$ref\":\"#/components/schemas/OrderReferenceTypes\"},\"value\":{\"type\":\"string\",\"title\":\"Value\"}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"qualifier\",\"value\"],\"title\":\"PublicDispatchReference\",\"description\":\"An identifier travelling with this dispatch, the consumer's or the carrier's.\\n\\nTyped, unlike the internal ``{str, str}`` pair: the qualifiers carriers act on are a closed\\nset, and a misspelled one is a reference nobody reads rather than an error anybody sees.\"},\"PublicDispatchStop\":{\"properties\":{\"sequence_number\":{\"type\":\"integer\",\"minimum\":1,\"title\":\"Sequence Number\",\"description\":\"Order in which the stops are completed, starting at 1.\"},\"location\":{\"$ref\":\"#/components/schemas/PublicLocation\"},\"requested_window\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicTimeWindow\"},{\"type\":\"null\"}]},\"appointment\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicAppointment\"},{\"type\":\"null\"}]},\"contact\":{\"$ref\":\"#/components/schemas/PublicContact\",\"description\":\"Who the carrier reaches at this stop.\"},\"accessorials\":{\"items\":{\"$ref\":\"#/components/schemas/Accessorials\"},\"type\":\"array\",\"title\":\"Accessorials\"},\"instructions\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Instructions\",\"description\":\"Anything the driver needs on arrival, e.g. which dock to use.\"}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"sequence_number\",\"location\",\"contact\"],\"title\":\"PublicDispatchStop\",\"description\":\"A place the freight is picked up from or delivered to.\\n\\nStricter than the rating stop in one way: a contact is required on every stop. Carriers reject\\na pickup they have nobody to call for. The pickup stop's contact additionally needs a company\\nname, a first name and a phone number, and the delivery stop's a company name and a phone\\nnumber for the consignee on the bill of lading — rules the request validates as a whole, since\\nwhich stop is the pickup or the delivery follows from ``sequence_number`` rather than from the\\nstop.\"},\"PublicDocument\":{\"properties\":{\"id\":{\"type\":\"string\",\"title\":\"Id\"},\"resource_type\":{\"type\":\"string\",\"const\":\"document\",\"title\":\"Resource Type\",\"default\":\"document\"},\"document_type\":{\"type\":\"string\",\"title\":\"Document Type\",\"description\":\"The Shipwell document type, e.g. 'BOL'.\"},\"name\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Name\"},\"status\":{\"type\":\"string\",\"enum\":[\"CREATED\",\"PROCESSING\",\"ERRORED\",\"COMPLETED\"],\"title\":\"Status\"},\"completed_at\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}],\"title\":\"Completed At\"},\"files\":{\"items\":{\"$ref\":\"#/components/schemas/PublicDocumentFile\"},\"type\":\"array\",\"title\":\"Files\"}},\"type\":\"object\",\"required\":[\"id\",\"document_type\",\"status\"],\"title\":\"PublicDocument\",\"description\":\"One document the carrier returned -- a BOL, a delivery receipt, a weight certificate.\"},\"PublicDocumentError\":{\"properties\":{\"detail\":{\"type\":\"string\",\"title\":\"Detail\"}},\"type\":\"object\",\"required\":[\"detail\"],\"title\":\"PublicDocumentError\",\"description\":\"Something that went wrong retrieving one of this resource's documents.\"},\"PublicDocumentFile\":{\"properties\":{\"format\":{\"type\":\"string\",\"enum\":[\"PNG\",\"PDF\",\"TIF\",\"JPEG\"],\"title\":\"Format\"},\"filename\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Filename\"},\"size_in_bytes\":{\"type\":\"integer\",\"title\":\"Size In Bytes\"},\"content\":{\"$ref\":\"#/components/schemas/PublicFileContent\"},\"too_large_for_inline\":{\"type\":\"boolean\",\"title\":\"Too Large For Inline\",\"description\":\"True when ?encoding=base64 was asked for but this file exceeded the inline size cap. content.base64 is null in that case; content.url is unaffected.\",\"default\":false}},\"type\":\"object\",\"required\":[\"format\",\"size_in_bytes\",\"content\"],\"title\":\"PublicDocumentFile\",\"description\":\"One file belonging to a retrieved document.\"},\"PublicEquipment\":{\"properties\":{\"equipment_type\":{\"$ref\":\"#/components/schemas/EquipmentType\"},\"temperature\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/TemperatureRange\"},{\"type\":\"null\"}],\"title\":\"Temperature\",\"description\":\"Temperature range at which the equipment needs to be kept at.\"}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"equipment_type\"],\"title\":\"PublicEquipment\",\"description\":\"Equipment the freight needs, and the temperature range if it is controlled.\"},\"PublicFileBase64\":{\"properties\":{\"value\":{\"type\":\"string\",\"title\":\"Value\",\"description\":\"Standard base64, no data URL prefix.\"}},\"type\":\"object\",\"required\":[\"value\"],\"title\":\"PublicFileBase64\",\"description\":\"The file's content, inline.\"},\"PublicFileContent\":{\"properties\":{\"url\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicFileUrl\"},{\"type\":\"null\"}]},\"base64\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicFileBase64\"},{\"type\":\"null\"}]}},\"type\":\"object\",\"title\":\"PublicFileContent\",\"description\":\"How to get this file's bytes: a link, inline content, or both.\\n\\n``base64`` is additive, not a replacement for ``url`` -- matching the convention already\\nshipped for backend-core's own document endpoints (``?encoding=base64`` there), where\\n``file_base64`` sits alongside the existing presigned ``file`` link rather than swapping it\\nout. Either field may be null on its own: ``url`` is null when the file exists only as\\ninline data with nothing to link to, and ``base64`` is null when it was not requested\\n(``?encoding=url``, the default) or when the file was too large to inline -- see\\n``too_large_for_inline`` on the file it belongs to.\"},\"PublicFileUrl\":{\"properties\":{\"value\":{\"type\":\"string\",\"title\":\"Value\"}},\"type\":\"object\",\"required\":[\"value\"],\"title\":\"PublicFileUrl\",\"description\":\"A link to fetch the file.\\n\\nTwo different things depending on how Genesis stores this file. For a carrier- or\\nbackend-core-sourced file, this is a pass-through of whatever address the source returned --\\nnot Shipwell-minted, and Shipwell does not control when (or whether) it expires. For a file\\nGenesis wrote to its own bucket (PUBLIC_DISPATCH resources only), this *is* a Shipwell-minted\\npresigned URL, freshly generated on every read -- treat it as short-lived and re-fetch rather\\nthan caching it. Either way there is no ``expires_at`` field: Genesis does not always know\\nthe source's own expiry, and a freshly-minted one is valid again on the next read regardless.\"},\"PublicHandlingUnit\":{\"properties\":{\"freight_class\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Freight Class\",\"description\":\"What LTL carriers rate on. Not enforced here, but SAIA, Peninsula and Duie Pyle reject a quote or booking outright without it; other carriers will quote against a guessed class instead of failing, which is rarely the class you want billed.\"},\"nmfc_codes\":{\"items\":{\"$ref\":\"#/components/schemas/PublicNmfcCode\"},\"type\":\"array\",\"title\":\"Nmfc Codes\"},\"weight\":{\"$ref\":\"#/components/schemas/PublicItemWeight\"},\"description\":{\"type\":\"string\",\"title\":\"Description\",\"default\":\"n/a\"},\"dimensions\":{\"anyOf\":[{\"oneOf\":[{\"$ref\":\"#/components/schemas/PublicLinearMeasurement\"},{\"$ref\":\"#/components/schemas/PublicVolumetricMeasurement\"}],\"discriminator\":{\"propertyName\":\"measurement_type\",\"mapping\":{\"DIMENSIONS\":\"#/components/schemas/PublicLinearMeasurement\",\"VOLUME\":\"#/components/schemas/PublicVolumetricMeasurement\"}}},{\"type\":\"null\"}],\"title\":\"Dimensions\",\"description\":\"Not enforced here, but SAIA requires it for LTL and VLTL rating.\"},\"quantity\":{\"type\":\"integer\",\"title\":\"Quantity\",\"default\":1},\"declared_value\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicCurrencyAmount\"},{\"type\":\"null\"}]},\"stackable\":{\"anyOf\":[{\"type\":\"boolean\"},{\"type\":\"null\"}],\"title\":\"Stackable\",\"default\":false},\"packaging_type\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PackagingType\"},{\"type\":\"null\"}],\"description\":\"Defaults per mode when omitted: PALLET for LTL, VLTL and FTL, BOX for PARCEL.\"},\"associated_stops\":{\"items\":{\"$ref\":\"#/components/schemas/PublicStopAssignment\"},\"type\":\"array\",\"title\":\"Associated Stops\"}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"weight\"],\"title\":\"PublicHandlingUnit\",\"description\":\"One unit of freight being moved: a pallet, a crate, a box.\\n\\nAdd ``ParcelHandlingUnitFields`` to the bases when PARCEL is enabled.\"},\"PublicItemWeight\":{\"properties\":{\"unit\":{\"$ref\":\"#/components/schemas/WeightUnit\",\"default\":\"LB\"},\"value\":{\"type\":\"number\",\"title\":\"Value\",\"description\":\"value associated with the weight unit of handling units, packages, or items.\",\"example\":23000.13},\"qualifier\":{\"$ref\":\"#/components/schemas/WeightQualifier\",\"description\":\"Whether ``value`` is the weight of one item (``PER_ITEM``) or of the whole line (``GROSS``). Required: with a quantity above 1 the two readings differ by a factor of the quantity, which is not something a default can decide.\"}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"value\",\"qualifier\"],\"title\":\"PublicItemWeight\",\"description\":\"A weight that says whether it describes one item or the whole line.\"},\"PublicLinearDimension\":{\"properties\":{\"unit\":{\"$ref\":\"#/components/schemas/LengthUnit\"},\"value\":{\"type\":\"number\",\"title\":\"Value\",\"description\":\"value tied to the unit of length for a measurement in as 'distance' between two points\",\"example\":12.25}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"unit\",\"value\"],\"title\":\"PublicLinearDimension\",\"description\":\"One length, with its unit.\"},\"PublicLinearMeasurement\":{\"properties\":{\"measurement_type\":{\"type\":\"string\",\"const\":\"DIMENSIONS\",\"title\":\"Measurement Type\",\"description\":\"Selects the length/width/height shape of ``dimensions``.\"},\"unit\":{\"$ref\":\"#/components/schemas/LengthUnit\",\"default\":\"IN\"},\"length\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicLinearDimension\"},{\"type\":\"null\"}]},\"width\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicLinearDimension\"},{\"type\":\"null\"}]},\"height\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicLinearDimension\"},{\"type\":\"null\"}]}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"measurement_type\"],\"title\":\"PublicLinearMeasurement\",\"description\":\"Dimensions given as length, width and height. At least one of the three is required.\"},\"PublicLocation\":{\"properties\":{\"line_1\":{\"anyOf\":[{\"type\":\"string\",\"maxLength\":255},{\"type\":\"null\"}],\"title\":\"Line 1\",\"description\":\"Street name and address\"},\"line_2\":{\"anyOf\":[{\"type\":\"string\",\"maxLength\":255},{\"type\":\"null\"}],\"title\":\"Line 2\",\"description\":\"Optional apartment, suite, unit number, etc.\"},\"line_3\":{\"anyOf\":[{\"type\":\"string\",\"maxLength\":255},{\"type\":\"null\"}],\"title\":\"Line 3\",\"description\":\"Optional city, state, zip code.\"},\"locality\":{\"anyOf\":[{\"type\":\"string\",\"maxLength\":128},{\"type\":\"null\"}],\"title\":\"Locality\",\"description\":\"Next specific categorization within a 'region' such as a city\"},\"country\":{\"anyOf\":[{\"type\":\"string\",\"maxLength\":2,\"minLength\":2},{\"type\":\"null\"}],\"title\":\"Country\",\"description\":\"2-letter ISO-3166 country code\",\"examples\":[\"US\",\"CN\",\"IN\",\"ID\",\"PK\",\"BR\",\"NG\",\"BD\",\"RU\"]},\"region\":{\"anyOf\":[{\"type\":\"string\",\"maxLength\":3,\"minLength\":2},{\"type\":\"null\"}],\"title\":\"Region\",\"description\":\"Up to 3 letters ISO region code, can represent a state or province\",\"examples\":[\"TX\",\"CA\",\"FL\",\"NY\",\"PA\",\"IL\",\"OH\",\"GA\"]},\"postal_code\":{\"anyOf\":[{\"type\":\"string\",\"maxLength\":16},{\"type\":\"null\"}],\"title\":\"Postal Code\",\"description\":\"Next specific categorization within a 'city' such as a zipcode or postal code\"},\"timezone\":{\"anyOf\":[{\"type\":\"string\",\"description\":\"Name of a timezone that exists in the tz database\",\"examples\":[\"America/Chicago\"]},{\"type\":\"null\"}],\"title\":\"Timezone\",\"description\":\"Timezone of the address\"},\"geolocation\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/GeoLocationPoint\"},{\"type\":\"null\"}],\"description\":\"Latitude and longitude of the address\"},\"location_number\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Location Number\",\"description\":\"User-specified identifier for this location or id from master data\",\"example\":\"TX-1\"},\"location_name\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Location Name\",\"description\":\"User-specified location name for this location\"},\"location_type\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/LocationType\"},{\"type\":\"null\"}],\"title\":\"Location Kind\",\"description\":\"Specialized location type.\",\"example\":\"EXHIBITION\"},\"residential\":{\"type\":\"boolean\",\"title\":\"Residential Location Flag\",\"description\":\"Flag identifying a residential location\",\"default\":false},\"is_port\":{\"type\":\"boolean\",\"title\":\"Port of Entry Location Flag\",\"description\":\"Flag identifying a port of entry location\",\"default\":false},\"iata_airport_code\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"IATA Airport Code\",\"description\":\"IATA Airport Code\",\"example\":\"AUS\"},\"un_locode\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"UN/LOCODE\",\"description\":\"United Nations Code for Trade and Transport Locations. 2 Char Country + 3 Char city/town/area/\",\"example\":\"US NYC\"}},\"additionalProperties\":false,\"type\":\"object\",\"title\":\"PublicLocation\",\"description\":\"A physical location. Every field is optional to the API itself — nothing here is enforced.\\n\\nA bare ``postal_code`` and ``country`` will validate and rate with some carriers, but several\\ndirect carriers (e.g. SAIA, Peninsula, Pitt Ohio) reject a rating or dispatch request that is\\nmissing ``line_1``, ``locality`` or ``region``. Send the full address whenever you have it.\"},\"PublicNmfcCode\":{\"properties\":{\"code\":{\"type\":\"string\",\"title\":\"Code\"},\"sub_code\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Sub Code\"}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"code\"],\"title\":\"PublicNmfcCode\",\"description\":\"An NMFC classification for a handling unit. LTL and VLTL only.\"},\"PublicObjectDispatchRequest\":{\"properties\":{\"references\":{\"items\":{\"$ref\":\"#/components/schemas/PublicDispatchReference\"},\"type\":\"array\",\"title\":\"References\",\"description\":\"Identifiers forwarded to the carrier and echoed back on the response. A public dispatch has no Shipwell shipment behind it, so Shipwell never generates a ``BOL_NUMBER`` for one: if the carrier needs one, supply it here.\"},\"notes_for_carrier\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Notes For Carrier\",\"description\":\"Free text the carrier sees on the tender.\"},\"account_id\":{\"type\":\"string\",\"title\":\"Account Id\",\"description\":\"The Shipwell carrier account to book with.\"},\"provider_code\":{\"$ref\":\"#/components/schemas/ProviderCode\",\"description\":\"Which carrier integration the account belongs to; part of its lookup key.\"},\"mode\":{\"type\":\"string\",\"enum\":[\"LTL\",\"VLTL\"],\"title\":\"Mode\",\"description\":\"How the freight moves. It also picks the handling units' packaging default.\"},\"stops\":{\"items\":{\"$ref\":\"#/components/schemas/PublicDispatchStop\"},\"type\":\"array\",\"minItems\":2,\"title\":\"Stops\",\"description\":\"Where the freight is collected and delivered. The lowest sequence is the pickup.\"},\"handling_units\":{\"items\":{\"$ref\":\"#/components/schemas/PublicHandlingUnit\"},\"type\":\"array\",\"minItems\":1,\"title\":\"Handling Units\",\"description\":\"What the carrier moves, and what the bill of lading lists.\"},\"equipment\":{\"items\":{\"$ref\":\"#/components/schemas/PublicEquipment\"},\"type\":\"array\",\"title\":\"Equipment\"},\"accessorials\":{\"items\":{\"$ref\":\"#/components/schemas/Accessorials\"},\"type\":\"array\",\"title\":\"Accessorials\",\"description\":\"Shipment-wide accessorials. Per-stop accessorials live on each stop.\"},\"service_code\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Service Code\",\"description\":\"The service level to book, as the carrier names it.\"},\"carrier_rate_id\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Carrier Rate Id\",\"description\":\"The carrier's own quote id, when the price was agreed outside Shipwell.\"},\"gross_weight\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicWeight\"},{\"type\":\"null\"}]},\"total_declared_value\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicCurrencyAmount\"},{\"type\":\"null\"}]},\"customer_reference_number\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Customer Reference Number\",\"description\":\"The consumer's own reference. Some carriers require it.\"}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"account_id\",\"provider_code\",\"mode\",\"stops\",\"handling_units\"],\"title\":\"PublicObjectDispatchRequest\",\"description\":\"Book a carrier for a shipment stated in full, with no rate behind it.\\n\\nThe carrier account has to be named, because there is no rate to resolve it from, and the\\nprice is whatever was agreed outside Shipwell. Only an account whose billing terms are\\n``COLLECT`` may dispatch this way.\\n\\nUse this shape when there is no prior Rating call to point ``rate_id`` at. If there is one,\\n``PublicRateDispatchRequest`` is a smaller and more reliable request — use that instead. See\\nthe ``create_dispatch_job`` operation description for the full field breakdown.\",\"example\":{\"account_id\":\"01KBZ91QKW3D9VDP5PVY4HWQ1G\",\"handling_units\":[{\"dimensions\":{\"height\":{\"unit\":\"IN\",\"value\":50},\"length\":{\"unit\":\"IN\",\"value\":48},\"measurement_type\":\"DIMENSIONS\",\"unit\":\"IN\",\"width\":{\"unit\":\"IN\",\"value\":40}},\"freight_class\":\"70\",\"quantity\":1,\"weight\":{\"qualifier\":\"PER_ITEM\",\"unit\":\"LB\",\"value\":500}}],\"mode\":\"LTL\",\"provider_code\":\"ABF\",\"stops\":[{\"contact\":{\"company_name\":\"Acme\",\"first_name\":\"Dock\",\"last_name\":\"Team\",\"phone\":\"+16124323789\"},\"location\":{\"country\":\"US\",\"line_1\":\"Cincinnati Museum Ctr\",\"locality\":\"Cincinnati\",\"postal_code\":\"45203\",\"region\":\"OH\"},\"requested_window\":{\"earliest\":\"2026-08-21T14:00:00Z\",\"latest\":\"2026-08-21T22:00:00Z\"},\"sequence_number\":1},{\"contact\":{\"company_name\":\"Beta\",\"first_name\":\"Receiving\",\"last_name\":\"Desk\",\"phone\":\"+17136864500\"},\"location\":{\"country\":\"US\",\"line_1\":\"4340 Directors Row\",\"locality\":\"Houston\",\"postal_code\":\"77092\",\"region\":\"TX\"},\"sequence_number\":2}]}},\"PublicRate\":{\"properties\":{\"id\":{\"type\":\"string\",\"title\":\"Id\",\"description\":\"The identifier to book with. Dispatch expects this value in its ``rate_id``.\"},\"resource_type\":{\"type\":\"string\",\"const\":\"rate\",\"title\":\"Resource Type\",\"default\":\"rate\"},\"self_link\":{\"type\":\"string\",\"title\":\"Self Link\"},\"carrier_rate_id\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Carrier Rate Id\",\"description\":\"The carrier's own identifier for the quote. Informational.\"},\"provider_code\":{\"$ref\":\"#/components/schemas/ProviderCode\"},\"carrier_name\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Carrier Name\"},\"capacity_provider\":{\"$ref\":\"#/components/schemas/PublicCapacityProviderAccount\"},\"transportation_mode\":{\"$ref\":\"#/components/schemas/TransportationMode\"},\"charges\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicCharges\"},{\"type\":\"null\"}],\"description\":\"The carrier's price, with no markup of any kind. Null on a failed attempt.\"},\"transit_time\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicTransitTime\"},{\"type\":\"null\"}]},\"distance\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/BaseRateDistance\"},{\"type\":\"null\"}]},\"service_code\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Service Code\"},\"service_options\":{\"anyOf\":[{\"additionalProperties\":true,\"type\":\"object\"},{\"type\":\"null\"}],\"title\":\"Service Options\"},\"origin_service_type\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Origin Service Type\",\"description\":\"Whether the carrier serves the origin terminal directly or through a partner.\"},\"destination_service_type\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Destination Service Type\",\"description\":\"Same, for the destination terminal.\"},\"equipment\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/CommonEquipment-Output\"},{\"type\":\"null\"}],\"description\":\"Echoed back from the request by the carriers that report it, null for the ones that do not.\"},\"accessorials\":{\"items\":{\"type\":\"string\"},\"type\":\"array\",\"title\":\"Accessorials\",\"description\":\"Accessorials the carrier applied to this rate. Free strings rather than the enum the request takes: these are the carrier's own codes, and normalising them would mean dropping the ones that do not map.\"},\"expiration_date\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}],\"title\":\"Expiration Date\",\"description\":\"The carrier's expiry. Null when the carrier reported none.\"},\"terms\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Terms\"},\"messages\":{\"items\":{\"$ref\":\"#/components/schemas/PublicRateMessage\"},\"type\":\"array\",\"title\":\"Messages\"},\"recommendations\":{\"items\":{\"$ref\":\"#/components/schemas/PublicRateRecommendation\"},\"type\":\"array\",\"title\":\"Recommendations\"},\"created_at\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}],\"title\":\"Created At\"}},\"type\":\"object\",\"required\":[\"id\",\"self_link\",\"provider_code\",\"capacity_provider\",\"transportation_mode\"],\"title\":\"PublicRate\",\"description\":\"One carrier attempt at one service level.\\n\\nAn entry without ``charges`` is a failed attempt and its reason is in ``messages``; there is\\nno separate flag, since a rate with no price is not bookable by definition.\"},\"PublicRateDispatchRequest\":{\"properties\":{\"references\":{\"items\":{\"$ref\":\"#/components/schemas/PublicDispatchReference\"},\"type\":\"array\",\"title\":\"References\",\"description\":\"Identifiers forwarded to the carrier and echoed back on the response. A public dispatch has no Shipwell shipment behind it, so Shipwell never generates a ``BOL_NUMBER`` for one: if the carrier needs one, supply it here.\"},\"notes_for_carrier\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Notes For Carrier\",\"description\":\"Free text the carrier sees on the tender.\"},\"rate_id\":{\"type\":\"string\",\"title\":\"Rate Id\",\"description\":\"The ``id`` of the rate to book, as returned by the rating API.\"},\"origin_contact\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicContact\"},{\"type\":\"null\"}],\"description\":\"Replaces the contact on the pickup stop the rate carries.\"},\"destination_contact\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicContact\"},{\"type\":\"null\"}],\"description\":\"Replaces the contact on the delivery stop the rate carries. Required when that contact lacks a ``company_name`` or ``phone``: the bill of lading names the consignee.\"},\"origin_planned_window\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicTimeWindow\"},{\"type\":\"null\"}],\"description\":\"Replaces the pickup window the rate carries, when it has since moved.\"},\"destination_planned_window\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicTimeWindow\"},{\"type\":\"null\"}],\"description\":\"Replaces the delivery window the rate carries.\"}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"rate_id\"],\"title\":\"PublicRateDispatchRequest\",\"description\":\"Book the carrier that produced a rate.\\n\\nEverything about the shipment — the carrier account, the mode, the stops, the freight, the\\nprice — comes from the rate and the rating request behind it. The four override fields exist\\nbecause the rate is a snapshot: rating stops routinely carry no contact, and carriers that\\nreject dates at rating time carry carrier-generated timestamps instead of the window the\\ncustomer asked for. So ``rate_id`` alone is a complete request only when the rating pickup\\ncontact has ``company_name``, ``first_name`` and ``phone`` and the delivery contact has\\n``company_name`` and ``phone``; otherwise send the override for the stop that falls short.\\nThe example sends both, which is the smallest request that always books.\\n\\nUse this shape whenever you already called Rating. If you have not rated this shipment, use\\n``PublicObjectDispatchRequest`` instead — sending ``rate_id`` is what selects this shape. See\\nthe ``create_dispatch_job`` operation description for the full field breakdown.\",\"example\":{\"destination_contact\":{\"company_name\":\"Beta Receiving\",\"email\":\"rec@beta.com\",\"first_name\":\"Receiving\",\"last_name\":\"Desk\",\"phone\":\"+17135554500\"},\"origin_contact\":{\"company_name\":\"Acme\",\"email\":\"dock@acme.com\",\"first_name\":\"Dock\",\"last_name\":\"Team\",\"phone\":\"+15125551234\"},\"rate_id\":\"01HZKD9M4TQ4Z8XW0NKZ6RYX4J\"}},\"PublicRateMessage\":{\"properties\":{\"type\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Type\",\"description\":\"The carrier's own category for the message, e.g. ``SERVICE_ERR``.\"},\"title\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Title\",\"description\":\"Short summary of the message.\"},\"status\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Status\",\"description\":\"The carrier's own severity or status marker for the message.\"},\"detail\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Detail\",\"description\":\"The full text, which is what to show a human.\"},\"source\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Source\",\"description\":\"Where it came from, usually the carrier and its own error code.\"}},\"type\":\"object\",\"title\":\"PublicRateMessage\",\"description\":\"Something the carrier said about this rate.\\n\\nOn an entry with no ``charges`` this is where the reason lives: the carrier declined, or the\\nattempt never reached it. The fields are the carrier's own words passed through, so their\\nexact values vary by carrier and none of them is a code to branch on.\"},\"PublicRateRecommendation\":{\"properties\":{\"code\":{\"type\":\"string\",\"title\":\"Code\"},\"message\":{\"type\":\"string\",\"title\":\"Message\"},\"recommendation\":{\"additionalProperties\":true,\"type\":\"object\",\"title\":\"Recommendation\",\"description\":\"Carrier-specific payload; its shape depends on ``code``.\"}},\"type\":\"object\",\"required\":[\"code\",\"message\"],\"title\":\"PublicRateRecommendation\",\"description\":\"A suggestion the carrier attached to the rate, such as a better pickup window.\"},\"PublicRateResponse\":{\"properties\":{\"data\":{\"$ref\":\"#/components/schemas/PublicRate\"}},\"type\":\"object\",\"required\":[\"data\"],\"title\":\"PublicRateResponse\",\"description\":\"A single rate, wrapped as a detail response.\"},\"PublicRatingEquipment\":{\"properties\":{\"equipment_type\":{\"type\":\"string\",\"const\":\"DRY_VAN\",\"title\":\"Equipment Type\",\"description\":\"Always ``DRY_VAN`` for LTL and VLTL.\"},\"temperature\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/TemperatureRange\"},{\"type\":\"null\"}],\"title\":\"Temperature\",\"description\":\"Temperature range at which the equipment needs to be kept at.\"}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"equipment_type\"],\"title\":\"PublicRatingEquipment\",\"description\":\"Equipment the freight needs. LTL and VLTL are quoted on a dry van, so ``DRY_VAN`` is the only\\naccepted ``equipment_type``; other types will open up with the modes that use them (FTL,\\nPARCEL).\"},\"PublicRatingRequest\":{\"properties\":{\"total_linear_feet\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicLinearDimension\"},{\"type\":\"null\"}],\"description\":\"Trailer floor space. What volume carriers quote VLTL on.\"},\"modes\":{\"items\":{\"type\":\"string\",\"enum\":[\"LTL\",\"VLTL\"]},\"type\":\"array\",\"minItems\":1,\"title\":\"Modes\",\"description\":\"Which transportation modes to request carrier quotes for. ``['LTL', 'VLTL']`` is the only meaningful combination: every LTL-capable carrier is rated as LTL and the VLTL allowlist carriers receive an additional volume pass.\"},\"stops\":{\"items\":{\"$ref\":\"#/components/schemas/PublicStop\"},\"type\":\"array\",\"minItems\":2,\"title\":\"Stops\"},\"handling_units\":{\"items\":{\"$ref\":\"#/components/schemas/PublicHandlingUnit\"},\"type\":\"array\",\"minItems\":1,\"title\":\"Handling Units\"},\"accessorials\":{\"items\":{\"$ref\":\"#/components/schemas/Accessorials\"},\"type\":\"array\",\"title\":\"Accessorials\",\"description\":\"Shipment-wide accessorials. Per-stop accessorials live on each stop.\"},\"equipment\":{\"items\":{\"$ref\":\"#/components/schemas/PublicRatingEquipment\"},\"type\":\"array\",\"minItems\":1,\"title\":\"Equipment\",\"description\":\"Required. LTL and VLTL freight moves in the carrier's standard enclosed dry van, so ``DRY_VAN`` is the only type they quote. Other types are kept for FTL and Parcel.\"},\"capacity_providers\":{\"items\":{\"$ref\":\"#/components/schemas/PublicCapacityProviderOption\"},\"type\":\"array\",\"title\":\"Capacity Providers\",\"description\":\"Empty means every account eligible for the tenant and mode.\"},\"gross_weight\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicWeight\"},{\"type\":\"null\"}]},\"total_declared_value\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicCurrencyAmount\"},{\"type\":\"null\"}]},\"references\":{\"items\":{\"$ref\":\"#/components/schemas/PublicReference\"},\"type\":\"array\",\"title\":\"References\",\"description\":\"Not persisted, but forwarded to the carriers.\"},\"customer_reference_number\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Customer Reference Number\"},\"preferred_currency\":{\"type\":\"string\",\"title\":\"Preferred Currency\",\"default\":\"USD\"}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"modes\",\"stops\",\"handling_units\",\"equipment\"],\"title\":\"PublicRatingRequest\",\"description\":\"A rating request as a consumer states it.\\n\\nOnly LTL and VLTL are enabled. Rating handles FTL and PARCEL internally and this schema\\ncould serve them; the parcel-only handling-unit fields are already written down in\\n``ParcelHandlingUnitFields``, waiting to be inherited. Enabling a mode is adding its member\\nto ``PublicTransportationMode``, adding back the rules the narrower type currently makes\\nunreachable (see ``validate_modes``), and inheriting that mode's field group.\\n\\n``equipment`` is deliberately not in a mode group. It reads as an FTL concern, but a real\\nLTL request carries it and the CloudTrucks adapter echoes it onto every rate it returns, so\\nit belongs to no single mode. It is narrowed to ``DRY_VAN`` in the type, like the modes, so\\nthe published spec lists the one value LTL and VLTL accept; widen it with the mode that\\nneeds more.\\n\\nThe example below is a real payload that returns usable quotes, not just the fields this\\nschema enforces, and carries both stop contacts so its rate dispatches with the smallest\\nrequest — start from it rather than from the bare minimum. See the ``create_rating_job``\\noperation description for which fields those are.\",\"example\":{\"accessorials\":[],\"capacity_providers\":[{\"provider_code\":\"RLC\"}],\"customer_reference_number\":\"PO-4417\",\"equipment\":[{\"equipment_type\":\"DRY_VAN\"}],\"gross_weight\":{\"unit\":\"LB\",\"value\":500},\"handling_units\":[{\"associated_stops\":[{\"reason\":\"LOAD\",\"stop\":{\"sequence_id\":1}},{\"reason\":\"UNLOAD\",\"stop\":{\"sequence_id\":2}}],\"description\":\"Palletized boxes\",\"dimensions\":{\"height\":{\"unit\":\"IN\",\"value\":50},\"length\":{\"unit\":\"IN\",\"value\":48},\"measurement_type\":\"DIMENSIONS\",\"unit\":\"IN\",\"width\":{\"unit\":\"IN\",\"value\":40}},\"freight_class\":\"70\",\"packaging_type\":\"PALLET\",\"quantity\":1,\"stackable\":false,\"weight\":{\"qualifier\":\"PER_ITEM\",\"unit\":\"LB\",\"value\":500}}],\"modes\":[\"LTL\",\"VLTL\"],\"preferred_currency\":\"USD\",\"stops\":[{\"accessorials\":[\"LIFTGATE_PICKUP\"],\"contact\":{\"company_name\":\"Acme\",\"email\":\"dock@acme.com\",\"first_name\":\"Dock\",\"last_name\":\"Team\",\"phone\":\"+15125551234\"},\"location\":{\"country\":\"US\",\"line_1\":\"515 Congress Ave\",\"locality\":\"Austin\",\"location_name\":\"Austin DC\",\"location_type\":\"BUSINESS_WITH_DOCK\",\"postal_code\":\"78701\",\"region\":\"TX\"},\"requested_window\":{\"earliest\":\"2026-09-29T14:00:00Z\",\"latest\":\"2026-09-29T22:00:00Z\"},\"sequence_number\":1},{\"accessorials\":[],\"contact\":{\"company_name\":\"Beta Receiving\",\"email\":\"rec@beta.com\",\"first_name\":\"Receiving\",\"last_name\":\"Desk\",\"phone\":\"+17135554500\"},\"location\":{\"country\":\"US\",\"line_1\":\"4340 Directors Row\",\"locality\":\"Houston\",\"postal_code\":\"77092\",\"region\":\"TX\"},\"sequence_number\":2}],\"total_declared_value\":{\"amount\":12000,\"currency\":\"USD\"},\"total_linear_feet\":{\"unit\":\"FT\",\"value\":18}}},\"PublicReference\":{\"properties\":{\"qualifier\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Qualifier\"},\"value\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Value\"}},\"additionalProperties\":false,\"type\":\"object\",\"title\":\"PublicReference\",\"description\":\"A caller's own identifier for the shipment, forwarded to the carriers.\"},\"PublicStop\":{\"properties\":{\"sequence_number\":{\"type\":\"integer\",\"minimum\":1,\"title\":\"Sequence Number\",\"description\":\"Order in which the stops are completed, starting at 1.\"},\"location\":{\"$ref\":\"#/components/schemas/PublicLocation\"},\"requested_window\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicTimeWindow\"},{\"type\":\"null\"}]},\"appointment\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicAppointment\"},{\"type\":\"null\"}]},\"contact\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicContact\"},{\"type\":\"null\"}],\"description\":\"Required to dispatch parcel later, even though rating tolerates its absence.\"},\"accessorials\":{\"items\":{\"$ref\":\"#/components/schemas/Accessorials\"},\"type\":\"array\",\"title\":\"Accessorials\"}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"sequence_number\",\"location\"],\"title\":\"PublicStop\",\"description\":\"A place the freight is picked up from or delivered to.\\n\\nA request needs at least two, and the lowest-sequence one is the pickup: it is the stop whose\\n``requested_window`` the carriers rate against, and the only one where that window is required.\"},\"PublicStopAssignment\":{\"properties\":{\"stop\":{\"$ref\":\"#/components/schemas/PublicStopSequence\"},\"reason\":{\"$ref\":\"#/components/schemas/StopReason\"}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"stop\",\"reason\"],\"title\":\"PublicStopAssignment\",\"description\":\"What happens to a handling unit at one stop: it is loaded there, or unloaded.\"},\"PublicStopSequence\":{\"properties\":{\"sequence_id\":{\"type\":\"integer\",\"title\":\"Sequence Id\",\"description\":\"Matches the ``sequence_number`` of one of the stops on the request.\"}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"sequence_id\"],\"title\":\"PublicStopSequence\",\"description\":\"A reference to a stop by its position in ``stops``.\"},\"PublicTimeWindow\":{\"properties\":{\"earliest\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}],\"title\":\"Earliest\"},\"latest\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}],\"title\":\"Latest\"}},\"additionalProperties\":false,\"type\":\"object\",\"title\":\"PublicTimeWindow\",\"description\":\"A span between two instants. ``earliest`` cannot be after ``latest``.\"},\"PublicTrackingEvent\":{\"properties\":{\"id\":{\"type\":\"string\",\"title\":\"Id\",\"description\":\"The same movement keeps the same id on every read.\"},\"occurred_at\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}],\"title\":\"Occurred At\",\"description\":\"When the carrier says the movement happened, in the carrier's own words. Null when the carrier reported the movement without a readable time, which is a fact about the report rather than a gap -- the event still counts and still carries a state.\"},\"recorded_at\":{\"type\":\"string\",\"format\":\"date-time\",\"title\":\"Recorded At\",\"description\":\"When Genesis accepted the carrier response that first reported this movement.\"},\"description\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Description\",\"description\":\"The carrier's own prose for this movement.\"},\"carrier_status_code\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Carrier Status Code\",\"description\":\"The carrier's own status code, verbatim and un-normalised.\"},\"shipment_state\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"QUOTE_ACCEPTED\",\"CANCELLED\",\"DISPATCHED\",\"TENDERED\",\"CARRIER_CONFIRMED\",\"AT_PICKUP\",\"IN_TRANSIT\",\"AT_DELIVERY\",\"DELIVERED\",\"EXCEPTION\"]},{\"type\":\"null\"}],\"title\":\"Shipment State\",\"description\":\"What this carrier code means for the shipment's state. Null when the code moves no state, and null is a fact rather than a gap: a carrier reporting a delay or a note has reported something real that does not move the freight.\"},\"provider_code\":{\"$ref\":\"#/components/schemas/ProviderCode\",\"description\":\"Which carrier integration reported this movement.\"},\"location\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicTrackingLocation\"},{\"type\":\"null\"}],\"description\":\"The place the carrier named for this movement. Null when it named none.\"},\"latitude\":{\"anyOf\":[{\"type\":\"number\"},{\"type\":\"null\"}],\"title\":\"Latitude\",\"description\":\"Present only when the carrier sent a point of its own. Both coordinates are present or neither is, and neither is ever a geocoded approximation of ``location``.\"},\"longitude\":{\"anyOf\":[{\"type\":\"number\"},{\"type\":\"null\"}],\"title\":\"Longitude\",\"description\":\"See ``latitude``: present only with it.\"}},\"type\":\"object\",\"required\":[\"id\",\"recorded_at\",\"provider_code\"],\"title\":\"PublicTrackingEvent\",\"description\":\"One movement the carrier reported, as the carrier reported it.\\n\\nThe codes and the prose are the carrier's own and are published verbatim; ``shipment_state``\\nis the only derived field, and it is derived at read time rather than stored, so correcting\\nwhat a carrier's code means reaches history already recorded.\\n\\nAn event has an ``id`` and no ``self_link``: an observation is not addressable on its own.\"},\"PublicTrackingLocation\":{\"properties\":{\"city\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"City\",\"description\":\"The city, as the carrier spelled it.\"},\"state\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"State\",\"description\":\"The state or province code, as the carrier spelled it.\"},\"postal_code\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Postal Code\",\"description\":\"The postal code, as the carrier spelled it.\"},\"country\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Country\",\"description\":\"ISO 3166-1 alpha-2, inferred from ``state`` rather than reported: carriers send a state code and no country, so this is Shipwell's reading of the place, not the carrier's own word for it.\"}},\"type\":\"object\",\"title\":\"PublicTrackingLocation\",\"description\":\"The place the carrier named on a movement.\\n\\nFor most carriers this is the only geolocation in the document: a carrier that reports a city\\nand a state on every scan and a coordinate on none would otherwise render as a list of\\ndescriptions with nowhere attached. Every member is nullable on its own -- a carrier can name\\na city with no postal code -- and the whole object is null when the carrier named no place at\\nall.\"},\"PublicTransitTime\":{\"properties\":{\"transit_days\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"null\"}],\"title\":\"Transit Days\",\"description\":\"Days in transit, as quoted. Null when the carrier did not say.\"}},\"type\":\"object\",\"title\":\"PublicTransitTime\",\"description\":\"How long the carrier says the move takes.\"},\"PublicVolumetricMeasurement\":{\"properties\":{\"measurement_type\":{\"type\":\"string\",\"const\":\"VOLUME\",\"title\":\"Measurement Type\",\"description\":\"Selects the single total-volume shape of ``dimensions``.\"},\"unit\":{\"$ref\":\"#/components/schemas/VolumeUnit\",\"default\":\"CUBIC_FT\"},\"value\":{\"type\":\"number\",\"title\":\"Value\"}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"measurement_type\",\"value\"],\"title\":\"PublicVolumetricMeasurement\",\"description\":\"Dimensions given as a single total volume, for freight that is not a neat box.\"},\"PublicWeight\":{\"properties\":{\"unit\":{\"$ref\":\"#/components/schemas/WeightUnit\",\"default\":\"LB\"},\"value\":{\"type\":\"number\",\"title\":\"Value\",\"description\":\"value associated with the weight unit of handling units, packages, or items.\",\"example\":23000.13}},\"additionalProperties\":false,\"type\":\"object\",\"required\":[\"value\"],\"title\":\"PublicWeight\",\"description\":\"A weight, with its unit.\"},\"RateStatus\":{\"type\":\"string\",\"enum\":[\"CREATED\",\"PROCESSING\",\"ERRORED\",\"SUCCEEDED\",\"CANCELLED\",\"EXPIRED\",\"REVOKED\",\"COMPLETED\"],\"title\":\"RateStatus\"},\"RatingJobResponse\":{\"properties\":{\"data\":{\"$ref\":\"#/components/schemas/RatingJobResult\"}},\"type\":\"object\",\"required\":[\"data\"],\"title\":\"RatingJobResponse\",\"description\":\"A rating job, wrapped as a detail response.\"},\"RatingJobResult\":{\"properties\":{\"id\":{\"type\":\"string\",\"title\":\"Id\"},\"resource_type\":{\"type\":\"string\",\"const\":\"rating_job\",\"title\":\"Resource Type\",\"default\":\"rating_job\"},\"self_link\":{\"type\":\"string\",\"title\":\"Self Link\"},\"status\":{\"$ref\":\"#/components/schemas/RateStatus\"},\"is_terminal\":{\"type\":\"boolean\",\"title\":\"Is Terminal\",\"description\":\"Stop polling when true.\"},\"created_at\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}],\"title\":\"Created At\"},\"rates\":{\"anyOf\":[{\"items\":{\"$ref\":\"#/components/schemas/PublicRate\"},\"type\":\"array\"},{\"type\":\"null\"}],\"title\":\"Rates\",\"description\":\"Quotes and failed attempts alike, one entry per carrier attempt and service level. Null means the field was not expanded: ask for it with ``?include=rates``.\"}},\"type\":\"object\",\"required\":[\"id\",\"self_link\",\"status\",\"is_terminal\"],\"title\":\"RatingJobResult\",\"description\":\"A rating job: whether it has finished, and — once expanded — what the carriers answered.\\n\\nPolling is the only completion signal. Every job reaches a terminal status within roughly\\n``rating_task_min_age_minutes`` (30 by default), because carrier attempts left processing\\nlonger than that are finalized as errored by the stale-task reaper.\",\"example\":{\"created_at\":\"2026-08-19T15:30:32.591Z\",\"id\":\"01HZKD8QKZQ8Z7XV9MKZ5QXW3H\",\"is_terminal\":false,\"resource_type\":\"rating_job\",\"self_link\":\"https://api.shipwell.com/rating/jobs/01HZKD8QKZQ8Z7XV9MKZ5QXW3H\",\"status\":\"PROCESSING\"}},\"ShipwellApiError\":{\"description\":\"Information about an error that occurred\",\"properties\":{\"title\":{\"description\":\"Human readable description of what went wrong, can be localized (example: 'Validation Error')\",\"title\":\"Title\",\"type\":\"string\"},\"status\":{\"description\":\"HTTP Status code describing the problem (example: '503' or '400')\",\"title\":\"Status\",\"type\":\"string\"},\"code\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"default\":null,\"description\":\"Similar to 'title' in describing the general error but in machine-readable form (example: 'validation_error')\",\"title\":\"Code\"},\"detail\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"default\":null,\"description\":\"Human readable description specific to this occurrence, can be localized (example: 'Start time cannot be after end time')\",\"title\":\"Detail\"},\"source\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/ShipwellApiErrorSource\"},{\"type\":\"null\"}],\"default\":null,\"description\":\"Which part of the request the error occurred\"},\"meta\":{\"anyOf\":[{},{\"type\":\"null\"}],\"default\":null,\"description\":\"Contains non-standard meta-information about the error\",\"title\":\"Meta\"}},\"required\":[\"title\",\"status\"],\"title\":\"ShipwellApiError\",\"type\":\"object\"},\"ShipwellApiErrorResponse\":{\"properties\":{\"errors\":{\"description\":\"What went wrong in the request\",\"items\":{\"$ref\":\"#/components/schemas/ShipwellApiError\"},\"title\":\"Errors\",\"type\":\"array\"}},\"required\":[\"errors\"],\"title\":\"ShipwellApiErrorResponse\",\"type\":\"object\"},\"ShipwellApiErrorSource\":{\"description\":\"The source of the error in the request, either in the request body or a query/form parameter.\\nIf both \\\"parameter\\\" and \\\"pointer\\\" are non-null, then there is an error inside the json-parsed value of the \\\"parameter\\\".\",\"properties\":{\"parameter\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"default\":null,\"description\":\"Which query parameter caused the issue, such as an invalid page size\",\"title\":\"Parameter\"},\"pointer\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"default\":null,\"description\":\"Which part of the request body caused the error, expressed as a JSON Pointer([RFC6901](https://tools.ietf.org/html/rfc6901)) (examples - '/' for the primary data object or '/attributes/title' to indicate a problem with the 'title' field)\",\"title\":\"Pointer\"}},\"title\":\"ShipwellApiErrorSource\",\"type\":\"object\"},\"StopReason\":{\"type\":\"string\",\"enum\":[\"LOAD\",\"UNLOAD\"],\"title\":\"StopReason\"},\"TemperatureRange\":{\"properties\":{\"unit\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/TemperatureUnit\"},{\"type\":\"null\"}]},\"minimum\":{\"anyOf\":[{\"type\":\"number\"},{\"type\":\"null\"}],\"title\":\"Minimum\",\"example\":32.32},\"maximum\":{\"anyOf\":[{\"type\":\"number\"},{\"type\":\"null\"}],\"title\":\"Maximum\",\"example\":212.212}},\"type\":\"object\",\"title\":\"TemperatureRange\"},\"TemperatureUnit\":{\"type\":\"string\",\"enum\":[\"CELSIUS\",\"FAHRENHEIT\"],\"title\":\"TemperatureUnit\"},\"TrackingResponse\":{\"properties\":{\"data\":{\"$ref\":\"#/components/schemas/TrackingResult\"}},\"type\":\"object\",\"required\":[\"data\"],\"title\":\"TrackingResponse\",\"description\":\"A resource's tracking document, wrapped as a detail response.\"},\"TrackingResult\":{\"properties\":{\"resource_id\":{\"type\":\"string\",\"title\":\"Resource Id\"},\"resource_type\":{\"type\":\"string\",\"const\":\"tracking\",\"title\":\"Resource Type\",\"default\":\"tracking\"},\"self_link\":{\"type\":\"string\",\"title\":\"Self Link\"},\"tracking_status\":{\"type\":\"string\",\"enum\":[\"NOT_TRACKED\",\"PENDING\",\"TRACKING\",\"COMPLETED\",\"CANCELLED\",\"EXPIRED\",\"ERRORED\"],\"title\":\"Tracking Status\",\"description\":\"Whether Genesis is watching this resource.\\n\\n- ``NOT_TRACKED``: nothing is watching it. Covers three cases a consumer meets in practice: a dispatch whose carrier has not confirmed yet, a ``resource_id`` that was never issued, and one belonging to somebody else. While the dispatch that issued this id is still waiting on its carrier it comes with ``is_terminal: false``, so keep polling until ``is_terminal`` is true.\\n- ``PENDING``: tracking is set up and waits for the pickup date before asking the carrier. Keep polling.\\n- ``TRACKING``: the carrier is being asked for movements. Keep polling.\\n- ``COMPLETED``: tracking finished.\\n- ``CANCELLED``: tracking was cancelled.\\n- ``EXPIRED``: tracking aged out before the shipment reached a final state.\\n- ``ERRORED``: tracking failed and will not be retried.\\n\"},\"is_terminal\":{\"type\":\"boolean\",\"title\":\"Is Terminal\",\"description\":\"Stop polling when true.\"},\"current_state\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"QUOTE_ACCEPTED\",\"CANCELLED\",\"DISPATCHED\",\"TENDERED\",\"CARRIER_CONFIRMED\",\"AT_PICKUP\",\"IN_TRANSIT\",\"AT_DELIVERY\",\"DELIVERED\",\"EXCEPTION\"]},{\"type\":\"null\"}],\"title\":\"Current State\",\"description\":\"Where the freight is, derived from the whole timeline rather than from the page returned, so a paginated read never disagrees with an unpaginated one. Null when no movement so far means anything for the shipment's state.\"},\"current_state_at\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}],\"title\":\"Current State At\",\"description\":\"The carrier's own time for the movement that set ``current_state``. Null when that movement carried no readable time, so it is not a substitute for ``current_state`` being present.\"},\"provider_code\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/ProviderCode\"},{\"type\":\"null\"}],\"description\":\"Which carrier integration is watching this resource. Null when none is.\"},\"carrier_name\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Carrier Name\",\"description\":\"The carrier behind that integration, by its display name.\"},\"carrier_scac\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Carrier Scac\",\"description\":\"The carrier's Standard Carrier Alpha Code, when Shipwell knows one for this integration. Null is common and says nothing about the carrier: several integrations Shipwell tracks through have no SCAC recorded, and a broker's own code would name the broker rather than whoever is hauling the freight.\"},\"tracking_reference_kind\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"PRO_NUMBER\",\"BOL_NUMBER\",\"PICKUP_NUMBER\"]},{\"type\":\"null\"}],\"title\":\"Tracking Reference Kind\",\"description\":\"Which of the shipment's references Genesis is currently asking the carrier about. It can change over a shipment's life: a carrier that does not yet know a PRO is asked by bill of lading until it does, so a timeline that went quiet and a reference that changed are two different things a consumer can now tell apart. Null until Genesis has chosen one.\"},\"tracking_reference\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Tracking Reference\",\"description\":\"The value of that reference, as sent to the carrier. The same identifier the dispatch job document carries in ``references``, repeated here so a support question about a quiet timeline can be answered from one response.\"},\"events\":{\"items\":{\"$ref\":\"#/components/schemas/PublicTrackingEvent\"},\"type\":\"array\",\"title\":\"Events\",\"description\":\"Oldest first. Empty is an ordinary answer -- see ``tracking_status``.\"},\"next_cursor\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Next Cursor\",\"description\":\"Pass back unchanged as ``cursor`` to read the next page. Null when the timeline is complete, which is the ordinary case: a timeline is normally tens of movements.\"}},\"type\":\"object\",\"required\":[\"resource_id\",\"self_link\",\"tracking_status\",\"is_terminal\"],\"title\":\"TrackingResult\",\"description\":\"Where one resource's freight is, and every movement its carrier reported.\\n\\nTwo questions, answered by two fields that must not be read as one.\\n``tracking_status`` says whether Genesis is watching this resource at all; ``current_state``\\nsays where the freight is. An empty ``events`` list therefore has two readings and the pair\\ntells them apart: ``TRACKING`` with no events means Genesis is watching and the carrier has\\nsaid nothing yet, while ``NOT_TRACKED`` means Genesis never watched this resource.\\n\\nPolling is the completion signal, the same as every other public surface here: stop on\\n``is_terminal`` and on nothing else.\",\"example\":{\"carrier_name\":\"R+L Carriers\",\"carrier_scac\":\"RLCA\",\"current_state\":\"IN_TRANSIT\",\"current_state_at\":\"2026-08-21T22:14:00Z\",\"events\":[{\"carrier_status_code\":\"PKP\",\"description\":\"Shipment picked up\",\"id\":\"01KBZD4Q6W0000000000000001\",\"latitude\":35.22709,\"location\":{\"city\":\"CHARLOTTE\",\"country\":\"US\",\"postal_code\":\"28202\",\"state\":\"NC\"},\"longitude\":-80.84313,\"occurred_at\":\"2026-08-20T14:05:00Z\",\"provider_code\":\"RLC\",\"recorded_at\":\"2026-08-20T14:31:02.118Z\",\"shipment_state\":\"AT_PICKUP\"},{\"carrier_status_code\":\"DEP\",\"description\":\"Departed GREENSBORO, NC in route to destination terminal\",\"id\":\"01KBZD4Q6W0000000000000002\",\"location\":{\"city\":\"GREENSBORO\",\"country\":\"US\",\"state\":\"NC\"},\"occurred_at\":\"2026-08-21T22:14:00Z\",\"provider_code\":\"RLC\",\"recorded_at\":\"2026-08-21T22:47:19.004Z\",\"shipment_state\":\"IN_TRANSIT\"},{\"carrier_status_code\":\"WTR\",\"description\":\"Delayed by weather\",\"id\":\"01KBZD4Q6W0000000000000003\",\"provider_code\":\"RLC\",\"recorded_at\":\"2026-08-22T09:12:44.005Z\"}],\"is_terminal\":false,\"provider_code\":\"RLC\",\"resource_id\":\"9f2c1b84-6d3a-4c17-9b0e-2f5a7c48d31e\",\"resource_type\":\"tracking\",\"self_link\":\"https://api.shipwell.com/tracking/timelines/9f2c1b84-6d3a-4c17-9b0e-2f5a7c48d31e\",\"tracking_reference\":\"123456789\",\"tracking_reference_kind\":\"PRO_NUMBER\",\"tracking_status\":\"TRACKING\"}},\"TrackingWebhookTestResponse\":{\"properties\":{\"data\":{\"$ref\":\"#/components/schemas/TrackingWebhookTestResult\"}},\"type\":\"object\",\"required\":[\"data\"],\"title\":\"TrackingWebhookTestResponse\"},\"TrackingWebhookTestResult\":{\"properties\":{\"delivered\":{\"type\":\"boolean\",\"title\":\"Delivered\",\"description\":\"True when your endpoint answered 2xx.\"},\"response_code\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"null\"}],\"title\":\"Response Code\",\"description\":\"Your endpoint's HTTP status, or null if it never answered.\"},\"error\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"title\":\"Error\",\"description\":\"Why the delivery did not succeed.\"},\"latency_ms\":{\"anyOf\":[{\"type\":\"number\"},{\"type\":\"null\"}],\"title\":\"Latency Ms\",\"description\":\"How long your endpoint took to answer.\"}},\"type\":\"object\",\"required\":[\"delivered\"],\"title\":\"TrackingWebhookTestResult\"},\"TransportationMode\":{\"type\":\"string\",\"enum\":[\"DRAYAGE\",\"FTL\",\"GTD\",\"GTE\",\"LTL\",\"VLTL\",\"PARCEL\",\"RAIL\"],\"title\":\"TransportationMode\"},\"VolumeUnit\":{\"type\":\"string\",\"enum\":[\"CUBIC_FT\",\"CUBIC_M\"],\"title\":\"VolumeUnit\"},\"WeightQualifier\":{\"type\":\"string\",\"enum\":[\"PER_ITEM\",\"GROSS\"],\"title\":\"WeightQualifier\"},\"WeightUnit\":{\"type\":\"string\",\"enum\":[\"KG\",\"LB\",\"OZ\",\"TON\"],\"title\":\"WeightUnit\"},\"TrackingUpdatedDetails\":{\"properties\":{\"resource_id\":{\"title\":\"Resource Id\",\"type\":\"string\"},\"tracking\":{\"$ref\":\"#/components/schemas/TrackingResult\",\"description\":\"Exactly the data of GET /tracking/timelines/{resource_id}.\"}},\"required\":[\"resource_id\",\"tracking\"],\"title\":\"TrackingUpdatedDetails\",\"type\":\"object\"},\"TrackingWebhookSource\":{\"properties\":{\"publishing_system\":{\"const\":\"genesis\",\"default\":\"genesis\",\"title\":\"Publishing System\",\"type\":\"string\"},\"company_id\":{\"description\":\"Your company id; every event is scoped to it.\",\"title\":\"Company Id\",\"type\":\"string\"},\"environment\":{\"description\":\"e.g. production, sandbox.\",\"title\":\"Environment\",\"type\":\"string\"}},\"required\":[\"company_id\",\"environment\"],\"title\":\"TrackingWebhookSource\",\"type\":\"object\"},\"TrackingUpdatedEvent\":{\"properties\":{\"id\":{\"description\":\"Event id, identical on every retry: use it to ignore duplicates.\",\"title\":\"Id\",\"type\":\"string\"},\"occurred_at\":{\"format\":\"date-time\",\"title\":\"Occurred At\",\"type\":\"string\"},\"webhook_id\":{\"description\":\"The subscription this delivery is for.\",\"title\":\"Webhook Id\",\"type\":\"string\"},\"source\":{\"$ref\":\"#/components/schemas/TrackingWebhookSource\"},\"custom_data\":{\"anyOf\":[{\"additionalProperties\":true,\"type\":\"object\"},{\"type\":\"null\"}],\"default\":null,\"description\":\"Echoed from the subscription.\",\"title\":\"Custom Data\"},\"event_name\":{\"const\":\"tracking.updated\",\"title\":\"Event Name\",\"type\":\"string\"},\"sequence\":{\"description\":\"Strictly increasing per ``resource_id``. Deliveries can arrive out of order; keep the highest sequence you have applied and ignore anything lower.\",\"title\":\"Sequence\",\"type\":\"integer\"},\"details\":{\"$ref\":\"#/components/schemas/TrackingUpdatedDetails\"}},\"required\":[\"id\",\"occurred_at\",\"webhook_id\",\"source\",\"event_name\",\"sequence\",\"details\"],\"title\":\"TrackingUpdatedEvent\",\"type\":\"object\"},\"TrackingWebhookTestDetails\":{\"properties\":{\"message\":{\"title\":\"Message\",\"type\":\"string\"}},\"required\":[\"message\"],\"title\":\"TrackingWebhookTestDetails\",\"type\":\"object\"},\"DocumentsUpdatedDetails\":{\"properties\":{\"resource_id\":{\"title\":\"Resource Id\",\"type\":\"string\"},\"documents\":{\"$ref\":\"#/components/schemas/DocumentCollectionSummary\",\"description\":\"The shipment's document collection, the documents and statuses GET /documents/{resource_id} would return, in the webhook's own shape (DocumentCollectionSummary). Files never carry content inline, `content` can be null, and each document adds `base64_link`, so do not validate it with the GET response schema.\"}},\"required\":[\"resource_id\",\"documents\"],\"title\":\"DocumentsUpdatedDetails\",\"type\":\"object\"},\"DocumentsUpdatedEvent\":{\"properties\":{\"id\":{\"description\":\"Event id, identical on every retry: use it to ignore duplicates.\",\"title\":\"Id\",\"type\":\"string\"},\"occurred_at\":{\"format\":\"date-time\",\"title\":\"Occurred At\",\"type\":\"string\"},\"webhook_id\":{\"description\":\"The subscription this delivery is for.\",\"title\":\"Webhook Id\",\"type\":\"string\"},\"source\":{\"$ref\":\"#/components/schemas/TrackingWebhookSource\"},\"custom_data\":{\"anyOf\":[{\"additionalProperties\":true,\"type\":\"object\"},{\"type\":\"null\"}],\"default\":null,\"description\":\"Echoed from the subscription.\",\"title\":\"Custom Data\"},\"event_name\":{\"const\":\"documents.updated\",\"title\":\"Event Name\",\"type\":\"string\"},\"sequence\":{\"description\":\"Strictly increasing per ``resource_id`` for this event, independent of ``tracking.updated``'s. Keep the highest you have applied and ignore anything lower.\",\"title\":\"Sequence\",\"type\":\"integer\"},\"details\":{\"$ref\":\"#/components/schemas/DocumentsUpdatedDetails\"}},\"required\":[\"id\",\"occurred_at\",\"webhook_id\",\"source\",\"event_name\",\"sequence\",\"details\"],\"title\":\"DocumentsUpdatedEvent\",\"type\":\"object\"},\"TrackingWebhookTestEvent\":{\"properties\":{\"id\":{\"description\":\"Event id, new for every test: a test is sent once, never retried.\",\"title\":\"Id\",\"type\":\"string\"},\"occurred_at\":{\"format\":\"date-time\",\"title\":\"Occurred At\",\"type\":\"string\"},\"webhook_id\":{\"description\":\"The subscription this delivery is for.\",\"title\":\"Webhook Id\",\"type\":\"string\"},\"source\":{\"$ref\":\"#/components/schemas/TrackingWebhookSource\"},\"custom_data\":{\"anyOf\":[{\"additionalProperties\":true,\"type\":\"object\"},{\"type\":\"null\"}],\"default\":null,\"description\":\"Echoed from the subscription.\",\"title\":\"Custom Data\"},\"event_name\":{\"const\":\"tracking.webhook.test\",\"title\":\"Event Name\",\"type\":\"string\"},\"sequence\":{\"const\":0,\"default\":0,\"description\":\"Always 0: a test belongs to no shipment.\",\"title\":\"Sequence\",\"type\":\"integer\"},\"details\":{\"$ref\":\"#/components/schemas/TrackingWebhookTestDetails\"}},\"required\":[\"id\",\"occurred_at\",\"webhook_id\",\"source\",\"event_name\",\"details\"],\"title\":\"TrackingWebhookTestEvent\",\"type\":\"object\"},\"DocumentFileSummary\":{\"description\":\"One file of a document.\",\"properties\":{\"id\":{\"title\":\"Id\",\"type\":\"string\"},\"format\":{\"enum\":[\"PNG\",\"PDF\",\"TIF\",\"JPEG\"],\"title\":\"Format\",\"type\":\"string\"},\"filename\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"default\":null,\"title\":\"Filename\"},\"size_in_bytes\":{\"title\":\"Size In Bytes\",\"type\":\"integer\"},\"content\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/PublicFileContent\"},{\"type\":\"null\"}],\"default\":null,\"description\":\"``content.url`` is a download link set when this delivery was sent: a Shipwell link valid for about 10 minutes, or the carrier's own link, which expires on the carrier's schedule. Download it right away. Null when no link is available, such as a file Shipwell holds only inline; use the document's ``base64_link`` then.\"}},\"required\":[\"id\",\"format\",\"size_in_bytes\"],\"title\":\"DocumentFileSummary\",\"type\":\"object\"},\"DocumentSummary\":{\"description\":\"A document as a ``documents.updated`` webhook describes it: everything but file content.\\n\\n``self_link`` is ``GET /documents/{resource_id}/{document_type}``, which returns the files as\\na fresh link or, with ``?encoding=base64``, inline.\",\"properties\":{\"id\":{\"title\":\"Id\",\"type\":\"string\"},\"resource_type\":{\"const\":\"document\",\"default\":\"document\",\"title\":\"Resource Type\",\"type\":\"string\"},\"document_type\":{\"title\":\"Document Type\",\"type\":\"string\"},\"name\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"default\":null,\"title\":\"Name\"},\"status\":{\"enum\":[\"CREATED\",\"PROCESSING\",\"ERRORED\",\"COMPLETED\"],\"title\":\"Status\",\"type\":\"string\"},\"completed_at\":{\"anyOf\":[{\"format\":\"date-time\",\"type\":\"string\"},{\"type\":\"null\"}],\"default\":null,\"title\":\"Completed At\"},\"self_link\":{\"title\":\"Self Link\",\"type\":\"string\"},\"base64_link\":{\"description\":\"``self_link`` with ``?encoding=base64``: call it with your API key to receive the files inline as base64. It returns every document of this ``document_type``, so pick the one whose ``id`` matches. Use it when you cannot use the download links or your endpoint should not receive file content. A file over the inline size limit (50 MB) comes back with ``too_large_for_inline: true`` and a link instead.\",\"title\":\"Base64 Link\",\"type\":\"string\"},\"files\":{\"items\":{\"$ref\":\"#/components/schemas/DocumentFileSummary\"},\"title\":\"Files\",\"type\":\"array\"}},\"required\":[\"id\",\"document_type\",\"status\",\"self_link\",\"base64_link\"],\"title\":\"DocumentSummary\",\"type\":\"object\"},\"DocumentCollectionSummary\":{\"description\":\"The ``GET /documents/{resource_id}`` collection without file content, as carried by the\\n``documents.updated`` webhook (TITAN-7962).\\n\\nNo content is stored with the event: a presigned URL expires in minutes while a delivery may\\nbe retried for two days, and inline base64 would make every stored event as large as its\\nfiles. Each file's ``content.url`` is added fresh when each delivery attempt is sent.\",\"properties\":{\"resource_id\":{\"title\":\"Resource Id\",\"type\":\"string\"},\"resource_type\":{\"const\":\"document_collection\",\"default\":\"document_collection\",\"title\":\"Resource Type\",\"type\":\"string\"},\"self_link\":{\"title\":\"Self Link\",\"type\":\"string\"},\"status\":{\"enum\":[\"PROCESSING\",\"COMPLETED\",\"ERRORED\"],\"title\":\"Status\",\"type\":\"string\"},\"is_terminal\":{\"title\":\"Is Terminal\",\"type\":\"boolean\"},\"documents\":{\"items\":{\"$ref\":\"#/components/schemas/DocumentSummary\"},\"title\":\"Documents\",\"type\":\"array\"},\"errors\":{\"items\":{\"$ref\":\"#/components/schemas/PublicDocumentError\"},\"title\":\"Errors\",\"type\":\"array\"}},\"required\":[\"resource_id\",\"self_link\",\"status\",\"is_terminal\"],\"title\":\"DocumentCollectionSummary\",\"type\":\"object\"}},\"securitySchemes\":{\"APIKeyHeader\":{\"type\":\"apiKey\",\"in\":\"header\",\"name\":\"Authorization\",\"description\":\"Your API key identifies your company. Every resource this API reads or writes — a dispatch's `account_id`, a rating job, a dispatch job — is scoped to that company: naming one that belongs to a different company answers the same as one that does not exist (404 on rating, dispatching and documents, 200 with `tracking_status: NOT_TRACKED` on tracking).\"}}}}},\"options\":{\"hideTryItPanel\":false,\"pagination\":\"item\",\"corsProxyUrl\":\"https://cors.redoc.ly\",\"expandResponses\":\"200,201\",\"generateCodeSamples\":{\"languages\":[{\"lang\":\"curl\"},{\"lang\":\"Node.js\"},{\"lang\":\"JavaScript\"},{\"lang\":\"Python\"},{\"lang\":\"Java\"}]},\"disableSearch\":true,\"ctrlFHijack\":false,\"disableSidebar\":true,\"theme\":{\"overrides\":{\"DownloadButton\":{\"custom\":\"\"},\"NextSectionButton\":{\"custom\":\"\"}},\"codeBlock\":{\"tokens\":{}},\"schema\":{\"constraints\":{},\"examples\":{}},\"rightPanel\":{\"textColor\":\"#eeeeee\"},\"typography\":{\"heading1\":{},\"heading2\":{},\"heading3\":{},\"rightPanelHeading\":{}}}}}","redocHasSecurityDefinitions":false,"redocInfoPageLink":"/openapi_pages/carrier-connections/overview/","redocItemId":"tag/Dispatching/operation/get_dispatch_job","redocHasInfoPage":false,"settings":{"corsProxyUrl":"https://cors.redoc.ly","pagination":"item","expandResponses":"200,201","generateCodeSamples":{"languages":[{"lang":"curl"},{"lang":"Node.js"},{"lang":"JavaScript"},{"lang":"Python"},{"lang":"Java"}]}},"requestLogin":false,"lastModified":"2026-10-03T23:48:23.000Z"},"seo":{"title":"Read a dispatch job and the carrier's answer."}}},"pageContext":{"id":"f3c5f816-1652-5605-92ab-14622288b4d4operation/get_dispatch_job__redocly content/openapi_pages/carrier-connections/operation/get_dispatch_job/","seo":{"title":"Read a dispatch job and the carrier's answer.","description":"Poll this until ``is_terminal`` is true.\n\n``COMPLETED`` means the carrier confirmed, and the pickup and PRO numbers are in\n``references``. ``ERRORED`` means it refused, and said why in ``errors``. ``EXPIRED`` means it\nnever answered at all — the tender may still have reached it, so confirm before dispatching\nthe same freight again.","image":"","keywords":null,"jsonLd":null,"lang":null,"siteUrl":null},"pageId":"openapi_pages/carrier-connections.page.yaml#operation/get_dispatch_job","pageBaseUrl":"/openapi_pages/carrier-connections","type":"redoc-operation","toc":{"enable":true,"maxDepth":4,"headings":null},"data":{},"catalogInfo":null,"link":"/openapi_pages/carrier-connections/operation/get_dispatch_job/","sidebarName":"developerPortal","isLanding":false,"showPrevButton":null,"showNextButton":null,"apiVersions":[{"definitionId":"carrier-connections","id":"carrier-connections","title":"carrier-connections","isDefault":true,"apiId":null}],"apiVersionId":null,"isDefaultApiVersion":true}},"staticQueryHashes":["1123603147","1302185487","1344209882","1398840060","1520077861","1975142765","2667623876","2950305614","3240152602","3743992808","561138138"]}