{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Troubleshooting"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"troubleshooting","__idx":0},"children":["Troubleshooting"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Applies to last-mile."]}," Start from the symptom. Each table says which integration route it applies to. The same symptom has a different cause on each."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Fulfilment symptoms are not covered here yet. Send those to ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"mailto:apisupport@quiqup.com"},"children":["apisupport@quiqup.com"]}," with the request, the response and a UTC timestamp."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"my-orders-are-not-reaching-quiqup","__idx":1},"children":["My orders are not reaching Quiqup"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Connector (Shopify, WooCommerce)."]}," Go to ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/integration-orders"},"children":["Integration Orders"]},". It lists every order from your shop with the reason it did not sync. Do this before anything else."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Direct API."]}," There is no intermediate stage. If the API returned 2xx, the order exists. Work through this instead:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Symptom"},"children":["Symptom"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Most likely cause"},"children":["Most likely cause"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Where to go"},"children":["Where to go"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["2xx and an order id, the order sits under ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Pending"]}," in Quiqdash, and nothing happens"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ready_for_collection"]}," was never called."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/order-lifecycle#create-then-make-it-ready"},"children":["Order lifecycle"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No courier assigned to API orders, but manual orders get one"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Same as above. Pending orders are invisible to dispatch."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/order-lifecycle#create-then-make-it-ready"},"children":["Order lifecycle"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["2xx and an order id, but nothing in Quiqdash at all"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Wrong environment, the dashboard user belongs to a different account, or the date range excludes the order. Pending orders are listed, so it is not that."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/environments#where-your-orders-appear"},"children":["Environments"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Accepted, then never moved"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Not a rejection: an accepted order stays in the state it was in. If ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ready_for_collection"]}," returned ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["422"]},", the release was refused and the error names why, usually an invalid UAE dropoff phone or an unresolvable address. Fix it and release again."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#addresses-and-contact-details"},"children":["Addresses"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Nothing at all, on every call"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Wrong environment, or the dashboard user does not belong to the token's account"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/environments#where-your-orders-appear"},"children":["Environments"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"it-was-working-then-it-stopped","__idx":2},"children":["It was working, then it stopped"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Connector."]}," Something broke the connection: an expired token between the platforms, regenerated store API keys, edited connector settings, or a changed rate set that no longer matches the mapping. Nobody is notified. ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/integration-orders#when-a-working-connection-stops"},"children":["What to check"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Direct API."]}," Nothing exists to expire on the connection itself. Four causes: your token expired and the refresh failed, credentials were rotated, an account capability was switched off, or your own deploy changed the payload. Start with ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/authentication#authentication-errors"},"children":["Authentication errors"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"orders","__idx":3},"children":["Orders"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":["Direct API."]}]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Symptom"},"children":["Symptom"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Cause"},"children":["Cause"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Where to go"},"children":["Where to go"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["One order produced two or three AWBs"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A retry without a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["uuid"]},". ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["partner_order_id"]}," does not enforce uniqueness."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/create-an-order#retrying-safely"},"children":["Retrying safely"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The order shows the wrong emirate"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["If you sent ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["coords"]},", check the order: it is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[longitude, latitude]"]},". If you did not, the address text did not resolve where you expected."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#addresses-and-contact-details"},"children":["Addresses"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The order went out on the wrong service"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["kind"]}," is fixed at creation. Cancel and re-book."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/order-lifecycle#service-types"},"children":["Service types"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["I need to change an address after creation"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Not possible through the API at any point. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PUT /orders/{order_id}"]}," accepts only ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payment_mode"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payment_amount"]},". Edit in Quiqdash."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/create-an-order#every-operation"},"children":["Every operation"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":["Connector."]}," A wrong service almost always means a wrong delivery-method mapping. ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/integration-orders#common-reasons-and-what-to-change"},"children":["Fixing the mapping"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"authentication","__idx":4},"children":["Authentication"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":["Direct API only. Connectors handle their own authentication."]}]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Symptom"},"children":["Symptom"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Cause"},"children":["Cause"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["invalid_client"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Swapped id and secret, or credentials used against the wrong host"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["401 Unauthorized"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["An expired key, or you sent the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_secret"]}," instead of the exchanged ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["access_token"]},". The body is a bare ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{\"error\":\"unauthorized\"}"]},", not the usual ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["api_error"]}," envelope, because the request is rejected before the payload is read. Check the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Expiration"]}," on the key first: a duration was almost certainly picked instead of Never. ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/authentication#option-1-generate-a-token-in-quiqdash"},"children":["Generating a key"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["308"]}," then a failure"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Trailing-slash redirect dropped the POST body"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Generic 500 or timeout on every call"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The account is not enabled for API access"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["You are not authorized"]}," with a valid token"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["An account capability is off, not a token problem"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Full table in ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/authentication#authentication-errors"},"children":["Authentication"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"webhooks","__idx":5},"children":["Webhooks"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":["Direct API. Connector webhooks are created and owned by the connector."]}]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Symptom"},"children":["Symptom"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Cause"},"children":["Cause"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No callbacks at all on the first live order"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The production subscription was never registered. Staging does not carry over."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Callbacks stopped"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Repeated failures paused the subscription. The Subscriptions tab shows it as ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Paused"]}," with a failure count. ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/webhooks#paused-subscriptions"},"children":["Re-activating it"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Some events arrive, some do not"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The missing events are not selected on the subscription, or your receiver returned 2xx and dropped them. Check the subscription's ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Events"]},", then the delivery log."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["I need to know why a delivery failed"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Delivery logs, on the Webhooks screen. Status, attempts, HTTP code and error per attempt, with replay."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["I missed events and need to catch up"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /orders/{order_id}/history"]}," returns every state the order passed through, with timestamps."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Full checklist in ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/webhooks#not-receiving-webhooks"},"children":["Webhooks"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"addresses-and-contact-details","__idx":6},"children":["Addresses and contact details"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":["Both routes. On a connector these come from your shop's checkout fields, so fix them there."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The request fields are ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["address1"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["address2"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["coords"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["town"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["country"]},", a two-letter ISO code (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/create-an-order#country-codes"},"children":["Country codes"]},"). ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["There is no postcode or emirate field."]}," Responses and webhooks use a different shape, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["coordinates: {lat, lng}"]},", so do not expect what you sent back verbatim. Full table in ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/create-an-order#address-object"},"children":["Create an order"]},"."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Rule"},"children":["Rule"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["address1"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["address2"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Latin script. Arabic addresses are not interpreted."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["coords"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[longitude, latitude]"]},". Dubai is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[55.16…, 25.05…]"]},", larger number first. Reversing them misroutes the order."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["contact_phone"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["E.164 with a single ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["+"]},". See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/create-an-order#contact-fields"},"children":["Contact fields"]},"."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Pickup address works differently on each route."]}," A connector reads one default pickup location off the account. The API takes a full pickup address on every order and never falls back to an account default, which is what makes multi-warehouse pickup an API-only capability."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The customer's phone number is not printed on the label, for privacy."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"labels","__idx":7},"children":["Labels"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":["The first two rows apply to both routes. The rest are direct API, since connectors build the payload for you."]}]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Symptom"},"children":["Symptom"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Cause"},"children":["Cause"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No PDF after creating the order"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The order is not accepted yet, or the export service is not activated. Check the path too: the endpoint is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /order_label/{order_id}"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The PDF downloads but is empty"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The order id does not exist. The endpoint returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["200 application/pdf"]}," with a zero-byte body rather than a 404. ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/create-an-order#return-values-that-will-catch-you-out"},"children":["Return values"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["CORS error fetching a label"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Fetch the label server-side, not from the storefront."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The label shows a different address than I sent"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The label is a snapshot. Address edits after generation require regenerating it."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Too many labels, or too many bags"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["You sent each product as its own item. An item is a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["parcel"]},". The goods go in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["products"]},", which is a separate top-level list. ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/create-an-order#parcels-and-products"},"children":["Parcels and products"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The response shows 5 kg and 10 x 10 x 10 cm per parcel"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Those are defaults, echoed on every item whatever you sent. Weight and dimensions belong on the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["product"]},", not the parcel. ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/create-an-order#product-fields"},"children":["Product fields"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["An export order is refused at ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ready_for_collection"]}," with a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["422"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The message names each missing field. ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/create-an-order#export-orders"},"children":["What an export needs"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"payloads-that-are-accepted-and-then-go-wrong","__idx":8},"children":["Payloads that are accepted and then go wrong"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":["Direct API."]}]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Symptom"},"children":["Symptom"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Cause"},"children":["Cause"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A field I set had no effect"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Unknown fields are accepted and ignored, so a misspelled name looks the same as one that did nothing. Read the order back and check the value. ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/create-an-order#return-values-that-will-catch-you-out"},"children":["Return values"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Orders erroring with no obvious cause"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Neither a missing product ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sku"]}," nor a long item ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["name"]}," is rejected at create, so look at what happened after acceptance rather than at the payload. ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/create-an-order#every-operation"},"children":["History"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["An order for the wrong country or emirate was accepted"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Neither is validated at create. A destination country different from the pickup country also turns the order into an export. ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/create-an-order#country-codes"},"children":["Country codes"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"timeouts-and-retries","__idx":9},"children":["Timeouts and retries"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":["Direct API."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A retry after a timeout is what produces duplicate orders, unless the create carried a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["uuid"]},". Send one and the retry returns the original order instead."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /orders"]}," leaves ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pending"]}," orders out unless ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filters[state]=pending"]}," asks for them, so a search by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filters[partner_order_id]"]}," alone cannot tell you whether a timed-out create landed. Send both filters together. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/create-an-order#retrying-safely"},"children":["Retrying safely"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Retrying ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PUT /orders/{order_id}/ready_for_collection"]}," is not obviously safe. Confirm the order's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["state"]}," with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /orders/{order_id}"]}," rather than assuming a repeat is harmless."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"5xx-does-not-always-mean-quiqup","__idx":10},"children":["5xx does not always mean Quiqup"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":["Direct API."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Malformed payloads can surface as 500 rather than 422. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/errors#5xx"},"children":["5xx"]},". Check your request shape before assuming an outage."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If several of your orders failed in the same window, that is the signal for a platform issue. Report it with timestamps."]}]},"headings":[{"value":"Troubleshooting","id":"troubleshooting","depth":1},{"value":"My orders are not reaching Quiqup","id":"my-orders-are-not-reaching-quiqup","depth":2},{"value":"It was working, then it stopped","id":"it-was-working-then-it-stopped","depth":2},{"value":"Orders","id":"orders","depth":2},{"value":"Authentication","id":"authentication","depth":2},{"value":"Webhooks","id":"webhooks","depth":2},{"value":"Addresses and contact details","id":"addresses-and-contact-details","depth":2},{"value":"Labels","id":"labels","depth":2},{"value":"Payloads that are accepted and then go wrong","id":"payloads-that-are-accepted-and-then-go-wrong","depth":2},{"value":"Timeouts and retries","id":"timeouts-and-retries","depth":2},{"value":"5xx does not always mean Quiqup","id":"5xx-does-not-always-mean-quiqup","depth":2}],"frontmatter":{"seo":{"title":"Troubleshooting"}},"lastModified":"2026-10-16T10:31:15.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/troubleshooting","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}