{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Last-mile"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"last-mile","__idx":0},"children":["Last-mile"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Applies to both the connectors and the direct API."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You hold the stock. You pack the parcel. Quiqup collects it from an address you name and delivers it to your customer."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Three ways in. Almost everything else in this section depends on which one you pick."]},{"$$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":""},"children":[]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Who builds it"},"children":["Who builds it"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What you configure"},"children":["What you configure"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Shopify connector"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Nobody. Install it."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Delivery method mapping, pickup location, in Quiqdash"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["WooCommerce connector"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Nobody. Install it."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Delivery method mapping, pickup location, in Quiqdash"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Direct API"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Your developer"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Everything, per order, in your own code"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Shopify or WooCommerce: start with the connector. No developer needed. It still needs a pickup location and a delivery-method mapping set up in Quiqdash."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Everything else needs the API. Any stack that can make an HTTPS request will do, including mobile apps and no-code builders."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["There is no plugin for Magento, Wix, Salla, Zid, Squarespace, Ecwid or a POS system. Those go through the API, or through a middleware partner such as Carriyo, ClickPost or Unicommerce."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["A default pickup location is a connector requirement, not an account one."]}," The connector has one place to collect from and reads it off the account, so without it the connection will not establish. A direct API integration sends a full pickup address on every order instead, and never falls back to an account default."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"if-you-are-using-a-connector","__idx":1},"children":["If you are using a connector"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Sign in to Quiqdash and add your pickup location. There is more than one route to it: the connector setup flow asks for one, the first manual order creation asks for one, and you can add them directly under address management."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Integrations →"]}," your platform. Install the connector from that page, not from a plugin file."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Connect your store."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Map every delivery method"]}," to a Quiqup service, on the connector's own settings page under ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Integrations →"]}," your platform. Orders on a method you leave unmapped are sent as Next Day; map it to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Do not read orders"]}," to keep them out. ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/integration-orders#delivery-methods-you-have-not-mapped"},"children":["Unmapped methods"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Place a test order and check it appears."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You handle no credentials. The connector authenticates itself. Delivery rates are not pushed to your checkout, so enter them by hand in your shop's own shipping settings and map each one."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["From there, use ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/integration-orders"},"children":["Integration Orders"]}," whenever an order does not arrive."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"if-you-are-building-on-the-api","__idx":2},"children":["If you are building on the API"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Sign in to the staging dashboard. Your existing Quiqup login works there: the login is the same on both environments. ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/environments"},"children":["Environments"]}," has the hosts. If the services you need are not enabled on staging, ask your account manager."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Generate a Bearer token"]}," in Quiqdash. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/authentication"},"children":["Authentication"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Create a test order"]}," against ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.staging.quiqup.com"]},", sending a full pickup and dropoff address. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/create-an-order"},"children":["Create an order"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Register your webhook"]}," in Quiqdash (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/webhooks#register-your-endpoint"},"children":["how"]},"), then drive the order through its states. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/testing"},"children":["Testing on staging"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Go live."]}," Switch the base URL to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api-ae.quiqup.com"]}," and register your production webhook. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/testing#going-live"},"children":["Going live"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The minimum working integration is three calls: ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/create-an-order"},"children":["create an order"]},", mark it ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/order-lifecycle#create-then-make-it-ready"},"children":["ready for collection"]},", and download the label with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /order_label/{order_id}"]},". Two, if you set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ready_for_collection: true"]}," on the create and skip the release call, remembering that the create response still reports ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pending"]},". Client credentials add one call before any of these. A Quiqdash token adds none."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Add a ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/webhooks"},"children":["webhook receiver"]}," of your own if you want status updates pushed rather than polled."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"what-quiqup-supports","__idx":3},"children":["What Quiqup supports"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All three routes are built for a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["single merchant shipping from its own locations"]},". That is the whole supported model."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Not supported:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["C2C and peer-to-peer delivery"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Multi-vendor marketplaces where individual sellers ship"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click-and-collect on a separate cycle"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The API can send a different pickup address per order, but the parcels still have to be your parcels. If you are building a marketplace, talk to your account manager before you build."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Amazon and Noon have no direct integration. The supported route is importing marketplace orders into a connected Shopify or WooCommerce store, then entering the Quiqup tracking number back on the marketplace by hand."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"what-no-route-does","__idx":4},"children":["What no route does"]},{"$$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":""},"children":[]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":""},"children":[]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Live shipping rates at checkout"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Neither the connector nor the API returns rates. You enter them by hand in your shop."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Update an order after it is ready for collection"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No API endpoint. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PUT /orders/{order_id}"]}," works while an order is still ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pending"]},"; after that, edits move to Quiqdash."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Invoices and final charges"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Dashboard only."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Serviceability check"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No endpoint tells you whether an address is deliverable before you create the order."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Official SDKs"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["None in any language."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"pages-in-this-section","__idx":5},"children":["Pages in this section"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/create-an-order"},"children":["Create an order"]},". The payload, field by field, and what is actually required."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/testing"},"children":["Testing on staging"]},". A complete test pass, and going live."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/lastmile/integration-orders"},"children":["Integration Orders (connectors)"]},". When a connector order does not arrive."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/apis/lastmile"},"children":["Last-mile API reference"]},". Every operation."]}]}]},"headings":[{"value":"Last-mile","id":"last-mile","depth":1},{"value":"If you are using a connector","id":"if-you-are-using-a-connector","depth":2},{"value":"If you are building on the API","id":"if-you-are-building-on-the-api","depth":2},{"value":"What Quiqup supports","id":"what-quiqup-supports","depth":2},{"value":"What no route does","id":"what-no-route-does","depth":2},{"value":"Pages in this section","id":"pages-in-this-section","depth":2}],"frontmatter":{"seo":{"title":"Last-mile"}},"lastModified":"2026-10-16T10:23:15.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/lastmile","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}