Delivery Hero Callback API

**▶️ READ THIS FIRST ◀️** * Those are NOT actual endpoints. They are callback from ODR to your endpoint * This is used to represent the payload ODR will sent * This is an optional feature and it requires your callback URL to be registered with your ClientID --- **Description** * The Callback URL will need to be HTTPS with a valid SSL certificate. * Body posted by this feature is stripped of any Personally Identifiable Information (PII). * Full Order body can be fetched using the Get Specific Order feature. * If there is an error, we retry sending the request three times. If the response status code is 2xx, it means that there was no error and the callback was successful in sending order status.

Operations 3

POST /callback Order Status callback #
POST /callback-location Courier location update #
POST /callback-refund Refund callback #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/delivery-hero-callback-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

delivery-hero-callback-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: 1.1.1
  title: On Demand Rider Callback API
  x-logo:
    url: data:image/svg+xml,%3Csvg width='173' height='28' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='translate(-64 -15)' fill='none' fill-rule='evenodd'%3E%3Cpath d='M0 0h1350v60H0z'%3E%3C/path%3E%3Cpath d='M0 0h1350v60H0z'%3E%3C/path%3E%3Cg transform='translate(64 15)' fill='%23D61F26'%3E%3Cpath d='M32.18 13.383l-.021.012-3.754 1.531-.115.053-.915 4.18c-.061.143-.244.177-.367.058l-2.735-3.234-.013-.01-15.423 6.618a.103.103 0 01-.104-.176l13.333-9.98-1.687-3.852c-.084-.175.071-.362.277-.31h.002l4.086 1.006 3.172-2.823c.137-.107.323-.03.358.14l.31 4.241 3.658 2.141c.157.1.134.332-.062.405zM30.316 1.258C25.582-.6 20.376.795 17.164 4.365L4.63 17.793c-.169.181-.09.408.115.438l3.34.205c.267.017.3.247.166.404L.086 27.646c-.142.152.03.392.224.332l11.656-3.683c.246-.085.436.135.332.328l-1.56 2.756c-.08.157.071.372.267.358l16.804-3.743c4.015-.636 7.6-3.316 9.193-7.374 2.4-6.09-.598-12.967-6.686-15.362z'%3E%3C/path%3E%3Cpath d='M75.362 21.69h-3.829L74.53 7.658l4.176-1.535-3.343 15.565'%3E%3C/path%3E%3Cpath d='M67.138 13.653c-.917 0-1.444.759-1.658 1.638 1.813 0 2.362-.566 2.362-1.036 0-.33-.295-.602-.704-.602m-2.087 4.096c-.02.096-.04.274-.04.37 0 .625.428.84 1.562.84 1.013 0 2.456-.255 3.297-.546v2.868c-1.073.39-2.753.603-4.1.603-3.16 0-4.682-.859-4.682-3.725 0-2.814 1.307-7.201 6.344-7.201 3.198 0 4.153 1.445 4.153 2.968 0 1.97-1.696 3.647-6.534 3.823'%3E%3C/path%3E%3Cpath d='M82.316 10.455c-1.305 0-2.145-.839-2.145-1.99 0-1.503 1.054-2.341 2.359-2.341 1.328 0 2.148.838 2.148 1.97 0 1.522-1.034 2.361-2.362 2.361'%3E%3C/path%3E%3Cpath d='M79.63 11.31h3.94l-1.992 10.224h-3.98L79 14.354'%3E%3C/path%3E%3Cpath d='M94.925 11.31c-1.367 3.435-2.87 6.79-4.78 10.224h-4.88c-.623-3.24-.898-6.654-.818-10.224h3.981a47.373 47.373 0 00.036 4.994c.021.43.061.838.099 1.251h.022c.174-.413.368-.82.545-1.251.682-1.68 1.306-3.51 1.777-4.994h4.018'%3E%3C/path%3E%3Cpath d='M100.252 13.653c-.915 0-1.445.759-1.661 1.638 1.817 0 2.363-.566 2.363-1.036 0-.33-.29-.602-.702-.602m-2.086 4.096a2.33 2.33 0 00-.042.37c0 .625.431.84 1.561.84 1.016 0 2.46-.255 3.299-.546v2.868c-1.074.39-2.752.603-4.097.603-3.163 0-4.684-.859-4.684-3.725 0-2.814 1.306-7.201 6.341-7.201 3.2 0 4.155 1.445 4.155 2.968 0 1.97-1.694 3.647-6.533 3.823'%3E%3C/path%3E%3Cpath d='M112.351 14.92a4.396 4.396 0 00-.957-.12c-.879 0-1.581.88-1.895 2.5l-.816 4.235H104.7l1.993-10.224h2.987l.096 1.363c.916-1.13 1.64-1.716 2.752-1.716.506 0 .78.039.915.078l-1.091 3.883'%3E%3C/path%3E%3Cpath d='M124.799 11.31c-1.758 4.567-3.318 7.902-4.88 10.207-2.262 3.376-4.254 4.157-6.304 4.157-.605 0-1.247-.16-1.561-.314l.626-2.947h1.366c.683 0 .974-.275 1.424-.879-.761-2.75-1.133-6.594-1.094-10.224h4.002a44.95 44.95 0 00.039 4.936c.02.448.056.878.095 1.309h.02c.177-.413.37-.82.547-1.27a50.015 50.015 0 001.736-4.975h3.984'%3E%3C/path%3E%3Cpath d='M140.1 21.534h-4.2l.997-5.153h-3.553l-.997 5.153h-4.192l2.652-13.62h4.197l-.955 4.86h3.551l.957-4.86h4.193l-2.651 13.62'%3E%3C/path%3E%3Cpath d='M148.37 13.653c-.918 0-1.442.759-1.658 1.638 1.815 0 2.364-.566 2.364-1.036 0-.33-.296-.602-.706-.602m-2.088 4.096a2.32 2.32 0 00-.037.37c0 .625.43.84 1.559.84 1.016 0 2.46-.255 3.299-.546v2.868c-1.073.39-2.752.603-4.1.603-3.16 0-4.682-.859-4.682-3.725 0-2.814 1.307-7.201 6.342-7.201 3.2 0 4.158 1.445 4.158 2.968 0 1.97-1.7 3.647-6.539 3.823'%3E%3C/path%3E%3Cpath d='M160.467 14.92a4.333 4.333 0 00-.954-.12c-.877 0-1.581.88-1.893 2.5l-.82 4.235h-3.979l1.988-10.224h2.985l.1 1.363c.916-1.13 1.637-1.716 2.748-1.716.51 0 .782.039.92.078l-1.095 3.883'%3E%3C/path%3E%3Cpath d='M167.006 14.1c-1.6 0-2.03 2.44-2.03 3.533 0 .877.37 1.13 1.095 1.13 1.577 0 1.988-2.44 1.988-3.55 0-.858-.35-1.113-1.053-1.113m-1.485 7.784c-3.102 0-4.622-1.327-4.622-3.98 0-2.947 1.462-6.946 6.615-6.946 3.084 0 4.624 1.366 4.624 3.982 0 3.005-1.464 6.944-6.617 6.944'%3E%3C/path%3E%3Cpath d='M52.543 18.294h-.781l1.404-7.182h1.095c1.657 0 2.262.98 2.262 2.323 0 2.715-1.504 4.86-3.98 4.86m3.719-6.928l2.652-2.545c-1.035-.623-2.455-.908-4.227-.908h-5.073l-2.651 13.621h5.289c6.144 0 8.601-4.293 8.601-8.76 0-1.161-.25-2.09-.732-2.81l-3.86 1.402'%3E%3C/path%3E%3C/g%3E%3C/g%3E%3C/svg%3E
    altText: Delivery Hero
    backgroundColor: '#FFFFFF'
  description: '# About

    The On Demand Rider (ODR) API provides system-to-system integration to facilitate on-demand courier delivery service requests.'
servers:
- url: https://pandago-api-sandbox.deliveryhero.io/sg/api/v1
  description: <b>Sandbox</b> environment
- url: https://api-infra-eu-central-1.stg.ondemandrider.net/{country code}/api/v1
  description: <b>Stage</b> Glovo generic 💡 Find your country URL [here](#section/About/API-Endpoints-and-URLs) 💡
- url: https://ondemand-api-glovoapp.deliveryhero.io/{country code}/api/v1
  description: <b>Production</b> Glovo generic 💡 Find your country URL [here](#section/About/API-Endpoints-and-URLs) 💡
- url: https://ondemand-api-glovoapp.deliveryhero.io/pt/api/v1
  description: <b>Example in production</b> for Glovo Portugal
security:
- Bearer_Token: []
tags:
- name: Callback
  description: '**▶️ READ THIS FIRST ◀️**


    * Those are NOT actual endpoints.'
paths:
  /callback:
    summary: Order Status callback
    post:
      summary: Order Status callback
      description: '**Order Cancellation Callback**

        * When you cancel an order, if you provided a callback url, ODR will send request to that url.

        * In the payload, there will be Cancellation object which contains reason and source of cancellation

        * __NOTE: Cancellation object__ (seen at the end of the payload below) will be provided __only__ when the order is cancelled. It will not be available if the order is not cancelled.


        ---

        **Verification of Callback**

        Signature-based verification can be used to secure callback messages to the API vendors.

        To enable signature verification, please contact with regional/local ops team and provide your secret key.


        * The payload will be signed by the platform, and the `hex-encoded` signature will be added to the header as `X-Signature-SHA256`.

        * Verification can be done using the provided secret on the client side.


        Example verification codes:


        Golang:


        ```golang

        const (

        SignatureHeader string = "X-Signature-SHA256"

        Secret string = "supersecret"

        )


        func handler(w http.ResponseWriter, r *http.Request) {

        body, err := io.ReadAll(r.Body)

        if err != nil {

        // can''t read body

        }

        defer r.Body.Close()


        ok, err := verify(body, r.Header.Get(SignatureHeader))

        if err != nil {

        // can''t verify signature

        } else if !ok {

        // signature does not match

        }


        // signature is verified

        }


        func verify(body []byte, signature string) (bool, error) {

        sig, err := hex.DecodeString(signature)

        if err != nil {

        return false, err

        }


        mac := hmac.New(sha256.New, []byte(Secret))

        mac.Write(body)


        return hmac.Equal(sig, mac.Sum(nil)), nil

        }

        ```'
      tags:
      - Callback
      security: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CallbackRequest'
        description: '__NOTE: Cancellation object__ (seen at the end of the payload below) will be provided __only__ when the order is cancelled. It will not be available if the order is not cancelled.'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              examples:
                response:
                  value: null
      operationId: postCallback
      x-operation-id-source: derived
  /callback-location:
    summary: Courier location update
    post:
      summary: Courier location update
      description: 'If you provide us a `location_update_callback` then we will call the callback URL *every 15s* for any ongoing orders with the live location of the courier.


        It works exactly like above callback endpint and the body is the same, signature is also supported.

        You can chose to use the same callback URL or have a different one.'
      tags:
      - Callback
      security: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CallbackRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              examples:
                response:
                  value: null
      operationId: postCallbackLocation
      x-operation-id-source: derived
  /callback-refund:
    summary: Refund callback
    post:
      summary: Refund callback
      description: 'Whenever a refund or compensation is issued for one of your orders, ODR will POST a refund event to your registered refund callback URL. To enable this callback, please contact your local ops team and provide the URL.


        The payload describes the refund amount, the reason and owner of the refund, and — when the refund targets specific items — the list of affected products with the percentage of each product being refunded.


        ---


        **Refund types**


        | Type | Description |

        | - | - |

        | `FULL_REFUND` | The whole order is being refunded. |

        | `PARTIAL_REFUND` | Only part of the order is being refunded (e.g. specific products or the delivery fee). |

        | `COMPENSATION` | A compensation for which the value is independent of the product amount of the order. |


        **Refund owners**


        | Owner | Description |

        | - | - |

        | `RESTAURANT` | The vendor (restaurant) bears the refund cost. |

        | `DELIVERY_PLATFORM` | The delivery platform bears the refund cost. |


        **Refund reasons**


        | Reason | Description |

        | - | - |

        | `ORDER_MISSING_ITEMS` | The order was delivered but some items were missing. |

        | `ORDER_ITEM_ERROR` | One or more items were incorrect. |

        | `ORDER_DAMAGE_ITEMS` | One or more items were damaged on delivery. |

        | `ORDER_LATE_DELIVERY` | The order was delivered after the promised time. |

        | `ORDER_NEVER_DELIVERED` | The order was never delivered to the customer. |

        | `WRONG_ORDER_DELIVERED_DELIVERY_PLATFORM` | A wrong order was delivered (platform fault). |

        | `WRONG_ORDER_DELIVERED_PARTNER` | A wrong order was delivered (vendor fault). |

        | `BAD_QUALITY` | Items had quality issues. |

        | `AUTOMATIC_CANCELLATION` | Refund issued automatically following an order cancellation. |

        | `OTHER` | Other reason not covered above. |


        ---


        **Notes**


        * Monetary fields (`total_amount.value`, `delivery_fee_details.amount`, `products[].amount`) are integers expressed in the smallest unit of the order''s currency (e.g. cents for `EUR`/`USD`).

        * `delivery_fee_details` is only present when the refund includes a delivery fee component.

        * `products` is only present for refunds that target specific products. The `external_id` matches the `external_id` you supplied for the product when creating the order.

        * Signature verification (`X-Signature-SHA256`) works the same way as for the order status callback — see the Order Status callback section.

        * If the response status code is 2xx, the callback is considered delivered. Otherwise ODR retries the request up to three times.'
      tags:
      - Callback
      security: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RefundCallbackRequest'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              examples:
                response:
                  value: null
      operationId: postCallbackRefund
      x-operation-id-source: derived
components:
  schemas:
    Status:
      type: string
      enum:
      - NEW
      - RECEIVED
      - WAITING_FOR_TRANSPORT
      - ASSIGNED_TO_TRANSPORT
      - COURIER_ACCEPTED_DELIVERY
      - NEAR_VENDOR
      - PICKED_UP
      - COURIER_LEFT_VENDOR
      - NEAR_CUSTOMER
      - DELIVERED
      - DELAYED
      - CANCELLED
      - RETURNED_TO_VENDOR
      description: "Available Statuses:\n * `NEW` - Order has been created\n * `RECEIVED` - We've accepted the order and will be assigning it to a courier\n * `WAITING_FOR_TRANSPORT` - Assigning order to a courier\n * `ASSIGNED_TO_TRANSPORT` - Courier has been dispatched to pick up and deliver the order\n * `COURIER_ACCEPTED_DELIVERY` - Courier accepted to pick up and deliver the order\n * `NEAR_VENDOR` - Courier is near the pick-up point\n * `PICKED_UP` - Courier has picked up the order\n * `COURIER_LEFT_VENDOR` - Courier has left from pick-up point\n * `NEAR_CUSTOMER` - Courier is near the drop-off point\n * `DELIVERED` - Courier has delivered the order\n * `DELAYED` - Order delivery has been delayed and estimated delivery time has been updated\n * `CANCELLED` - Order has been cancelled\n * `RETURNED_TO_VENDOR` - Courier has returned the order to the vendor"
    RefundCallbackProduct:
      title: Refund Callback Product
      description: A product affected by a refund.
      type: object
      required:
      - id
      - external_id
      - name
      - percentage
      - amount
      properties:
        id:
          type: string
          description: ODR-side identifier of the product within the order.
          example: prod-1
        external_id:
          type: string
          description: Identifier of the product in the vendor's external system, as provided when creating the order.
          example: '324'
        name:
          type: string
          description: Name of the product.
          example: Burger
        percentage:
          type: integer
          minimum: 1
          maximum: 100
          description: Percentage of this product being refunded (1-100).
          example: 100
        amount:
          type: integer
          format: int64
          description: Refund amount attributed to this product, in the smallest unit of the parent `total_amount.currency_code`.
          example: 1000
    PickupTasks:
      title: Pickup Tasks
      description: The tasks that you expect the rider to perform at the Pickup Point are located under this heading.
      type: object
      properties:
        pickup_code:
          type: string
          maxLength: 30
          description: The code that you expect the rider to mention in order to validate before giving them the order
    Reason:
      type: string
      enum:
      - ADDRESS_INCOMPLETE_MISSTATED
      - BAD_WEATHER
      - CLOSED
      - COURIER_ACCIDENT
      - COURIER_UNREACHABLE
      - DELIVERY_ETA_TOO_LONG
      - DUPLICATE_ORDER
      - FOOD_QUALITY_SPILLAGE
      - ITEM_UNAVAILABLE
      - LATE_DELIVERY
      - MISTAKE_ERROR
      - NO_COURIER
      - OUTSIDE_DELIVERY_AREA
      - OUTSIDE_SERVICE_HOURS
      - REASON_UNKNOWN
      - TECHNICAL_PROBLEM
      - TOO_BUSY
      - UNABLE_TO_FIND
      - UNABLE_TO_PAY
      - UNREACHABLE
      - WRONG_ORDER_ITEMS_DELIVERED
      description: "Acceptable Reasons:\n  * `ADDRESS_INCOMPLETE_MISSTATED` - Customer's address is incomplete OR customer enters incorrect address on purpose in order to be able to proceed with the order with the vendor, with the actual customer address outside the vendor's delivery area.\n  * `BAD_WEATHER` - Vendor/Logistics cannot deliver because of weather conditions.\n  * `CLOSED` - Vendor is closed.\n  * `COURIER_ACCIDENT` - Courier has been involved in an accident and cannot fulfill the order.\n  * `COURIER_UNREACHABLE` - Courier is unreachable/unresponsive and/or uncontactable.\n  * `DELIVERY_ETA_TOO_LONG` - Before promised delivery time, customer believes that the ETA is too long.\n  * `DUPLICATE_ORDER` - Duplicate order.\n  * `FOOD_QUALITY_SPILLAGE` - Customer has an issue with the food quality (cold, inedible, etc.) OR order spillage occurred during transport (VD/OD).\n  * `ITEM_UNAVAILABLE` - The product is not available or another rider has already picked up the order.\n  * `LATE_DELIVERY` - Customer has received delivery but (excessively) passed promised delivery time.\n  * `MISTAKE_ERROR` - Customer placed order in error/accidentally or with incorrect specifications (i.e. preorder, incorrect payment type).\n  * `NO_COURIER` - Vendor: Vendor has no courier (drivers/riders/walkers/etc.) available to fulfill the order. Logistics: Order is pending in Logistics/Hurrier without assigned courier and customer no longer wishes to wait.\n  * `OUTSIDE_DELIVERY_AREA` - Vendor: Vendor does not deliver to the customer's address/area. Logistics: Logistics does not deliver to the customer's address/area.\n  * `OUTSIDE_SERVICE_HOURS` - Order has been placed outside of our Logistic service hours.\n  * `REASON_UNKNOWN` - Reason for failure is not available. VENDOR: Vendor initiated, CUSTOMER: Customer initiated, PLATFORM: Unknown who initiated.\n  * `TECHNICAL_PROBLEM` - Vendor: Vendor cannot fulfill an order due to technical issues, e.g. order can not be printed, etc. Where a vendor cannot be contacted and order could not be delivered to their transmission/reception device or order was delivered to the device and it timed-out/expired, reasons UNREACHABLE and NO_RESPONSE should be used respectively rather than TECHNICAL_PROBLEM. Logistics: Logistics is having general technical issues (i.e. Hurrier is down, etc.). Platform: Platform is experiencing some technical issue whereby orders cannot be placed with the Logistics/Vendor and/or have been pending too long. As a result, orders have been failed by the platform.\n  * `TOO_BUSY` - Vendor is too busy to fulfill the order.\n  * `UNABLE_TO_FIND` - Customer cannot be located to complete pick-up/delivery or order items.\n  * `UNABLE_TO_PAY` - Customer cannot pay for the order, e.g. insufficient cash (COD) or card doesn't work for card on delivery, etc.\n  * `UNREACHABLE` - Technical issues on the partner's side.\n  * `WRONG_ORDER_ITEMS_DELIVERED` - Customer has received wrong order items or is missing significant item(s)."
    Source:
      type: string
      enum:
      - AUTO_CANCEL
      - CLIENT
      - HELPCENTER
      - INTERNAL_UNKNOWN
      - LOGISTICS
      - ONEVIEW
      description: "Acceptable Sources:\n * `AUTO_CANCEL` - Cancellation was triggered automatically.\n * `CLIENT` - Cancellation was requested by the client (vendor).\n * `HELPCENTER` - Cancellation was triggered by the Help Center.\n * `INTERNAL_UNKNOWN` - Cancellation source is unknown or unrecognized.\n * `LOGISTICS` - Cancellation was requested by Logistics.\n * `ONEVIEW` - Cancellation was triggered by OneView."
    RefundCallbackRequest:
      title: Refund Callback Request
      description: Payload sent to the registered refund callback URL when a refund or compensation is issued for an order.
      type: object
      required:
      - order_id
      - refund_id
      - type
      - total_amount
      - reason
      - owner
      properties:
        order_id:
          type: string
          description: Identifier of the ODR order this refund relates to.
          example: y0ud-000001
        refund_id:
          type: string
          description: Unique identifier of the refund event.
          example: rfd-000001
        type:
          type: string
          description: Type of refund being issued.
          enum:
          - FULL_REFUND
          - PARTIAL_REFUND
          - COMPENSATION
        total_amount:
          title: Refund Total Amount
          type: object
          required:
          - value
          - currency_code
          description: Total amount of the refund.
          properties:
            value:
              type: integer
              format: int64
              description: Total refund amount in the smallest unit of `currency_code` (e.g. cents for `EUR`/`USD`).
              example: 1500
            currency_code:
              type: string
              description: ISO 4217 three-letter currency code.
              example: EUR
        delivery_fee_details:
          title: Delivery Fee Details
          type: object
          description: Present only when the refund includes a delivery fee component. Describes how much of `total_amount` corresponds to the delivery fee.
          required:
          - amount
          - currency_code
          properties:
            amount:
              type: integer
              format: int64
              description: Delivery fee portion of the refund, in the smallest unit of `currency_code`.
              example: 250
            currency_code:
              type: string
              description: ISO 4217 three-letter currency code.
              example: EUR
        reason:
          type: string
          description: Reason for the refund.
          enum:
          - ORDER_MISSING_ITEMS
          - ORDER_ITEM_ERROR
          - ORDER_DAMAGE_ITEMS
          - ORDER_LATE_DELIVERY
          - ORDER_NEVER_DELIVERED
          - WRONG_ORDER_DELIVERED_DELIVERY_PLATFORM
          - WRONG_ORDER_DELIVERED_PARTNER
          - BAD_QUALITY
          - AUTOMATIC_CANCELLATION
          - OTHER
        owner:
          type: string
          description: Party that bears the cost of the refund.
          enum:
          - RESTAURANT
          - DELIVERY_PLATFORM
        products:
          type: array
          description: Products affected by the refund. Only present when the refund targets specific products. The `external_id` matches the `external_id` provided when the order was created.
          items:
            $ref: '#/components/schemas/RefundCallbackProduct'
      example:
        order_id: y0ud-000001
        refund_id: rfd-000001
        type: PARTIAL_REFUND
        total_amount:
          value: 1500
          currency_code: EUR
        delivery_fee_details:
          amount: 250
          currency_code: EUR
        reason: ORDER_MISSING_ITEMS
        owner: RESTAURANT
        products:
        - id: prod-1
          external_id: '324'
          name: Burger
          percentage: 100
          amount: 1000
        - id: prod-2
          external_id: '2311'
          name: Coca-Cola
          percentage: 50
          amount: 250
    CallbackDriverLocation:
      title: Location
      type: object
      description: Location information is added only to the statuses where the order has an active driver.
      properties:
        latitude:
          type: string
        longitude:
          type: string
    AgeValidationRequired:
      type: boolean
      default: false
      description: 'Setting this attribute to `true` requests age verification of the customer by the rider at the point of delivery.


        Before enabling this feature, please confirm with your account manager that age verification has been activated for your account.


        This feature is currently available in the following countries:

        - **pandago**: Philippines

        - **foodora GO**: Sweden, Norway and Czech Republic

        - **Glovo On-Demand**: All countries'
    CallbackRequest:
      title: Callback Request
      type: object
      properties:
        order_id:
          type: string
        client_order_id:
          type: string
        status:
          $ref: '#/components/schemas/Status'
        timeline:
          $ref: '#/components/schemas/Timeline'
        driver:
          $ref: '#/components/schemas/CallbackDriver'
        created_at:
          $ref: '#/components/schemas/Timestamp'
        updated_at:
          $ref: '#/components/schemas/Timestamp'
        tracking_link:
          type: string
        proof_of_delivery_url:
          type: string
        proof_of_pickup_url:
          type: string
        proof_of_return_url:
          type: string
        distance:
          type: number
          description: Distance of the trip in meters, calculated using the Haversine formula.
        cancellation:
          $ref: '#/components/schemas/Cancellation'
        delivery_tasks:
          title: Delivery Tasks
          type: object
          properties:
            age_validation_required:
              $ref: '#/components/schemas/AgeValidationRequired'
        pickup_tasks:
          $ref: '#/components/schemas/PickupTasks'
      required:
      - order_id
      - status
      - timeline
      - driver
      - created_at
      - updated_at
      example:
        order_id: y0ud-000001
        client_order_id: client-ref-0000001
        status: PICKED_UP
        timeline:
          extimated_pickup_time: '2018-09-13T01:30:52.123Z'
          estimated_delivery_time: '2018-09-13T01:45:52.123Z'
        driver:
          id: '12324'
          name: Panda Go
          phone_number: '+6500000000'
          location:
            latitude: 1.2923742
            longitude: 103.8486029
        created_at: 1536802000
        updated_at: 1536802252
        tracking_link: https://example.com/test_tracking_path
        proof_of_delivery_url: https://pandago-api-sandbox.deliveryhero.io/api/v1/orders/proof_of_delivery/x-1234
        proof_of_pickup_url: https://pandago-api-sandbox.deliveryhero.io/api/v1/orders/proof_of_pickup/x-1234
        proof_of_return_url: https://pandago-api-sandbox.deliveryhero.io/api/v1/orders/proof_of_return/x-1234
        cancellation:
          reason: MISTAKE_ERROR
          source: CLIENT
        delivery_tasks:
          age_validation_required: false
        pickup_tasks:
          pickup_code: Order-4672
        packaging:
          size: small
          weight: 1.2
    Timestamp:
      title: Timestamp
      type: integer
    Cancellation:
      title: Cancellation
      type: object
      properties:
        source:
          $ref: '#/components/schemas/Source'
        reason:
          $ref: '#/components/schemas/Reason'
    CallbackDriver:
      title: Driver
      type: object
      properties:
        id:
          type: number
        name:
          type: number
        phone_number:
          $ref: '#/components/schemas/PhoneNumber'
        location:
          $ref: '#/components/schemas/CallbackDriverLocation'
    Timeline:
      title: Timeline
      type: object
      properties:
        estimated_pickup_time:
          type: string
        estimated_delivery_time:
          type: string
    PhoneNumber:
      type: string
      format: e164
      description: '* Phone number in E.164 standard (https://en.wikipedia.org/wiki/E.164)

        * libphonenumber is used for phone number validation

        '
      example: '+6588888888'
  securitySchemes:
    Bearer_Token:
      type: apiKey
      name: Authorization
      in: header
      description: 'Provide the access token in the format: `Bearer {access-token}`. You can obtain the access token from the [Authentication endpoint](#tag/Authentication).

        '
x-tagGroups:
- name: Authentication
  tags:
  - Authentication
- name: Orders
  tags:
  - OrdersManagement
  - OrdersEstimation
  - RiderPosition
  - Proofs
- name: Outlets
  tags:
  - Outlets
- name: Callback
  tags:
  - Callback