API Reference

The image below presents a high-level overview of how our Order API works.

Kitchenhub also provides a webhook feature that notifies you of incoming live orders in real time. You can configure the URL to receive orders. When a new order is received, the webhook sends a payload containing information about the order in a specific format. With Kitchenhub's webhook feature, you can easily stay up-to-date with incoming orders and provide quick and efficient service to your customers.

Order Statuses

New: when order is created it will appear in Store's UI. It can be Accepted manually via Admin Panel or API.

Scheduled: Order can be created and scheduled for any time in future

Accepted: When the order is Accepted - it should be completed via prep time, selected before acceptance

Completed: Order is completed in restaurant

Cancelled: Order is cancelled


Order Model

Order object

The Order object is fully detailed below, and we’ve also included a sample instance here. This Order object will contain an ID field that you’ll need later to confirm the order, so please keep track of it. All incoming orders will have a status of NEW.

The Order object always contains these top-level properties.

PropertyTypeNullableDescription
orderObjectNoBasic order info
providerObjectNoProvider info
storeObjectNoStore info
customerObjectNoCustomer info
itemsArray[Item]NoList of order items
deliveryObjectNoDelivery info
paymentObjectNoPayment info
chargesObjectNoCharges info
timestampsObjectNoDates and times info

order object

PropertyTypeNullableDescription
idIntegerNoID of order on KitchenHub side
external_idStringNoID of order on the provider side
numberStringNoHuman readable order number
daily_numberIntegerNoSerial order number for the current day
typeStringNoThe type of order, can be either pickup, delivery or dinein
statusStringNoThe status of order can be either new, accepted, completed or canceled
notesStringYesCustomer notes. null if notes not set
paidBooleanNoWhether the order paid or not
asapBooleanNoWhether order ASAP or for future
add_disposable_itemsBooleanYesWhether to add disposable items or not
prep_time_minutesIntegerYesPreparation time selected while accepting an order. null if the order was accepted using the provider's app

provider object

PropertyTypeNullableDescription
idStringNoProvider identifier.
nameStringNoHuman readable provider name
merchant_idStringYesMerchant ID on the provider side.
store_idStringYesStore ID on a provider side.

location object

PropertyTypeNullableDescription
idStringNoLocation ID on KitchenHub side
partner_location_idStringYesLocation ID on partner side. Can be set via API while creating a location or through KitchenHub web dashboard
nameStringNoLocation name on KitchenHub side
streetStringYesLocation street
cityStringYesLocation city
stateStringYesLocation state
zipcodeStringYesLocation zipcode
latFloatYesLocation latitude coordinate
lonFloatYesLocation longitude coordinate

store object

PropertyTypeNullableDescription
idStringNoStore ID on KitchenHub side
partner_store_idStringYesStore ID on partner side. Can be set via API while creating store or through KitchenHub web dashboard
nameStringNoStore name on KitchenHub side

customer object

PropertyTypeNullableDescription
nameStringNoCustomer name
emailStringYesCustomer email. null if email is not available on a provider side
phone_numberStringYesCustomer phone number without country code. null if the email is not available on a provider side
phone_codeStringYesAdditional phone code if a provider uses phone masking. null if it is not available on a provider side

item object

PropertyTypeNullableDescription
idStringYesID of menu item on provider side
partner_idStringYesID of menu item on your side
nameStringNoName of menu item on provider side
quantityIntegerNoQuantity of order item
priceStringNoPrice of order item (includes options prices)
instructionsStringYesCustomer notes for order item
optionsArray[Option]NoList of options for order item

option object

PropertyTypeNullableDescription
idStringYesID of menu option on provider side. null if item ID is not available in order data
partner_idStringYesID of option on your side
nameStringNoName of menu option on provider side
quantityIntegerNoQuantity of item option
priceStringNoPrice of item option
modifier_nameStringYesName of menu modifier on provider side, for example: Choose size. null if modifier name is not available in order data

delivery object

PropertyTypeNullableDescription
typeStringNoIndicates who is responsible for delivery - restaurant or provider
statusStringYesCurrent delivery status. Can be either started, arriving, or delivered. null if order type is pickup or delivery by provider.
notesStringYesDelivery notes. null if delivery notes are not set
addressObjectNoDelivery address info
courierObjectNoCourier info

address object

PropertyTypeNullableDescription
countryStringYesDelivery country. null if order type is pickup
streetStringYesDelivery street. null if order type is pickup
cityStringYesDelivery city. null if order type is pickup
stateStringYesDelivery state. null if order type is pickup
zipcodeStringYesDelivery zip code. null if order type is pickup
unit_numberStringYesAdditional unit number. null if order type is pickup
latitudeFloatYesDelivery latitude. null if order type is pickup or data not available
longitudeFloatYesDelivery longitude. null if order type is pickup or data not available

courier object

PropertyTypeNullableDescription
nameStringYesCourier name. null if order type is pickup or courier is not assigned yet
photo_urlStringYesCourier photo. null if order type is pickup, courier is not assigned yet or this data is not available on the provider side
phone_numberStringYesCourier phone number. null if order type is pickup, courier is not assigned yet or this data is not available on provider side
statusStringYesDispatching status. Can be either pending or assigned. null if order type is pickup

payment object

PropertyTypeNullableDescription
methodStringNoName of payment method used to pay for an order

charges object

PropertyTypeNullableDescription
subtotalStringNosubtotal amount
taxStringNotaxes amount
tipsStringYestips amount
discountStringYesdiscount amount
totalStringNototal amount

timestamps object

All timestamps are in UTC formatted according to ISO8601 standard.

PropertyTypeNullableDescription
placed_atStringNodate and time when the order was created on the provider side
created_atStringNodate and time when the order was created on the KitchenHub side
accepted_atStringYesdate and time when the order was accepted on the KitchenHub side
cancelled_atStringYesdate and time when the order was canceled on the KitchenHub side
cancelled_byStringYes
completed_atStringYesdate and time when order was canceled on KitchenHub side
pickup_atStringNodate and time when the order should be ready for pickup by the customer or courier
delivery_atStringYesdate and time when order should be delivered
scheduled_forStringYesdate and time when order should be delivered if order is for future (asap==false)

Order Example


{
  "order": {
    "id": 5501505922269184,
    "external_id": "4ae18552-60a8-11ee-8553-abf2eec4f777",
    "number": "201523913381757",
    "daily_number": 15,
    "type": "delivery",
    "status": "completed",
    "notes": "Contactless delivery, Please don't ring the doorbell.",
    "paid": true,
    "asap": false,
    "add_disposable_items": true,
    "prep_time_minutes": null,
    "data": {
      
    }
  },
  "provider": {
    "id": "grubhub",
    "name": "GrubHub",
    "merchant_id": "2626147",
    "store_id": "c212a250-3b69-45ab-9184-03fb2072x7xx"
  },
  "store": {
    "id": "c212a250-3b69-45ab-9184-03fb2072x7xx",
    "name": "The Spot Asian Food Hall",
    "partner_store_id": null
  },
  "customer": {
    "name": "Ari S",
    "email": null,
    "phone_number": "3012136310",
    "phone_code": null
  },
  "items": [
    {
      "id": "6035887902",
      "name": "2 Proteins",
      "quantity": 1,
      "price": "22.25",
      "instructions": null,
      "options": [
        {
          "id": "6035887894",
          "name": "Sushi Rice",
          "quantity": 1,
          "price": "0.0",
          "modifier_name": null
        },
        {
          "id": "6035887878",
          "name": "Mango",
          "quantity": 1,
          "price": "0.0",
          "modifier_name": null
        },
        {
          "id": "6035887903",
          "name": "Seaweed Salad",
          "quantity": 1,
          "price": "0.0",
          "modifier_name": null
        }
      ]
    },
    {
      "id": "6027293408",
      "name": "Magic Roll",
      "quantity": 1,
      "price": "13.45",
      "instructions": null,
      "options": [
        
      ]
    },
    {
      "id": "6027293408",
      "name": "Magic Roll",
      "quantity": 1,
      "price": "13.45",
      "instructions": null,
      "options": [
        
      ]
    },
    {
      "id": "6035887902",
      "name": "2 Proteins",
      "quantity": 1,
      "price": "16.75",
      "instructions": null,
      "options": [
        {
          "id": "6035887894",
          "name": "Sushi Rice",
          "quantity": 1,
          "price": "0.0",
          "modifier_name": null
        },
        {
          "id": "6035887867",
          "name": "Avocado Egg Salad",
          "quantity": 1,
          "price": "0.0",
          "modifier_name": null
        },
        {
          "id": "6035887922",
          "name": "Organic Tofu",
          "quantity": 1,
          "price": "0.0",
          "modifier_name": null
        },
        {
          "id": "6035887912",
          "name": "Sesame Seed",
          "quantity": 1,
          "price": "0.0",
          "modifier_name": null
        }
      ]
    }
  ],
  "delivery": {
    "type": "provider",
    "address": {
      "country": "US",
      "street": "1234 Bettstrail Way",
      "city": "Rockville",
      "state": "MD",
      "zipcode": "20854",
      "unit_number": null,
      "latitude": 39.07294,
      "longitude": -77.17325
    },
    "courier": {
      "name": "Donald V",
      "photo_url": "https://s3.amazonaws.com/d5eb54503152.png",
      "phone_number": "2407930399",
      "status": "assigned"
    },
    "status": null,
    "notes": null
  },
  "payment": {
    "method": "CREDIT CARD"
  },
  "charges": {
    "subtotal": "65.9",
    "tax": "3.95",
    "tips": null,
    "discount": null,
    "total": "69.85"
  },
  "timestamps": {
    "placed_at": "2023-10-01T22:20:26Z",
    "created_at": "2023-10-01T22:21:44Z",
    "pickup_at": "2023-10-01T23:45:00Z",
    "accepted_at": "2023-10-01T23:14:44Z",
    "cancelled_at": null,
    "cancelled_by": null,
    "completed_at": "2023-10-01T23:30:45Z",
    "delivery_at": "2023-10-01T23:45:00Z",
    "scheduled_for": "2023-10-01T23:45:00Z"
  }
}