openapi: 3.0.1
info:
title: Public API
description: "# Overview\n\nThe API endpoints are developed around [RESTful](https://en.wikipedia.org/wiki/Representational_state_transfer) principles secure via the OAuth2.0 protocol.\n\nBeyond the entry points, the API also provides a line of communication into your system via [webhooks](https://en.wikipedia.org/wiki/Webhook).\n\nFor testing purposes, we offer a staging environment. Also, more detailed information about the business rules and workflows can be found on the [**Documentation Section**](/docs/)\n\n## Versioning\nEach API is versioned individually, but we follow these rules:\n- Non breaking changes (eg: adding new fields) are added in the current version without previous communication\n- Breaking changes (fields removal, semantic changed or schema update) have the version incremented\n- Users will be notified about new versions and will be given time to migrate (the time will be set on a case by case basis)\n- Once users migrate to the new version, we will deprecate the old ones\n- Once there is a new version for an API, we won't accept new integrations targeting old versions\n\n## API General Definitions\nThe APIs use resource-oriented URLs communicating, primarily, via JSON and leveraging the HTTP headers, [response status codes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status), and verbs.\n\nTo exemplify how the API is to be consumed, consider a fake GET resource endpoint invocation below:\n\n```\ncurl --request GET 'https://{{public-api-url}}/v1/resource/123' \\\n--header 'Authorization: Bearer 34fdabeeafds=' --header 'X-Store-Id: 321'\n```\n\n| Header | Description |\n| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n|`Authorization` | Standard HTTP header is used to associate the request with the originating invoker. The content of this header is a `Bearer` token generated from you client_secret, defined in the [API Auth](#/section/Guides/API-Auth) guide.|\n|`X-Store-Id` | The ID of the store in your system this call acts on behalf of. |\n\n_All resource endpoints expect the `Authorization` header, the remaining headers are explicitly stated in the individual endpoint documentation section._\n\nWith these headers, the system will:\n - Validate the client token, making sure the call is originating from a trusted source.\n - Validate that the Application has the permission to access the `v1/resource/{id}` resource via the Application's pre-configured scopes.\n - Translate your X-Store-Id to our internal store ID (e.g. `AAA`).\n - Validate and retrieve resource `AAA`, that is associated to your Application via store id `321`.\n\nPOST/PUT methods will look similar to the GET calls, but they'll take in a body in the HTTP request (default to the application/json content-type).\n\n```\ncurl --location --request POST 'https://{{public-api-url}}/v1/resource' \\\n--header 'Authorization: Bearer 34fdabeeafds=' --header 'X-Store-Id: 321'\n--data '{\"foo\": \"bar\"}'\n```\n\n## API Authentication/Authorization\n\n\n\n## Webhook\n\nThe Public API is able to send notifications to your system via HTTP POST requests.\n\nEvery webhook is signed using HMAC-SHA256 that is present in the header `X-HMAC-SHA256`, and you can also authenticate the requests using Basic Auth, Bearer Token or HMAC-SHA1 (legacy). Please, refer to [**Webhook Authentication Guide**](/docs/guides-webhook-authentication/) for more details.\n\n_Please work with your Account Representative to setup your Application's Webhook configurations._\n\n```\nExample Base-URL = https://{{your-server-url}}/webhook\n```\n\n### Notification Schema\n\n| **Name** | **Type** | **Description** |\n| ------------------------| ---------| -------------------------------------------------------------------- |\n| eventId | string | Unique id of the event. |\n| eventTime | string | The time the event occurred. |\n| eventType | string | The type of event (e.g. create_order). |\n| metadata.storeId | string | Id of the store for which the event is being published. |\n| metadata.applicationId | string | Id of the application for which the event is being published. |\n| metadata.resourceId | string | The external identifier of the resource that this event refers to. |\n| metadata.resourceHref | string | The endpoint to fetch the details of the resource. |\n| metadata.payload | object | The event object which will be detailed in each Webhook description. |\n\n### Notification Request Example\n\n```\ncurl --location --request POST 'https://{{your-server-url}}/webhook' \\\n--header 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36' \\\n--header 'Authorization: MAC ' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n \"eventId\": \"123456\",\n \"eventTime\": \"2020-10-10T20:06:02:123Z\",\n \"eventType\": \"orders.new_order\",\n \"metadata\": {\n \"storeId\": \"755fd19a-7562-487a-b615-171a9f89d669\",\n \"applicationId\": \"e22f94b3-967c-4e26-bf39-9e364066b68b\",\n \"resourceHref\": \"https://{{public-api-url}}/v1/orders/bf9f1d81-f213-496e-a026-91b6af44996c\",\n \"resourceId\": \"bf9f1d81-f213-496e-a026-91b6af44996c\",\n \"payload\": {}\n }\n}\n```\n\n### Expected Response\n\nThe partner application should return an HTTP 200 response code with an empty response body to acknowledge receipt of the webhook event.\n## Rate Limiting\nPlease, refer to [**Rate Limiting Guide**](/docs/guides-rate-limiting/) for more details.\n\n## Error codes\nThe APIs use standard HTTP status codes to indicate the success or failure of a request. Error codes are divided into two categories: 4XX codes for client-side errors and 5xx codes for server-side errors.\n### 4XX Client-Side Errors\nClient-side errors are indicated by status codes in the 4xx range. These errors are typically the result of a problem with the request made by your application.\nIf a client-side error occurs, our API will return a response that includes an appropriate error message. This message will provide information about the cause of the error. The aim of these messages is to assist you in identifying and resolving the issue.\nFor example, if you submit a request with missing or invalid parameters, you might receive a 400 Bad Request error with a message indicating which parameters were missing or incorrect.\n### 5XX Server-Side Errors\nServer-side errors are represented by status codes in the 5xx range. These errors suggest a problem with our server, not with your application's request.\nServer-side errors are typically transient, meaning they are temporary. If a server-side error occurs, we recommend that the client retries the same request with the exact same parameters.\nFor example, if you get a 500 Internal Server Error, it's possible that our server is suffering a temporary problem. In such cases, retrying the request after a short delay is often successful.\nIf you continually receive server-side errors, reach out to our support team for further assistance."
version: v1
license:
name: Proprietary
servers:
- url: https://{{public-api-url}}
description: Staging server url
tags:
- name: ping_endpoints
description: Endpoints to ping and test system authentication.
x-displayName: Ping
- name: manager_order_endpoints
description: 'Endpoints for applications that act on the merchant/store side of an order rather than as the ordering marketplace — typically Point-of-Sale (POS) systems, Business Intelligence (BI) tools, and reporting integrations.
This domain lets a merchant-side application retrieve a store''s orders and manage them on the store''s behalf as they progress through their lifecycle.'
x-displayName: Orders Manager (POS, BI & Reports)
- name: orders_endpoints
description: 'Endpoints used by ordering marketplaces and other order sources to send orders to a store and keep them up to date.
This domain lets an order source submit new orders as customers place them, reflect later changes as the orders progress, and backfill historical orders for reporting.'
x-displayName: Orders
- name: orders_webhooks
description: Webhooks from orders domains.
x-displayName: Orders Webhooks
- name: manager_orders_webhooks
description: Webhooks delivered to merchant-side applications (POS, BI, and reporting integrations) so they can react to changes in an order as it progresses through its lifecycle.
x-displayName: Orders Manager Webhooks (POS, BI & Reports)
- name: callback_endpoints
description: Endpoints for callback management.
x-displayName: Callback
- name: reports_endpoints
description: Endpoints to reports generation operations
x-displayName: Reports
- name: reports_webhooks
description: Webhooks from the reports generation operations
x-displayName: Reports Webhooks
- name: reviews_endpoints
description: Endpoints for review operations
x-displayName: Reviews
- name: manager_storefront_endpoints
description: Endpoints for applications managing storefront related data and operations.
x-displayName: Storefront Manager
- name: storefront_endpoints
description: Endpoints to manage storefront state
x-displayName: Storefront
- name: storefront_webhooks
description: Webhooks from storefront domain.
x-displayName: Storefront Webhooks
- name: manager_menu_endpoints
description: Endpoints for applications managing menus related data and operations.
x-displayName: Menus Manager
- name: menus_endpoints
description: Endpoints to manage menus.
x-displayName: Menus
- name: menus_webhooks
description: Webhooks from menus domain.
x-displayName: Menus Webhooks
- name: auth_endpoints
description: Endpoints to handle token management.
x-displayName: Auth
- name: delivery_endpoints
description: Endpoints to manage delivery.
x-displayName: Delivery
- name: delivery_webhooks
description: Webhooks from the delivery domain.
x-displayName: Delivery Webhooks
- name: ping_webhooks
description: Webhooks to ping and test the system integration.
x-displayName: Ping Webhooks
- name: storelinks_endpoints
description: Endpoints to pair accounts between platforms for onboarding and offboarding purposes.
x-displayName: Stores Endpoints
- name: storelinks_webhooks
description: Webhooks to manage the store onboarding process.
x-displayName: Stores Webhooks
- name: finance_endpoints
description: Endpoints to handle financial data.
x-displayName: Finance
- name: utils_endpoints
description: Endpoints to provide access to integration utilities.
x-displayName: Integration Utilities
- name: account_pairing_endpoints
description: Endpoints to manage store onboarding and status
x-displayName: Account Pairing
- name: account_pairing_webhooks
description: Webhooks to manage store onboarding and status
x-displayName: Account Pairing Webhooks
- name: inventory_endpoints
description: Endpoints to interact with product inventory.
x-displayName: Inventory
- name: organization_endpoints
description: Endpoints to interact with with organizations/brands/stores and with integration connections.
x-displayName: Organization
- name: manager_loyalty_endpoints
description: Endpoints to manage loyalty.
x-displayName: Loyalty Manager
- name: direct_orders_endpoints
description: Endpoints to get orders directly.
x-displayName: Direct Orders
- name: store_endpoints
description: Endpoints to get store information.
x-displayName: Store
x-webhooks:
orderCreate:
post:
tags:
- manager_orders_webhooks
summary: Order creation webhook
description: 'Notifies a merchant-side integration (POS/BI) that a new order has been created for the store, delivering the full order payload. Acknowledge it via the [**order-created callback**](/api-reference/#operation/orderCreated).
'
operationId: orderCreateWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/Order'
- example:
eventType: orders.new_order
responses:
'200':
$ref: '#/components/responses/200'
'202':
$ref: '#/components/responses/202'
orderUpdate:
post:
tags:
- manager_orders_webhooks
summary: Order update webhook
description: 'Notifies a merchant-side integration (POS/BI) that an existing order has changed, delivering the updated order payload.
'
operationId: orderUpdateWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/Order'
- example:
eventType: orders.update
responses:
'200':
$ref: '#/components/responses/200'
'202':
$ref: '#/components/responses/202'
intentToCancelOrder:
post:
tags:
- orders_webhooks
summary: Intent to cancel order webhook
description: 'Notifies the order source that the platform intends to cancel an order (for example, requested by the store). The source should react and, when applicable, acknowledge the cancellation via the [**update order status**](/api-reference/#operation/updateOrderStatus) endpoint with status `CANCELED`.
'
operationId: intentToCancelOrderWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/IntentToCancelEvent'
- example:
eventType: orders.cancel_order
responses:
2XX:
$ref: '#/components/responses/2XX'
orderStatusUpdate:
post:
tags:
- orders_webhooks
summary: Order status update webhook
description: 'Notifies the order source of a change in an order''s status, delivering the order''s status history.
'
operationId: orderStatusUpdateWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/OrderStatusHistory'
- example:
eventType: orders.order_status_update
responses:
2XX:
$ref: '#/components/responses/2XX'
posInjectionStateUpdate:
post:
tags:
- orders_webhooks
summary: Pos injection state update webhook
description: 'Notifies the order source of a change in the order''s POS injection state (for example, whether the order was successfully injected into the store''s POS, requires manual injection, or failed).
'
operationId: posInjectionStateUpdateWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/PosInjectionStateUpdateEvent'
- example:
eventType: orders.pos_injection_state_update
responses:
2XX:
$ref: '#/components/responses/2XX'
orderConfirm:
post:
tags:
- manager_orders_webhooks
summary: Order confirm notification webhook
description: 'Notifies a merchant-side integration that an order has been confirmed (accepted), including the estimated preparation time when available.
'
operationId: orderConfirmWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/OrderConfirmEvent'
- example:
eventType: orders.confirm
responses:
2XX:
$ref: '#/components/responses/2XX'
orderReady:
post:
tags:
- manager_orders_webhooks
summary: Order Ready status notification webhook
description: 'Notifies a merchant-side integration that an order has been marked ready for pickup by the courier or customer.
'
operationId: orderReady
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/OrderReadyEvent'
- example:
eventType: orders.order_ready
responses:
2XX:
$ref: '#/components/responses/2XX'
orderHandedOff:
post:
tags:
- manager_orders_webhooks
summary: Order Handed Off status notification webhook
description: 'Notifies a merchant-side integration that an order has been handed off to the courier or customer.
'
operationId: orderHandedOff
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/OrderHandedOffEvent'
- example:
eventType: orders.order_handed_off
responses:
2XX:
$ref: '#/components/responses/2XX'
orderFulfilled:
post:
tags:
- manager_orders_webhooks
summary: Order Fulfilled status notification webhook
description: 'Notifies a merchant-side integration that an order has reached its final fulfilled state.
'
operationId: orderFulfilled
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/OrderFulfilledEvent'
- example:
eventType: orders.order_fulfilled
responses:
2XX:
$ref: '#/components/responses/2XX'
menuPublish:
post:
tags:
- menus_webhooks
summary: Menu publish webhook
description: 'Webhook to trigger a menu publish.
If successful, we expect a [**menu publish callback**](/api-reference/#operation/menuPublishCallback). If an error occurred, please publish a [**callback error**](/api-reference/#operation/publishError) instead.'
operationId: menuPublishWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/MenuPublishEvent'
- example:
eventType: menus.menu_publish
responses:
2XX:
$ref: '#/components/responses/2XX'
sendMenu:
post:
tags:
- menus_webhooks
summary: Send menu webhook
description: 'Webhook to trigger a send menu.
If successful, we expect a [**menu send callback**](/api-reference/#operation/menuSendCallback). If an error occurred, please publish a [**callback error**](/api-reference/#operation/publishError) instead.'
operationId: sendMenuWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/NullEvent'
- example:
eventType: menus.send_menu
responses:
2XX:
$ref: '#/components/responses/2XX'
updateMenuEntitiesAvailabilities:
post:
tags:
- menus_webhooks
summary: Update menu entities availabilities webhook
description: 'Webhook to trigger an entities availabilities update.
If successful, we expect an [**update menu entities availabilities callback**](/api-reference/#operation/updateMenuEntitiesAvailabilitiesCallback). If an error occurred, please publish a [**callback error**](/api-reference/#operation/publishError) instead.'
operationId: updateMenuEntitiesAvailabilitiesWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/BulkUpdateItemStatus'
- example:
eventType: menus.update_menu_entities_availabilities
responses:
2XX:
$ref: '#/components/responses/2XX'
upsertMenuHours:
post:
tags:
- menus_webhooks
summary: Upsert menu hours webhook
description: 'Webhook to trigger a menu hours update.
If successful, we expect a [**menu upsert hours callback**](/api-reference/#operation/menuUpsertHours). If an error occurred, please publish a [**callback error**](/api-reference/#operation/publishError) instead.'
operationId: upsertMenuHoursWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/UpsertHoursEvent'
- example:
eventType: menus.upsert_hours
responses:
2XX:
$ref: '#/components/responses/2XX'
pauseStore:
post:
tags:
- storefront_webhooks
summary: Pause store webhook
operationId: pauseStoreWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/NullEvent'
- example:
eventType: storefront.pause_store
responses:
2XX:
$ref: '#/components/responses/2XX'
unpauseStore:
post:
tags:
- storefront_webhooks
summary: Unpause store webhook
operationId: unpauseStoreWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/UnpauseStoreEvent'
- example:
eventType: storefront.unpause_store
responses:
2XX:
$ref: '#/components/responses/2XX'
getStoreAvailability:
post:
tags:
- storefront_webhooks
summary: Get store availability webhook
operationId: getStoreAvailabilityWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/NullEvent'
- example:
eventType: storefront.get_store_availability
responses:
2XX:
$ref: '#/components/responses/2XX'
getStoreHoursConfiguration:
post:
tags:
- storefront_webhooks
summary: Get store hours configuration webhook
operationId: getStoreHoursConfigurationWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/NullEvent'
- example:
eventType: storefront.get_store_hours
responses:
2XX:
$ref: '#/components/responses/2XX'
deliveryStatusUpdate:
post:
tags:
- delivery_webhooks
summary: Update delivery status webhook
operationId: deliveryStatusUpdateWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/DeliveryStatusUpdateEvent'
- example:
eventType: delivery.delivery_status_update
responses:
2XX:
$ref: '#/components/responses/2XX'
requestDeliveryQuotes:
post:
tags:
- delivery_webhooks
summary: Request delivery quotes webhook
operationId: requestDeliveryQuotesWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/RequestDeliveryQuoteEvent'
- example:
eventType: delivery.request_quote
responses:
2XX:
$ref: '#/components/responses/2XX'
acceptDelivery:
post:
tags:
- delivery_webhooks
summary: Accept delivery webhook
operationId: acceptDeliveryWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/AcceptDeliveryEvent'
- example:
eventType: delivery.accept
responses:
2XX:
$ref: '#/components/responses/2XX'
cancelDelivery:
post:
tags:
- delivery_webhooks
summary: Cancel delivery webhook
operationId: cancelDeliveryWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/CancelDeliveryEvent'
- example:
eventType: delivery.cancel
responses:
2XX:
$ref: '#/components/responses/2XX'
updateDeliveryRequest:
post:
tags:
- delivery_webhooks
summary: Update delivery request webhook
operationId: updateDeliveryRequestWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/UpdateDeliveryRequestEvent'
- example:
eventType: delivery.update_request
responses:
2XX:
$ref: '#/components/responses/2XX'
reportGenerated:
post:
tags:
- reports_webhooks
summary: Report generated webhook
operationId: reportGeneratedWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/ReportGeneratedEvent'
- example:
eventType: reports.report_generated
responses:
2XX:
$ref: '#/components/responses/2XX'
ping:
post:
tags:
- ping_webhooks
summary: Ping webhook
description: Used to validate the integration without side effects
operationId: pingWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/PingEvent'
- example:
eventType: ping.ping
responses:
2XX:
$ref: '#/components/responses/2XX'
upsertStore:
post:
tags:
- account_pairing_webhooks
summary: Upsert Store
description: Sent when a store is created or updated in `Public API` internal systems.
If metadata contains a `Store ID`, it means a request to update an existent store, otherwise, it's a creation operation.
It provides the store and credentials data needed to validate the store and create a new `Store ID` in the partner application.
At this point, the store is in `onboarding state` waiting the partner application to finish the onboarding process by providing the validated `Store ID`.
operationId: upsertStorelinkWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/UpsertStorelinkEvent'
- example:
eventType: stores.upsert
responses:
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'409':
description: The provided credentials already exists in another store.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorMessage'
'422':
description: The provided credentials are not compatible with the provided schema version.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorMessage'
2XX:
description: 'The provided credentials are compatible with the provided schema version, successfully saved in the partner application database and available for the validation process (establishing a connection with the service related to the Application ID, e.g.: UberEats).'
removeStore:
post:
tags:
- account_pairing_webhooks
summary: Remove Store
description: Sent when a store is removed from our system. Contains information about the store for which the event was triggered.
operationId: removeStoreWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotification'
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/RemoveStorelinkEvent'
- example:
eventType: stores.remove
responses:
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
2XX:
description: The store credentials for the service related to the Application ID were successfully removed from the partner application database.
fetchCredentials:
post:
tags:
- account_pairing_webhooks
summary: Fetch Credentials (synchronously)
description: Synchronously returns the last version of the credentials schema needed to create and validate a store in the partner application. If the request contains the `Store ID`, it also returns the saved store credentials corresponding to the provided `Store ID`.
operationId: fetchCredentialsWebhook
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EventNotificationBase'
- $ref: '#/components/schemas/OptionalStoreIdInMetadata'
- example:
eventType: stores.fetch_credentials
- type: object
properties:
metadata:
type: object
properties:
payload:
$ref: '#/components/schemas/FetchCredentialsEvent'
responses:
'200':
description: The credentials schema and, if the request contains the Store ID, the correspondent store credentials.
content:
application/json:
schema:
$ref: '#/components/schemas/ViewCredentialsArray'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
paths:
/v1/orders:
post:
tags:
- orders_endpoints
summary: Create order
description: '`RATE LIMIT: 32 per minute`
Pushes a new order into Otter for the store identified by the `X-Store-Id` header. Used by ordering marketplaces and other order sources when a customer places an order.
Provide the order''s line items, fulfillment information, customer payments, and exactly one financial breakdown — `orderTotal` (V1) or `orderTotalV2` (V2). New integrations should prefer `orderTotalV2`. All monetary values use the major unit of the order''s `currencyCode`.
The response returns the order reference (Otter `id`, `friendlyId`, and `storeId`) you can use to correlate and update the order later.
'
operationId: createOrder
parameters:
- $ref: '#/components/parameters/storeIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Order'
required: true
responses:
'200':
description: The order was successfully created.
content:
application/json:
schema:
$ref: '#/components/schemas/OrderReference'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- orders.create
/v1/orders/{orderId}:
put:
tags:
- orders_endpoints
summary: Update order
description: '`RATE LIMIT: 32 per minute`
Replaces the order identified by `orderId` with the full order payload provided in the request body. Send the complete order representation (the same shape used to create it), not a partial patch.
To change only the status, customer payment, or delivery information, prefer the dedicated `/status`, `/payments`, and `/delivery` endpoints. Returns 404 if no order matches the given `orderId` for this store.
'
operationId: updateOrder
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/orderId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Order'
required: true
responses:
'200':
description: The order was successfully updated.
content:
application/json:
schema:
$ref: '#/components/schemas/OrderReference'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- orders.update
/v1/orders/{orderId}/status:
post:
tags:
- orders_endpoints
summary: Update order status
description: '`RATE LIMIT: 32 per minute`
Transitions the order identified by `orderId` to a new status. Only `PREPARED`, `CANCELED`, and `FULFILLED` are accepted by this endpoint.
When transitioning to `CANCELED`, you may include the optional `X-Event-Id` header to acknowledge a cancellation that the platform requested via the intent-to-cancel webhook. The order lifecycle is asynchronous, so a successful call returns `202 Accepted`.
'
operationId: updateOrderStatus
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/eventIdOptionalHeader'
- $ref: '#/components/parameters/orderId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/OrderStatusUpdateRequest'
required: true
responses:
'202':
description: The order status was successfully accepted.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- orders.update
/v1/orders/{orderId}/payments:
put:
tags:
- orders_endpoints
summary: Update order customer payment
description: '`RATE LIMIT: 8 per minute`
Updates the customer payment and financial breakdown for the order identified by `orderId`.
This is a **merge, not a full replace**: each field is overwritten only when the request supplies a non-null value for it. Fields sent as `null` (or omitted) keep their existing value. Provide the financial breakdown via `orderTotal` (V1) or `orderTotalsV2` (V2); when V2 is sent it is validated for consistency with the V1 aggregates. The update is processed asynchronously and returns `202 Accepted`.
'
operationId: updateOrderCustomerPayment
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/orderId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/OrderCustomerPaymentUpdateRequest'
required: true
responses:
'202':
description: The order payment update was successfully accepted.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- orders.update
/v1/orders/{orderId}/delivery:
put:
tags:
- orders_endpoints
summary: Update order delivery information
description: '`RATE LIMIT: 8 per minute`
Updates the delivery information for the order identified by `orderId` — courier details, destination address, vehicle, last known location, and dropoff instructions. Use it to keep delivery state current as the courier progresses. The update is processed asynchronously and returns `202 Accepted`.
'
operationId: updateOrderDeliveryInfo
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/orderId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/OrderDeliveryInfoUpdateRequest'
required: true
responses:
'202':
description: The order delivery information was successfully accepted.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- orders.update
/v1/orders/past-orders:
post:
tags:
- orders_endpoints
summary: Upload past orders
description: '`RATE LIMIT: 32 per minute`; orders must have a status of FULFILLED, REJECTED, or CANCELED.
Backfills already-completed orders for reporting and analytics. Uploaded orders are stored as **read-only** and are **not displayed** in operational views — they exist purely to make historical data available to BI and reporting tools. Up to 100 orders can be uploaded per request.
'
operationId: uploadPastOrders
parameters:
- $ref: '#/components/parameters/storeIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UploadPastOrdersRequest'
required: true
responses:
'200':
description: The orders was successfully uploaded.
content:
application/json:
schema:
$ref: '#/components/schemas/UploadPastOrdersResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- orders.create
/manager/order/v1/orders/order-created:
post:
tags:
- manager_order_endpoints
summary: Notify the result of a Create Order event
description: '`RATE LIMIT: 32 per minute`
Callback used by a merchant-side integration to acknowledge the result of an order-creation webhook it received. Send the `X-Event-Id` of the original webhook event so the platform can correlate the acknowledgement with the order it created.
'
operationId: orderCreated
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/eventIdHeader'
responses:
'200':
description: The Create Order event result was successfully processed
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.orders
/manager/order/v1/orders:
get:
tags:
- manager_order_endpoints
summary: Fetch order feed for a store
description: '`RATE LIMIT: 32 per minute`
Returns a paginated feed of the store''s orders, most useful for POS, BI, and reporting integrations that periodically poll for new and updated orders.
Use `limit` to control page size and the opaque pagination token to page through results — when the response `offsetToken` is absent, no more orders are available. Narrow the window with `minDateTime` / `maxDateTime` (ISO 8601 with time zone). The lookback window is bounded by the platform''s retention period (currently up to the past 20 days).
'
operationId: managerGetOrderFeed
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/opaquePaginationToken'
- $ref: '#/components/parameters/minDateTime'
- $ref: '#/components/parameters/maxDateTime'
responses:
'200':
description: Order feed was successfully retrieved
content:
application/json:
schema:
$ref: '#/components/schemas/OrderFeed'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.orders
/manager/order/v1/sources/{source}/orders/{orderId}:
get:
tags:
- manager_order_endpoints
summary: Fetch order with Manager Info
description: '`RATE LIMIT: 32 per minute`
Returns the full detail of a single order for the given `source` (the ordering marketplace the order came from, e.g. `ubereats`), enriched with merchant-side information: the current POS `injectionState`, the `injectionEvent` that triggered it, any `orderIssues`, and cancellation details when applicable.
Item and modifier identifiers in the returned order are the store''s external (POS) identifiers, so they line up with the merchant''s own catalog.
'
operationId: getManagerOrder
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/orderId'
- $ref: '#/components/parameters/source'
responses:
'200':
description: Order information was successfully retrieved
content:
application/json:
schema:
$ref: '#/components/schemas/OrderWithManagerInfo'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.orders
/manager/order/v1/sources/{source}/orders/{orderId}/confirm:
post:
tags:
- manager_order_endpoints
summary: Request order confirmation
description: '`RATE LIMIT: 32 per minute`
Confirms (accepts) the order for the given `source` on behalf of the store — the typical action a POS takes when the merchant accepts an incoming order. Optionally include `estimatedPrepTimeMinutes` to communicate how long the order will take to prepare. Processed asynchronously; returns `202 Accepted`.
'
operationId: requestOrderConfirmation
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/source'
- $ref: '#/components/parameters/orderId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ManagerConfirmOrderRequest'
required: false
responses:
'202':
description: The order confirmation request was successfully accepted.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.orders
/manager/order/v1/sources/{source}/orders/{orderId}/cancel:
post:
tags:
- manager_order_endpoints
summary: Request order cancelation
description: '`RATE LIMIT: 32 per minute`
Cancels (rejects) the order for the given `source` on behalf of the store. A `cancellationReason` is required; optionally include the `cancelingParty` to record who initiated the cancellation. Processed asynchronously; returns `202 Accepted`.
'
operationId: requestOrderCancelation
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/source'
- $ref: '#/components/parameters/orderId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ManagerCancelOrderRequest'
required: true
responses:
'202':
description: The order cancelation request was successfully accepted.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.orders
/manager/order/v1/sources/{source}/orders/{orderId}/ready-to-pickup:
post:
tags:
- manager_order_endpoints
summary: Mark an order as ready to pickup
description: '`RATE LIMIT: 32 per minute`
Signals that the store has finished preparing the order for the given `source` and it is ready for the courier or customer to collect. Marks all of the order''s station tickets as prepared. Processed asynchronously; returns `202 Accepted`.
'
operationId: markAsReadyToPickup
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/source'
- $ref: '#/components/parameters/orderId'
responses:
'202':
description: The order was successfully marked as ready to pickup.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.orders
/manager/order/v1/sources/{source}/orders/{orderId}/create-packaging-component:
post:
tags:
- manager_order_endpoints
summary: Create a packaging component
description: '`RATE LIMIT: 32 per minute`
Creates a packaging component (a packaging ticket) for the order of the given `source`, used by kitchen/station workflows to print or track packaging for the order. Returns the identifiers of the created order component.
'
operationId: createPackagingOrderComponent
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/source'
- $ref: '#/components/parameters/orderId'
responses:
'200':
description: The packaging component was successfully created.
content:
application/json:
schema:
$ref: '#/components/schemas/OrderComponentId'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.orders
/manager/order/v1/sources/{source}/orders/{orderId}/fulfill:
post:
tags:
- manager_order_endpoints
summary: Mark an order as fulfilled
description: '`RATE LIMIT: 32 per minute`
Marks the order for the given `source` as handed off / fulfilled — the final operational step, once the order has been given to the courier or customer. Processed asynchronously; returns `202 Accepted`.
'
operationId: markAsFulfilled
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/source'
- $ref: '#/components/parameters/orderId'
responses:
'202':
description: The order was successfully marked as fulfilled.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.orders
/manager/order/v1/sources/{source}/orders/{orderId}/close:
post:
tags:
- manager_order_endpoints
summary: Mark a dine-in (open-tab) order as closed
description: 'Marks an open-tab dine-in order as closed. The closing party is always the merchant/POS (system). `RATE LIMIT: 32 per minute`
'
operationId: markDineInOrderClosed
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/source'
- $ref: '#/components/parameters/orderId'
responses:
'202':
description: The order was successfully marked as closed.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'409':
description: Order could not be closed (e.g. already closed or not an open-tab order).
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.orders
/manager/order/v1/sources/{source}/orders/{orderId}/items:
put:
tags:
- manager_order_endpoints
summary: Update order customer items
description: 'Updates customer items for a dine-in order (quantity change, price adjustment, or add item). Only supported when integration slug is d2c-eater-website, order fulfillment type is dine-in, and the order tab is open (order is modifiable). Modifying party and modification request ID are set by the endpoint. `RATE LIMIT: 8 per minute`
'
operationId: managerUpdateOrderCustomerItems
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/source'
- $ref: '#/components/parameters/orderId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/OrderCustomerItemsUpdateRequest'
required: true
responses:
'202':
description: The order customer items update was successfully accepted.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'409':
description: 'Customer items update is not allowed (e.g. slug is not d2c-eater-website, order is not dine-in, or order tab is not open).
'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.orders
/manager/order/v1/sources/{source}/orders/{orderId}/prep-time:
post:
tags:
- manager_order_endpoints
summary: Update order prep time
description: '`RATE LIMIT: 32 per minute`
Updates the estimated preparation time (in minutes) for the order of the given `source`, e.g. when the kitchen revises its estimate after the order was confirmed. Unlike the other manager endpoints, this one uses the `orders.update` scope. Processed asynchronously; returns `202 Accepted`.
'
operationId: updateOrderPrepTime
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/source'
- $ref: '#/components/parameters/orderId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/OrderPrepTimeUpdateRequest'
required: true
responses:
'202':
description: The order new preparation time was successfully accepted.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- orders.update
/manager/storefront/v1/storefront/pause:
post:
tags:
- manager_storefront_endpoints
summary: Request pausing storefronts of a store
description: '`RATE LIMIT: 8 per minute`
'
operationId: pauseStorefronts
parameters:
- $ref: '#/components/parameters/storeIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PauseRequest'
required: true
responses:
'200':
description: The pause request was successfully accepted.
content:
application/json:
schema:
$ref: '#/components/schemas/PauseResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.storefront
/manager/storefront/v1/storefront/unpause:
post:
tags:
- manager_storefront_endpoints
summary: Request unpausing storefronts of a store
description: '`RATE LIMIT: 8 per minute`
'
operationId: unpauseStorefronts
parameters:
- $ref: '#/components/parameters/storeIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UnpauseRequest'
required: true
responses:
'200':
description: The unpause request was successfully accepted.
content:
application/json:
schema:
$ref: '#/components/schemas/UnpauseResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.storefront
/manager/storefront/v1/storefront/pause/request/{requestId}/status:
get:
tags:
- manager_storefront_endpoints
summary: Get the process status details of a pause request
description: '`RATE LIMIT: 8 per minute`
'
operationId: getPauseRequestStatus
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/requestId'
responses:
'200':
description: The get request processing details was successfully accepted.
content:
application/json:
schema:
$ref: '#/components/schemas/ProcessingStatusResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.storefront
/manager/storefront/v1/storefront/unpause/request/{requestId}/status:
get:
tags:
- manager_storefront_endpoints
summary: Get the process status details of an unpause request
description: '`RATE LIMIT: 8 per minute`
'
operationId: getUnpauseRequestStatus
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/requestId'
responses:
'200':
description: The get request processing details was successfully accepted.
content:
application/json:
schema:
$ref: '#/components/schemas/ProcessingStatusResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.storefront
/v1/menus:
get:
tags:
- manager_menu_endpoints
summary: Get the menus for a store
description: '`RATE LIMIT: 8 per minute`
'
operationId: getMenu
parameters:
- $ref: '#/components/parameters/storeIdHeader'
responses:
'200':
description: The store's menu.
content:
application/json:
schema:
$ref: '#/components/schemas/Menus'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- menus.read
post:
tags:
- menus_endpoints
summary: Upsert menus for a store
description: '`RATE LIMIT: 2 per minute`
'
operationId: upsertMenu
parameters:
- $ref: '#/components/parameters/storeIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/MenusUpsertRequest'
required: true
responses:
'202':
description: The menu update will be processed.
content:
application/json:
schema:
$ref: '#/components/schemas/MenuAsynchronousJob'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- menus.upsert
/v1/menus/jobs/{jobId}:
get:
tags:
- manager_menu_endpoints
summary: Get the async menu job status
description: '`RATE LIMIT: 8 per minute`
'
operationId: getAsyncJobStatus
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- name: jobId
in: path
required: true
schema:
type: string
description: The unique identifier of the job.
example: 295f76b4-5725-4bf5-a8ab-97943dbdc3b4
responses:
'200':
description: The menu async job status.
content:
application/json:
schema:
$ref: '#/components/schemas/MenuAsynchronousJob'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- menus.async_job.read
/v1/menus/publish:
post:
tags:
- menus_endpoints
summary: Notify the result of a Publish Menu event
description: '`RATE LIMIT: 8 per minute`
Successful callback response for the [**publish menu**](/api-reference/#operation/menuPublishWebhook) webhook. If an error occurred, please publish a [**callback error**](/api-reference/#operation/publishError) instead. See [**failed event flow**](/docs/menus-integrations-failed-event-flow/) for details.
'
operationId: menuPublishCallback
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/eventIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpsertFullMenuEventCallback'
required: true
responses:
'204':
description: The Publish menu event result was successfully processed
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- menus.publish
/v1/menus/current:
post:
tags:
- menus_endpoints
summary: Notify the result of a Send Menu event
description: '`RATE LIMIT: 4 per minute`
Successful callback response for the [**send menu**](/api-reference/#operation/menuSendCallback) webhook. If an error occurred, please publish a [**callback error**](/api-reference/#operation/publishError) instead. See [**failed event flow**](/docs/menus-integrations-failed-event-flow/) for details.
'
operationId: menuSendCallback
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/eventIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SendMenuEventCallback'
required: true
responses:
'204':
description: The Send Menu event result was successfully processed
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- menus.get_current
/v1/menus/hours:
post:
tags:
- menus_endpoints
summary: Notify the receival of a Upsert Hours Menu event
description: '`RATE LIMIT: 8 per minute`
Successful callback response for the [**upsert hours**](/api-reference/#operation/upsertMenuHoursWebhook) webhook. If an error occurred, please publish a [**callback error**](/api-reference/#operation/publishError) instead. See [**failed event flow**](/docs/menus-integrations-failed-event-flow/) for details.
'
operationId: menuUpsertHours
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/eventIdHeader'
responses:
'204':
description: The Upsert Hours Menu event result was successfully processed
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- menus.upsert_hours
/v1/menus/menu-sync:
post:
tags:
- menus_endpoints
summary: Synchronize store menu with POS menu
description: This endpoint is used to synchronize the store menu with the connected POS.
operationId: posMenuSync
parameters:
- $ref: '#/components/parameters/storeIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PosMenuSyncRequest'
required: false
responses:
'202':
description: The Menu Sync will be processed.
content:
application/json:
schema:
$ref: '#/components/schemas/PosMenuSyncResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- menus.sync
/v1/menus/entity/availability/bulk:
post:
tags:
- menus_endpoints
summary: Notify the result of an Update Menu Entities Availabilities event
description: '`RATE LIMIT: 32 per minute`
Successful callback response for the [**update menu entities availabilities**](/api-reference/#operation/updateMenuEntitiesAvailabilitiesWebhook) webhook. If an error occurred, please publish a [**callback error**](/api-reference/#operation/publishError) instead. See [**failed event flow**](/docs/menus-integrations-failed-event-flow/) for details.
'
operationId: updateMenuEntitiesAvailabilitiesCallback
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/eventIdHeader'
responses:
'204':
description: The Update Menu Entities Availabilities menu entity event result was successfully processed
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- menus.entity_suspension
/manager/menu/v1/menus/publish-targets:
get:
tags:
- manager_menu_endpoints
summary: Get the publish-targets for a store
description: '`RATE LIMIT: 2 per minute`
'
operationId: managerGetMenuPublishTargets
parameters:
- $ref: '#/components/parameters/storeIdHeader'
responses:
'200':
description: The store's menu publish-targets.
content:
application/json:
schema:
$ref: '#/components/schemas/MenuPublishTargets'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.menus
/manager/menu/v1/menus/publish:
post:
tags:
- manager_menu_endpoints
summary: Publish menus to targets for a store
description: '`RATE LIMIT: 2 per minute`
'
operationId: managerPublishMenu
parameters:
- $ref: '#/components/parameters/storeIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/MenuPublishRequest'
required: true
responses:
'202':
description: The menu publish will be processed.
content:
application/json:
schema:
$ref: '#/components/schemas/MenuPublishResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'409':
description: Conflicting Menu targets.
content:
application/json:
schema:
$ref: '#/components/schemas/MenuPublishResponse'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.menus
/manager/menu/v1/menus/menu-sync:
post:
tags:
- manager_menu_endpoints
summary: Synchronize store menu with POS menu
description: '`RATE LIMIT: 2 per minute`
'
operationId: menuSync
parameters:
- $ref: '#/components/parameters/storeIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PosMenuSyncRequest'
required: false
responses:
'202':
description: The Menu Sync will be processed.
content:
application/json:
schema:
$ref: '#/components/schemas/PosMenuSyncResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.menus
/manager/menu/v1/menus/entities/availability/suspend:
post:
tags:
- manager_menu_endpoints
summary: Suspend menu entities targets for a store
description: '`RATE LIMIT: 16 per minute`
'
operationId: managerSuspendMenuEntities
parameters:
- $ref: '#/components/parameters/storeIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SuspendItemsRequest'
required: true
responses:
'202':
description: The suspend menu entities will be processed.
content:
application/json:
schema:
$ref: '#/components/schemas/MenuAsynchronousJob'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.menus
/manager/menu/v1/menus/entities/availability/unsuspend:
post:
tags:
- manager_menu_endpoints
summary: Unsuspend menu entities targets for a store
description: '`RATE LIMIT: 16 per minute`
'
operationId: managerUnsuspendMenuEntities
parameters:
- $ref: '#/components/parameters/storeIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UnsuspendItemsRequest'
required: true
responses:
'202':
description: The suspend menu entities will be processed.
content:
application/json:
schema:
$ref: '#/components/schemas/MenuAsynchronousJob'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.menus
/manager/menu/v1/bootstrap:
post:
tags:
- manager_menu_endpoints
summary: Bootstrap menus for a store
description: '`RATE LIMIT: 2 per minute`
'
operationId: managerBootstrap
parameters:
- $ref: '#/components/parameters/storeIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/BootstrapMenuRequest'
required: true
responses:
'202':
description: The menu will be bootstrapped.
content:
application/json:
schema:
$ref: '#/components/schemas/MenuAsynchronousJob'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.menus
/v1/storefront/availability:
post:
tags:
- storefront_endpoints
summary: Notify about store availability change
description: '`RATE LIMIT: 16 per minute`
'
operationId: postStoreAvailabilityChange
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/eventIdOptionalHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/StoreAvailabilityEventResult'
required: true
responses:
'204':
description: The store availability change was successfully processed
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- storefront.store_availability
/v1/storefront/hours:
post:
tags:
- storefront_endpoints
summary: Notify about store hours configuration change
description: '`RATE LIMIT: 16 per minute`
'
operationId: postStoreHoursConfigurationChange
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/eventIdOptionalHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/StoreHoursConfigurationEventResult'
required: true
responses:
'204':
description: The store hours configuration change was successfully processed.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- storefront.store_hours_configuration
/v1/storefront/pause:
post:
tags:
- storefront_endpoints
summary: Notify the result of a pause request event
description: '`RATE LIMIT: 8 per minute`
'
operationId: postPauseStoreEventResult
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/eventIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PauseStoreEventResult'
required: true
responses:
'204':
description: The pause store event result was successfully processed
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- storefront.store_pause_unpause
/v1/storefront/unpause:
post:
tags:
- storefront_endpoints
summary: Notify the result of an unpause request event
description: '`RATE LIMIT: 8 per minute`
'
operationId: postUnpauseStoreEventResult
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/eventIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UnpauseStoreEventResult'
required: true
responses:
'204':
description: The unpause store event result was successfully processed
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- storefront.store_pause_unpause
/v1/storefront/eater-side/status:
post:
tags:
- storefront_endpoints
summary: Notify about store availability change from the eater side
description: '`RATE LIMIT: 16 per minute`
'
operationId: postEaterSideStoreAvailabilityChange
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/eventIdOptionalHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/StoreAvailabilityEventResult'
required: true
responses:
'204':
description: The store availability change was successfully processed
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- storefront.store_availability
/v1/storefront/eater-side/hours:
post:
tags:
- storefront_endpoints
summary: Notify about store hours configuration change on eater side
description: '`RATE LIMIT: 16 per minute`
'
operationId: postEaterSideStoreHoursConfigurationChange
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/eventIdOptionalHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/StoreHoursConfigurationEventResult'
required: true
responses:
'204':
description: The store hours configuration change was successfully processed.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- storefront.store_hours_configuration
/v1/delivery/{deliveryReferenceId}/status:
put:
tags:
- delivery_endpoints
summary: Update delivery status
description: '`RATE LIMIT: 8 per minute`
'
operationId: updateDeliveryStatus
parameters:
- $ref: '#/components/parameters/deliveryReferenceId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DeliveryStatusUpdateRequest'
required: true
responses:
'204':
description: The event callback was successfully accepted.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- delivery.provider
/v1/delivery/{deliveryReferenceId}/quotes:
post:
tags:
- delivery_endpoints
summary: Notify the result of a request delivery quote event
description: '`RATE LIMIT: 8 per minute`
'
operationId: requestDeliveryQuoteCallback
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/eventIdHeader'
- $ref: '#/components/parameters/deliveryReferenceId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RequestDeliveryQuoteCallbackRequest'
required: true
responses:
'204':
description: The event callback was successfully accepted.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- delivery.provider
/v1/delivery/{deliveryReferenceId}/accept:
post:
tags:
- delivery_endpoints
summary: Notify the result of an accept delivery event
description: '`RATE LIMIT: 8 per minute`
'
operationId: acceptDeliveryCallback
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/eventIdHeader'
- $ref: '#/components/parameters/deliveryReferenceId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AcceptDeliveryCallbackRequest'
required: true
responses:
'204':
description: The event callback was successfully accepted.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- delivery.provider
/v1/delivery/{deliveryReferenceId}/cancel:
post:
tags:
- delivery_endpoints
summary: Notify the result of a cancel delivery event
description: '`RATE LIMIT: 8 per minute`
'
operationId: cancelDeliveryCallback
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/eventIdHeader'
- $ref: '#/components/parameters/deliveryReferenceId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CancelDeliveryCallbackRequest'
required: true
responses:
'204':
description: The event callback was successfully accepted.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- delivery.provider
/v1/delivery/callback/error:
post:
tags:
- delivery_endpoints
summary: Publish delivery callback error
description: '`RATE LIMIT: 16 per minute`
'
operationId: deliveryCallbackError
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/eventIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EventCallbackError'
required: true
responses:
'200':
description: The callback error was successfully accepted.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- callback.error.write
/v1/delivery/{deliveryReferenceId}/update:
post:
tags:
- delivery_endpoints
summary: Notify the result of an update delivery request event
description: '`RATE LIMIT: 8 per minute`
'
operationId: updateDeliveryRequestCallback
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/eventIdHeader'
- $ref: '#/components/parameters/deliveryReferenceId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateDeliveryRequestCallbackRequest'
required: true
responses:
'204':
description: The event callback was successfully accepted.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- delivery.provider
/v1/callback/error:
post:
tags:
- callback_endpoints
summary: Publish callback error
description: "`RATE LIMIT: 16 per minute` \n\nThis is the generalized callback error that should be used to return failures for all webhooks, unless otherwise specified. See [**failed event flow**](/docs/menus-integrations-failed-event-flow/) for details.\n"
operationId: publishError
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/eventIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EventCallbackError'
required: true
responses:
'200':
description: The callback error was successfully accepted.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- callback.error.write
/v1/ping:
get:
tags:
- ping_endpoints
summary: Ping the system
description: '`RATE LIMIT: 8 per minute`
'
operationId: ping
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- name: X-Echo-Error
in: header
required: false
allowEmptyValue: true
schema:
type: string
description: The error message to be returned by the endpoint, for testing purposes.
example: ping test error message
responses:
'200':
description: The ping was successfully received.
content:
application/json:
schema:
$ref: '#/components/schemas/PongObject'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'418':
description: I am a teapot.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorMessage'
security:
- OAuth2.0:
- ping
/v1/reports/{jobId}:
get:
tags:
- reports_endpoints
summary: Request status of the report using jobId
description: '`RATE LIMIT: 2 per minute`
'
operationId: getReportStatus
parameters:
- $ref: '#/components/parameters/jobId'
responses:
'200':
description: Report is found
content:
application/json:
schema:
$ref: '#/components/schemas/GetReportStatusResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- reports.generate_report
/v1/reports/generate:
post:
tags:
- reports_endpoints
summary: Request a business report for multiple stores
operationId: generateReportMulti
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/GenerateReportMultiRequest'
required: true
responses:
'200':
description: The request was successfully processed and report is being generated
content:
application/json:
schema:
$ref: '#/components/schemas/GenerateReportResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- reports.generate_report
/v1/reviews/reply:
post:
tags:
- reviews_endpoints
summary: Reply or schedule a reply to a review
operationId: reviewReply
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ReviewReplyRequest'
required: true
responses:
'200':
description: The reply was successfully posted
content:
application/json:
schema:
$ref: '#/components/schemas/ReviewReplyResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- reviews.reply
/v1/auth/token:
post:
tags:
- auth_endpoints
summary: Generate token
description: Client credentials in the request-body and HTTP Basic Auth are supported.
operationId: requestToken
requestBody:
content:
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/OAuthTokenGenerationRequest'
required: true
responses:
'200':
description: The token was successfully generated.
content:
application/json:
schema:
$ref: '#/components/schemas/HydraToken'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'422':
$ref: '#/components/responses/422'
/v1/auth/oauth2/authorize:
get:
tags:
- auth_endpoints
summary: OAuth 2.0 Authorize Endpoint
description: Request a user's authorization to perform action on their behalf
operationId: oauth2Authorize
parameters:
- in: query
name: client_id
required: true
schema:
type: string
description: The ID of the client (also known as the Application ID).
- in: query
name: redirect_uri
required: true
schema:
type: string
description: The URI to where the user should be redirected when the flow is successfully completed. It must be previously registered at Developer Portal in the application settings.
- in: query
name: response_type
required: true
schema:
type: string
description: Specifies the expected response type. Only "code" is accepted.
- in: query
name: scope
required: true
schema:
type: string
description: The scope to request, multiple scopes are passed delimited by a space character.
- in: query
name: state
required: true
schema:
type: string
description: Can be used to store request-specific data. The server will return the unmodified state value back to the application.
- in: query
name: code_challenge
required: false
schema:
type: string
description: A code verifier generated by the client application transformed by applying a cryptographic hash function, such as SHA-256, and encoding the result using URL-safe Base64 encoding.
- in: query
name: code_challenge_method
required: false
schema:
type: string
description: Method used to transform the code verifier. The most common method is "S256", which stands for SHA-256.
responses:
'302':
description: The token was successfully generated.
headers:
Location:
schema:
type: string
description: Redirect URI
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'422':
$ref: '#/components/responses/422'
/v1/stores:
post:
tags:
- account_pairing_endpoints
summary: Complete Store Onboarding
description: '`RATE LIMIT: 2 per minute`
The asynchronous callback of the Upsert Store Webhook. The partner application will use this endpoint to inform if the store data and credentials provided through the `Upsert Store Webhook` were enough to create/update and validate the store. If informing success, the `Store ID` must be provided to complete the store onboarding process. If informing failure, use the `Error Message` field to provide details about the problem.
'
operationId: upsertStorelinkEventResultEndpoint
parameters:
- $ref: '#/components/parameters/applicationIdHeader'
- $ref: '#/components/parameters/eventIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpsertStorelinkEventResultRequest'
required: true
responses:
'204':
description: If informing success, it means the store onboarding process is complete. If informing failure, it means new credentials need to be provided through the Upsert Store Webhook.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- stores.manage
/v1/stores/status:
put:
tags:
- account_pairing_endpoints
summary: Update Store Status
description: '`RATE LIMIT: 2 per minute`
The partner application should call this endpoint when needing to change the status of a store that already completed the onboarding process.
'
operationId: updateStoreStatusEndpoint
parameters:
- $ref: '#/components/parameters/storeIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateStorelinkStatusRequest'
required: true
responses:
'204':
description: The store status was successfully updated.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- stores.manage
/finance/v1/financial-transactions:
post:
tags:
- finance_endpoints
summary: Post financial transactions
operationId: postFinancialTransactions
description: Post financial data related to a given order.
parameters:
- $ref: '#/components/parameters/storeIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/FinancialTransaction'
required: true
responses:
'202':
description: The financial transaction for the order was successfully processed.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- finance
/finance/v1/financial-invoices:
post:
tags:
- finance_endpoints
summary: Post a financial invoice
operationId: postFinancialInvoice
description: Post a financial invoice containing payout and financial data for orders in a given period of time.
parameters:
- $ref: '#/components/parameters/storeIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/FinancialInvoice'
required: true
responses:
'202':
description: The financial transaction for the order was successfully processed.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- finance
/inventories/v1/summaries:
get:
tags:
- inventory_endpoints
summary: List inventory summaries
operationId: listInventorySummaries
description: '`RATE LIMIT: 32 per minute`
List inventory summaries by the requested parameters.
'
parameters:
- $ref: '#/components/parameters/inventory-summary-limit'
- $ref: '#/components/parameters/opaquePaginationToken'
- $ref: '#/components/parameters/storeIdHeader'
responses:
'200':
description: The inventory summaries were successfully retrieved
content:
application/json:
schema:
$ref: '#/components/schemas/InventorySummariesResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- catalog
/inventories/v1/shipments:
get:
tags:
- inventory_endpoints
summary: List shipments
operationId: listInventoryShipments
description: '`RATE LIMIT: 8 per minute`
List shipments by the requested parameters.
'
parameters:
- $ref: '#/components/parameters/inventory-limit'
- $ref: '#/components/parameters/opaquePaginationToken'
- $ref: '#/components/parameters/storeIdHeader'
responses:
'200':
description: The shipments were successfully retrieved
content:
application/json:
schema:
$ref: '#/components/schemas/ListShipmentsResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- catalog
post:
tags:
- inventory_endpoints
summary: Create shipment
operationId: createShipment
description: '`RATE LIMIT: 32 per minute`
Create a new shipment.
'
parameters:
- $ref: '#/components/parameters/storeIdHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateShipmentRequest'
required: true
responses:
'200':
description: The shipment was successfully created.
content:
application/json:
schema:
$ref: '#/components/schemas/CreateShipmentResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- catalog
/organization/v1/organization:
get:
tags:
- organization_endpoints
summary: Get the organization managed by the user.
operationId: organizationGetOrganization
responses:
'200':
description: The organization managed by the user.
content:
application/json:
schema:
$ref: '#/components/schemas/Organization'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- organization.read
/organization/v1/organization/brands/{brandId}:
get:
tags:
- organization_endpoints
summary: Get a brand of the organization managed by the user.
operationId: organizationGetBrand
parameters:
- $ref: '#/components/parameters/brandId'
responses:
'200':
description: The requested brand.
content:
application/json:
schema:
$ref: '#/components/schemas/Brand'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- organization.read
/organization/v1/organization/brands:
get:
tags:
- organization_endpoints
summary: Get the list of brands of the organization managed by the user.
operationId: organizationListBrands
parameters:
- $ref: '#/components/parameters/limit-2'
- $ref: '#/components/parameters/opaquePaginationToken'
responses:
'200':
description: The list of brands that belong to the organization.
content:
application/json:
schema:
$ref: '#/components/schemas/ListBrandsResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- organization.read
/organization/v1/organization/brands/{brandId}/stores/{storeId}:
get:
tags:
- organization_endpoints
summary: Get a store of the organization managed by the user.
operationId: organizationGetStore
parameters:
- $ref: '#/components/parameters/brandId'
- $ref: '#/components/parameters/storeId'
responses:
'200':
description: The requested store.
content:
application/json:
schema:
$ref: '#/components/schemas/Store'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- organization.read
/organization/v1/organization/brands/{brandId}/stores:
get:
tags:
- organization_endpoints
summary: Get the list of stores of a given brand.
operationId: organizationListStores
parameters:
- $ref: '#/components/parameters/brandId'
- $ref: '#/components/parameters/limit-2'
- $ref: '#/components/parameters/opaquePaginationToken'
responses:
'200':
description: The list of stores of the selected brand.
content:
application/json:
schema:
$ref: '#/components/schemas/ListStoresResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- organization.read
/organization/v1/organization/brands/{brandId}/stores/{storeId}/connection:
get:
tags:
- organization_endpoints
summary: Get the partner application connection with the selected store.
operationId: organizationGetConnection
parameters:
- $ref: '#/components/parameters/brandId'
- $ref: '#/components/parameters/storeId'
responses:
'200':
description: The information about the partner application connection.
content:
application/json:
schema:
$ref: '#/components/schemas/Connection'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- organization.service_integration
post:
tags:
- organization_endpoints
summary: Create a connection for the partner application with the selected store.
operationId: organizationCreateConnection
parameters:
- $ref: '#/components/parameters/brandId'
- $ref: '#/components/parameters/storeId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateConnectionRequest'
required: true
responses:
'204':
description: The connection was successfully created.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'409':
$ref: '#/components/responses/409'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- organization.service_integration
delete:
tags:
- organization_endpoints
summary: Delete the connection between the partner application and the selected store.
operationId: organizationDeleteConnection
parameters:
- $ref: '#/components/parameters/brandId'
- $ref: '#/components/parameters/storeId'
responses:
'204':
description: The connection was successfully deleted.
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- organization.service_integration
/v1/market-intel/discovered-stores:
post:
tags:
- marketintel_endpoints
summary: Notify stores discovered at the geolocations
operationId: postDiscoverStoresResult
parameters:
- $ref: '#/components/parameters/eventIdOptionalHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DiscoverStoresEventResult'
required: true
responses:
'204':
description: The stores discovered updates are successfully processed
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- marketintel.service_integration
/v1/market-intel/store-details:
post:
tags:
- storefront_endpoints
summary: Notify about store details update
operationId: postGetStoreDetailsResult
parameters:
- $ref: '#/components/parameters/eventIdOptionalHeader'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/GetStoreDetailsEventResult'
required: true
responses:
'204':
description: The store details updates were successfully processed
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- marketintel.service_integration
/manager/loyalty/v1/{source}/user/enrollment-config:
get:
tags:
- manager_loyalty_endpoints
summary: Get enrollment config for a loyalty provider
description: '`RATE LIMIT: 8 per minute`
'
operationId: getEnrollmentConfig
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/source-2'
responses:
'200':
description: Enrollment config for the loyalty provider.
content:
application/json:
schema:
$ref: '#/components/schemas/GetEnrollmentConfigResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.loyalty
/manager/loyalty/v1/{source}/user:
get:
tags:
- manager_loyalty_endpoints
summary: Get user by id
description: '`RATE LIMIT: 8 per minute`
'
operationId: getUser
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/source-2'
- $ref: '#/components/parameters/id'
responses:
'200':
description: Get user response.
content:
application/json:
schema:
$ref: '#/components/schemas/GetUserResponse'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.loyalty
post:
tags:
- manager_loyalty_endpoints
summary: Create a loyalty user
description: '`RATE LIMIT: 8 per minute`
'
operationId: createUser
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/source-2'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateUserRequest'
required: true
responses:
'200':
description: Create user response.
content:
application/json:
schema:
$ref: '#/components/schemas/CreateUserResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.loyalty
/manager/loyalty/v1/{source}/user/search:
get:
tags:
- manager_loyalty_endpoints
summary: Search loyalty users
description: '`RATE LIMIT: 8 per minute`
'
operationId: searchUsers
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/opaquePaginationToken'
- $ref: '#/components/parameters/limit-3'
- $ref: '#/components/parameters/source-2'
- $ref: '#/components/parameters/term'
responses:
'200':
description: Search users response.
content:
application/json:
schema:
$ref: '#/components/schemas/SearchUsersResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.loyalty
/manager/loyalty/v1/{source}/rewards/evaluate:
post:
tags:
- manager_loyalty_endpoints
summary: Compute applicable rewards
description: '`Supply both userId and order to get a list of applicable rewards for an order. Supply only userId to get a list of rewards the user can redeem` `RATE LIMIT: 8 per minute`
'
operationId: computeApplicableRewards
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/source-2'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ComputeApplicableRewardsRequest'
required: true
responses:
'200':
description: Compute applicable rewards response.
content:
application/json:
schema:
$ref: '#/components/schemas/ComputeApplicableRewardsResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.loyalty
/manager/loyalty/v1/{source}/rewards/simulate:
post:
tags:
- manager_loyalty_endpoints
summary: Simulate rewards
description: '`Show what the effects will be after applying the selected rewards, and start the rewards transaction, only call this when user selected some reward, otherwise skip this call and use redeemAndAccumulateRewards API call.` `RATE LIMIT: 8 per minute`
'
operationId: simulateRewards
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/source-2'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SimulateRewardsRequest'
required: true
responses:
'200':
description: Simulate rewards response.
content:
application/json:
schema:
$ref: '#/components/schemas/SimulateRewardsResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.loyalty
/manager/loyalty/v1/{source}/rewards/redeem-and-accumulate:
post:
tags:
- manager_loyalty_endpoints
summary: Redeem and accumulate rewards
description: '`Redeem existing rewards and accumulate new rewards` `RATE LIMIT: 8 per minute`
'
operationId: redeemAndAccumulateRewards
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/source-2'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RedeemAndAccumulateRewardsRequest'
required: true
responses:
'200':
description: Redeem and accumulate response.
content:
application/json:
schema:
$ref: '#/components/schemas/RedeemAndAccumulateRewardsResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.loyalty
/manager/loyalty/v1/{source}/rewards/refund:
post:
tags:
- manager_loyalty_endpoints
summary: Refund rewards
description: '`RATE LIMIT: 8 per minute`
'
operationId: refundRewards
parameters:
- $ref: '#/components/parameters/storeIdHeader'
- $ref: '#/components/parameters/source-2'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RefundRewardsRequest'
required: true
responses:
'200':
description: Refund rewards response.
content:
application/json:
schema:
$ref: '#/components/schemas/RefundRewardsResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- manager.loyalty
/v1/eater/order-history:
post:
tags:
- direct_orders_endpoints
summary: query eater's related history orders
description: '`Provide an external eater ID to get a list of order related to that eater.`
'
operationId: eaterOrderHistory
requestBody:
content:
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/EaterOrderHistoryRequest'
required: true
responses:
'200':
description: Eater order history response.
content:
application/json:
schema:
$ref: '#/components/schemas/EaterOrderHistoryResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'422':
$ref: '#/components/responses/422'
security:
- OAuth2.0:
- direct.orders
components:
securitySchemes:
OAuth2.0:
type: oauth2
description: "The **Authorization API** is based on the [OAuth2.0 protocol](https://tools.ietf.org/html/rfc6749), supporting the (Client Credentials)[https://datatracker.ietf.org/doc/html/rfc6749#section-4.4] and the (Authorization Code)[https://datatracker.ietf.org/doc/html/rfc6749#section-4.1] flows. Resources expect a valid token sent as a `Bearer` token in the HTTP `Authorization` header.\n### Scopes\nScopes must be configured by our internal team to be enabled for an app. Once the scopes are configured they can be enabled on the Application Settings Page in Developer Portal. Each endpoint requires a given scope that can be verified on each endpoint documentation. When generating an OAuth2.0 token multiple scopes can be requested.\n\n### Authorization Code Flow\nTo perform this flow, the authorization code flow must be enabled in the Application Settings Page in Developer Portal. When enabling the flow it is mandatory to provide a redirect URI pointing to your application. Once the flow is complete we will redirect the user to this URI passing the 'code' and 'state' parameters.\nThe Authorization Code flow provides a temporary code that the client application can exchange for an access token. To start the flow the application must request the user authorization. This is done by sending a request to https://{{public-api-url}}/v1/auth/oauth2/authorize.\nExample\n```\ncurl --location 'https://{{public-api-url}}/v1/auth/oauth2/authorize?client_id=[CLIENT_ID]&redirect_uri=[REDIRECT_URI]&response_type=code&scope=organization.read&state=8A9D16B4C3E25F6A'\n```\nThis call will return a 302 redirecting the user to our authorization page. If the user approves the application, we will redirect to configured URI passing the authorization code in the query parameter 'code'. The 'state' parameter is also sent to ensure the source of the data.\nWith the authorization code, the client application can generate the token.\n### Client Credentials Flow\nThe client_credentials flow does not require any steps before generating the token. Once your application is ready, and the client_id and client_secret are available, the token can be generated by following the instructions in the next section.\n\n### Generate Token\nTo generate the token, use the `Client ID` and `Client Secret` (provided during onboarding), and optionally the authorization code obtained after performing the Authorization Code flow, to the [Token Auth endpoint](#operation/requestToken) endpoint. The result of this invocation is a token that is valid for a pre-determined time or until it is manually revoked.\n\nThe access token obtained will be sent as a `Bearer` value of the `Authorization` HTTP header.\n\nClient credentials in the request-body and HTTP Basic Auth are supported.\n\n#### Request Example for client_credentials\n```\ncurl --location --request POST 'https://{{public-api-url}}/v1/auth/token' \\\n --header 'Content-Type: application/x-www-form-urlencoded' \\\n --data-urlencode 'scope=ping' \\\n --data-urlencode 'grant_type=client_credentials' \\\n --data-urlencode 'client_id=[APPLICATION_ID]' \\\n --data-urlencode 'client_secret=[CLIENT_SECRET]'\n\n```\n#### Request Example for authorization_code\n```\ncurl --location --request POST 'https://{{public-api-url}}/v1/auth/token' \\\n --header 'Content-Type: application/x-www-form-urlencoded' \\\n --data-urlencode 'scope=ping' \\\n --data-urlencode 'grant_type=authorization_code' \\\n --data-urlencode 'client_id=[APPLICATION_ID]' \\\n --data-urlencode 'client_secret=[CLIENT_SECRET]' \\\n --data-urlencode 'code=[code]' \\\n --data-urlencode 'redirect_uri=[redirect_uri]'\n\n```\n#### Response Example\n```\n{\n \"access_token\": \"oMahtBwBbnZeh4Q66mSuLFmk2V0_CLCKVt0aYcNJlcg.yditzjwCP7yp0PgR6AzQR3wQ1rTdCjkcPeAMuyfK-NU\",\n \"expires_in\": 2627999,\n \"scope\": \"ping orders.create\",\n \"token_type\": \"bearer\"\n}\n```\n\n### Token Usage\n\nThe token provided in field `access_token` is used to authenticate when consuming the API endpoints. Send the token value in the `Authorization` header of every request. The token expiration time is represented in the field `expired_in`, in seconds. Currently, all tokens are valid for 30 days and should be stored and re-used while still valid.\n\nNote that occasionally, a 401 error may be returned for a valid token due to an internal service issue. Such occurrences should be rare. To prevent exposing potential vulnerabilities to attackers, the Public API does not disclose other types of errors in the authentication flow if for any reason the token can't be validated (when it's a valid token then it's ok to return 5XX or other 4XX though - such as 403). In such scenarios, although the internal auth flow avoids retries to prevent attacks, if the token is known to be valid and not expired, a retry with a backoff interval by the client is advised. Another option is to request a new token.\n\n#### Example\n\n```\ncurl --location --request GET 'https://{{public-api-url}}/v1/ping' \\\n --header 'Authorization: Bearer ' \\\n --header 'X-Store-Id: '\n\n```\n"
flows:
clientCredentials:
tokenUrl: /v1/auth/token
scopes:
catalog: Permission to interact with product inventory for existing stores.
delivery.provider: Permission to provide delivery services for existing orders.
finance: Permission to provide financial data for orders/stores.
manager.menus: Permission to manage menus.
manager.orders: Permission to manage orders.
manager.storefront: Permission to manage storefront.
menus.async_job.read: Permission to read the status of a menu upsert job.
menus.entity_suspension: Permission to notify the result of a menu entity availability update, after being requested by a webhook event.
menus.get_current: Permission to send the current state of a menu, after being requested by a webhook event.
menus.publish: Permission to notify the result of a publish menus operation for a given store.
menus.read: Permission to read the current menus for a given store.
menus.upsert: Permission to create/update menus for a given store.
menus.upsert_hours: Permission to notify the receiving of the upsert hours menu event, after being requested by a webhook event.
orders.create: Permission to create new order for a given store.
orders.read: Permission to read orders and connected data.
orders.update: Permission to create and update new orders for a given store.
ping: Permission to ping the system.
reports.generate_report: Permission to request reports for given store(s) and period of time.
reviews.reply: Permission to reply to reviews.
storefront.store_pause_unpause: Permission to notify the result of a pause/unpause operation, after being requested by a webhook event.
storefront.store_availability: Permission to send the current state of store.
storefront.store_hours_configuration: Permission to send the current store hours configuration.
stores.manage: Permission to onboard stores and update the identifier.
callback.error.write: Token has permission to send failed webhook event results.
manager.loyalty: Permission to interact with loyalty services.
direct.orders: Permission to interact with direct order services.
store.read: Permission to query store information.
authorizationCode:
authorizationUrl: /v1/auth/oauth2/authorize
tokenUrl: /v1/auth/token
scopes:
organization.read: Permission to read data for organization/brands/stores on behalf of a user.
organization.service_integration: Permission to manage the your integration with a given store on behalf of a user.
schemas:
StoreId:
type: string
description: The unique identifier of the store in the partner application. This ID, along with the `Application ID`, will be used to match the correct store when performing operations. It cannot be longer than 255 characters and must only contain printable ASCII characters. During on-boarding, this ID will be similar to `onboarding:905bb725-b141-4a9b-832a-1f254f772c94` (where the UUID is the Internal Store ID). During off-boarding, this field will be filled with the last known Store ID, or with an empty string, in case none is found. In that case, please fall back to the provided `internalStoreId` (a.k.a. Sku-Sku ID).
example: partner-store-unique-identifier
SourceExternalIdentifiers:
type: object
nullable: true
properties:
id:
type: string
description: Unique ID for the order that was placed.
example: 69f60a06-c335-46d9-b5a1-97f1a211c514
friendlyId:
type: string
description: ID used for driver pickup and restaurant management.
example: ABCDE
source:
type: string
description: Describes the source of the order, typically from a food ordering marketplace.
example: ubereats
sourceType:
type: string
description: source type of the order
enum:
- POINT_OF_SALE
- ORDERING_MARKETPLACE
- AGGREGATOR
- CUSTOMER_INTERACTION
sourceExternalIdentifiers:
nullable: true
$ref: '#/components/schemas/SourceExternalIdentifiers'
description: The external identifiers.
OrderExternalIdentifiers:
required:
- friendlyId
- id
type: object
properties:
id:
type: string
description: Unique ID for the order that was placed.
example: 69f60a06-c335-46d9-b5a1-97f1a211c514
friendlyId:
type: string
description: ID used for driver pickup and restaurant management.
example: ABCDE
source:
type: string
nullable: true
description: Describes the source of the order, typically from a food ordering marketplace.
example: ubereats
sourceType:
type: string
nullable: true
description: source type of the order
enum:
- POINT_OF_SALE
- ORDERING_MARKETPLACE
- AGGREGATOR
- CUSTOMER_INTERACTION
sourceExternalIdentifiers:
nullable: true
$ref: '#/components/schemas/SourceExternalIdentifiers'
description: The external identifiers.
ItemModifier:
required:
- quantity
type: object
properties:
quantity:
minimum: 1
maximum: 1000
type: integer
description: The number of times the modifier was applied to the given item.
format: int32
example: 1
skuPrice:
type: number
nullable: true
description: The stored sku price of this item
readOnly: true
example: 1
id:
type: string
nullable: true
description: The unique ID of the modifier product.
example: d7a21692-9195-43aa-a58f-5395bba8a804
lineItemId:
type: string
nullable: true
description: The unique ID of the instance of a modifier in an order. Instances of the same modifier across different orders will have different line item IDs. Multiple instances of the same modifier in one order will have different line item IDs if their modifiers are different.
readOnly: true
example: 2f91f9f3-2d7e-4898-ae81-00fe06ed7dbf
skuId:
type: string
nullable: true
description: sku ID of the item.
example: 867b8fdc-cf7b-4fc3-b7e0-4c7b68d8b1cc
name:
type: string
nullable: true
description: The name of the modifier as displayed to the customer.
example: Avocado
price:
type: number
nullable: true
description: The unit price of the modifier (the price for a single application of the modifier, **not** multiplied by `quantity`), in the major unit of the order's `currencyCode`.
example: 1
groupName:
type: string
nullable: true
description: The parent group of the modifier item
example: Add ons
groupId:
type: string
nullable: true
description: The unique ID of the parent group
example: fb52b138-7ac4-42c1-bfd8-664d57113a41
stationId:
type: string
nullable: true
description: The ID of the station the modifier item is assigned to.
readOnly: true
example: a49cbd3e-94e2-462d-a6de-1985e5d98d1c
modifiers:
type: array
nullable: true
description: Nested modifiers applied to the item.
maxItems: 100
items:
$ref: '#/components/schemas/ItemModifier'
Item:
required:
- quantity
type: object
properties:
quantity:
minimum: 1
maximum: 1000
type: integer
description: The quantity of the item ordered by the customer.
format: int32
example: 1
skuPrice:
type: number
nullable: true
description: The stored sku price of this item
readOnly: true
example: 5.9
id:
type: string
nullable: true
description: The unique ID of the item.
example: 33e0418f-3d56-4360-ba03-18fc5f8844a3
lineItemId:
type: string
nullable: true
description: The unique ID of the instance of an item in an order. Instances of the same item across different orders will have different line item IDs. Multiple instances of the same item in one order will have different line item IDs if their modifiers are different.
readOnly: true
example: 2f91f9f3-2d7e-4898-ae81-00fe06ed7dbf
skuId:
type: string
nullable: true
description: sku ID of the item.
example: 867b8fdc-cf7b-4fc3-b7e0-4c7b68d8b1cc
name:
type: string
nullable: true
description: The name of the item as displayed to the customer.
example: Juicy Cheeseburger
note:
type: string
nullable: true
description: An optional item-level note provided by the customer.
example: Please cook to well done!
categoryId:
deprecated: true
type: string
nullable: true
description: The unique ID of the category of this item.
example: 303de078-870d-4349-928b-946869d4d69b
internalCategoryId:
type: string
nullable: true
description: Otter's internal identifier for the item's category
example: 76a66bba-48fb-4bac-80ee-2616a5ca1ab9
categoryName:
deprecated: true
type: string
nullable: true
description: The name of the category of this item.
example: Burgers
internalCategoryName:
type: string
nullable: true
description: Otter's internal name for the item's category
example: Burgers
stationId:
type: string
nullable: true
description: The ID of the station the item is assigned to.
readOnly: true
example: 5247b8a1-77de-4844-b024-cb59fcec59bd
price:
type: number
nullable: true
description: The unit price of the item (the price for a single unit, **not** multiplied by `quantity`), in the major unit of the order's `currencyCode`. The order's `subtotal` is the sum of item and modifier prices across the line items.
example: 5.9
modifiers:
type: array
nullable: true
description: Modifiers to the base item.
maxItems: 100
items:
$ref: '#/components/schemas/ItemModifier'
PersonalIdentifiers:
type: object
nullable: true
properties:
taxIdentificationNumber:
type: string
nullable: true
description: Person tax identification number.
example: 1234567890
serviceProviderId:
type: string
nullable: true
description: External service provider ID i.e. Courier Id.
example: 12345ba6-789e-123f-4e56-d78db90d123b
description: The person's personal identifiers (e.g. tax identification number).
Person:
type: object
nullable: true
properties:
name:
type: string
nullable: true
description: The person's name as it should be displayed.
example: Jane Doe
maxLength: 255
phone:
type: string
nullable: true
description: The person's phone number.
example: +1-555-555-5555
maxLength: 25
phoneCode:
type: string
nullable: true
description: A code or extension of the phone number.
example: 111 11 111
maxLength: 25
email:
type: string
nullable: true
description: The person's email address.
example: email@email.com
personalIdentifiers:
$ref: '#/components/schemas/PersonalIdentifiers'
description: The recipient information.
Courier:
type: object
nullable: true
properties:
name:
type: string
description: The person's name as it should be displayed.
nullable: true
example: Jane Doe
phone:
type: string
description: The person's phone number.
nullable: true
example: +1-555-555-5555
phoneCode:
type: string
nullable: true
description: A code or extension of the phone number.
example: 111 11 111
email:
type: string
description: The person's email address.
nullable: true
example: email@email.com
personalIdentifiers:
$ref: '#/components/schemas/PersonalIdentifiers'
description: Details about the delivery courier.
Location:
required:
- latitude
- longitude
type: object
nullable: true
properties:
latitude:
type: number
description: The latitude of the location.
format: double
example: 38.8977
longitude:
type: number
description: The longitude of the location.
format: double
example: 77.0365
description: Latitude and longitude of the address.
Address:
type: object
nullable: true
properties:
fullAddress:
type: string
nullable: true
description: Full, human comprehensible address. It is usually formatted in the order appropriate for your locale.
example: 123 Sample Street Ste 100, San Francisco, CA 94103
postalCode:
type: string
description: Postal code of the address.
example: '20500'
city:
type: string
description: The city/town portion of the address.
example: Washington
state:
type: string
description: Highest administrative subdivision which is used for postal addresses of a country or region. For example, this can be a state, a province, or a prefecture.
example: DC
countryCode:
type: string
description: CLDR country code. See http://cldr.unicode.org/
example: US
addressLines:
type: array
nullable: true
description: Address lines (e.g. street, PO Box, or company name) or the full single line address (e.g. street, city, state, country, zip).
example:
- 1600 Pennsylvania Avenue NW
- 123 Sample Street Ste 100, San Francisco, CA 94103
items:
type: string
linesOfAddress:
type: array
nullable: true
deprecated: true
description: 'Deprecated: use addressLines. Address lines (e.g. street, PO Box, or company name) or the full single line address (e.g. street, city, state, country, zip).'
example:
- 1600 Pennsylvania Avenue NW
- 123 Sample Street Ste 100, San Francisco, CA 94103
items:
type: string
location:
$ref: '#/components/schemas/Location'
description: Order delivery address.
SignatureRequirement:
type: object
nullable: true
properties:
enabled:
type: boolean
description: Marks the signature requirement as required.
example: true
collectSignerName:
type: boolean
description: Whether the signer's name should be collected.
example: true
collectSignerRelationship:
type: boolean
description: Whether the signer's relationship with the intended recipient should be collected.
example: true
description: Enables and configure the signature requirement.
PictureRequirement:
type: object
nullable: true
properties:
enabled:
type: boolean
description: Marks the picture requirement as required.
example: true
description: Enables and configure the picture requirement.
VerificationRequirements:
type: object
nullable: true
properties:
signatureRequirement:
$ref: '#/components/schemas/SignatureRequirement'
pictureRequirement:
$ref: '#/components/schemas/PictureRequirement'
description: Verification requirements for the delivery.
DropoffInstructions:
type: object
nullable: true
properties:
dropoffType:
type: string
description: The drop-off type for the delivery.
enum:
- MEET_AT_DOOR
- LEAVE_AT_DOOR
- MEET_IN_LOBBY
verificationRequirements:
$ref: '#/components/schemas/VerificationRequirements'
description: Requirements to verify the completion of the delivery.
DeliveryInfo:
type: object
nullable: true
properties:
courier:
$ref: '#/components/schemas/Courier'
destination:
$ref: '#/components/schemas/Address'
licensePlate:
type: string
nullable: true
description: License plate of a vehicle used by the courier.
example: ABC 123
makeModel:
type: string
nullable: true
description: Make and model of a vehicle used by the courier.
example: Honda CR-V
lastKnownLocation:
$ref: '#/components/schemas/Location'
dropoffInstructions:
$ref: '#/components/schemas/DropoffInstructions'
note:
type: string
nullable: true
description: Special delivery instructions, if any.
example: Gate code 123
description: Information on order's delivery process.
OrderTotal:
required:
- subtotal
type: object
properties:
subtotal:
type: number
description: 'The order''s calculated subtotal: the sum of all item and modifier prices **before** tax, tips, fees, and discounts are applied. This is the value the platform computes from the line items.
All amounts in this object are expressed in the major unit of the order''s `currencyCode` (for example `11.97` means 11 dollars and 97 cents), never in minor units (cents).'
example: 11.97
claimedSubtotal:
type: number
nullable: true
description: The subtotal as claimed by the order source (the ordering marketplace), which is **not guaranteed to match** the calculated `subtotal`. When you send an order, set this only if the source reports a subtotal that may differ from the sum of the line items; otherwise omit it and `subtotal` is used. Downstream reconciliation and reporting use this to surface discrepancies between what the source claimed and what the items add up to.
example: 11.97
discount:
type: number
nullable: true
description: The total discount applied to the order, represented as a **negative** value (a discount reduces what the customer pays), e.g. `-1.10`. On input either sign is accepted — the platform normalizes the value to negative (it takes the absolute value and negates it) — but responses always return it negative. This is a single aggregate figure; to break a discount down by who funded it (restaurant, marketplace, voucher, promotion, operator, or loyalty) use `orderTotalV2` instead.
example: -1.1
tax:
type: number
nullable: true
description: Total tax paid by the customer for this order. This is an aggregate; for a per-line tax / VAT breakdown use `orderTotalV2`.
example: 1.1
tip:
type: number
nullable: true
description: Total tip paid by the customer. This is an aggregate that does not distinguish a tip destined for the restaurant from a tip destined for the delivery courier — `orderTotalV2` splits those into `tipForRestaurant` and `tipForServiceProviderCourier`.
example: 2
deliveryFee:
type: number
nullable: true
description: Total delivery fee paid by the customer. This is an aggregate that does not distinguish a fee for store-provided delivery from a fee for marketplace-provided delivery — `orderTotalV2` splits those into `feeForRestaurantProvidedDelivery` and `feeForServiceProviderDelivery`.
example: 5
total:
type: number
nullable: true
description: 'The grand total: everything paid by the customer for this order (subtotal + tax + tip + fees − discounts). This is the amount used as the customer-facing order value in receipts, reporting, and reconciliation.'
example: 19.07
couponCode:
type: string
nullable: true
description: Coupon code applied to the order. When an order carries multiple coupon codes they are joined into this single string with the pipe character (`|`) as a separator (for example `SAVE5|FREESHIP`). To send or receive coupon codes as a structured list, use `orderTotalV2.customerTotal.couponCodes`.
example: VWXYZ98765
description: 'Flat, customer-facing breakdown of an order''s monetary values (V1).
`orderTotal` captures only what the customer was charged, as a small set of aggregate figures. It cannot express per-line taxes, the source of a discount, the split of tips/delivery fees between the store and the marketplace, or the store''s net payout and the marketplace''s charges. For any of those, prefer the richer `orderTotalV2`.
When creating or updating an order you must supply **at least one** of `orderTotal` or `orderTotalV2`. You may send both; if you do, `orderTotalV2` takes precedence for the financial breakdown and the `orderTotal` aggregates are checked against it for consistency. All values are in the major unit of the order''s `currencyCode`.'
SimpleFinanceLine:
required:
- subType
- name
- value
type: object
properties:
subType:
type: string
nullable: false
enum:
- VALUE
- TAX
- VALUE_WITH_TAX
- VAT
description: type of the finance line.
name:
type: string
nullable: false
description: name of the finance line.
example: sales tax.
value:
type: number
nullable: false
description: money amount.
example: 3.4
description: simple finance line.
CompositeFinanceLine:
required:
- breakdown
type: object
properties:
breakdown:
type: array
minItems: 1
description: Breakdown values for the finance line.
items:
$ref: '#/components/schemas/SimpleFinanceLine'
description: composite finance line can represent a value, tax and VAT for a given line as a list of SimpleFinanceLine objects
FinancialData:
required:
- foodSales
type: object
properties:
foodSales:
nullable: false
description: Breakdown of the total value of items within the order.
allOf:
- $ref: '#/components/schemas/CompositeFinanceLine'
feeForRestaurantProvidedDelivery:
nullable: true
description: Extra charge to the customer when order is delivered by the store itself.
allOf:
- $ref: '#/components/schemas/CompositeFinanceLine'
restaurantFundedDiscount:
nullable: true
description: Discount funded by the restaurant.
allOf:
- $ref: '#/components/schemas/CompositeFinanceLine'
voucherDiscount:
nullable: true
description: Discount provided by voucher.
allOf:
- $ref: '#/components/schemas/CompositeFinanceLine'
promotionDiscount:
nullable: true
description: Discount provided by item promotion.
allOf:
- $ref: '#/components/schemas/CompositeFinanceLine'
operatorDiscount:
nullable: true
description: Discount provided by operator when the order was placed.
allOf:
- $ref: '#/components/schemas/CompositeFinanceLine'
loyaltyDiscount:
nullable: true
description: Discount provided by loyalty programs.
allOf:
- $ref: '#/components/schemas/CompositeFinanceLine'
tipForRestaurant:
nullable: true
description: Tip for the restaurant.
allOf:
- $ref: '#/components/schemas/CompositeFinanceLine'
adjustments:
nullable: true
description: Any adjustments that may happen to the order total value.
allOf:
- $ref: '#/components/schemas/CompositeFinanceLine'
packingFee:
nullable: true
description: Fee charged to the customer for the process of packing and fulfilling the order.
allOf:
- $ref: '#/components/schemas/CompositeFinanceLine'
bagFee:
nullable: true
description: Fee charged to the customer for providing bags for the order.
allOf:
- $ref: '#/components/schemas/CompositeFinanceLine'
serviceProviderDiscount:
nullable: true
description: Discount funded by the service provider (order source).
allOf:
- $ref: '#/components/schemas/CompositeFinanceLine'
tipForServiceProviderCourier:
nullable: true
description: Tip for the courier from the service provider.
allOf:
- $ref: '#/components/schemas/CompositeFinanceLine'
feeForServiceProviderDelivery:
nullable: true
description: Fee charged to the customer for a delivery provided by the service provider.
allOf:
- $ref: '#/components/schemas/CompositeFinanceLine'
smallOrderFee:
nullable: true
description: Fee charged to the customer when the order value is less than the minimum value.
allOf:
- $ref: '#/components/schemas/CompositeFinanceLine'
serviceFee:
nullable: true
description: Any service fees charged by the service provider to the customer.
allOf:
- $ref: '#/components/schemas/CompositeFinanceLine'
otherFee:
nullable: true
description: All the extra costs that the customer has to pay, are different from tips, delivery fees, bag fees, packing fees, and service fees.
allOf:
- $ref: '#/components/schemas/CompositeFinanceLine'
netPayout:
nullable: true
description: The net payout received by the store.
allOf:
- $ref: '#/components/schemas/CompositeFinanceLine'
couponCodes:
nullable: true
type: array
items:
type: string
description: Any codes entered by the customer at order checkout.
example:
- TACOWED5OFF
description: "Breakdown of order values. Represents total values, fees, discounts, and any possible adjustments that may happen in the order value.\n\nBreakdown lists can be used to represent aggregate values (e.g. order total value) or, when available, can accurately represent the values of each item/fee/tax/charges related to the order.\n\nAll objects in breakdown lists have a required property \"subType\". Allowed values are:\n\n**VALUE**: represent the net value of the order/item/fee. Should be used in the following cases:\n - when the amount does not contain taxes or VAT\n - when tax/VAT is a known value, in that case, the list must contain an object with subtype TAX or VAT representing this value.\n\n**TAX**: represent the tax value for the order/item/fee. Should be used when tax amount is available, in that case, this information should be part of the breakdown list with the \"VALUE\" as the net amount, example below:\n\n\n ```\n \"breakdown\": [\n {\n \"name\": \"Item 1\",\n \"value\": 10,\n \"subType\": \"VALUE\"\n },\n {\n \"name\": \"Item 1 - Tax\",\n \"value\": 2,\n \"subType\": \"TAX\"\n }\n ]\n ```\n\n\n**VAT**: represents the amount for value-added tax. Should be used when the order/item/fee contains VAT. In that case, this information should be part of the breakdown list with the \"VALUE\" as net amount, example below:\n\n\n ```\n \"breakdown\": [\n {\n \"name\": \"Item 1\",\n \"value\": 12,\n \"subType\": \"VALUE\"\n },\n {\n \"name\": \"Item 1 - Tax\",\n \"value\": 2,\n \"subType\": \"VAT\"\n }\n ]\n ```\n\n\n**VALUE_WITH_TAX**: represents the gross value of the order/item/fee. Should be used when the value includes tax/VAT and values related to taxation are not available.\n\n\n ```\n \"breakdown\": [\n {\n \"name\": \"Item 1\",\n \"value\": 12,\n \"subType\": \"VALUE_WITH_TAX\"\n }\n ]\n ```"
CustomerPaymentV2:
type: object
nullable: true
properties:
customerPaymentDue:
type: number
nullable: true
description: The portion of the overall order cost that will be collected when the order is delivered, or when picked up by the customer at the store. This field should not be set if the order was pre-paid.
example: 1
customerPrepayment:
type: number
nullable: true
description: The portion of the overall order cost that was paid upfront by the customer (online payment), with the remaining portion in the customerPaymentDue. In most cases the order value will be covered entirely by prepayment or entirely by payment_due. But in some cases mixing is allowed.
example: 1
customerAmountToReturn:
type: number
nullable: true
description: "Change (cash back) to be returned to the customer by the courier or store when the order has payment due value.\n\n Scenario:\n 1. Customer places an order for $7.50.\n 2. In the service app, after selecting Cash as payment type, the customer is presented with an additional field to indicate that order will be paid with a single $20 bill.\n 3. When the order is delivered, the courier should have $12.50 in cash on hand to complete the transaction.\n"
example: 1
paymentDueToRestaurant:
type: number
nullable: true
description: The portion of the overall order cost that was received directly by restaurant/store when the order is delivered or picked up. Should be used when customerPaymentDue is set. If payment due is entirely received by the store, customerPaymentDue and paymentDueToRestaurant will have the same value.
example: 1
description: Details about customer payment.
Payout:
type: object
nullable: true
properties:
payoutFromServiceProvider:
type: number
nullable: true
description: Amount the store is paid out by the order source (the ordering marketplace the order came from). For marketplace orders this is usually the customer total minus the marketplace's `serviceProviderCharge` deductions.
example: 1
payoutFrom3rdParty:
type: number
nullable: true
description: Amount the store is paid out by a third-party organization involved in the order (for example a separate payment or delivery aggregator), when applicable.
example: 1
cashPayout:
type: number
nullable: true
description: Amount the store effectively keeps from cash collected directly from the customer at pickup or delivery (cash never flows through the marketplace).
example: 1
description: Breakdown of the net payout the store receives for this order, by source of the payout. The sum of these fields represents the money the store ultimately nets; pair it with `serviceProviderCharge` to reconcile against the customer-facing `customerTotal`. Amounts are in the major unit of the order's `currencyCode`.
ServiceProviderCharge:
type: object
nullable: true
properties:
commission:
$ref: '#/components/schemas/CompositeFinanceLine'
nullable: true
description: Commission charged by the order source (the ordering marketplace / service provider) for facilitating the sale — typically the largest deduction from the store's revenue. Expressed as a positive amount that the marketplace keeps.
processingFee:
$ref: '#/components/schemas/CompositeFinanceLine'
nullable: true
description: Payment-processing fee retained by the service provider for handling the customer's payment.
salesTaxWithheld:
$ref: '#/components/schemas/CompositeFinanceLine'
nullable: true
description: Sales tax that the marketplace collects from the customer and remits to the tax authority on the store's behalf, withholding it from the payout. Use this to reconcile the tax in `customerTotal` against what the store actually nets.
deliveryFeeForRestaurant:
$ref: '#/components/schemas/CompositeFinanceLine'
nullable: true
description: Delivery fee the service provider bills to the restaurant (as opposed to the delivery fee charged to the customer) when the marketplace provides delivery.
advertisingFee:
$ref: '#/components/schemas/CompositeFinanceLine'
nullable: true
description: Advertising / marketing fee charged by the service provider for promoting the store on the marketplace.
chargesAdjustments:
$ref: '#/components/schemas/CompositeFinanceLine'
nullable: true
description: Adjustments the service provider applies to its charges for this order (corrections, credits, or extra deductions). May be positive or negative.
otherFees:
$ref: '#/components/schemas/CompositeFinanceLine'
nullable: true
description: Any other fees deducted by the service provider that do not fit the categories above.
description: Breakdown of the charges the order source (the ordering marketplace / service provider) deducts from or bills to the store for this order. These are **not** charges paid by the customer — they reduce the store's gross revenue. Each line is a `CompositeFinanceLine` so the value can be split into net value, tax, and VAT. Together with `payout`, this object lets finance, BI, and reporting tools reconcile customer-facing revenue (`customerTotal`) against what the store ultimately nets.
OrderTotalV2:
required:
- customerTotal
type: object
nullable: true
properties:
customerTotal:
nullable: false
description: 'The customer perspective: every charge, fee, tax, and discount that makes up what the customer was billed. This is the only required part of `orderTotalV2`. See `FinancialData` for the full list of line types and how the `breakdown`/`subType` mechanism encodes value vs. tax vs. VAT.'
allOf:
- $ref: '#/components/schemas/FinancialData'
customerPayment:
nullable: true
description: 'The cash-flow perspective: how the `customerTotal` was actually settled — how much was prepaid online, how much is still collectable on delivery/pickup, how much of that is collected directly by the store, and any cash change owed back to the customer. The amounts and payment methods here must be consistent with the top-level `customerPayments` array on the order.'
allOf:
- $ref: '#/components/schemas/CustomerPaymentV2'
payout:
nullable: true
description: 'The store-settlement perspective: a breakdown of the net payout the store receives for this order, split by who pays it out (the marketplace, a third party, or cash collected directly). Provide it once payout information is known during the order lifecycle.'
allOf:
- $ref: '#/components/schemas/Payout'
serviceProviderCharge:
nullable: true
description: 'The marketplace-deduction perspective: the charges the order source (the ordering marketplace / service provider) takes from or bills to the store for this order, such as commission, payment processing, withheld sales tax, advertising, and delivery fees billed to the restaurant. These reduce the store''s gross revenue and, together with `payout`, let downstream finance/BI tools reconcile customer revenue against what the store nets.'
allOf:
- $ref: '#/components/schemas/ServiceProviderCharge'
description: "Richer, line-itemized breakdown of an order's monetary values (V2).\n\n`orderTotalV2` is the preferred way to describe order economics. Where the V1 `orderTotal` exposes only flat customer-facing aggregates, V2 captures four distinct perspectives, each as its own object:\n\n- **`customerTotal`** — what the customer was charged (food, fees, taxes,\n discounts, tips), with per-line tax/VAT detail.\n\n- **`customerPayment`** — how that total was settled (prepaid vs. collectable,\n cash change, amount collected directly by the store).\n\n- **`payout`** — what the store actually receives.\n- **`serviceProviderCharge`** — what the marketplace deducts (commission,\n processing, withholdings, etc.).\n\n\nSign conventions: charges the customer pays are **positive**; discounts are **negative**. All amounts are in the major unit of the order's `currencyCode`.\n\nWhen creating or updating an order you must supply **at least one** of `orderTotal` or `orderTotalV2`. You may send both; when both are present `orderTotalV2` takes precedence for the financial breakdown. In that case the platform also performs a **soft consistency check** between the V1 aggregates and the V2 line items (within a ±0.01 tolerance): `total` against the sum of the customer-charge lines, `tax` against the sum of all tax lines, `discount` against the funded-discount lines, `deliveryFee` against the delivery-fee lines, and `tip` against the tip lines. A mismatch is logged/recorded for monitoring but does **not** reject the request."
CardInfo:
required:
- paymentNetwork
- type
type: object
nullable: true
deprecated: true
description: Additional card information.
properties:
paymentNetwork:
type: string
description: The payment network (aka card brand or card scheme) for this card.
enum:
- MASTERCARD
- MASTERCARD_MAESTRO
- VISA
- AMEX
- DINERS
- ELO
- HIPERCARD
- BANRICOMPRAS
- NUGO
- GOODCARD
- ELO_MAIS
- GREENCARD
- VEROCARD
- COOPER
- NUTRICARD
- VR
- SODEXO
- OTHER
type:
type: string
description: The payment type of the card.
enum:
- CREDIT
- DEBIT
- VOUCHER
- OTHER
RecordProviderType:
type: string
enum:
- ALLINPAY
- CHECKOUT
- CSS
- MERCADO_PAGO
- OLIVENETWORKS
- SHOUQIANBA
- STRIPE
- UNIONPAY
- VAN_DAOU
- VAN_JTNET
- VAN_KICC
- VAN_KIS
- VAN_KOVAN
- VAN_KSNET
- VAN_NICE
- VAN_SMARTRO
- UNKNOWN
example: STRIPE
description: The type of payment provider.
RecordPaymentType:
type: string
enum:
- ACH_CREDIT
- ACH_DEBIT
- ACSS_DEBIT
- ALIPAY_MINIAPP
- ALI_PAY
- BACS_DEBIT
- BANK_TRANSFER
- BECS_DEBIT
- BOLETO
- CARD
- CARD_PRESENT
- CASH
- CHECK
- CHECKOUT_SESSION
- ETC
- EXTERNAL_CASH_BALANCE
- GIFT_CARD
- INTERNAL_CASH_BALANCE
- KAKAO_PAY
- LIABILITY_BALANCE
- LINKED_BANK_ACCOUNT
- NAVER_PAY
- PIX
- QRCODE
- QRCODE_ALIPAY
- QRCODE_WECHAT
- SEPA_DEBIT
- SPEI_BANK_TRANSFER
- WALLET
- WECHAT_PAY
- UNKNOWN
example: CARD
description: The type of payment method.
CardBrandType:
type: string
enum:
- UNKNOWN
- AMEX
- DINERS_CLUB
- DISCOVER
- JCB
- MASTERCARD
- UNION_PAY
- VISA
- GIROCARD
- EFTPOS_AU
- INTERAC
description: The brand of the card.
example: VISA
CardFundingType:
type: string
enum:
- UNKNOWN
- CREDIT
- DEBIT
- PREPAID
description: The funding type of the card.
example: CREDIT
CardWalletType:
type: string
enum:
- UNKNOWN
- APPLE_PAY
- GOOGLE_PAY
description: The type of wallet associated with the card.
example: APPLE_PAY
PaymentDetailsCard:
type: object
description: Details of a card payment method.
properties:
brandType:
$ref: '#/components/schemas/CardBrandType'
expiration:
type: object
properties:
year:
type: integer
description: The expiration year of the card.
example: 2025
month:
type: integer
description: The expiration month of the card.
example: 12
fundingType:
$ref: '#/components/schemas/CardFundingType'
walletType:
$ref: '#/components/schemas/CardWalletType'
lastFour:
type: string
description: The last four digits of the card.
example: '1234'
walletLastFour:
type: string
description: The last four digits of the wallet account.
example: '5678'
authorizationCode:
type: string
description: The authorization code for the card.
example: auth_code_123
applicationPreferredName:
type: string
description: The preferred name of the application.
example: MyApp
fingerprint:
type: string
description: The fingerprint of the card.
example: fingerprint_abc123
readMethod:
type: string
description: The method used to read the card.
example: chip
MandateStatus:
type: string
enum:
- ACTIVE
- INACTIVE
- PENDING
description: The status of the mandate.
example: ACTIVE
PaymentDetailsBacs:
type: object
description: Details of a BACS payment method in the UK.
properties:
mandateStatus:
$ref: '#/components/schemas/MandateStatus'
lastFour:
type: string
description: The last four digits of the BACS account.
example: '9876'
sortCode:
type: string
description: The sort code of the BACS account.
example: 12-34-56
mandateId:
type: string
description: The mandate ID for the BACS account.
example: mandate_123
reference:
type: string
description: The reference for the BACS payment.
example: reference_abc
url:
type: string
description: The URL for the BACS payment details.
example: http://example.com/bacs
PaymentDetailsAcss:
type: object
description: Details of an ACSS payment method in Canada.
properties:
mandateStatus:
$ref: '#/components/schemas/MandateStatus'
acceptedAt:
type: string
format: date-time
description: The timestamp when the mandate was accepted.
example: '2023-01-01T12:00:00Z'
lastFour:
type: string
description: The last four digits of the ACSS account.
example: '6543'
transitNumber:
type: string
description: The transit number of the ACSS account.
example: '11001'
institutionNumber:
type: string
description: The institution number of the ACSS account.
example: '001'
bankName:
type: string
description: The name of the bank.
example: Bank of Examples
mandateId:
type: string
description: The mandate ID for the ACSS account.
example: acss_mandate_456
transactionType:
type: string
description: The type of transaction.
example: recurring
intervalDescription:
type: string
description: The description of the transaction interval.
example: monthly
PaymentDetailsBecs:
type: object
description: Details of a BECS payment method in Australia.
properties:
mandateStatus:
$ref: '#/components/schemas/MandateStatus'
lastFour:
type: string
description: The last four digits of the BECS account.
example: '3210'
bsbNumber:
type: string
description: The BSB number of the BECS account.
example: 062-001
mandateId:
type: string
description: The mandate ID for the BECS account.
example: becs_mandate_789
url:
type: string
description: The URL for the BECS payment details.
example: http://example.com/becs
PaymentDetailsSepa:
type: object
description: Details of a SEPA payment method in EU countries.
properties:
mandateStatus:
$ref: '#/components/schemas/MandateStatus'
lastFour:
type: string
description: The last four digits of the SEPA account.
example: '4321'
branchCode:
type: string
description: The branch code of the SEPA account.
example: branch_001
bankCode:
type: string
description: The bank code of the SEPA account.
example: bank_001
countryCode:
type: string
description: The country code of the SEPA account.
example: DE
mandateId:
type: string
description: The mandate ID for the SEPA account.
example: sepa_mandate_012
reference:
type: string
description: The reference for the SEPA payment.
example: reference_xyz
url:
type: string
description: The URL for the SEPA payment details.
example: http://example.com/sepa
AccountHolderType:
type: string
enum:
- INDIVIDUAL
- COMPANY
description: The type of account holder.
example: INDIVIDUAL
AccountType:
type: string
enum:
- CHECKING
- SAVINGS
description: The type of ACH account.
example: CHECKING
PaymentDetailsAch:
type: object
description: Details of a debit ACH payment method in the US.
properties:
accountHolderType:
$ref: '#/components/schemas/AccountHolderType'
accountType:
$ref: '#/components/schemas/AccountType'
mandateStatus:
$ref: '#/components/schemas/MandateStatus'
lastFour:
type: string
description: The last four digits of the ACH account.
example: '7890'
routingNumber:
type: string
description: The routing number of the ACH account.
example: '123456789'
bankName:
type: string
description: The name of the bank.
example: Example Bank
mandateId:
type: string
description: The mandate ID for the ACH account.
example: ach_mandate_345
PaymentRecord:
type: object
description: Represents the details and metadata of a payment method used in transactions.
properties:
otterPaymentRecordId:
type: string
description: The identifier for the payment record in the Otter system, for reference.
example: otter_123456789
recordProviderType:
description: The type of payment provider.
$ref: '#/components/schemas/RecordProviderType'
recordPaymentType:
description: The type of payment method.
$ref: '#/components/schemas/RecordPaymentType'
paymentRecordId:
type: string
description: The identifier for the payment record from the payment provider.
example: pm_123456789
payerId:
type: string
description: The identifier for the payer from the payment provider.
example: payer_123456789
balanceTransactionId:
type: string
description: The balance transaction ID from the payment provider.
example: ext_bt_123456789
paymentDetails:
description: One of the possible payment method details, depending on the payment method type.
oneOf:
- $ref: '#/components/schemas/PaymentDetailsCard'
- $ref: '#/components/schemas/PaymentDetailsBacs'
- $ref: '#/components/schemas/PaymentDetailsAcss'
- $ref: '#/components/schemas/PaymentDetailsBecs'
- $ref: '#/components/schemas/PaymentDetailsSepa'
- $ref: '#/components/schemas/PaymentDetailsAch'
LoyaltyInfo:
type: object
nullable: true
description: The customer's loyalty information.
properties:
hasMembershipPass:
type: boolean
description: Indicates if the customer has a membership pass.
example: true
CustomerPayment:
required:
- paymentMethod
- processingStatus
- value
type: object
properties:
value:
type: number
description: The portion of the overall amount that needs to be paid.
example: 2
processingStatus:
type: string
description: The processing status of the payment. (PROCESSED is only valid when the payment method is CARD)
enum:
- COLLECTABLE
- PROCESSED
paymentMethod:
type: string
description: The method of payment.
enum:
- CASH
- CARD
- UNKNOWN
- OTHER
- CHEQUE
- GIFT_CARD
paymentAuthorizer:
type: string
description: A payment system type responsible for a card transaction (containing information for payment network and payment type).
nullable: true
enum:
- UNKNOWN_TYPE
- OTHER_TYPE
- MASTERCARD
- MASTERCARD_MAESTRO
- MASTERCARD_DEBIT
- VISA
- VISA_DEBIT
- AMEX
- VISA_ELECTORN
- DINERS
- ELO
- ELO_DEBIT
- HIPERCARD
- BANRICOMPRAS
- BANRICOMPRAS_DEBIT
- NUGO
- GOODCARD
- VERDECARD
- CARNET
- CHEF_CARD
- GER_CC_CREDITO
- TERMINAL_BANCARIA
- DEBIT
- QR_CODE
- RAPPI_PAY
- DISCOVER
- VALE_GREEN_CARD_PAPEL
- VALE_GREEN_CARD_CARD
- VALE_REFEISUL
- VALE_VEROCARD
- VALE_VR_SMART
- VALE_SODEXO
- VALE_TICKET_RESTAURANTE
- VALE_ALELO
- VALE_BEN_VIS
- VALE_COOPER_CARD
- NUTRICARD_REFEICAO_E_ALIMENTACAO
- APPLE_PAY_MASTERCARD
- APPLE_PAY_VISA
- APPLE_PAY_AMEX
- GOOGLE_PAY_ELO
- GOOGLE_PAY_MASTERCARD
- GOOGLE_PAY_VISA
- MOVILE_PAY
- MOVILE_PAY_AMEX
- MOVILE_PAY_DINERS
- MOVILE_PAY_ELO
- MOVILE_PAY_HIPERCARD
- MOVILE_PAY_MASTERCARD
- MOVILE_PAY_VISA
- IFOOD_CORP
- LOOP_CLUB
- PAYPAL
- PSE
- PIX
cardInfo:
nullable: true
deprecated: true
$ref: '#/components/schemas/CardInfo'
externalPaymentType:
type: string
description: External payment type string. Should be only used if not mapped by any value of paymentAuthorizer, and it's value is OTHER_TYPE.
nullable: true
paymentRecords:
type: array
nullable: true
description: '[WIP - in development, not supported yet] List of payment records, including method and card details and ids from payment processing entities.'
items:
$ref: '#/components/schemas/PaymentRecord'
loyaltyInfo:
$ref: '#/components/schemas/LoyaltyInfo'
FulfillmentInfo:
type: object
nullable: true
properties:
pickupTime:
type: string
nullable: true
description: Time (in UTC) specified by the provider when the courier or customer is expected to pick up the order.
format: date-time
example: '2007-12-03T10:15:30+01:00'
estimatedPickupTime:
type: string
nullable: true
description: Time (in UTC) estimated by the platform when the courier or customer is likely to pick up the order. This estimation takes into account preparation time, order readiness, and other logistical factors.
format: date-time
example: '2007-12-03T10:15:30+01:00'
deliveryTime:
type: string
nullable: true
description: Estimated time (in UTC) when the order is expected to be delivered. This should be filled in if FulfillmentMode is delivery.
format: date-time
example: '2007-12-03T10:15:30+01:00'
fulfillmentMode:
type: string
description: 'How the order is expected to be fulfilled:
- `DELIVERY` — delivered by a courier provided by the order source (the ordering marketplace).
- `RESTAURANT_DELIVERY` — delivered by the store''s own courier.
- `PICKUP` — collected by the customer at the store.
- `DINE_IN` — eaten at the store.
- `DRIVE_THROUGH` — collected by the customer at a drive-through.'
default: DELIVERY
enum:
- DELIVERY
- RESTAURANT_DELIVERY
- PICKUP
- DINE_IN
- DRIVE_THROUGH
schedulingType:
type: string
nullable: true
description: Describes whether this order should be cooked as soon as possible, or some time in the future. Please use the pickupTime and/or deliveryTime to indicate when. If no scheduling type is provided, we assume the order should be prepared as soon as possible.
enum:
- ASAP
- FIXED_TIME
courierStatus:
type: string
nullable: true
description: "The current status of the courier, progressing in order:\n- `COURIER_ASSIGNED` — a courier has been assigned to the order.\n- `COURIER_ON_ROUTE_TO_PICKUP` — the courier is heading to the store.\n- `COURIER_ARRIVED` — the courier has arrived at / checked in to the store.\n- `COURIER_PICKED_UP_FOOD` — the courier has the food and is heading to the\n customer.\n\n- `COURIER_COMPLETED` — the courier has dropped off the order."
enum:
- COURIER_ASSIGNED
- COURIER_ON_ROUTE_TO_PICKUP
- COURIER_ARRIVED
- COURIER_PICKED_UP_FOOD
- COURIER_COMPLETED
tableIdentifier:
type: string
nullable: true
description: The table identification for dine-in orders.
example: R-45
description: Information on order fulfillment.
PromotionDetails:
type: object
nullable: true
description: Order promotion details.
properties:
externalId:
type: string
description: External promotion identifier.
name:
type: string
description: Promotion name.
example: 20% off, up to $5
value:
type: number
description: Promotion value.
example: 2
PreparationTime:
type: object
nullable: true
description: Preparation time information for an order.
properties:
estimatedPreparationTime:
type: string
description: Preparation time estimated by the order provider. Use the Standard ISO 8601 Duration format (E.g. PT1H30M for 1 hour, 30 minutes).
example: PT30M
Order:
required:
- currencyCode
- externalIdentifiers
- status
type: object
properties:
externalIdentifiers:
description: Identifiers that tie this order back to your system and to the source it originated from (marketplace, aggregator, POS). Used to correlate the order across platforms.
allOf:
- $ref: '#/components/schemas/OrderExternalIdentifiers'
currencyCode:
maxLength: 3
minLength: 3
type: string
description: The 3-letter currency code (ISO 4217) used for **all** monetary values in this order (item prices, modifier prices, and every amount in `orderTotal` / `orderTotalV2`). All amounts are expressed in the major unit of this currency (for example `12.50`), never in minor units (cents).
example: EUR
status:
type: string
description: The current status of the order. When creating an order this is typically `NEW_ORDER` (awaiting confirmation) or `CONFIRMED`. `UNKNOWN` is returned only when the status cannot be mapped.
enum:
- NEW_ORDER
- CONFIRMED
- PICKED_UP
- CANCELED
- FULFILLED
- PREPARED
- REJECTED
- PREVISIT_COMPLETED
- PREVISIT_NO_SHOW
- UNKNOWN
items:
type: array
description: The items ordered by the customer, including their modifiers. If you send an order with an empty list, the platform creates a single placeholder "Custom item" priced at the order subtotal.
maxItems: 100
items:
$ref: '#/components/schemas/Item'
orderedAt:
type: string
nullable: true
description: The date (in UTC) when the order was placed by the customer.
format: date-time
example: '2007-12-03T10:15:30+01:00'
customer:
description: The customer who placed the order.
allOf:
- $ref: '#/components/schemas/Person'
customerNote:
type: string
nullable: true
description: An order-level note provided by the customer.
example: Please include extra napkins!
deliveryInfo:
$ref: '#/components/schemas/DeliveryInfo'
orderTotal:
nullable: true
description: Flat, customer-facing financial breakdown (V1). At least one of `orderTotal` or `orderTotalV2` is required. Prefer `orderTotalV2` for new integrations.
allOf:
- $ref: '#/components/schemas/OrderTotal'
orderTotalV2:
nullable: true
description: Richer, line-itemized financial breakdown (V2), covering the customer charges, how they were settled, the store payout, and the marketplace charges. At least one of `orderTotal` or `orderTotalV2` is required; if both are sent, `orderTotalV2` takes precedence for the financial breakdown.
allOf:
- $ref: '#/components/schemas/OrderTotalV2'
customerPayments:
type: array
nullable: true
description: How the customer paid, as one entry per payment portion (amount, method, and processing status). These entries must be consistent with the amounts and methods described in `orderTotalV2.customerPayment` when V2 is used.
items:
$ref: '#/components/schemas/CustomerPayment'
fulfillmentInfo:
$ref: '#/components/schemas/FulfillmentInfo'
promotionsDetails:
type: array
nullable: true
description: '[WIP - in development, not supported yet] Details about the promotions applied to this order. The sum of these values should equal the sum of the order''s discounts.'
items:
$ref: '#/components/schemas/PromotionDetails'
preparationTime:
nullable: true
$ref: '#/components/schemas/PreparationTime'
description: 'An order placed by a customer.
Orders are pushed into Otter by ordering marketplaces / order sources and read back (including merchant-side detail) via the Orders Manager endpoints. The same `Order` object is used as the create/update request body, as the GET response, and as the payload of the order webhooks.
Monetary values: every amount on an order uses the major unit of `currencyCode`. The financial breakdown is carried in `orderTotal` (V1, flat aggregates) and/or `orderTotalV2` (V2, line-itemized) — at least one of the two must be provided on create/update; if both are sent, `orderTotalV2` takes precedence for the financial breakdown.'
OrderReference:
required:
- externalIdentifiers
- storeId
type: object
properties:
externalIdentifiers:
$ref: '#/components/schemas/OrderExternalIdentifiers'
storeId:
type: string
description: The identifier of the store.
example: ckdss-store-id
description: An order reference.
ErrorDetail:
type: object
properties:
attribute:
type: string
description: The error attribute.
example: Order Currency Code
message:
type: string
description: The error detail description.
example: Order Currency Code must be exactly 3 characters
description: The error detail response object.
ErrorMessage:
type: object
properties:
message:
type: string
description: The error description.
example: The request body is invalid.
details:
type: array
description: The error details.
items:
$ref: '#/components/schemas/ErrorDetail'
description: The error response object.
OrderStatusUpdateRequest:
required:
- orderStatus
type: object
properties:
orderStatus:
type: string
description: The requested status to transition the order to.
enum:
- PREPARED
- CANCELED
- FULFILLED
description: The request to change an order status.
OrderCustomerPaymentUpdateRequest:
required:
- currencyCode
- customerPayment
type: object
properties:
currencyCode:
maxLength: 3
minLength: 3
type: string
description: The 3-letter currency code (ISO 4217) to use for all monetary values in this order.
example: EUR
customerPayment:
type: array
description: The requested customer payment to transition the order to.
items:
$ref: '#/components/schemas/CustomerPayment'
orderTotal:
nullable: true
$ref: '#/components/schemas/OrderTotal'
orderTotalsV2:
nullable: true
$ref: '#/components/schemas/OrderTotalV2'
description: The request to update customer payment for an order.
RequiredDeliveryInfo:
type: object
properties:
courier:
$ref: '#/components/schemas/Courier'
destination:
$ref: '#/components/schemas/Address'
licensePlate:
type: string
nullable: true
description: License plate of a vehicle used by the courier.
example: ABC 123
makeModel:
type: string
nullable: true
description: Make and model of a vehicle used by the courier.
example: Honda CR-V
lastKnownLocation:
$ref: '#/components/schemas/Location'
dropoffInstructions:
$ref: '#/components/schemas/DropoffInstructions'
note:
type: string
nullable: true
description: Special delivery instructions, if any.
example: Gate code 123
description: Information on order's delivery process.
OrderDeliveryInfoUpdateRequest:
required:
- deliveryInfo
type: object
properties:
deliveryInfo:
$ref: '#/components/schemas/RequiredDeliveryInfo'
description: The request to update an order delivery info status.
UploadPastOrdersRequest:
required:
- orders
type: object
properties:
orders:
type: array
description: The past orders you are trying to upload
maxItems: 100
items:
$ref: '#/components/schemas/Order'
description: The request to create past orders (read only).
UploadPastOrdersResponse:
required:
- orderReferences
type: object
properties:
orderReferences:
type: array
description: References for orders that were successfully uploaded.
items:
$ref: '#/components/schemas/OrderReference'
description: The response to create a past order (read only).
OrderIdentifier:
required:
- id
- source
type: object
properties:
id:
type: string
description: Unique ID for the order that was placed.
example: 69f60a06-c335-46d9-b5a1-97f1a211c514
source:
type: string
description: Describes the source of the order, typically from a food ordering marketplace.
example: ubereats
description: The external identifiers of the order.
POSOrderStatusUpdateRequest:
required:
- orderExternalIdentifiers
- orderStatus
type: object
properties:
orderStatus:
type: string
description: The requested status to transition the order to.
enum:
- CONFIRMED
- CANCELED
orderExternalIdentifiers:
$ref: '#/components/schemas/OrderIdentifier'
description: The request to change an order status.
OrderFeed:
required:
- orders
type: object
properties:
orders:
type: array
description: Array of Orders
items:
$ref: '#/components/schemas/Order'
offsetToken:
type: string
description: Opaque token used to fetch the following page. If not set, no more orders are available.
example: H12MAF2fFaFFFa
description: An order feed response
ManagerOrderCancelDetails:
required:
- cancelSource
type: object
properties:
cancelSource:
type: string
description: Source of the order cancellation
enum:
- UNKNOWN
- OPERATOR
- SERVICE_PROVIDER
description: Details about a canceled manager order
ManagerOrderIssue:
required:
- code
type: object
properties:
code:
type: string
description: The specific issues with this item
enum:
- UNKNOWN
- MENU_RESOLUTION_FAILED
- NO_SUPPORTED_POS
- VALIDATION_ONLY
- POS_VENDOR_ERROR
- INTERNAL_ERROR
- MISCONFIGURED_INTEGRATION
- CANCEL_FAILED
example: MENU_RESOLUTION_FAILED
description:
type: string
description: A friendly description describing what went wrong
example: Order contains unreconciled items
description: Issue codes for issues encountered when processing a manager order
ManagerItemIssue:
required:
- code
type: object
properties:
code:
type: string
description: The error code indicating the type of error
enum:
- UNKNOWN
- ITEM_MISMATCH
- INCOMPLETE_MENU
- NO_PARENT_ENTITY
- MULTIPLE_PARENT_ENTITIES
- MISCONFIGURED_INTEGRATION
- INVALID_PARENT_ENTITY_SETUP
- CATEGORY_MISSING
- EXTERNAL_MODIFIER_GROUP_MISSING
- INTERNAL_MODIFIER_GROUP_MISSING
example: ITEM_MISMATCH
description:
type: string
description: A friendly description describing what went wrong
example: Item not found
description: A detailed issue encountered with this item or modifier
ManagerItemIssues:
type: object
properties:
externalId:
type: string
description: External id of the item
example: external-item-id
itemIssues:
type: array
description: The specific issues with this item
items:
$ref: '#/components/schemas/ManagerItemIssue'
description: Manager item or modifier issues
ManagerOrderIssues:
type: object
properties:
orderIssues:
type: array
description: The specific issues with this order
items:
$ref: '#/components/schemas/ManagerOrderIssue'
itemIssues:
type: array
description: The specific issues with individual items or modifiers on this order
items:
$ref: '#/components/schemas/ManagerItemIssues'
description: Manager order issues
OrderWithManagerInfo:
required:
- order
- injectionState
- injectionEvent
type: object
properties:
order:
$ref: '#/components/schemas/Order'
injectionState:
type: string
description: 'The current state of injecting this order into the store''s POS / merchant system. Notable values: `PENDING` (injection in progress), `SUCCEEDED` / `MANUAL_INJECTION_SUCCEEDED` (order reached the POS), `SUCCEEDED_WITH_UNLINKED_ITEM` (injected but some items could not be matched to the POS catalog), `MANUAL_INJECTION_REQUIRED` / `FAILED_ATTEMPT` (needs attention), and the `ORDER_CANCELED` / `ORDER_REJECTED` family for cancellation/rejection outcomes.'
enum:
- UNKNOWN
- PENDING
- SUCCEEDED
- FAILED_ATTEMPT
- MANUAL_INJECTION_SUCCEEDED
- MANUAL_INJECTION_REQUIRED
- SUCCEEDED_WITH_UNLINKED_ITEM
- ORDER_CANCELED
- ORDER_CANCEL_FAILED
- ORDER_REJECTED
- ORDER_REJECT_FAILED
- RE_INJECTION_REQUESTED
- RE_INJECTION_PENDING
orderCancelDetails:
nullable: true
description: If canceled - specific details about why this order was canceled
$ref: '#/components/schemas/ManagerOrderCancelDetails'
injectionEvent:
type: string
description: The order event that triggered order injection into manager
enum:
- UNKNOWN
- ORDER_CREATE
- ORDER_ACCEPT
- ORDER_IMPORT
- ORDER_RE_INJECT
orderIssues:
description: Issues encountered with this manager order
$ref: '#/components/schemas/ManagerOrderIssues'
description: An order placed by a customer with manager injection details
ManagerConfirmOrderRequest:
type: object
properties:
estimatedPrepTimeMinutes:
type: integer
nullable: true
description: Estimated order preparation time in minutes.
example: 15
description: The request to confirm an order.
ManagerCancelOrderRequest:
required:
- cancellationReason
type: object
properties:
cancellationReason:
type: string
description: The reason for cancellation.
enum:
- REASON_UNKNOWN
- DUPLICATE_ORDER
- UNAVAILABLE_ITEM
- FRAUDULENT_EATER
- RESTAURANT_INTERNAL_ISSUE
- KITCHEN_CLOSED
- CUSTOMER_CALLED_TO_CANCEL
- RESTAURANT_TOO_BUSY
- CANNOT_COMPLETE_CUSTOMER_REQUEST
- UNACCEPTED_ORDER
- RESTAURANT_CANCELED
- AUTOMATICALLY_CANCELED
- LATE_DELIVERY
- COURIER_NOT_FOUND
- CUSTOMER_NOT_FOUND
- UNABLE_TO_DELIVER
- ALL_ITEMS_OUT_OF_STOCK
- ALL_ITEMS_EXPIRED
- ALL_ITEMS_DAMAGED
- LABOR_UNAVAILABLE
- REASON_OTHER
cancelingParty:
$ref: '#/components/schemas/Person'
description: The request to cancel an order.
OrderComponentId:
type: object
properties:
orderComponentId:
type: string
description: The id of the order component for the order component ticket.
example: 69f60a06-c335-46d9-b5a1-97f1a211c514
orderComponentOrderId:
type: string
description: The id of the order for the order component ticket.
example: 69f60a06-c335-46d9-b5a1-97f1a211c514
QuantityUpdatedModification:
required:
- customerItemIds
- quantity
- oldQuantity
type: object
properties:
customerItemIds:
type: array
description: Unique IDs for the ordered customer items (station item can map to multiple).
minItems: 1
items:
type: string
quantity:
type: number
minimum: 0
format: int32
description: New quantity (0 to remove item).
oldQuantity:
type: number
minimum: 0
format: int32
description: Previous quantity.
OrderPriceAdjustedModification:
required:
- delta
type: object
properties:
delta:
type: number
description: Total adjustment on the order (positive = up charge, negative = refund).
example: -2.5
ItemAddedModification:
required:
- addedItem
type: object
properties:
addedItem:
$ref: '#/components/schemas/Item'
description: The customer item added to the order. Include any modifiers on this item via its modifiers array.
CustomerItemModification:
type: object
description: One modification to apply. Exactly one of quantityUpdated, priceAdjusted, or itemAdded must be set.
properties:
quantityUpdated:
$ref: '#/components/schemas/QuantityUpdatedModification'
description: Change quantity for existing item(s). Set quantity to 0 to remove.
priceAdjusted:
$ref: '#/components/schemas/OrderPriceAdjustedModification'
description: Adjust order subtotal (positive = up charge, negative = refund).
itemAdded:
$ref: '#/components/schemas/ItemAddedModification'
description: Add a new item to the order.
oneOf:
- required:
- quantityUpdated
- required:
- priceAdjusted
- required:
- itemAdded
OrderCustomerItemsUpdateRequest:
required:
- customerItemModifications
type: object
properties:
currencyCode:
type: string
description: 3-letter currency code (ISO 4217) for monetary values in this request (e.g. delta in price_adjusted, item/modifier prices in item_added). If omitted, USD is used.
minLength: 3
maxLength: 3
example: USD
nullable: true
customerItemModifications:
type: array
description: List of modifications to apply (quantity change, price adjustment, or item added).
minItems: 1
items:
$ref: '#/components/schemas/CustomerItemModification'
description: Request to update order customer items. Only supported for dine-in orders when slug is d2c-eater-website and the order tab is open. Modifying party and modification request ID are set by the endpoint.
OrderPrepTimeUpdateRequest:
required:
- prepTimeMinutes
type: object
properties:
prepTimeMinutes:
type: integer
description: The requested preparation time to transition the order to.
description: The request to change an order prep time.
PauseReason:
type: string
description: Reason for pausing the storefronts
enum:
- STORE_MAINTENANCE
- OTHER
PauseRequest:
type: object
properties:
start:
type: string
nullable: true
description: Start time for the pause. Executed immediately if not set.
format: date-time
example: '2007-12-03T10:15:30+01:00'
end:
type: string
nullable: true
description: Time when the pause should expire. If not provided, uses the default which is 4 AM at store timezone.
format: date-time
example: '2007-12-03T10:15:30+01:00'
comment:
type: string
nullable: true
description: Comment for the pause
example: Some comment
reason:
$ref: '#/components/schemas/PauseReason'
description: Pause request parameters
PauseResponse:
type: object
properties:
requestId:
type: string
description: The requestId of the pause request.
description: Pause response details
UnpauseRequest:
type: object
properties:
comment:
type: string
nullable: true
description: Comment for the unpause
example: Some comment
description: Unpause request parameters
UnpauseResponse:
type: object
properties:
requestId:
type: string
description: The requestId of the unpause request.
description: Unpause response details
RequestState:
type: string
description: State of the requested operation
enum:
- UNKNOWN
- QUEUED
- IN_PROGRESS
- PROVIDER_REQUEST_IN_PROGRESS
- VALIDATION
- COMPLETED
- FAILED
- CANCELLED
Status:
type: string
description: Status of the operation
enum:
- UNKNOWN
- SUCCESS
- FAIL
- IN_PROGRESS
OperationType:
type: string
description: Type of the operation
enum:
- UNKNOWN
- PAUSE
- UNPAUSE
StorefrontError:
type: object
properties:
errorType:
type: string
description: The type of the error.
message:
type: string
description: The error messageß.
description: Unpause response details
RequestAction:
type: object
properties:
operationType:
$ref: '#/components/schemas/OperationType'
status:
$ref: '#/components/schemas/Status'
retryAttempt:
type: number
description: The current retry attempt.
example: 2
error:
nullable: true
$ref: '#/components/schemas/StorefrontError'
description: Request action details of the current state
RequestStateInfo:
type: object
properties:
startedAt:
type: string
nullable: true
description: The time at which the request was started.
format: date-time
example: '2007-12-03T10:15:30+01:00'
state:
$ref: '#/components/schemas/RequestState'
status:
$ref: '#/components/schemas/Status'
finishedAt:
type: string
nullable: true
description: The time at which the request was completed.
format: date-time
example: '2007-12-03T10:15:30+01:00'
action:
type: array
minItems: 0
description: List of request actions.
items:
$ref: '#/components/schemas/RequestAction'
error:
nullable: true
$ref: '#/components/schemas/StorefrontError'
description: Request state details
ProcessStoreServiceProviderStatus:
type: object
properties:
requestId:
type: string
description: The request id of the operation specific to service provider.
provider:
type: string
description: The service provider.
example: doordash
startedAt:
type: string
nullable: true
description: The time at which the provider level request was started.
format: date-time
example: '2007-12-03T10:15:30+01:00'
finishedAt:
type: string
nullable: true
description: The time at which the provider level request was completed.
format: date-time
example: '2007-12-03T10:15:30+01:00'
stateInfo:
type: array
minItems: 0
description: List of request state details.
items:
$ref: '#/components/schemas/RequestStateInfo'
requestStatus:
$ref: '#/components/schemas/Status'
currentState:
$ref: '#/components/schemas/RequestState'
description: Provider level request status details
ProcessingStatusResponse:
type: object
properties:
processRequestStatuses:
type: array
minItems: 0
description: List of provider level requests
items:
$ref: '#/components/schemas/ProcessStoreServiceProviderStatus'
description: Processing status response
Photo:
title: All photos for the store, indexed by ID
required:
- contentType
- fileName
- id
- url
type: object
properties:
url:
type: string
description: URL of the photo.
example: https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png
fileName:
type: string
description: File name
example: image.jpg
id:
type: string
description: Identifier of the Photo.
example: e9174f75-a293-4908-bba7-9db69871ad81
contentType:
type: string
description: 'The media type of the file. Deprecated: Use the media type served from the photo URL instead.'
example: image/jpeg, image/png
deprecated: true
description: All data required to represent a Photo for an entity in menus.
ExposedThirdPartyInfo:
required:
- externalId
- externalServiceSlug
type: object
properties:
externalId:
type: string
description: 'The identifier that exists in the third party system. '
example: da0e4e94-5670-4175-897a-3b7dde45bed5
externalServiceSlug:
type: string
description: The slug of the third party service.
example: tasty-bbq
description: Information about a third party service that is exposed to the another service. Usually, this is used to expose an POS ID to an OFO.
Category:
required:
- id
- name
type: object
properties:
id:
type: string
description: The identifier that exists in the third party system. During a menu publish event, uuidV4 ids will be generated for new entities that do not yet exist in the internal menu.
example: b01485b0-034a-47c5-8a0a-0eeca08bf994
name:
type: string
description: Name of Category.
example: Drinks
description:
type: string
description: Description of Category.
example: All drink items served up nice and fresh!
itemIds:
type: array
default: []
description: All items in the category.
items:
type: string
example:
- fa4f0192-4c4e-4455-9db8-61d428c34969
photoIds:
type: array
description: A list of Photo references associated with the Category.
default: []
items:
type: string
exposedThirdPartyInfos:
type: array
default: []
description: Additional information about the menu that should be exposed to third party
items:
$ref: '#/components/schemas/ExposedThirdPartyInfo'
description: Categories contain a list of Item references.
DefaultModifierSelection:
required:
- itemId
- selectionQuantity
type: object
properties:
itemId:
type: string
description: The id of the modifier item that this default selection pertains to. This id must be present in the item ids of the modifier group.
example: da0e4e94-5670-4175-897a-3b7dde45bed5
selectionQuantity:
minimum: 0
type: integer
description: The default quantity of the modifier item to be selected.
format: int32
description: A default modifier selection consists of a reference to the modifier and the default selected quantity of that modifier.
DefaultModifierSelectionData:
required:
- defaultModifierSelections
type: object
properties:
defaultModifierSelections:
type: array
description: The default modifier selections for this modifier group.
items:
$ref: '#/components/schemas/DefaultModifierSelection'
description: The default modifiers selections for a modifier group.
ModifierGroup:
title: All ModifierGroups for the Store, indexed by ID
required:
- id
- name
type: object
properties:
id:
type: string
description: The identifier that exists in the third party system. During a menu publish event, uuidV4 ids will be generated for new entities that do not yet exist in the internal menu.
example: da0e4e94-5670-4175-897a-3b7dde45bed5
name:
type: string
description: Name of ModifierGroup.
example: Choose your type of bagel
minimumSelections:
minimum: 0
type: integer
description: Minimum number of selections customers can make in this ModifierGroup. 0 means no min limits.
format: int32
maximumSelections:
minimum: 0
type: integer
description: Maximum number of selections customers can make in this ModifierGroup. 0 means no max limits.
format: int32
maxPerModifierSelectionQuantity:
minimum: 0
default: 1
type: integer
description: Maximum number of selections customers can make for each modifier item in this ModifierGroup. 0 means there is no limit to how many times they can select a single modifier item. If not specified, a value of 1 will be used as the default value.
format: int32
defaultModifierSelectionData:
$ref: '#/components/schemas/DefaultModifierSelectionData'
itemIds:
type: array
default: []
description: Identifiers of each Item within this ModifierGroup.
items:
type: string
description:
type: string
description: The description for this modifier group.
example: Choose any of these delicious types of bagels
type:
type: string
description: 'Experimental: The type of this modifier group, for informative purposes. It can be one of the following values: `DEFAULT`, `UPSELL`, `INGREDIENT_REMOVAL`, `INGREDIENT_ADD`, `PREPARE_INSTRUCTIONS`, `SIZE_MODIFICATION`, `PACKAGING_INSTRUCTION` and `CONDIMENT`.'
example: DEFAULT
exposedThirdPartyInfos:
type: array
default: []
description: Additional information about the menu that should be exposed to third party
items:
$ref: '#/components/schemas/ExposedThirdPartyInfo'
description: Items are sold on the menu. Modifiers to items are items themselves and their relationship is defined by ModifierGroup.
HourInterval:
type: object
properties:
day:
type: string
description: Day of the week.
example: Monday
enum:
- MONDAY
- TUESDAY
- WEDNESDAY
- THURSDAY
- FRIDAY
- SATURDAY
- SUNDAY
fromHour:
maximum: 23
minimum: 0
type: integer
description: Beginning hour of interval.
format: int32
example: 8
fromMinute:
maximum: 59
minimum: 0
type: integer
description: Beginning minute of interval.
format: int32
example: 0
toHour:
maximum: 23
minimum: 0
type: integer
description: Ending hour of interval.
format: int32
example: 20
toMinute:
maximum: 59
minimum: 0
type: integer
description: Ending minute of interval.
format: int32
example: 45
description: Represents the beginning and ending of operating time for a menu specific to a Day.
Hours:
required:
- intervals
type: object
properties:
intervals:
type: array
minItems: 1
description: List of HourIntervals.
items:
$ref: '#/components/schemas/HourInterval'
description: Hours are represented as a list of HourIntervals.
Money:
required:
- amount
- currencyCode
type: object
properties:
currencyCode:
maxLength: 3
minLength: 3
type: string
description: The 3-letter currency code (ISO 4217) to use for all monetary values.
example: EUR
amount:
minimum: 0
exclusiveMinimum: false
type: number
description: Amount value.
example: 25.21
description: Money amount.
example: 25.21
PercentageValue:
required:
- decimalValue
type: object
properties:
decimalValue:
minimum: 0
type: number
description: Percentage value in decimal format.
example: 0.513
description: Percentage value in decimal format.
example: A decimalValue of 0.513 will equate to 51.3%
UnitPriceAndCount:
required:
- unitPrice
- count
type: object
properties:
unitPrice:
$ref: '#/components/schemas/Money'
count:
minimum: 1
type: integer
description: The count for the additional charge.
example: 3
description: Unit price and count for additional charges.
example: 3 x $25.21
AdditionalCharge:
required:
- chargeType
type: object
properties:
chargeType:
type: string
description: The type of the additional charge.
enum:
- PACKAGING_CHARGE
- CONTAINER_DEPOSIT
flatCharge:
$ref: '#/components/schemas/Money'
percentageCharge:
$ref: '#/components/schemas/PercentageValue'
unitPriceAndCount:
$ref: '#/components/schemas/UnitPriceAndCount'
description: Additional charge to apply. Exactly one of either flatCharge or percentageCharge should be provided.
Menu_POS:
title: All Menus for the store, indexed by ID
required:
- id
- name
type: object
properties:
id:
type: string
description: Internal identifier for Menu.
example: ff6dd693-5e55-4a92-a359-ea61b23ed423
name:
type: string
description: Name of the Menu.
example: Tasty BBQ
categoryIds:
type: array
default: []
description: Identifiers of the categories within this Menu.
items:
type: string
fulfillmentModes:
type: array
default: []
description: The ways in which this menu may be fulfilled. If no values are specified, it is assumed that all fulfillment types are allowed.
items:
type: string
description: How an item from a menu is allowed to be fulfilled when ordered by a user.
enum:
- DELIVERY
- PICK_UP
- DINE_IN
description:
type: string
description: Description of the Menu.
example: Cooking up BBQ deliciousness from around the globe!
hours:
$ref: '#/components/schemas/Hours'
additionalCharges:
type: array
nullable: true
description: Additional charges to apply for this menu. All additional charges specified on a menu will only be applied once per order.
items:
$ref: '#/components/schemas/AdditionalCharge'
description: A menu for a store.
ItemStatus:
required:
- saleStatus
type: object
properties:
saleStatus:
type: string
description: The sale status of the item.
example: TEMPORARILY_NOT_FOR_SALE
enum:
- FOR_SALE
- INDEFINITELY_NOT_FOR_SALE
- TEMPORARILY_NOT_FOR_SALE
suspendedUntil:
type: string
nullable: true
description: 'ISO-8601 timestamp representing the time the saleStatus value is supposed to change to FOR_SALE. Set only when current saleStatus value is TEMPORARILY_NOT_FOR_SALE. E.g.: 2020-11-23T21:33:51Z, 2007-12-03T10:15:30+01:00'
format: date-time
example: '2007-12-03T10:15:30+01:00'
description: Represents whether an Item is for sale, indefinitely not for sale, or not for sale until a specific time.
OverrideRule:
required:
- externalServiceSlug
type: object
properties:
externalServiceSlug:
type: string
description: 'The service slug for which this rule should apply. E.g.: If externalServiceSlug is UberEats, then the priceOverride should be applied to UberEats.'
example: ubereats
description: Override rule for when to apply price overrides
ItemPriceOverride:
required:
- amount
- currencyCode
- rules
type: object
properties:
rules:
type: array
minItems: 1
description: Override rules for when this price override should be applied.
items:
$ref: '#/components/schemas/OverrideRule'
currencyCode:
maxLength: 3
minLength: 3
type: string
description: The 3-letter currency code (ISO 4217) to use for all monetary values.
example: EUR
amount:
type: number
description: Amount the Item costs
example: 25.21
description: Price override for an item
SkuBarcode:
type: object
properties:
barcodeType:
type: string
description: The type of the barcode.
enum:
- UPC
- GTIN
- ASIN
- INTERNAL
value:
type: string
description: The value of the barcode.
example: 049000028904 (UPC)
description: A barcode for the product which may be common types like UPC, GTIN, ASIN or an internal type.
DietaryClassification:
type: object
properties:
tag:
type: string
description: The type of dietary classification.
enum:
- VEGAN
- VEGETARIAN
- NON_VEGETARIAN
- EGG
- KOSHER
- HALAL
- PLANT_BASED
- PALEO
- KETO
description: Dietary classification information.
AllergenClassification:
type: object
properties:
tag:
type: string
description: The type of allergen classification.
enum:
- GLUTEN
- DAIRY
- WHEAT
- RYE
- BARLEY
- OAT
- SPELT
- KAMUT
- CRUSTACEAN
- MOLLUSK
- EGG
- FISH
- PEANUT
- SOYBEAN
- NUT
- ALMOND
- HAZELNUT
- WALNUT
- CASHEW
- PECAN
- BRAZIL_NUT
- PISTACHIO
- MACADAMIA_NUT
- QUEENSLAND_NUT
- LUPIN
- CELERY
- MUSTARD
- SESAME_SEED
- SULFITE
- CAFFEINE
- PHENYLALANINE
containsAllergen:
type: boolean
description: Indication of whether or not the product contains this allergen. If the status of the allergen is unknown, a classification should not be provided for this product.
description: Allergen classification information.
StorageRequirement:
type: object
properties:
tag:
type: string
description: Storage requirements for the product.
enum:
- FROZEN
- COLD
- DRY
- ROOM_TEMPERATURE
- AVOID_SUNLIGHT
description: Storage requirements for the product.
EnergyKcal:
type: object
properties:
low:
type: number
description: The minimum calorie value for an item.
example: 1
high:
type: number
description: The maximum calorie value for an item.
example: 100
description: The calorie range of the item. If only one calorie value is known, set both low and high to that value.
NutritionContent:
type: object
properties:
servingSizeInGrams:
type: number
description: The serving size in grams. This field and the servingSizeInMilliliters field are mutually exclusive.
example: 100
servingSizeInMilliliters:
type: number
description: The serving size in milliliters. This field and the servingSizeInGrams are mutually exclusive.
example: 100
fats:
type: number
description: The fats in grams per serving size.
example: 2.3
saturatedFats:
type: number
description: The saturated fats in grams per serving size.
example: 1.4
monoUnsaturatedFats:
type: number
description: The mono unsaturated fats in grams per serving size.
example: 1.5
polyUnsaturatedFats:
type: number
description: The poly unsaturated fats in grams per serving size.
example: 5.3
carbohydrates:
type: number
description: The carbohydrates in grams per serving size.
example: 1.8
sugar:
type: number
description: The sugar in grams per serving size.
example: 1.7
polyols:
type: number
description: The polyols in grams per serving size.
example: 9.3
starch:
type: number
description: The starch in grams per serving size.
example: 1.1
protein:
type: number
description: The protein in grams per serving size.
example: 7.3
salt:
type: number
description: The salt in grams per serving size.
example: 1.5
sodium:
type: number
description: The sodium in grams per serving size.
example: 0.3
fibres:
type: number
description: The fibres in grams per serving size.
example: 1.9
vitaminC:
type: number
description: The vitamin C in milligrams per serving size.
example: 9.3
calcium:
type: number
description: The calcium in milligrams per serving size.
example: 1.2
magnesium:
type: number
description: The magnesium in milligrams per serving size.
example: 1.3
chloride:
type: number
description: The chloride in milligrams per serving size.
example: 1.3
fluoride:
type: number
description: The fluoride in milligrams per serving size.
example: 3.3
potassium:
type: number
description: The potassium in milligrams per serving size.
example: 22.3
caffeine:
type: number
description: The caffeine in milligrams per serving size.
example: 81.3
energy:
type: number
description: The energy in kcal per serving size.
example: 991.3
description: The nutrition content of the item.
NutritionalInfo:
type: object
properties:
energyKcal:
$ref: '#/components/schemas/EnergyKcal'
nutritionContent:
$ref: '#/components/schemas/NutritionContent'
description: The nutritional information of an item.
Servings:
type: object
properties:
min:
type: integer
description: The minimum value of servings.
example: 1
max:
type: integer
description: The maximum value of servings.
example: 2
description: The number of people an item serves. If only one serving value is known, set both min and max to that value.
SkuDetails:
type: object
properties:
skuSlug:
type: string
description: A system-unique, human-readable identifier for the product.
example: russet-potato-fries-200g
skuId:
type: string
description: A unique identifier for the product.
example: 3bac7aed-c8c1-4bfa-a98a-350317e55072
barcodes:
type: array
description: Barcodes for this product.
items:
$ref: '#/components/schemas/SkuBarcode'
dietaryClassifications:
type: array
description: All dietary classifications that apply to the product.
items:
$ref: '#/components/schemas/DietaryClassification'
allergenClassifications:
type: array
description: All allergens that are present in the product.
items:
$ref: '#/components/schemas/AllergenClassification'
storageRequirements:
type: array
description: All storage requirements that apply to the product.
items:
$ref: '#/components/schemas/StorageRequirement'
additives:
type: array
default: []
description: All additives present in the item. Additives are free strings.
items:
type: string
example:
- flavor enhancers
- emulsifiers
- antioxidants
countryOfOriginIso2:
maxLength: 2
minLength: 2
type: string
description: The 2-letter country ISO2 code for where the product originated from.
example:
- US
- CN
- DE
containsAlcohol:
type: boolean
description: Indicates whether or not this product contains alcohol.
nutritionalInfo:
$ref: '#/components/schemas/NutritionalInfo'
description: The nutritional information for the product.
servings:
$ref: '#/components/schemas/Servings'
description: The number of servings for the product.
producerInformation:
type: string
description: Information about the producer of this product. May or may not be the same as the distributor.
example: The Coca-Cola Company
distributorInformation:
type: string
description: Information about the distributor of this product. May or may not be the same as the producer.
example: The Coca-Cola Company
description: Details of the product being prepared or a pre-packaged good being sold. Includes information such as UPC barcode, unique identifiers, or classification information.
ItemTax:
required:
- percentageValue
- isValueAddedTax
type: object
properties:
percentageValue:
$ref: '#/components/schemas/PercentageValue'
description: Specify the percentage value of the tax.
isValueAddedTax:
type: boolean
description: Whether this tax is a value-added tax.
description: The tax configuration.
MenuItem_POS:
title: All Items for the store, indexed by ID
required:
- id
- name
- photoIds
- price
- status
type: object
properties:
id:
type: string
minLength: 1
description: Internal identifier of this Item.
example: faa4c79f-480d-4de1-bc34-5fb74ef082ef
name:
type: string
description: Name of this Item
example: Bagel
photoIds:
type: array
description: A list of Photo references associated with the Item.
items:
type: string
price:
$ref: '#/components/schemas/Money'
status:
$ref: '#/components/schemas/ItemStatus'
description:
type: string
description: Description of this Item
example: Delicious bagel!
modifierGroupIds:
type: array
default: []
description: Identifiers of each ModifierGroup within this Item.
items:
type: string
example: 7152ee6e-e941-45c1-9008-2e306b479114
priceOverrides:
type: array
nullable: true
description: Specify price overrides for different service slugs.
items:
$ref: '#/components/schemas/ItemPriceOverride'
skuDetails:
$ref: '#/components/schemas/SkuDetails'
additionalCharges:
type: array
nullable: true
description: Additional charges to apply for this item. Additional charges will be applied for every instance of this item within an order.
items:
$ref: '#/components/schemas/AdditionalCharge'
tax:
$ref: '#/components/schemas/ItemTax'
description: The tax configuration for the menu item.
description: Items are sold on the Menu. Modifiers to items are items themselves and their relationship is defined by ModifierGroup.
Menus:
required:
- categories
- modifierGroups
- photos
type: object
properties:
photos:
title: All photos for the store, indexed by ID
type: object
additionalProperties:
x-additionalPropertiesName: photoId
$ref: '#/components/schemas/Photo'
example:
c75d9460-5d48-423d-8d01-f825fd5b1672:
id: c75d9460-5d48-423d-8d01-f825fd5b1672
fileName: c75d9460-5d48-423d-8d01-f825fd5b1672.jpeg
url: https://example.com/photos/c75d9460-5d48-423d-8d01-f825fd5b1672.jpeg
categories:
title: All Categories for the store, indexed by ID
type: object
additionalProperties:
x-additionalPropertiesName: categoryId
$ref: '#/components/schemas/Category'
example:
b01485b0-034a-47c5-8a0a-0eeca08bf994:
name: Drinks
description: All drink items served up nice and fresh!
id: b01485b0-034a-47c5-8a0a-0eeca08bf994
itemIds:
- fa4f0192-4c4e-4455-9db8-61d428c34969
modifierGroups:
title: All ModifierGroups for the Store, indexed by ID
type: object
additionalProperties:
x-additionalPropertiesName: modifierGroupId
$ref: '#/components/schemas/ModifierGroup'
example:
f4c69056-3ae3-4517-9294-5ceec8df5f81:
id: f4c69056-3ae3-4517-9294-5ceec8df5f81
name: Add Straw
minimumSelections: 0
maximumSelections: 1
defaultModifierSelectionData:
defaultModifierSelections:
- itemId: 6d53cf04-9d62-40f5-a8b3-706e3377668f
selectionQuantity: 1
itemIds:
- 6d53cf04-9d62-40f5-a8b3-706e3377668f
type: DEFAULT
exposedThirdPartyInfos:
- externalId: ff6dd693-5e55-4a92-a359-ea61b23ed423
externalServiceSlug: 3PD
menus:
title: All Menus for the store, indexed by ID
type: object
additionalProperties:
x-additionalPropertiesName: menuId
$ref: '#/components/schemas/Menu_POS'
example:
ff6dd693-5e55-4a92-a359-ea61b23ed423:
id: ff6dd693-5e55-4a92-a359-ea61b23ed423
name: Tasty BBQ
categoryIds:
- b01485b0-034a-47c5-8a0a-0eeca08bf994
fulfillmentModes:
- DELIVERY
description: Cooking up BBQ deliciousness from around the globe!
hours:
intervals:
- day: MONDAY
fromHour: 7
fromMinute: 30
toHour: 22
toMinute: 0
additionalCharges:
- chargeType: PACKAGING_CHARGE
flatCharge:
currencyCode: USD
amount: 1.5
items:
title: All Items for the store, indexed by ID
type: object
additionalProperties:
x-additionalPropertiesName: itemId
$ref: '#/components/schemas/MenuItem_POS'
example:
fa4f0192-4c4e-4455-9db8-61d428c34969:
id: fa4f0192-4c4e-4455-9db8-61d428c34969
name: Canned Coke
description: Best soda pop ever made
price:
currencyCode: USD
amount: 7.65
status:
saleStatus: FOR_SALE
modifierGroupIds:
- f4c69056-3ae3-4517-9294-5ceec8df5f81
photoIds:
- c75d9460-5d48-423d-8d01-f825fd5b1672
priceOverrides:
- rules:
- type: FulfillmentModeOverrideRule
fulfillmentMode: PICK_UP
price:
currencyCode: USD
amount: 7
skuDetails:
skuSlug: canned-coke-355ml
skuId: 3bac7aed-c8c1-4bfa-a98a-350317e55072
dietaryClassifications:
- tag: VEGAN
allergenClassifications:
- tag: GLUTEN
containsAllergen: false
- tag: PEANUT
containsAllergen: true
storageRequirements:
- tag: COLD
- tag: AVOID_SUNLIGHT
additives:
- flavor enhancers
- food coloring
containsAlcohol: false
nutritionalInfo:
energyKcal:
low: 1
high: 100
nutritionContent:
servingSizeInGrams: 100
servingSizeInMilliliters: 100
fats: 100.2
saturatedFats: 3.5
monoUnsaturatedFats: 5.2,
polyUnsaturatedFats: 1.3,
carbohydrates: 3.2,
sugar: 101,
polyols: 1.1,
starch: 1.2,
protein: 1.3,
salt: 1.4,
sodium: 1.5,
fibres: 1.6,
vitaminC: 1.7,
calcium: 1.8,
magnesium: 1.9,
chloride: 2.0,
fluoride: 2.1,
potassium: 2.2,
caffeine: 2.3,
energy: 2.4
servings:
min: 1
max: 2
producerInformation: The Coca-Cola Company
distributorInformation: The Coca-Cola Company
countryOfOriginIso2: US
additionalCharges:
- chargeType: PACKAGING_CHARGE
percentageCharge:
decimalValue: 0.015
tax:
percentageValue:
decimalValue: 0.513
isValueAddedTax: true
6d53cf04-9d62-40f5-a8b3-706e3377668f:
id: 6d53cf04-9d62-40f5-a8b3-706e3377668f
name: Paper straw
description: A paper straw
price:
currencyCode: USD
amount: 0.5
status:
saleStatus: FOR_SALE
description: All menus associated with a store.
ModifierGroupUpdateRequest:
title: All ModifierGroups for the Store, indexed by ID
required:
- id
- name
type: object
properties:
id:
type: string
description: Identifier for ModifierGroup.
example: db5740de-429c-4f06-b264-3d41dce6d8c3
name:
type: string
description: Name of ModifierGroup.
example: Choose your type of bagel
minimumSelections:
minimum: 0
type: integer
description: Minimum number of selections customers can make in this ModifierGroup. 0 means no min limits.
format: int32
maximumSelections:
minimum: 0
type: integer
description: Maximum number of selections customers can make in this ModifierGroup. 0 means no max limits.
format: int32
maxPerModifierSelectionQuantity:
minimum: 0
type: integer
description: Maximum number of selections customers can make for each modifier item in this ModifierGroup. 0 means there is no limit to how many times they can select a single modifier item. If not specified, a value of 1 will be used as the default value.
format: int32
defaultModifierSelectionData:
$ref: '#/components/schemas/DefaultModifierSelectionData'
itemIds:
type: array
default: []
description: Identifiers of each Item within this ModifierGroup.
items:
type: string
description:
type: string
description: Description for this ModifierGroup.
example: Choose any of these delicious types of bagels
type:
type: string
description: 'Experimental: The type of this modifier group, for informative purposes. It can be one of the following values: `DEFAULT`, `UPSELL`, `INGREDIENT_REMOVAL`, `INGREDIENT_ADD`, `PREPARE_INSTRUCTIONS`, `SIZE_MODIFICATION`, `PACKAGING_INSTRUCTION` and `CONDIMENT`.'
example: DEFAULT
description: Items are sold on the menu. Modifiers to items are items themselves and their relationship is defined by ModifierGroup.
ItemUpdateRequest:
title: All Items for the store, indexed by ID
required:
- id
- name
- price
- status
- description
type: object
properties:
id:
type: string
description: Identifier of this Item.
example: faa4c79f-480d-4de1-bc34-5fb74ef082ef
name:
type: string
description: Name of this Item
example: Bagel
price:
$ref: '#/components/schemas/Money'
status:
$ref: '#/components/schemas/ItemStatus'
description:
type: string
description: Description of this Item
example: Delicious bagel!
modifierGroupIds:
type: array
default: []
description: Identifiers of each ModifierGroup within this Item.
items:
type: string
example: 7152ee6e-e941-45c1-9008-2e306b479114
priceOverrides:
type: array
nullable: true
description: Specify price overrides for different service slugs.
items:
$ref: '#/components/schemas/ItemPriceOverride'
photoUrls:
type: array
nullable: true
description: List of photoUrls to associate with the Item. This is used only for POST/PUT requests.
items:
type: string
skuDetails:
$ref: '#/components/schemas/SkuDetails'
description: Items are sold on the Menu. Modifiers to items are items themselves and their relationship is defined by ModifierGroup.
MenusUpsertRequest:
required:
- categories
- menus
- modifierGroups
type: object
properties:
categories:
title: All Categories for the store, indexed by ID
type: object
additionalProperties:
x-additionalPropertiesName: categoryId
$ref: '#/components/schemas/Category'
example:
b01485b0-034a-47c5-8a0a-0eeca08bf994:
name: Drinks
description: All drink items served up nice and fresh!
id: b01485b0-034a-47c5-8a0a-0eeca08bf994
itemIds:
- fa4f0192-4c4e-4455-9db8-61d428c34969
modifierGroups:
title: All ModifierGroups for the Store, indexed by ID
type: object
additionalProperties:
x-additionalPropertiesName: modifierGroupId
$ref: '#/components/schemas/ModifierGroupUpdateRequest'
example:
f4c69056-3ae3-4517-9294-5ceec8df5f81:
id: f4c69056-3ae3-4517-9294-5ceec8df5f81
name: Add Straw
minimumSelections: 0
maximumSelections: 1
defaultModifierSelectionData:
defaultModifierSelections:
- itemId: 6d53cf04-9d62-40f5-a8b3-706e3377668f
selectionQuantity: 1
itemIds:
- 6d53cf04-9d62-40f5-a8b3-706e3377668f
type: DEFAULT
exposedThirdPartyInfos:
- externalId: ff6dd693-5e55-4a92-a359-ea61b23ed423
externalServiceSlug: 3PD
menus:
title: All Menus for the store, indexed by ID
type: object
minProperties: 1
additionalProperties:
x-additionalPropertiesName: menuId
$ref: '#/components/schemas/Menu_POS'
example:
ff6dd693-5e55-4a92-a359-ea61b23ed423:
id: ff6dd693-5e55-4a92-a359-ea61b23ed423
name: Tasty BBQ
categoryIds:
- b01485b0-034a-47c5-8a0a-0eeca08bf994
fulfillmentModes:
- DELIVERY
description: Cooking up BBQ deliciousness from around the globe!
hours:
intervals:
- day: MONDAY
fromHour: 7
fromMinute: 30
toHour: 22
toMinute: 0
additionalCharges:
- chargeType: PACKAGING_CHARGE
flatCharge:
currencyCode: USD
amount: 1.5
items:
title: All Items for the store, indexed by ID
type: object
additionalProperties:
x-additionalPropertiesName: itemId
$ref: '#/components/schemas/ItemUpdateRequest'
example:
fa4f0192-4c4e-4455-9db8-61d428c34969:
id: fa4f0192-4c4e-4455-9db8-61d428c34969
name: Canned Coke
description: Best soda pop ever made
price:
currencyCode: USD
amount: 7.65
status:
saleStatus: FOR_SALE
modifierGroupIds:
- f4c69056-3ae3-4517-9294-5ceec8df5f81
photoUrls:
- https://example.com/photos/c75d9460-5d48-423d-8d01-f825fd5b1672.jpeg
priceOverrides:
- rules:
- externalServiceSlug: ubereats
currencyCode: USD
amount: 7
skuDetails:
skuSlug: canned-coke-355ml
dietaryClassifications:
- tag: VEGAN
allergenClassifications:
- tag: GLUTEN
containsAllergen: false
- tag: PEANUT
containsAllergen: true
storageRequirements:
- tag: FROZEN
6d53cf04-9d62-40f5-a8b3-706e3377668f:
id: 6d53cf04-9d62-40f5-a8b3-706e3377668f
name: Paper straw
description: A paper straw
price:
currencyCode: USD
amount: 0.5
status:
saleStatus: FOR_SALE
type: DEFAULT
description: All menus associated with a store.
JobReference:
type: object
properties:
id:
type: string
description: Unique identifier of the job.
format: uuid
status:
type: string
description: The status of the job.
enum:
- PENDING
- FAILED
- SUCCESS
- UNKNOWN
description: The job reference.
MenuJobType:
type: string
description: Type of job.
enum:
- UPSERT
- PUBLISH
- UPDATE_AVAILABILITY
- SYNC
- UNKNOWN
example: PUBLISH
MenuPublishJobState:
type: object
properties:
status:
type: string
description: Status of the menu publish.
enum:
- PENDING
- FAILED
- SUCCESS
- UNKNOWN
message:
type: string
nullable: true
description: Only present if status is FAILED. Contains the error message returned by our menu systems.
description: Information about the menu publish target.
MenuJobPublishState:
type: object
nullable: true
additionalProperties:
x-additionalPropertiesName: menuPublishTarget
$ref: '#/components/schemas/MenuPublishJobState'
description: Only present if the MenuJobType is PUBLISH. Contains a map of MenuPublishTarget services to their corresponding statuses.
example:
rappi:
status: FAILED
message: Failed to publish menu due to error ...
MenuAsynchronousJob:
type: object
properties:
jobReference:
$ref: '#/components/schemas/JobReference'
jobType:
$ref: '#/components/schemas/MenuJobType'
publishJobState:
$ref: '#/components/schemas/MenuJobPublishState'
description: The job created to process the menu request.
MenuAsyncJobType:
enum:
- TEMPLATE_MENU_SYNC
MenuAsyncLatestJobForStoreResponse:
type: object
properties:
latestJobs:
type: array
minItems: 0
items:
$ref: '#/components/schemas/MenuAsynchronousJob'
description: The list of latest Job and its children for the store and the specified job type.
UpsertFullMenuEventCallback:
required:
- requestedToCreatedEntityIds
type: object
properties:
requestedToCreatedEntityIds:
type: object
additionalProperties:
x-additionalPropertiesName: menuId
type: string
example:
1ecd8573-c033-4a55-9d69-4e99bb0397b4: ABCDEFGHIJK1234
description: A map for entities created by the Upsert containing the IDs of the requested entities mapped to the IDs of entities created by the request. Our system will use the IDs returned in this map to send updates to these entities in future requests. **NOTE -** A empty map can be used on requestedToCreatedEntityIds to use the same menu IDs that were previously defined.
TimeRange:
required:
- end
- start
type: object
properties:
start:
type: string
description: Start time of the range in 24 hour format.
example: 08:00
end:
type: string
description: End time of the range in 24 hour format.
example: '22:00'
description: Time range in a given date.
RegularHours:
required:
- days
- timeRanges
type: object
properties:
days:
type: array
description: The day of the week this configuration applies.
items:
type: string
description: Day of the week.
enum:
- MONDAY
- TUESDAY
- WEDNESDAY
- THURSDAY
- FRIDAY
- SATURDAY
- SUNDAY
timeRanges:
type: array
description: Hours range applied to the provided day of the week
items:
$ref: '#/components/schemas/TimeRange'
description: Describes the configuration of regular hours.
SpecialHours:
required:
- date
- timeRanges
- type
type: object
properties:
date:
type: string
description: Date the special hour configuration applies.
format: date
example: '2021-10-01'
timeRanges:
type: array
minItems: 0
description: Hours range applied to configured date. For open days, the timeRanges field is required. For closed days, the timeRanges field is ignored.
items:
$ref: '#/components/schemas/TimeRange'
type:
type: string
description: Store state that should be applied during the configured special hour. If this field is set to CLOSED, the timeRanges field is ignored.
enum:
- OPEN
- CLOSED
description: Describes the configuration of special store hours.
HoursData:
required:
- regularHours
- specialHours
- timeZone
type: object
properties:
timeZone:
type: string
description: TimeZone of all times under it. (https://www.joda.org/joda-time/timezones.html)
format: timezone-id
example: America/Los_Angeles
regularHours:
type: array
description: List of regular hours configuration.
items:
$ref: '#/components/schemas/RegularHours'
specialHours:
type: array
description: List of special hours configuration, for occasions like Christmas, Thanksgiving, or any other holidays.
items:
$ref: '#/components/schemas/SpecialHours'
description: Represents hours configuration with regular hours and special hours.
Menu_3PD:
title: All Menus for the store, indexed by ID
required:
- id
- name
type: object
properties:
id:
type: string
description: The identifier that exists in the third party system. During a menu publish event, uuidV4 ids will be generated for new entities that do not yet exist in the internal menu.
example: da0e4e94-5670-4175-897a-3b7dde45bed5
name:
type: string
description: Name of the Menu.
example: Tasty BBQ
categoryIds:
type: array
default: []
description: Identifiers of the categories within this Menu.
items:
type: string
fulfillmentModes:
type: array
default: []
description: The ways in which this menu may be fulfilled. If no values are specified, it is assumed that all fulfillment types are allowed.
items:
type: string
description: How an item from a menu is allowed to be fulfilled when ordered by a user.
enum:
- DELIVERY
- PICK_UP
- DINE_IN
description:
type: string
description: Description of the Menu.
example: Cooking up BBQ deliciousness from around the globe!
hoursData:
$ref: '#/components/schemas/HoursData'
additionalCharges:
type: array
nullable: true
description: Additional charges to apply for this menu. All additional charges specified on a menu will only be applied once per order.
items:
$ref: '#/components/schemas/AdditionalCharge'
exposedThirdPartyInfos:
type: array
default: []
description: Additional information about the menu that should be exposed to third party
items:
$ref: '#/components/schemas/ExposedThirdPartyInfo'
description: A Menu for a store.
OverrideRule_3PD:
required:
- type
type: object
properties:
type:
type: string
description: Specification for rules to apply overrides (e.g. PriceOverride).
discriminator:
propertyName: type
mapping:
PATH: '#/components/schemas/EntityPathOverrideRule'
FULFILLMENT_MODE: '#/components/schemas/FulfillmentModeOverrideRule'
SERVICE: '#/components/schemas/ServiceOverrideRule'
EntityPathOverrideRule:
required:
- entityIds
type: object
allOf:
- $ref: '#/components/schemas/OverrideRule_3PD'
- type: object
properties:
entityIds:
type: array
description: EntityPath for this rule.
items:
type: string
FulfillmentModeOverrideRule:
required:
- fulfillmentMode
type: object
allOf:
- $ref: '#/components/schemas/OverrideRule_3PD'
- type: object
properties:
fulfillmentMode:
type: string
description: The fulfillment mode for which the override rule should apply.
ServiceOverrideRule:
required:
- serviceSlug
type: object
allOf:
- $ref: '#/components/schemas/OverrideRule_3PD'
- type: object
properties:
serviceSlug:
type: string
description: The service for which the override rule should apply. The list of relevant service slugs can be provided by your integration partner. This feature is only available to point-of-sale system providers.
PriceOverride:
required:
- price
- rules
type: object
properties:
price:
$ref: '#/components/schemas/Money'
rules:
type: array
minItems: 1
description: Override rules for when this price override should be applied.
items:
$ref: '#/components/schemas/OverrideRule_3PD'
description: Price override for an item
MenuItem_3PD:
title: All Items for the store, indexed by ID
required:
- id
- name
- photoIds
- price
- priceOverrides
- status
type: object
properties:
id:
type: string
minLength: 1
description: The identifier that exists in the third party system. During a menu publish event, uuidV4 ids will be generated for new entities that do not yet exist in the internal menu.
example: da0e4e94-5670-4175-897a-3b7dde45bed5
name:
type: string
description: Name of this Item
example: Bagel
photoIds:
type: array
description: A list of Photo references associated with the Item.
items:
type: string
price:
$ref: '#/components/schemas/Money'
priceOverrides:
type: array
description: Specify price overrides.
items:
$ref: '#/components/schemas/PriceOverride'
status:
$ref: '#/components/schemas/ItemStatus'
description:
type: string
description: Description of this Item
example: Delicious bagel!
modifierGroupIds:
type: array
default: []
description: Identifiers of each ModifierGroup within this Item.
items:
type: string
example: 7152ee6e-e941-45c1-9008-2e306b479114
skuDetails:
$ref: '#/components/schemas/SkuDetails'
additionalCharges:
type: array
nullable: true
description: Additional charges to apply for this item. Additional charges will be applied for every instance of this item within an order.
items:
$ref: '#/components/schemas/AdditionalCharge'
tax:
$ref: '#/components/schemas/ItemTax'
description: The tax configuration for the menu item.
exposedThirdPartyInfos:
type: array
default: []
description: Additional information about the menu that should be exposed to third party
items:
$ref: '#/components/schemas/ExposedThirdPartyInfo'
description: Items are sold on the Menu. Modifiers to items are items themselves and their relationship is defined by ModifierGroup.
MenuData:
required:
- categories
- items
- menus
- modifierGroups
- photos
type: object
properties:
menus:
title: All Menus for the store, indexed by ID
type: object
additionalProperties:
x-additionalPropertiesName: menuId
$ref: '#/components/schemas/Menu_3PD'
example:
ff6dd693-5e55-4a92-a359-ea61b23ed423:
id: ff6dd693-5e55-4a92-a359-ea61b23ed423
name: Tasty BBQ
categoryIds:
- b01485b0-034a-47c5-8a0a-0eeca08bf994
fulfillmentModes:
- DELIVERY
description: Cooking up BBQ deliciousness from around the globe!
hoursData:
timeZone: America/Los_Angeles
regularHours:
- days:
- MONDAY
- TUESDAY
- WEDNESDAY
- THURSDAY
- FRIDAY
timeRanges:
- start: 08:00
end: '22:00'
specialHours:
- date: '2021-12-31'
timeRanges:
- start: 08:00
end: '22:00'
type: CLOSED
additionalCharges:
- chargeType: PACKAGING_CHARGE
percentageCharge:
decimalValue: 0.03
exposedThirdPartyInfos:
- externalId: ff6dd693-5e55-4a92-a359-ea61b23ed423
externalServiceSlug: 3PD
categories:
title: All Categories for the store, indexed by ID
type: object
additionalProperties:
x-additionalPropertiesName: categoryId
$ref: '#/components/schemas/Category'
example:
b01485b0-034a-47c5-8a0a-0eeca08bf994:
name: Drinks
description: All drink items served up nice and fresh!
id: b01485b0-034a-47c5-8a0a-0eeca08bf994
itemIds:
- fa4f0192-4c4e-4455-9db8-61d428c34969
items:
title: All Items for the store, indexed by ID
type: object
additionalProperties:
x-additionalPropertiesName: itemId
$ref: '#/components/schemas/MenuItem_3PD'
example:
fa4f0192-4c4e-4455-9db8-61d428c34969:
id: fa4f0192-4c4e-4455-9db8-61d428c34969
name: Canned Coke
description: Best soda pop ever made
price:
currencyCode: USD
amount: 7.65
status:
saleStatus: FOR_SALE
modifierGroupIds:
- f4c69056-3ae3-4517-9294-5ceec8df5f81
photoIds:
- c75d9460-5d48-423d-8d01-f825fd5b1672
priceOverrides:
- rules:
- type: FulfillmentModeOverrideRule
fulfillmentMode: PICK_UP
price:
currencyCode: USD
amount: 7
skuDetails:
skuSlug: canned-coke-355ml
dietaryClassifications:
- tag: VEGAN
allergenClassifications:
- tag: GLUTEN
containsAllergen: false
- tag: PEANUT
containsAllergen: true
storageRequirements:
- tag: COLD
- tag: AVOID_SUNLIGHT
additives:
- flavor enhancers
- food coloring
containsAlcohol: false
nutritionalInfo:
energyKcal:
low: 1
high: 100
nutritionContent:
servingSizeInGrams: 100
servingSizeInMilliliters: 100
fats: 100.2
saturatedFats: 3.5
monoUnsaturatedFats: 5.2,
polyUnsaturatedFats: 1.3,
carbohydrates: 3.2,
sugar: 101,
polyols: 1.1,
starch: 1.2,
protein: 1.3,
salt: 1.4,
sodium: 1.5,
fibres: 1.6,
vitaminC: 1.7,
calcium: 1.8,
magnesium: 1.9,
chloride: 2.0,
fluoride: 2.1,
potassium: 2.2,
caffeine: 2.3,
energy: 2.4
servings:
min: 1
max: 2
producerInformation: The Coca-Cola Company
distributorInformation: The Coca-Cola Company
countryOfOriginIso2: US
additionalCharges:
- chargeType: PACKAGING_CHARGE
flatCharge:
currencyCode: USD
amount: 1.5
tax:
percentageValue:
decimalValue: 0.513
isValueAddedTax: true
exposedThirdPartyInfos:
- externalId: ff6dd693-5e55-4a92-a359-ea61b23ed423
externalServiceSlug: 3PD
6d53cf04-9d62-40f5-a8b3-706e3377668f:
id: 6d53cf04-9d62-40f5-a8b3-706e3377668f
name: Paper straw
description: A paper straw
price:
currencyCode: USD
amount: 0.5
status:
saleStatus: FOR_SALE
modifierGroups:
title: All ModifierGroups for the Store, indexed by ID
type: object
additionalProperties:
x-additionalPropertiesName: modifierGroupId
$ref: '#/components/schemas/ModifierGroup'
example:
f4c69056-3ae3-4517-9294-5ceec8df5f81:
id: f4c69056-3ae3-4517-9294-5ceec8df5f81
name: Add Straw
minimumSelections: 0
maximumSelections: 1
defaultModifierSelectionData:
defaultModifierSelections:
- itemId: 6d53cf04-9d62-40f5-a8b3-706e3377668f
selectionQuantity: 1
itemIds:
- 6d53cf04-9d62-40f5-a8b3-706e3377668f
type: DEFAULT
exposedThirdPartyInfos:
- externalId: ff6dd693-5e55-4a92-a359-ea61b23ed423
externalServiceSlug: 3PD
photos:
title: All photos for the store, indexed by ID
type: object
additionalProperties:
x-additionalPropertiesName: photoId
$ref: '#/components/schemas/Photo'
example:
c75d9460-5d48-423d-8d01-f825fd5b1672:
id: c75d9460-5d48-423d-8d01-f825fd5b1672
fileName: c75d9460-5d48-423d-8d01-f825fd5b1672.jpeg
url: https://example.com/photos/c75d9460-5d48-423d-8d01-f825fd5b1672.jpeg
description: MenuData contains all menu entities, and their relations.
SendMenuEventCallback:
required:
- menuData
type: object
properties:
menuData:
$ref: '#/components/schemas/MenuData'
CustomBulkResolutionOptions:
type: object
nullable: true
properties:
updateNames:
type: boolean
description: Update the linked entity's names to match the linked external entity's.
updatePrices:
type: boolean
description: Update the linked entity's price to match the linked external entity's.
updateDescriptions:
type: boolean
description: Update the linked entity's description to match the linked external entity's.
createUnmatchedEntities:
type: boolean
description: Create unmatched external entities in the menu.
deleteMissingEntities:
type: boolean
description: Delete entities that are missing external links.
bootstrapPhotosToEntities:
type: boolean
description: Bootstrap linked item photos.
copyEntityPaths:
type: boolean
description: Copies the entity paths from the external menu.
updateItemSuspensionStatus:
type: boolean
description: Update Item suspension status.
updateHours:
type: boolean
description: Update menu hours.
assignItemsToLocations:
type: boolean
description: If an item exists at a location in the POS, it will automatically be assigned to that location.
unassignItemsFromLocations:
type: boolean
description: If an item is removed from a location in the POS, it will automatically be unassigned from that location.
updateMenuOrganization:
type: boolean
description: The organization of modifiers into modifier groups, modifier groups into items and items into categories will be replicated from the POS menu.
updateItemArrangement:
type: boolean
description: The arrangement of menu products as displayed in your POS will be replicated.
updateModifierGroupRules:
type: boolean
description: Update modifier group selection rules.
updateTaxes:
type: boolean
description: Update taxes.
PosMenuSyncRequest:
type: object
properties:
shouldPublishChanges:
type: boolean
nullable: true
description: Whether or not to publish changes to external services after bulk resolution.
useCustomOptions:
type: boolean
nullable: true
description: If true, use `customBulkResolutionOptions` instead of menu configuration.
customBulkResolutionOptions:
nullable: true
$ref: '#/components/schemas/CustomBulkResolutionOptions'
PosMenuSyncResponse:
type: object
properties:
jobId:
type: string
nullable: true
description: Only present if the request succeeds. Job ID to check on the status with the MenuAsyncJob endpoint.
format: uuid
MenuPublishRequest:
type: object
properties:
menuPublishTargets:
type: array
description: MenuPublishTargets to publish to.
example:
- doordash
- ubereats
items:
type: string
description: MenuPublishTargets to publish to.
example: '["doordash","ubereats"]'
MenuPublishTarget:
type: object
properties:
status:
type: string
description: The status of a menu publish target.
enum:
- READY
- PUBLISH_IN_PROGRESS
- ERROR
description: Information about the target.
MenuPublishResponseMenuPublishTargets:
type: object
nullable: true
properties:
menuPublishTargets:
type: object
additionalProperties:
x-additionalPropertiesName: menuPublishTargetName
$ref: '#/components/schemas/MenuPublishTarget'
description: Map of MenuPublishTarget names to their targets. The target can only be published to if the status is READY.
example:
rappi:
status: PUBLISH_IN_PROGRESS
description: Only present if the request fails. Meant to help debugging why the request failed.
MenuPublishResponse:
type: object
properties:
requestSubmitted:
type: boolean
description: Whether the request was submitted or not.
jobId:
type: string
nullable: true
description: Only present if the request succeeds. Job ID to check on the status with the MenuAsyncJob endpoint.
format: uuid
menuPublishTargets:
$ref: '#/components/schemas/MenuPublishResponseMenuPublishTargets'
SuspensionStatus:
required:
- isIndefinite
type: object
properties:
isIndefinite:
type: boolean
description: True if the suspension is indefinite
suspendedUntil:
type: string
nullable: true
description: 'ISO-8601 timestamp representing the time the saleStatus value is supposed to change to FOR_SALE. Set only when current saleStatus value is TEMPORARILY_NOT_FOR_SALE. E.g.: 2020-11-23T21:33:51Z, 2007-12-03T10:15:30+01:00'
format: date-time
example: '2007-12-03T10:15:30+01:00'
description: The type of suspension this will be.
SuspendItemsRequest:
required:
- entityIds
- note
- status
type: object
properties:
entityIds:
type: array
description: Entity IDs to suspend. These should be the IDs as you represent them in your system.
example:
- 9cc4bb5e-bc97-40d9-af28-c02ef1483610
items:
type: string
description: Entity IDs to suspend.
example: '["9cc4bb5e-bc97-40d9-af28-c02ef1483610","9929290d-31eb-425d-8732-17c4074ac75e"]'
note:
type: string
description: The reason you are suspending the items.
example: Out of item
status:
$ref: '#/components/schemas/SuspensionStatus'
UnsuspendItemsRequest:
type: object
properties:
entityIds:
type: array
description: Entity IDs to unsuspend. These should be the IDs as you represent them in your system.
example:
- 9cc4bb5e-bc97-40d9-af28-c02ef1483610
items:
type: string
description: Entity IDs to unsuspend.
example: '["9cc4bb5e-bc97-40d9-af28-c02ef1483610","9929290d-31eb-425d-8732-17c4074ac75e"]'
note:
type: string
description: The reason you are unsuspending the items.
example: Item back in stock
MenuPublishTargets:
type: object
properties:
menuPublishTargets:
type: object
additionalProperties:
x-additionalPropertiesName: menuPublishTargetName
$ref: '#/components/schemas/MenuPublishTarget'
example:
rappi:
status: PUBLISH_IN_PROGRESS
description: Map of MenuPublishTarget names to their targets. The target can only be published to if the status is READY.
BootstrapMenuRequest:
required:
- templateName
- externalServiceSlug
type: object
properties:
templateName:
type: string
description: Name for the bootstrapped template menu
example: My Store's Menu
externalServiceSlug:
type: string
description: The external service from which to bootstrap menu data
example: ubereats-api
enableTemplate:
type: boolean
description: Whether or not to enable the template at the bootstrapped store
nullable: true
stationId:
type: string
nullable: true
description: The id of the station to which to assign bootstrapped items, unnecessary for brick and mortar
example: 9cc4bb5e-bc97-40d9-af28-c02ef1483610
posSlug:
type: string
nullable: true
description: The slug for the POS to connect to
example: pos-slug
EventResultMetadata:
type: object
nullable: true
properties:
operationStatus:
type: string
description: Status of the operation requested by an event.
enum:
- SUCCEEDED
- INTERNAL_ERROR
- AUTHENTICATION_FAILURE
- AUTHORIZATION_FAILURE
- UNKNOWN_FAILURE
- INVALID_STORE_STATE
- INVALID_STORE_CONFIGURATION
- OPERATION_NOT_SUPPORTED
- IGNORED_ALREADY_IN_REQUESTED_STATE
- INVALID_REQUEST
additionalInformation:
type: string
nullable: true
description: Additional details about the event result, if available.
example: Completed without problems.
operationFinishedAt:
type: string
description: Time when the processing of the event finished.
format: date-time
example: '2007-12-03T10:15:30+01:00'
description: Information about the result of a storefront event.
StoreAvailabilityEventResult:
type: object
properties:
storeState:
type: string
nullable: true
description: Represents the current state of a store.
enum:
- OPEN
- OFF_HOUR
- SERVICE_PROVIDER_PAUSED
- OPERATOR_PAUSED
- SERVICE_PROVIDER_PAUSED_COURIERS_UNAVAILABLE
- STORE_UNAVAILABLE
- HOLIDAY_HOUR
- MENU_UNAVAILABLE
- SERVICE_PROVIDER_PAUSED_MISCONFIGURED
- OPEN_FOR_PICKUP_ONLY
- OPEN_FOR_DELIVERY_ONLY
- CLOSED_FOR_UNDETERMINED_REASON
statusChangedAt:
type: string
nullable: true
description: The time when the store changed to the current state.
format: date-time
example: '2007-12-03T10:15:30+01:00'
eventResultMetadata:
$ref: '#/components/schemas/EventResultMetadata'
description: The current state of a store.
Storefront_TimeRange:
type: object
properties:
startTime:
type: string
description: Start time of the range in 24 hour format.
example: 08:00
endTime:
type: string
description: End time of the range in 24 hour format.
example: 08:00
description: Time range in a given date.
Storefront_RegularHours:
required:
- dayOfWeek
- timeRanges
type: object
properties:
dayOfWeek:
type: string
description: Day of the week.
enum:
- MONDAY
- TUESDAY
- WEDNESDAY
- THURSDAY
- FRIDAY
- SATURDAY
- SUNDAY
timeRanges:
type: array
minItems: 1
description: Hours range applied to the provided day of the week
items:
$ref: '#/components/schemas/Storefront_TimeRange'
description: Describes the configuration of regular hours.
Storefront_SpecialHours:
required:
- date
- timeRanges
- specialHourType
type: object
properties:
date:
type: string
description: Date the special hour configuration applies.
format: date
example: '2021-10-01'
timeRanges:
type: array
minItems: 1
description: Hours range applied to configured date.
items:
$ref: '#/components/schemas/Storefront_TimeRange'
specialHourType:
type: string
description: Store state that should be applied during the configured special hour.
enum:
- OPEN
- CLOSED
description: Describes the configuration of special store hours.
StoreHours:
type: object
nullable: true
properties:
regularHours:
type: array
description: List of regular hours configuration.
items:
$ref: '#/components/schemas/Storefront_RegularHours'
specialHours:
type: array
nullable: true
description: List of special hours configuration.
items:
$ref: '#/components/schemas/Storefront_SpecialHours'
description: Represents store hours configuration with regular hours and special hours.
StoreHoursConfiguration:
required:
- timezone
type: object
properties:
deliveryHours:
$ref: '#/components/schemas/StoreHours'
pickupHours:
$ref: '#/components/schemas/StoreHours'
timezone:
type: string
description: The store time zone identifier. (e.g. America/New_York)
example: America/Los_Angeles
description: The current store hours configuration of a store.
StoreHoursConfigurationEventResult:
type: object
properties:
storeHoursConfiguration:
$ref: '#/components/schemas/StoreHoursConfiguration'
statusChangedAt:
type: string
description: The time when the store hours configuration changed.
format: date-time
example: '2007-12-03T10:15:30+01:00'
eventResultMetadata:
$ref: '#/components/schemas/EventResultMetadata'
description: The current store hours configuration.
RequiredEventResultMetadata:
type: object
properties:
operationStatus:
type: string
description: Status of the operation requested by an event.
enum:
- SUCCEEDED
- INTERNAL_ERROR
- AUTHENTICATION_FAILURE
- AUTHORIZATION_FAILURE
- UNKNOWN_FAILURE
- INVALID_STORE_STATE
- INVALID_STORE_CONFIGURATION
- OPERATION_NOT_SUPPORTED
- IGNORED_ALREADY_IN_REQUESTED_STATE
- INVALID_REQUEST
additionalInformation:
type: string
nullable: true
description: Additional details about the event result, if available.
example: Completed without problems.
operationFinishedAt:
type: string
description: Time when the processing of the event finished.
format: date-time
example: '2007-12-03T10:15:30+01:00'
description: Information about the result of a storefront event.
PauseStoreEventResult:
type: object
properties:
closureId:
type: string
description: ID required to unpause a store, if available
example: 4109d2c9-8bc5-413c-af3e-1c92aa381e41
eventResultMetadata:
$ref: '#/components/schemas/RequiredEventResultMetadata'
description: Result of an event that requested to pause a store.
UnpauseStoreEventResult:
type: object
properties:
eventResultMetadata:
$ref: '#/components/schemas/RequiredEventResultMetadata'
description: Result of an event that requested to unpause a store.
DeliveryStatus:
type: string
description: The status of the delivery.
enum:
- REQUESTED
- ALLOCATED
- PICKED_UP
- COMPLETED
- CANCELED
- ARRIVED_AT_PICKUP
- ARRIVED_AT_DROP_OFF
VehicleInformation:
type: object
nullable: true
properties:
vehicleType:
type: string
description: The type of vehicle used to fulfill the delivery.
enum:
- WALKER
- MOTORCYCLE
- BICYCLE
- CAR
- VAN
licensePlate:
type: string
nullable: true
description: The license plate of the vehicle used to fulfill the delivery.
example: ABCD 123
makeModel:
type: string
nullable: true
description: The make and model of the vehicle used to fulfill the delivery.
example: Honda Civic
DeliveryCost:
type: object
properties:
baseCost:
type: number
format: double
description: Base delivery cost value.
example: 4.99
extraCost:
type: number
format: double
description: Extra delivery cost value.
example: 0.99
description: Delivery cost details.
SignatureProof:
type: object
nullable: true
properties:
signatureImageUrl:
type: string
description: Signature image url.
signerName:
nullable: true
type: string
description: The name of the signer.
signerRelationship:
nullable: true
type: string
description: The relationship of signer to the intended recipient.
description: Signature info captured.
PictureProof:
type: object
nullable: true
properties:
pictureUrl:
type: string
description: Image url.
description: Picture info captured.
VerificationProof:
type: object
nullable: true
properties:
signatureProof:
nullable: true
$ref: '#/components/schemas/SignatureProof'
pictureProof:
nullable: true
$ref: '#/components/schemas/PictureProof'
description: Verification details.
DropoffInfo:
type: object
nullable: true
properties:
courierNote:
nullable: true
type: string
description: Courier supplied dropoff note.
proofOfDelivery:
nullable: true
$ref: '#/components/schemas/VerificationProof'
description: Proof of delivery.
description: Delivery dropoff details.
DeliveryStatusUpdateRequest:
type: object
properties:
deliveryStatus:
$ref: '#/components/schemas/DeliveryStatus'
estimatedDeliveryTime:
type: string
nullable: true
description: The expected delivery time.
format: date-time
example: '2007-12-03T10:15:30+01:00'
estimatedPickupTime:
type: string
nullable: true
description: The expected pickup time.
format: date-time
example: '2007-12-03T10:15:30+01:00'
courier:
$ref: '#/components/schemas/Person'
location:
$ref: '#/components/schemas/Location'
createdAt:
type: string
description: The time that the update was created.
format: date-time
example: '2007-12-03T10:15:30+01:00'
vehicleInformation:
nullable: true
$ref: '#/components/schemas/VehicleInformation'
currencyCode:
type: string
nullable: true
minLength: 3
maxLength: 3
description: The 3-letter currency code (ISO 4217) to use for all monetary values.
example: EUR
cost:
nullable: true
$ref: '#/components/schemas/DeliveryCost'
providerDeliveryId:
type: string
nullable: true
description: The provider's internal identifier for the delivery used for tracking purposes.
dropoffInfo:
nullable: true
$ref: '#/components/schemas/DropoffInfo'
description: Details on delivery dropoff.
deliveryTrackingUrl:
type: string
nullable: true
description: Delivery tracking url.
description: Update delivery status request.
Distance:
type: object
nullable: true
properties:
unit:
type: string
description: Distance unit value.
enum:
- KILOMETERS
- MILES
value:
type: number
description: Distance value.
description: Delivery distance.
FulfillmentPathEntity:
type: object
properties:
name:
type: string
minLength: 1
description: Describes the entity name.
example: rappi
type:
type: string
description: Type of entities in the fulfillment path.
enum:
- FULFILLMENT_PROCESSOR
- INTERMEDIARY
description: Delivery distance.
RequestDeliveryQuoteCallbackRequest:
type: object
properties:
minPickupDuration:
type: integer
minimum: 0
format: int32
description: Minimum time required for courier to arrive at pickup location in minutes It is an estimation.
example: 5
maxPickupDuration:
type: integer
nullable: true
description: Maximum time that the courier's arrival at pick up location can be delayed. If not provided, it will default to 60 minutes or minPickUpDuration, whichever is greater. This value is an estimation and expressed in minutes.
format: int32
example: 10
deliveryDistance:
$ref: '#/components/schemas/Distance'
currencyCode:
type: string
minLength: 3
maxLength: 3
description: The 3-letter currency code (ISO 4217) to use for all monetary values.
example: EUR
cost:
$ref: '#/components/schemas/DeliveryCost'
provider:
type: string
nullable: true
description: Delivery Service Provider Slug.
example: doordash
fulfillmentPath:
type: array
nullable: true
description: List of entities involved in the fulfillment processing path.
items:
$ref: '#/components/schemas/FulfillmentPathEntity'
createdAt:
type: string
description: The time that the quote was created.
format: date-time
example: '2007-12-03T10:15:30+01:00'
accountBalance:
type: number
nullable: true
description: The remaining account balance of the requester for the delivery provider.
example: 1068.32
description: Delivery quote information.
AcceptDeliveryCallbackRequest:
type: object
properties:
deliveryDistance:
$ref: '#/components/schemas/Distance'
currencyCode:
type: string
minLength: 3
maxLength: 3
description: The 3-letter currency code (ISO 4217) to use for all monetary values.
example: EUR
cost:
$ref: '#/components/schemas/DeliveryCost'
fulfillmentPath:
type: array
nullable: true
description: List of entities involved in the fulfillment processing path.
items:
$ref: '#/components/schemas/FulfillmentPathEntity'
estimatedDeliveryTime:
type: string
nullable: true
description: The expected delivery time.
format: date-time
example: '2007-12-03T10:15:30+01:00'
estimatedPickupTime:
type: string
nullable: true
description: The expected pickup time.
format: date-time
example: '2007-12-03T10:15:30+01:00'
confirmedAt:
type: string
description: The time that the request was accepted.
format: date-time
example: '2007-12-03T10:15:30+01:00'
deliveryTrackingUrl:
type: string
nullable: true
description: URL to a web page that tracks the delivery.
example: www.example.com
providerDeliveryId:
type: string
nullable: true
description: The provider's internal identifier for the delivery used for tracking purposes.
description: Delivery information.
CancelDeliveryCallbackRequest:
type: object
properties:
canceledAt:
type: string
description: The time that the request was cancelled.
format: date-time
example: '2007-12-03T10:15:30+01:00'
description: Cancellation result callback request.
EventCallbackError:
type: object
properties:
errorCode:
type: string
description: 'Errors that occur processing the webhook, modeled after Google''s gRPC error codes.
For callback errors responding to menu-related webhooks, any error with status code in: "INVALID_ARGUMENT", "FAILED_PRECONDITION", "NOT_FOUND", "PERMISSION_DENIED", "ALREADY_EXISTS", "UNIMPLEMENTED", "DATA_LOSS", "UNAUTHENTICATED" will be considered fatal and will fail the operation without retrying.'
enum:
- CANCELLED
- UNKNOWN
- INVALID_ARGUMENT
- FAILED_PRECONDITION
- DEADLINE_EXCEEDED
- NOT_FOUND
- PERMISSION_DENIED
- ALREADY_EXISTS
- RESOURCE_EXHAUSTED
- ABORTED
- OUT_OF_RANGE
- UNIMPLEMENTED
- INTERNAL
- UNAVAILABLE
- DATA_LOSS
- UNAUTHENTICATED
example: NOT_FOUND
errorMessage:
type: string
nullable: true
description: Additional information about the error. This message will be displayed to the user, so ideally it should be friendly.
example: The store was not found.
description: The error container for a processed callback.
UpdateDeliveryRequestCallbackRequest:
type: object
properties:
currencyCode:
type: string
nullable: true
minLength: 3
maxLength: 3
description: The 3-letter currency code (ISO 4217) to use for all monetary values.
example: EUR
cost:
nullable: true
$ref: '#/components/schemas/DeliveryCost'
description: Updated delivery cost.
description: Updated Delivery information.
PongObject:
type: object
properties:
response:
type: string
description: A text response.
example: pong
currentTime:
type: string
format: date-time
description: The current timestamp.
example: '2007-12-03T10:15:30+01:00'
JobId:
type: string
description: ID used to track the job created for generating report.
example: 38ab397f-b142-4b06-b70c-40c68a408bea
GetReportStatusResponse:
type: object
properties:
status:
description: Report export status
type: string
enum:
- IN_PROGRESS
- READY
- ERROR
- EXPIRED
payload:
type: object
properties:
reportUrl:
type: string
nullable: true
description: Url to download the report. It will be available only if status is "READY"
example: https://example.com/path/to/report.csv.gz
errorMessage:
type: string
nullable: true
description: Error message. It will be available only if status is "ERROR"
example: Report generation error. Please reach out to support and provide jobId
GenerateReportMultiRequest:
type: object
properties:
reportType:
type: string
description: Type of report to generate
example: ORDER_STORES
enum:
- ORDER_STORES
- ORDER_ITEMS
- PAYOUT_TRANSACTIONS
- RATINGS_AND_REVIEWS
start:
type: string
description: Report start date
format: date
example: '2021-10-01'
end:
type: string
description: Report end date
format: date
example: '2021-10-01'
externalStoreIds:
type: array
nullable: false
description: List of external store IDs to filter the orders with. At least one value is required. Max is 5000. Fails the requests if one or more invalid external store ID is passed
example:
- brand1-acbdef
- brand1-fghjkl
- brand2-qwerty
items:
type: string
description: List of external store IDs to filter the orders with. At least one value is required. Fails the requests if one or more invalid external store ID is passed
example: '["brand1-acbdef", "brand1-fghjkl", "brand2-qwerty"]'
externalServiceSlugs:
type: array
nullable: true
description: List of external service slugs to fetch orders from. Default to all services
example:
- ubereats
- postmates
items:
type: string
description: List of external service slugs to fetch orders from. Default to all services
example: '["ubereats","postmates"]'
language:
type: string
nullable: true
description: Language of the report. Ignored by ORDER_STORES report Optional. Falls back to English if empty.
description: The request to generate a report for multiple stores.
GenerateReportResponse:
type: object
properties:
jobId:
$ref: '#/components/schemas/JobId'
description: The response to a generate report request
ReviewReplyRequest:
type: object
properties:
reviewId:
type: string
description: The review ID.
example: review-56e9-46be
externalStoreId:
type: string
description: External store ID of the review you are responding to. Fails the requests if invalid external store ID is passed.
example: order-1fa4-479c
serviceSlug:
type: string
description: The slug of the service for the review.
example: ubereats
replyText:
type: string
description: The reply text.
example: Thank you very much.
scheduledAt:
type: number
description: The scheduled timestamp (seconds) to reply to the review.
format: double
example: 1697727006
nullable: true
description: The request to reply to a review.
ReviewReplyResponse:
type: object
properties:
replyId:
type: string
description: The reply ID. Returned if no scheduled timestamp was provided.
example: reply-f34f-4d35
nullable: true
description: The response to reply to a review.
OAuthTokenGenerationRequest:
required:
- grant_type
- scope
type: object
properties:
client_id:
type: string
description: The ID of the client (also known as the Application ID).
format: uuid
client_secret:
type: string
description: The secret of the client.
grant_type:
type: string
description: The OAuth2.0 grant types supported.
enum:
- client_credentials
- authorization_code
scope:
type: string
description: The scope to request, multiple scopes are passed delimited by a space character.
example: scope1 scope2
code:
type: string
nullable: true
description: The authorization code obtained from the server when performing the authorization code flow. It is required to exchange the code for an access token that will be used to perform actions on behalf of a user.
example: 8A9D16B4C3E25F6A
redirect_uri:
type: string
nullable: true
description: The redirect URI that was included in the initial authorization request. The value must be an exact match of the previously used URI, otherwise the request will be rejected.
example: https://example.com/callback
code_verifier:
type: string
nullable: true
description: If the code_challenge parameter was included in the initial authorization requests, the application must now provide the code verifier. The value is the plaintext string that was used to calculate the hash that was previously sent in the code_challenge parameter.
example: Th7UHJdLswIYQxwSg29DbK1a_d9o41uNMTRmuH0PM8zyoMAQ
description: The entity to request a token, following the OAuth2.0 protocol.
HydraToken:
type: object
properties:
access_token:
type: string
description: The auth token used when consuming the API endpoints.
example: oMahtBwBbnZeh4Q66mSuLFmk2V0_CLCKVt0aYcNJlcg.yditzjwCP7yp0PgR6AzQR3wQ1rTdCjkcPeAMuyfK-NU
expires_in:
type: integer
format: int64
description: The token expiration time in seconds.
example: 2627999
scope:
type: string
description: The scopes available for the token.
example: ping orders.create
token_type:
type: string
description: The token type is always "bearer".
example: bearer
ApplicationId:
type: string
description: The plain-text Application ID, provided at partner onboarding, also available on Developer Portal.
example: 5045c1c3-694f-4392-b43b-e765cd89c8b8
UpsertStorelinkEventResultRequest:
required:
- success
type: object
properties:
success:
type: boolean
description: Indicates if the partner application successfully created and validated the credential provided through the `Upsert Store Webhook`.
storeId:
nullable: true
type: string
description: The unique identifier of the store in the partner application. This ID, along with the `Application ID`, will be used to match the correct store when performing operations. It cannot be longer than 255 characters and must only contain printable ASCII characters.
example: partner-store-unique-identifier
errorMessage:
nullable: true
type: object
properties:
message:
type: string
description: The error description.
example: The request body is invalid.
details:
type: array
description: The error details.
items:
$ref: '#/components/schemas/ErrorDetail'
description: The error response object.
UpdateStorelinkStatusRequest:
required:
- status
type: object
properties:
status:
type: string
description: 'The new status of the store. ACTIVE: store ready to perform operations again; SUSPENDED: temporarily disables the store; INVALID: current credentials will no longer work, new credentials needed.'
enum:
- ACTIVE
- SUSPENDED
- INVALID
example: SUSPENDED
message:
nullable: true
type: string
description: Optional message to explain the reason of the status update.
example: Authentication is failing with current credentials. Suspending store while the retry process is in progress.
OrderIdentifierFinance:
required:
- id
type: object
properties:
id:
type: string
description: Unique ID for the order that was placed.
example: 69f60a06-c335-46d9-b5a1-97f1a211c514
source:
type: string
nullable: true
description: Describes the source of the order, typically from a food ordering marketplace.
example: ubereats
description: The external identifiers of the order.
PayoutInfo:
required:
- id
- date
type: object
properties:
id:
type: string
description: Payout identifier.
date:
type: string
description: The payout date.
format: date
example: '2021-10-01'
OrderIssue:
required:
- type
type: object
properties:
type:
type: string
description: Order issue type.
enum:
- MISSING_ITEM
- INCOMPLETE
- WRONG_INGREDIENTS
- WRONG_SIZE
- WRONG_INSTRUCTIONS
- TEMPERATURE_COLD
- WRONG_ORDER
- POOR_QUALITY
- HANDLED_POORLY
- WRONG_ITEM
- WRONG_QUANTITY
- LATE_TO_COURIER
OrderItemInformation:
required:
- id
type: object
properties:
id:
type: string
description: Regular item identifier.
name:
type: string
nullable: true
description: Item name
issues:
type: array
nullable: true
description: Order issues that relate to this item.
items:
$ref: '#/components/schemas/OrderIssue'
FinancialTransaction:
required:
- id
- orderIdentifiers
- pending
- currencyCode
- createdAt
- type
- data
type: object
properties:
orderIdentifiers:
$ref: '#/components/schemas/OrderIdentifierFinance'
id:
type: string
description: External financial transaction identifier.
pending:
type: boolean
description: Whether the transaction can be updated in the future.
currencyCode:
maxLength: 3
minLength: 3
type: string
description: The 3-letter currency code (ISO 4217) to use for all monetary values in this order.
example: EUR
createdAt:
type: string
description: The date (in UTC) when the financial transaction was created.
format: date-time
example: '2007-12-03T10:15:30+01:00'
customerId:
type: string
nullable: true
description: Customer identifier.
notes:
type: string
nullable: true
description: General notes about the financial transaction.
type:
type: string
description: Financial transaction operation type.
enum:
- PAYMENT
- ADJUSTMENT
- CANCELLATION
- MISC
payout:
nullable: true
$ref: '#/components/schemas/PayoutInfo'
orderItems:
type: array
nullable: true
description: Detailed financial per order item.
items:
$ref: '#/components/schemas/OrderItemInformation'
issues:
type: array
nullable: true
description: List of issues that might have happened with the order.
items:
$ref: '#/components/schemas/OrderIssue'
data:
$ref: '#/components/schemas/FinancialData'
InvoicePayoutInfo:
required:
- id
- date
type: object
properties:
id:
type: string
description: Payout identifier.
date:
type: string
description: The payout date.
format: date
example: '2021-10-01'
summary:
$ref: '#/components/schemas/FinancialData'
total:
type: number
nullable: true
description: Total payout value. Should only be used if summary is not provided.
example: 19.07
SimpleOrderIdentifierFinance:
required:
- id
type: object
properties:
id:
type: string
description: Unique ID for the order that was placed.
example: 69f60a06-c335-46d9-b5a1-97f1a211c514
description: The external identifiers of the order.
SimpleFinancialTransaction:
required:
- id
- orderIdentifiers
- createdAt
- type
- data
type: object
properties:
orderIdentifiers:
$ref: '#/components/schemas/SimpleOrderIdentifierFinance'
id:
type: string
description: External financial transaction identifier.
createdAt:
type: string
description: The date (in UTC) when the financial transaction was created.
format: date-time
example: '2007-12-03T10:15:30+01:00'
customerId:
type: string
nullable: true
description: Customer identifier.
notes:
type: string
nullable: true
description: General notes about the financial transaction.
type:
type: string
description: Financial transaction operation type.
enum:
- PAYMENT
- ADJUSTMENT
- CANCELLATION
- MISC
orderItems:
type: array
nullable: true
description: Detailed financial per order item.
items:
$ref: '#/components/schemas/OrderItemInformation'
issues:
type: array
nullable: true
description: List of issues that might have happened with the order.
items:
$ref: '#/components/schemas/OrderIssue'
data:
$ref: '#/components/schemas/FinancialData'
FinancialInvoice:
required:
- payout
- financialTransactions
type: object
properties:
sourceService:
type: string
nullable: true
description: Describes the source of the order, typically from a food ordering marketplace.
example: ubereats
payout:
$ref: '#/components/schemas/InvoicePayoutInfo'
financialTransactions:
type: array
description: List of financial transactions related to this invoice.
items:
$ref: '#/components/schemas/SimpleFinancialTransaction'
currencyCode:
maxLength: 3
minLength: 3
type: string
description: The 3-letter currency code (ISO 4217) to use for all monetary values in this order.
example: EUR
Gtin:
type: string
description: A 14 digit Global Trade Item Number (GTIN). For GTIN values that are shorter than 14 digits, value will be padded with leading zeroes.
example: 00049000608779
InventorySummary:
required:
- id
- name
- sellableQuantity
type: object
properties:
id:
type: string
description: A unique identifier for the product.
example: ZDlhYTc1NjUtMzU3Z
gtin:
$ref: '#/components/schemas/Gtin'
name:
type: string
description: The name of the product.
example: Coca-Cola Classic Coke Soft Drink 12 oz. can
slug:
type: string
description: short, unique human-readable id for the product
example: coca-cola-classic-soft-drink-12-oz-can
externalId:
type: string
description: id of the product provided by the seller
example: some-id-from-a-vendor-123
sellableQuantity:
type: integer
description: The total quantity of the product ready to be sold. Does not include pending or in-progress shipments.
example: 42
unsellableQuantity:
type: integer
description: The total quantity of the product that is in the facility but unable to be sold. This will include inventory that is damaged, expired or otherwise unsellable.
example: 42
inboundQuantity:
type: integer
description: The total quantity of the product inbound to the facility or waiting at the facility to be processed.
example: 8
description: The inventory summary for a specific product.
InventorySummariesResponse:
type: object
properties:
inventorySummaries:
type: array
description: A list of the inventory summaries.
maxItems: 100
items:
$ref: '#/components/schemas/InventorySummary'
nextToken:
type: string
description: Opaque token used to fetch the following page. If set, pass the value of nextToken to the next request. If not set, no more results are available.
example: H12MAF2fFaFFFa
DeliveryWindow:
required:
- start
- end
type: object
description: The delivery window in which the shipment is expected to arrive at the destination.
properties:
start:
type: string
description: ISO-8601 timestamp representing the start of the time range.
format: date-time
example: '2007-12-03T10:15:30+01:00'
end:
type: string
description: ISO-8601 timestamp representing the end of the time range.
format: date-time
example: '2007-12-03T10:15:30+01:00'
DeliveryMetadata:
required:
- deliveryWindow
- deliveryType
type: object
properties:
deliveryWindow:
$ref: '#/components/schemas/DeliveryWindow'
description: The delivery window for the shipment.
deliveryType:
type: string
description: The type of delivery service for this shipment.
additionalProperties: true
SelfDropDeliveryInfo:
allOf:
- $ref: '#/components/schemas/DeliveryMetadata'
- required:
- delivererName
type: object
description: Detailed delivery information for self-delivered shipments.
properties:
delivererName:
type: string
description: The name of the deliverer.
example: Local Delivery Service
delivererEmailAddress:
type: string
description: The email address of the deliverer.
example: foo.bar@deliver.com
additionalProperties: true
CourierServiceDeliveryInfo:
allOf:
- $ref: '#/components/schemas/DeliveryMetadata'
- required:
- courierName
type: object
description: Detailed delivery information for shipments using small point-to-point courier operations that may offer specialized services (scheduling, chill chain, etc).
properties:
courierName:
type: string
description: The name of the company delivering the shipment.
example: Express Local Delivery Services
trackingId:
type: string
description: The tracking ID for this shipment
example: 18492b99ad000
additionalProperties: true
ParcelCarrierDeliveryInfo:
allOf:
- $ref: '#/components/schemas/DeliveryMetadata'
- required:
- carrierName
type: object
description: Detailed delivery information for standard postal carriers who deliver parcel shipments.
properties:
carrierName:
type: string
description: The name of the company delivering the shipment.
enum:
- FED_EX
- UPS
- ON_TRAC
- DHL
- CORREOS
- ESTAFETA
- BR_POST
- TNT
- OTHER
trackingNumber:
type: string
description: The tracking number for this shipment
example: 18492b99ad000
additionalProperties: true
ShipmentDeliveryInfo:
type: object
description: Delivery information for a shipment.
discriminator:
propertyName: deliveryType
mapping:
selfDropDeliveryInfo: '#/components/schemas/SelfDropDeliveryInfo'
courierServiceDeliveryInfo: '#/components/schemas/CourierServiceDeliveryInfo'
parcelCarrierDeliveryInfo: '#/components/schemas/ParcelCarrierDeliveryInfo'
oneOf:
- $ref: '#/components/schemas/CourierServiceDeliveryInfo'
- $ref: '#/components/schemas/ParcelCarrierDeliveryInfo'
- $ref: '#/components/schemas/SelfDropDeliveryInfo'
ShipmentLineItem:
required:
- id
- manifestQuantity
type: object
properties:
id:
type: string
description: A CSS SKU UUID for the product.
example: 1b8aec80-21aa-43f1-b510-2199ac54156a
manifestQuantity:
type: integer
description: The expected quantity of the product in the shipment.
example: 5
receivedSellableQuantity:
type: integer
description: The quantity of the product in the shipment received that was sellable.
example: 5
receivedUnsellableQuantity:
type: integer
description: The quantity of the product in the shipment received that was unsellable (damaged, expired, etc.).
example: 5
ShipmentState:
type: string
description: The state of the shipment.
enum:
- SCHEDULED
- ARRIVED
- STOCKING
- CLOSED
- CANCELED
ShipmentStateChange:
required:
- timestamp
- state
type: object
properties:
state:
$ref: '#/components/schemas/ShipmentState'
timestamp:
type: string
description: ISO-8601 timestamp representing when the state change occurred.
format: date-time
example: '2007-12-03T10:15:30+01:00'
Shipment:
required:
- id
- deliveryInfo
- lineItems
- stateChanges
type: object
properties:
id:
type: string
description: A UUID for the shipment.
example: 18695c43-c670-4c57-a714-e0d7b215db20
deliveryInfo:
$ref: '#/components/schemas/ShipmentDeliveryInfo'
lineItems:
type: array
description: A list of the shipment line items.
items:
$ref: '#/components/schemas/ShipmentLineItem'
stateChanges:
type: array
minItems: 1
description: The state changes for the shipment. The final state change represents the current state of the shipment.
items:
$ref: '#/components/schemas/ShipmentStateChange'
ListShipmentsResponse:
type: object
properties:
shipments:
type: array
description: A list of shipments.
maxItems: 50
items:
$ref: '#/components/schemas/Shipment'
nextToken:
type: string
description: Opaque token used to fetch the following page. If set, pass the value of nextToken to the next request. If not set, no more results are available.
example: H12MAF2fFaFFFa
CreateShipmentLineItem:
required:
- manifestQuantity
type: object
properties:
id:
type: string
description: A CSS SKU UUID for the product. One of id, slug or externalId is required.
example: 1b8aec80-21aa-43f1-b510-2199ac54156a
slug:
type: string
description: A CSS SKU slug for the product. One of id, slug or externalId is required.
example: pizza-pepperoni-12-inch
externalId:
type: string
description: A SKU external ID for the product. One of id, slug or externalId is required.
example: id-in-external-system
manifestQuantity:
type: integer
description: The expected quantity of the product in the shipment.
example: 5
receivedSellableQuantity:
type: integer
description: The quantity of the product in the shipment received that was sellable.
example: 5
receivedUnsellableQuantity:
type: integer
description: The quantity of the product in the shipment received that was unsellable (damaged, expired, etc.).
example: 5
CreateShipmentRequest:
required:
- deliveryInfo
- lineItems
type: object
properties:
deliveryInfo:
$ref: '#/components/schemas/ShipmentDeliveryInfo'
lineItems:
type: array
description: A list of the shipment line items.
items:
$ref: '#/components/schemas/CreateShipmentLineItem'
CreateShipmentResponse:
required:
- id
type: object
properties:
id:
type: string
description: A unique identifier for the shipment.
example: 18695c43-c670-4c57-a714-e0d7b215db20
description: A response containing information about the created shipment.
Organization:
required:
- id
- name
type: object
properties:
id:
type: string
description: Organization identifier.
example: 9208071e-5f7a-444a-b3a7-4a57ff3f614e
name:
type: string
description: Organization name.
example: Organization name 1
Brand:
required:
- id
- name
type: object
properties:
id:
type: string
description: Brand identifier.
example: 9208071e-5f7a-444a-b3a7-4a57ff3f614e
name:
type: string
description: Brand name.
example: Brand name 1
ListBrandsResponse:
required:
- items
type: object
properties:
items:
type: array
description: Array of brands.
items:
$ref: '#/components/schemas/Brand'
offsetToken:
type: string
description: Opaque token used to fetch the following page. If not set, no more brands are available.
example: H12MAF2fFaFFFa
Store:
required:
- id
- name
- address
type: object
properties:
id:
type: string
description: Store identifier.
example: 9208071e-5f7a-444a-b3a7-4a57ff3f614e
name:
type: string
description: Store name.
example: Store name 1
address:
$ref: '#/components/schemas/Address'
ListStoresResponse:
required:
- items
type: object
properties:
items:
type: array
description: Array of Stores
items:
$ref: '#/components/schemas/Store'
offsetToken:
type: string
description: Opaque token used to fetch the following page. If not set, no more stores are available.
example: H12MAF2fFaFFFa
Connection:
required:
- storeId
type: object
properties:
storeId:
type: string
description: The unique identifier of the store in the partner application. This is the ID, along with the Application ID, used to match the correct store when performing operations.
example: 9208071e-5f7a-444a-b3a7-4a57ff3f614e
CreateConnectionRequest:
required:
- storeId
type: object
properties:
storeId:
type: string
description: The unique identifier of the store in the partner application. This is the ID, along with the Application ID, used to match the correct store when performing operations.
example: 9208071e-5f7a-444a-b3a7-4a57ff3f614e
Marketintel_GeoLocationInformation:
type: object
properties:
regionId:
type: string
description: The region id of the geographical location.
example:
- LATAM-N
superRegion:
type: string
description: The super region of the geographical location.
example:
- LATAM
h3Index:
type: string
description: The H3Index value of the geographic location.
example:
- 886d344c81fffff
searchText:
type: string
nullable: true
description: The text used to search for stores.
example:
- chinese food
address:
type: object
description: The address of the geographical location.
$ref: '#/components/schemas/Address'
description: The geographical location information used to discover stores. This information will need be pass back with the result.
Marketintel_StoreMenu:
type: object
properties:
category:
type: string
nullable: true
description: The grouping category name.
example: Fast Food
ids:
type: array
description: The list of external store ids in the list in rank order.
items:
type: string
description: The external id the store
example: 123456
location:
type: object
description: The geographic location of the stores that was searched from.
description: The Store listing in ranking order based on category.
Marketintel_TimeRange:
required:
- end
- start
type: object
properties:
start:
type: string
description: Start time of the range in 24 hour format.
example: 08:00
end:
type: string
description: End time of the range in 24 hour format.
example: '22:00'
description: Time range in a given date.
Marketintel_RegularHours:
required:
- days
- timeRanges
type: object
properties:
days:
type: array
description: The day of the week this configuration applies.
items:
type: string
description: Day of the week.
enum:
- MONDAY
- TUESDAY
- WEDNESDAY
- THURSDAY
- FRIDAY
- SATURDAY
- SUNDAY
timeRanges:
type: array
description: Hours range applied to the provided day of the week
items:
$ref: '#/components/schemas/Marketintel_TimeRange'
description: Describes the configuration of regular hours.
Marketintel_SpecialHours:
required:
- date
- timeRanges
- type
type: object
properties:
date:
type: string
description: Date the special hour configuration applies.
format: date
example: '2021-10-01'
timeRanges:
type: array
minItems: 1
description: Hours range applied to configured date.
items:
$ref: '#/components/schemas/Marketintel_TimeRange'
type:
type: string
description: Store state that should be applied during the configured special hour.
enum:
- OPEN
- CLOSED
description: Describes the configuration of special store hours.
Marketintel_HoursData:
required:
- regularHours
- specialHours
- timeZone
type: object
properties:
timeZone:
type: string
description: TimeZone of all times under it. (https://www.joda.org/joda-time/timezones.html)
format: timezone-id
example: America/Los_Angeles
regularHours:
type: array
description: List of regular hours configuration.
items:
$ref: '#/components/schemas/Marketintel_RegularHours'
specialHours:
type: array
description: List of special hours configuration, for occasions like Christmas, Thanksgiving, or any other holidays.
items:
$ref: '#/components/schemas/Marketintel_SpecialHours'
description: Represents hours configuration with regular hours and special hours.
Marketintel_StoreRating:
type: object
properties:
ratingScore:
type: number
nullable: true
description: The normalized rating score of the store.
example: 2
estimatedRatingCount:
type: integer
nullable: true
description: The estimated number of scores in the rating.
example: 100
displayRatingCount:
type: string
nullable: true
description: The display text of the number of scores in the rating.
example:
- 20+
- 20
description: The Store rating information. At least one of the ratingScore, estimatedRatingCount or displayRatingCount need to be present.
Marketintel_Coordinates:
type: object
properties:
coordinatesType:
type: string
description: Coordinates type
enum:
- WGS84
- GCJ02
location:
type: object
description: The longitude and latitude of a location.
$ref: '#/components/schemas/Location'
description: The geographical coordinates of a location.
Marketintel_StoreSales:
type: object
properties:
periodType:
type: string
nullable: true
description: The period type of the sales data
example: null
numberOfSales:
type: integer
nullable: true
description: The number of sales.
example: 100
displayNumberOfSales:
type: string
nullable: true
description: The display text of the number of sales.
example:
- 20
- 20+
description: The Store Sales information. At least one of the periodType, numberOfSales or displayNumberOfSales need to be present.
Marketintel_StorePromotion:
type: object
properties:
displayName:
type: string
nullable: true
description: The name of the promotion.
example: Flat rate discount on Christmas day
promotionType:
type: string
nullable: true
description: The type of promotion.
example: Flat rate discount
campaignType:
type: string
nullable: true
description: The type of promotion campaign.
example: Christmas
promotionId:
type: string
nullable: true
description: The external promotion id.
example: 12345
description: The Store Promotion information. At least one of the displayName, promotionType, campaignType or promotionId need to be present.
Marketintel_StoreChain:
type: object
properties:
chainId:
type: string
nullable: true
description: The external chain id.
example: 1
chainName:
type: string
nullable: true
description: The name of the chain.
example: Macdonalds
description: The Store Chain information.
Marketintel_StoreDeliveryInformation:
type: object
properties:
minDeliveryBasketSize:
type: object
nullable: true
description: The minimum basket value of the order needed for delivery
$ref: '#/components/schemas/Money'
deliveryFee:
type: object
nullable: true
description: The delivery fee for the order
$ref: '#/components/schemas/Money'
deliveryType:
type: string
nullable: true
description: The delivery type for the order
example: Third Party
deliveryTimeMinutes:
type: integer
nullable: true
description: The estimated delivery time in minutes
example: 30
description: The Store delivery information.
Marketintel_StorePriceLevel:
type: object
properties:
priceLevel:
type: number
nullable: true
description: The price level of the store in numeric rating.
example: 3
priceLevelName:
type: string
nullable: true
description: The price level of the store in text.
example: $$$
description: The Store Price Level information. At least one of the price level or price level name need to be present.
Marketintel_StoreDetails:
type: object
properties:
regionId:
type: string
nullable: true
description: The region that store belongs to.
example: LATAM-N
provider:
type: string
description: The store information provider
example: ubereats-provider
id:
type: string
description: The external store id
example: 12345
storeUrl:
type: string
nullable: true
description: The store url
example: 30
location:
type: object
description: The Geographic location used to discover the store
$ref: '#/components/schemas/Marketintel_GeoLocationInformation'
address:
type: object
nullable: true
description: The store address
$ref: '#/components/schemas/Address'
phoneNumbers:
type: array
minItems: 0
description: The store phone numbers.
items:
type: string
example: 613-123-4567
storeName:
type: string
nullable: true
description: The name of the store.
example: McDonald's
menu:
type: object
nullable: true
description: The store menu.
$ref: '#/components/schemas/Marketintel_StoreMenu'
storeHours:
type: object
nullable: true
description: The store hours.
$ref: '#/components/schemas/Marketintel_HoursData'
tags:
type: array
minItems: 0
description: The store tags
items:
description: The store tag
example: chinese
storeBannerPhotoUrl:
type: string
nullable: true
description: The store bannel photo url.
example: https://www.ubereats.com/ca/store/mcdonalds-1000-rideau-street/1QY5X6QcQX2Q4Z3Z3QZQYQ.jpg
storeRating:
type: object
nullable: true
description: The store ratings.
$ref: '#/components/schemas/Marketintel_StoreRating'
coordinates:
type: object
nullable: true
description: The coordinates of the store.
$ref: '#/components/schemas/Marketintel_Coordinates'
storeSales:
type: object
nullable: true
description: The store sales information.
$ref: '#/components/schemas/Marketintel_StoreSales'
avgBasketAmount:
type: object
nullable: true
description: The average order amount.
$ref: '#/components/schemas/Money'
storePromotions:
type: array
minItems: 0
description: The store promotions.
items:
$ref: '#/components/schemas/Marketintel_StorePromotion'
storeChain:
type: object
description: The store chain information.
$ref: '#/components/schemas/Marketintel_StoreChain'
storeDeliveryInformation:
type: object
nullable: true
description: The Store delivery information.
$ref: '#/components/schemas/Marketintel_StoreDeliveryInformation'
logoPhotoUrl:
type: string
nullable: true
description: The store photo url.
example: https://www.ubereats.com/ca/store/mcdonalds-1000-rideau-street/1QY5X6QcQX2Q4Z3Z3QZQYQ.jpg
priceLevel:
type: string
nullable: true
description: The estimated delivery time in minutes.
$ref: '#/components/schemas/Marketintel_StorePriceLevel'
description: The Store delivery information.
Marketintel_LocationBasedInformation:
type: object
properties:
estimatedDeliveryTimeInSeconds:
type: integer
nullable: true
description: The estimated delivery time in seconds
example: 1200
distanceInMeters:
type: integer
nullable: true
description: The distance in meters
example: 3000
description: The estimated delivery time of the store and delivery distance from the store. At least one of the attributes need to be set.
DiscoveredStore:
type: object
properties:
storeDetails:
type: object
description: The store details.
$ref: '#/components/schemas/Marketintel_StoreDetails'
locationBasedInformation:
type: object
nullable: true
description: The location information of the store.
$ref: '#/components/schemas/Marketintel_LocationBasedInformation'
description: The discovered store information.
Marketintel_StoreListing:
type: object
properties:
category:
type: string
nullable: true
description: The grouping category name.
example: Fast Food
ids:
type: array
description: The list of external store ids in the list in rank order.
items:
type: string
description: The external id the store
example: 123456
location:
type: object
description: The geographic location of the stores that was searched from.
description: The Store listing in ranking order based on category.
DiscoverStoresEventResult:
type: object
properties:
storesDiscovered:
type: array
minItems: 0
description: Represents a list of discovered stores.
items:
$ref: '#/components/schemas/DiscoveredStore'
storeRankings:
type: array
minItems: 0
description: Represents the store rankings.
items:
$ref: '#/components/schemas/Marketintel_StoreListing'
description: The result of an event that request to find stores at the provided geolocations.
GetStoreDetailsEventResult:
type: object
properties:
superRegion:
type: string
description: Represents a super region geographical mapping.
example: LATAM
storeDetails:
type: array
minItems: 0
description: Represents a list of stores
items:
$ref: '#/components/schemas/Marketintel_StoreDetails'
description: The result of an event that request to store details.
EnrollmentField:
type: object
properties:
key:
type: string
description: The key of field, will be used in the Create User API.
example: full_name
required:
type: boolean
description: Whether this field is required when creating a user.
example: true
type:
type: string
description: The type of field, frontend can use type to decide which input to use. i.e. use a date picker for DATE type, use a text input for EMAIL/FULL_NAME type.
example: FULL_NAME
enum:
- TEXT
- NUMBER
- EMAIL
- PASSWORD
- PHONE
- DATE
- DATE_TIME
- URL
- FULL_NAME
- ADDRESS
label:
type: string
description: This can be used as the field input's label on the frontend.
example: First Name and Last Name
GetEnrollmentConfigResponse:
type: object
properties:
enrollmentFields:
type: array
description: The fields that can be passed into when creating a new loyalty user.
items:
$ref: '#/components/schemas/EnrollmentField'
description: Response body for GetEnrollmentConfig API call.
UserField:
type: object
properties:
key:
type: string
description: The key of field, this is retrieved from GetEnrollmentConfig API call.
example: full_name
value:
type: string
description: The value of the field.
example: john doe
UserBalance:
type: object
properties:
amount:
type: number
description: Balance amount.
example: 19.07
type:
type: string
description: The type of balance.
example: POINT
enum:
- POINT
- DOLLAR
UserAccount:
type: object
properties:
id:
type: string
description: The user identifier.
example: somestring
userFields:
type: array
description: The user info fields.
items:
$ref: '#/components/schemas/UserField'
balances:
type: array
description: The user's current balances.
items:
$ref: '#/components/schemas/UserBalance'
GetUserResponse:
type: object
properties:
userAccount:
$ref: '#/components/schemas/UserAccount'
description: Response body for GetUser API call.
CreateUserRequest:
required:
- userFields
type: object
properties:
userFields:
type: array
description: The user info fields for the new user.
items:
$ref: '#/components/schemas/UserField'
description: Request body for CreateUser API call.
User:
type: object
properties:
id:
type: string
description: The user identifier.
example: somestring
userFields:
type: array
description: The user info fields.
items:
$ref: '#/components/schemas/UserField'
CreateUserResponse:
type: object
properties:
user:
$ref: '#/components/schemas/User'
description: Response body for CreateUser API call.
SearchUsersResponse:
type: object
properties:
users:
type: array
description: The users that matches the search condition.
items:
$ref: '#/components/schemas/User'
offsetToken:
type: string
description: Opaque token used to fetch the following page. If not set, no more results are available.
example: H12MAF2fFaFFFa
description: Response body for SearchUsers API call.
Item-2:
type: object
properties:
id:
type: string
description: The id of the item in the partner's system.
example: someidstring
displayName:
type: string
description: Name of the item.
example: Cheese Burger
quantity:
type: number
description: Quantity of item ordered.
example: 1
price:
type: number
description: Price of item.
example: 19.07
modifiers:
oneOf:
- type: array
description: The modifiers of an item, such as size(small, medium, large), modifier share the same model as item, just in case we have nested modifiers.
items:
$ref: '#/components/schemas/Item-2'
- type: 'null'
Totals:
type: object
properties:
subTotal:
type: number
description: Order subtotal.
example: 29.07
tax:
type: number
description: Order tax.
example: 10
discount:
type: number
description: Order discount.
example: 9.07
total:
type: number
description: Order total.
example: 30
Order-2:
type: object
properties:
id:
type: string
description: The id of the order in the partner's system.
example: someidstring
currencyCode:
type: string
description: Currency code.
example: USD
items:
type: array
description: The ordered items in the order.
items:
$ref: '#/components/schemas/Item-2'
totals:
$ref: '#/components/schemas/Totals'
ComputeApplicableRewardsRequest:
required:
- userId
type: object
properties:
userId:
type: string
description: The id of the user.
example: someidstring
order:
oneOf:
- $ref: '#/components/schemas/Order-2'
- type: 'null'
description: Request body for ComputeApplicableRewards API call.
TriggerMenu:
type: object
properties:
entityId:
type: string
description: The id of the entity.
example: someidstring
entityType:
type: string
description: The type of entity.
example: ITEM
enum:
- ITEM
- CATEGORY
minimumPurchaseQuantity:
type: number
description: Minimum quantity need to be purchased to activate the trigger.
example: 1
Trigger:
type: object
properties:
menus:
type: array
description: The item/category preconditions to redeem this reward, for example, buy any drinks to get a free Burger.
items:
$ref: '#/components/schemas/TriggerMenu'
description: The preconditions to redeem this reward, for example, buy Fries to get a free Burger. Nullable, if null, this reward can be unconditionally redeemed.
SubtotalReward:
type: object
properties:
amount:
type: number
description: Discount amount, if it's percentage discount, the percentage amount shown is in basis points, ie 1000 = 10% discount.
example: 20
type:
type: string
description: The type of discount, absolute or percentage.
example: ABSOLUTE_DISCOUNT
enum:
- ABSOLUTE_DISCOUNT
- PERCENT_DISCOUNT
MenusReward:
type: object
properties:
entityId:
type: string
description: The id of the entity, currently it's the item id.
example: someidstring
amount:
type: number
description: Discount amount, if it's percentage discount, the percentage amount shown is in basis points, ie 1000 = 10% discount.
example: 20
type:
type: string
description: The type of discount, absolute or percentage.
example: ABSOLUTE_DISCOUNT
enum:
- ABSOLUTE_DISCOUNT
- PERCENT_DISCOUNT
Reward:
type: object
properties:
id:
type: string
description: The id of the reward.
example: someidstring
type:
type: string
description: The type of reward.
example: SUBTOTAL
enum:
- SUBTOTAL
- MENUS
cost:
oneOf:
- type: number
description: Cost of the reward, nullable, if null this reward can only be redeem once.
example: 20
- type: 'null'
costType:
oneOf:
- type: string
description: The type of cost, nullable, if null this reward can only be redeem once.
example: POINT
enum:
- POINT
- DOLLAR
- type: 'null'
trigger:
oneOf:
- $ref: '#/components/schemas/Trigger'
- type: 'null'
subtotal:
oneOf:
- $ref: '#/components/schemas/SubtotalReward'
- type: 'null'
menus:
oneOf:
- type: array
description: Item rewards, user can select from one of the items.
items:
$ref: '#/components/schemas/MenusReward'
- type: 'null'
ComputeApplicableRewardsResponse:
type: object
properties:
rewards:
type: array
description: List of rewards the user can redeem, depending on the reward type, only one of subtotal/menus will be present.
items:
$ref: '#/components/schemas/Reward'
description: Response body for ComputeApplicableRewards API call.
SelectedMenuReward:
type: object
properties:
entityId:
type: string
description: The id of the selected item.
example: someidstring
description: Indicates the item the user want to redeem, if reward type is MENUS, this should be present.
SelectedReward:
type: object
properties:
id:
type: string
description: The ID of reward.
example: someidstring
amount:
type: number
description: The amount that was deducted.
example: 19.07
menus:
oneOf:
- $ref: '#/components/schemas/SelectedMenuReward'
- type: 'null'
SimulateRewardsRequest:
required:
- userId
- order
- selectedRewards
type: object
properties:
userId:
type: string
description: The id of the user.
example: someidstring
order:
$ref: '#/components/schemas/Order-2'
selectedRewards:
type: array
description: Selected rewards, currently only support one reward, if multiple rewards are passed it will throw an error.
items:
$ref: '#/components/schemas/SelectedReward'
description: Request body for SimulateRewards API call.
Subtotal:
type: object
properties:
amount:
type: number
description: The amount that was discounted.
example: 19.07
RewardEffect:
type: object
properties:
subtotal:
$ref: '#/components/schemas/Subtotal'
description: Shows how much is deducted from total.
SimulateRewardsResponse:
type: object
properties:
transactionId:
type: string
description: The id of the transaction.
example: someidstring
rewardEffect:
type: object
description: Effect after applying the reward.
$ref: '#/components/schemas/RewardEffect'
description: Response body for SimulateRewards API call.
RedeemAndAccumulateRewardsRequest:
required:
- userId
- order
- selectedRewards
type: object
properties:
userId:
type: string
description: The id of the user.
example: someidstring
order:
$ref: '#/components/schemas/Order-2'
selectedRewards:
type: array
description: Selected rewards, currently only support one reward, if multiple rewards are passed it will throw an error.
items:
$ref: '#/components/schemas/SelectedReward'
description: Request body for RedeemAndAccumulateRewards API call.
RedeemAndAccumulateRewardsResponse:
type: object
properties:
transactionId:
type: string
description: The id of the transaction.
example: someidstring
rewardEffect:
$ref: '#/components/schemas/RewardEffect'
accumulatedRewards:
type: array
description: List of rewards accumulated.
items:
$ref: '#/components/schemas/UserBalance'
description: Response body for RedeemAndAccumulateRewards API call.
RefundRewardsRequest:
required:
- userId
- orderId
type: object
properties:
userId:
type: string
description: The id of the user.
example: someidstring
orderId:
type: string
description: The id of the order.
example: someidstring
description: Request body for RefundRewards API call.
RefundRewardsResponse:
type: object
properties:
transactionId:
type: string
description: The transaction id of the refund.
example: someidstring
description: Response body for RefundRewardsResponse API call.
EaterOrderHistoryRequest:
required:
- limit
- eaterId
type: object
properties:
limit:
type: number
description: Max number of orders to retrieve per page
format: 10
pageToken:
type: string
description: Opaque token used for paging. Query parameters must be URL encoded.
example: CgwI09+kjQYQwOvF2AM=/(urlencoded:CgwI09%2BkjQYQwOvF2AM%3D)
eaterId:
type: string
description: External eater's Id
example: eater-12345
source:
type: string
description: Order placed from which source
example: venmo
description: Request parameters to fetch eater's order history
Item-3:
required:
- name
type: object
properties:
quantity:
minimum: 1
maximum: 1000
type: integer
description: The quantity of the item ordered by the customer.
format: int32
example: 1
id:
type: string
nullable: true
description: The unique ID of the item.
example: 33e0418f-3d56-4360-ba03-18fc5f8844a3
name:
type: string
nullable: true
description: The name of the item as displayed to the customer.
example: Juicy Cheeseburger
Store-2:
required:
- id
- name
- address
type: object
properties:
id:
type: string
description: Store identifier.
example: 9208071e-5f7a-444a-b3a7-4a57ff3f614e
name:
type: string
description: Store name.
example: Store name 1
logoUrl:
type: string
description: store's logo image url.
example: https://blob-storage.com/photos/storefront-photos/228da7b3-a254-47f4-b82f-5cf29e89b2b9.jpeg
bannerUrl:
type: string
description: store's banner image url.
example: https://blob-storage.com/photos/storefront-photos/4abd6b2e-e0f1-467c-a60b-c2e33922573f.jpeg
phoneNumber:
type: string
description: store's phone number.
example: 2124567890
address:
$ref: '#/components/schemas/Address'
EaterOrder:
required:
- currencyCode
- status
type: object
properties:
id:
type: string
description: Unique ID for the order that was placed.
example: 69f60a06-c335-46d9-b5a1-97f1a211c514
status:
type: string
description: The status of the order.
enum:
- NEW_ORDER
- CONFIRMED
- PICKED_UP
- CANCELED
- FULFILLED
- PREPARED
- REJECTED
- UNKNOWN
items:
type: array
description: Items ordered.
maxItems: 100
items:
$ref: '#/components/schemas/Item-3'
orderedAt:
type: string
nullable: true
description: The date (in UTC) when the order was placed by the customer.
format: date-time
example: '2007-12-03T10:15:30+01:00'
orderTotal:
type: number
nullable: true
description: Order total including everything paid by the customer.
example: 19.07
currencyCode:
maxLength: 3
minLength: 3
type: string
description: The 3-letter currency code (ISO 4217) to use for all monetary values in this order.
example: USD
pickupTime:
type: string
nullable: true
description: Time (in UTC) specified by the provider when the courier or customer is expected to pick up the order.
format: date-time
example: '2007-12-03T10:15:30+01:00'
store:
$ref: '#/components/schemas/Store-2'
orderAgainUrl:
type: string
description: The link url for reordering.
example: /store/0179860e-8a89-39c2-b9b1-7276683d09f1
description: An order placed by a customer.
EaterOrderHistoryResponse:
required:
- orders
type: object
properties:
orders:
type: array
description: List of orders placed by the user. Each item contains details about a specific order.
items:
$ref: '#/components/schemas/EaterOrder'
nextPageToken:
type: string
description: Opaque token used to fetch the following page. If not set, no more orders are available.
example: H12MAF2fFaFFFa
description: Response body containing the user's order history.
OrgInfo:
type: object
description: Represents the org information.
required:
- id
- name
properties:
id:
type: string
description: Css org id.
name:
type: string
description: Css org name.
example: Main Street Cafe
BrandInfo:
type: object
description: Represents the brand information.
required:
- id
- name
- createdAt
properties:
id:
type: string
description: Css brand id.
name:
type: string
description: Css brand name.
example: Main Street Cafe
createdAt:
type: string
format: date-time
description: The date and time when the brand was created.
example: '2023-01-15T10:00:00Z'
StoreInfo:
type: object
description: Represents the store information.
required:
- id
- name
- createdAt
- currency
- brandInfo
- orgInfo
properties:
id:
type: string
description: Css store id.
name:
type: string
description: Css Store name.
example: Main Street Cafe
createdAt:
type: string
format: date-time
description: The date and time when the store was created.
example: '2023-01-15T10:00:00Z'
currency:
type: string
description: The currency code used by the store.
example: USD
orgInfo:
$ref: '#/components/schemas/OrgInfo'
brandInfo:
$ref: '#/components/schemas/BrandInfo'
MetadataObject:
type: object
properties:
storeId:
$ref: '#/components/schemas/StoreId'
applicationId:
type: string
description: The plain-text Application ID, provided at partner onboarding, also available on Developer Portal.
example: ad4ff59d-04c0-4c7d-8ca3-e3a673f8443d
resourceId:
type: string
description: Identifier of the resource that this event refers to, if needed.
example: resource-id-if-needed
payload:
type: object
description: Object containing details of the given event, if needed.
resourceHref:
type: string
description: The full endpoint to fetch the details of the resource, if needed.
example: resource-href-id-if-needed
description: Information about the event.
EventNotification:
type: object
properties:
eventId:
type: string
description: Unique identifier of the event.
format: uuid
eventTime:
type: string
description: Date of event occurrence.
format: date-time
example: '2007-12-03T10:15:30+01:00'
eventType:
type: string
description: The type of the event.
metadata:
$ref: '#/components/schemas/MetadataObject'
description: Notification message sent on relevant events.
IntentToCancelEvent:
type: object
properties:
externalIdentifiers:
$ref: '#/components/schemas/OrderExternalIdentifiers'
cancellationReason:
type: string
description: The reason for a cancellation.
enum:
- REASON_UNKNOWN
- DUPLICATE_ORDER
- UNAVAILABLE_ITEM
- FRAUDULENT_EATER
- RESTAURANT_INTERNAL_ISSUE
- KITCHEN_CLOSED
- CUSTOMER_CALLED_TO_CANCEL
- CANNOT_COMPLETE_CUSTOMER_REQUEST
- RESTAURANT_TOO_BUSY
- UNACCEPTED_ORDER
- RESTAURANT_CANCELED
- AUTOMATICALLY_CANCELED
- LATE_DELIVERY
- COURIER_NOT_FOUND
- CUSTOMER_NOT_FOUND
- UNABLE_TO_DELIVER
description: Event that request the intent to cancel an order.
OrderStatusEvent:
type: object
properties:
status:
type: string
description: Events that represent updates on order status.
enum:
- ORDER_ACCEPTED
- ORDER_HANDED_OFF
- ORDER_READY_TO_PICKUP
- ORDER_FULFILLED
eventTime:
type: string
description: The time when this OrderStatusUpdateEvent occurred
format: date-time
example: '2007-12-03T10:15:30+01:00'
OrderStatusHistory:
type: object
description: The Order Status Update History and extra data.
properties:
orderStatusHistory:
type: array
description: Array of OrderStatusEvent
items:
$ref: '#/components/schemas/OrderStatusEvent'
orderAcceptedInfo:
type: object
nullable: true
description: '[NEW] Extra information added once the order was accepted by the restaurant. This field is nullable.'
properties:
preparationTimeInMinutes:
type: integer
description: '[NEW] The time in minutes the restaurant says it will take to prepare the order.'
required:
- preparationTimeInMinutes
PosInjectionStateUpdateEvent:
type: object
properties:
externalIdentifiers:
$ref: '#/components/schemas/OrderExternalIdentifiers'
injectionState:
type: string
description: "Injection state for an order. \n * `UNKNOWN` Injection state unknown. \n * `SUCCEEDED` Injection has succeeded. \n * `INJECTION_FAILING` Injection attempts failing. Will retry. \n * `INJECTION_FAILED` Injection Failed. \n * `MANUAL_INJECTION_SUCCEEDED` Injection was done manually. \n * `MANUAL_INJECTION_REQUIRED` Manual injection is required. \n * `SUCCEEDED_WITH_UNLINKED_ITEMS` Injection has succeeded, but there were open items."
enum:
- UNKNOWN
- SUCCEEDED
- INJECTION_FAILING
- INJECTION_FAILED
- MANUAL_INJECTION_SUCCEEDED
- MANUAL_INJECTION_REQUIRED
- SUCCEEDED_WITH_UNLINKED_ITEMS
injectionIssue:
type: string
description: "Injection issue for an order. * `UNKNOWN_INJECTION_ISSUE`: The issue is unknown. \n * `NO_INJECTABLE_EXTERNAL_SERVICE`: No external service is available for injection. \n * `ITEM_MAPPING_FAILED`: Failed to map items from the order. \n * `INCOMPLETE_ITEM_MAPPING`: Some items could not be mapped, but others were successfully injected. \n * `UNKNOWN_ORDER_ISSUE`: The order has an unidentified issue preventing injection. \n * `ORDER_TOO_OLD`: The order is too old to be injected. \n * `ORDER_IMMUTABLE`: The order cannot be modified or injected. \n * `ORDER_ORIGINATED_FROM_POS`: The order originated from the POS system and does not require injection. \n * `ORDER_PENDING_ACCEPT_EXPIRED`: The order was not accepted in time, preventing injection. \n * `INTEGRATION_ERROR`: A general integration error occurred during injection."
enum:
- UNKNOWN_INJECTION_ISSUE
- NO_INJECTABLE_EXTERNAL_SERVICE
- ITEM_MAPPING_FAILED
- INCOMPLETE_ITEM_MAPPING
- UNKNOWN_ORDER_ISSUE
- ORDER_TOO_OLD
- ORDER_IMMUTABLE
- ORDER_ORIGINATED_FROM_POS
- ORDER_PENDING_ACCEPT_EXPIRED
- INTEGRATION_ERROR
additionalData:
type: object
description: Additional data for integration-specific data
example:
ticketData: Some value for the TicketData
customField: customValue
description: Event that describes current POS injection state
OrderConfirmEvent:
type: object
properties:
orderId:
type: string
description: Unique ID for the order that was placed.
example: 69f60a06-c335-46d9-b5a1-97f1a211c514
description: Event notifiying that the order has acquired status CONFIRMED.
OrderReadyEvent:
type: object
properties:
orderId:
type: string
description: Unique ID for the order that was placed.
example: 69f60a06-c335-46d9-b5a1-97f1a211c514
description: Event notifiying that the order has acquired status READY.
OrderHandedOffEvent:
type: object
properties:
orderId:
type: string
description: Unique ID for the order that was placed.
example: 69f60a06-c335-46d9-b5a1-97f1a211c514
courierPhone:
nullable: true
type: string
description: The phone number of the courier.
example: 415-234-3212
courierBodyTempFahrenheit:
nullable: true
type: number
description: The temperature of the courier in fahrenheit.
example: 36.6
isCourierWearingMask:
nullable: true
type: boolean
description: Whether or not the courier is wearing a mask.
example: true
description: Event notifiying that the order has acquired status HANDED OFF.
OrderFulfilledEvent:
type: object
properties:
orderId:
type: string
description: Unique ID for the order that was placed.
example: 69f60a06-c335-46d9-b5a1-97f1a211c514
description: Event notifiying that the order has acquired status FULFILLED.
MenuPublishEvent:
required:
- menuData
type: object
properties:
menuData:
$ref: '#/components/schemas/MenuData'
description: Event data containing the upserted MenuData.
NullEvent:
type: object
nullable: true
description: Empty event payload.
ItemSelector:
required:
- id
type: object
properties:
id:
type: string
description: Identifier of the item.
example: 06ef2722-cbf2-11ec-9d64-0242ac120002
isModifier:
type: boolean
description: True, if the item is used as a modifier.
description: Used to select a specific item.
UpdateItemStatusEntry:
required:
- selector
- status
type: object
properties:
selector:
$ref: '#/components/schemas/ItemSelector'
status:
$ref: '#/components/schemas/ItemStatus'
description: Update the status of an Item to the provided value.
BulkUpdateItemStatus:
required:
- updates
type: object
properties:
updates:
type: array
minItems: 1
description: List of item status updates.
items:
$ref: '#/components/schemas/UpdateItemStatusEntry'
description: Event data containing list of item status updates.
UpsertHoursEvent:
required:
- menuHoursData
type: object
properties:
menuHoursData:
type: object
additionalProperties:
x-additionalPropertiesName: menuId
$ref: '#/components/schemas/HoursData'
description: Menu IDs to Hours
example:
da0e4e94-5670-4175-897a-3b7dde45bed5:
timeZone: America/Los_Angeles
regularHours:
- days:
- MONDAY
- TUESDAY
- WEDNESDAY
- THURSDAY
- FRIDAY
timeRanges:
- start: 08:00
end: '22:00'
specialHours:
- date: '2021-12-31'
timeRanges:
- start: 08:00
end: '22:00'
type: CLOSED
description: Event data containing all Menu Hours.
UnpauseStoreEvent:
type: string
description: Closure ID. Required to unpause a store, if available.
example: 4109d2c9-8bc5-413c-af3e-1c92aa381e41
DeliveryStatusUpdateEvent:
type: object
properties:
provider:
type: string
description: Describes the provider of the delivery.
example: doordash
courier:
$ref: '#/components/schemas/Courier'
estimatedDeliveryTime:
type: string
nullable: true
description: The expected delivery time.
format: date-time
example: '2007-12-03T10:15:30+01:00'
estimatedPickupTime:
type: string
nullable: true
description: The expected pickup time.
format: date-time
example: '2007-12-03T10:15:30+01:00'
status:
$ref: '#/components/schemas/DeliveryStatus'
deliveryStatus:
$ref: '#/components/schemas/DeliveryStatus'
currencyCode:
type: string
minLength: 3
maxLength: 3
description: The 3-letter currency code (ISO 4217) to use for all monetary values.
example: EUR
nullable: true
baseFee:
type: number
format: double
nullable: true
extraFee:
type: number
format: double
nullable: true
totalFee:
type: number
format: double
nullable: true
distance:
$ref: '#/components/schemas/Distance'
updatedTime:
type: string
nullable: true
description: The time that the delivery status was updated.
format: date-time
example: '2007-12-03T10:15:30+01:00'
deliveryTrackingUrl:
type: string
format: uri
nullable: true
description: The URL to track the delivery.
example: https://www.doordash.com/delivery/track/1234567890
dropoffInfo:
$ref: '#/components/schemas/DropoffInfo'
description: Event that represent a status update for a delivery.
RequiredAddress:
type: object
properties:
fullAddress:
type: string
nullable: true
description: Full, human comprehensible address. It is usually formatted in the order appropriate for your locale. Currently only populated for cases in which only single-line address is available.
example: 123 Sample Street Ste 100, San Francisco, CA 94103
postalCode:
type: string
description: Postal code of the address.
example: '20500'
city:
type: string
description: The city/town portion of the address.
example: Washington
state:
type: string
description: Highest administrative subdivision which is used for postal addresses of a country or region. For example, this can be a state, a province, or a prefecture.
example: DC
countryCode:
type: string
description: CLDR country code. See http://cldr.unicode.org/
example: US
addressLines:
type: array
nullable: true
description: Address lines (e.g. street, PO Box, or company name) or the full single line address (e.g. street, city, state, country, zip).
example:
- 1600 Pennsylvania Avenue NW
- 123 Sample Street Ste 100, San Francisco, CA 94103
items:
type: string
linesOfAddress:
type: array
nullable: true
deprecated: true
description: 'Deprecated: use addressLines. Address lines (e.g. street, PO Box, or company name) or the full single line address (e.g. street, city, state, country, zip).'
example:
- 1600 Pennsylvania Avenue NW
- 123 Sample Street Ste 100, San Francisco, CA 94103
items:
type: string
location:
$ref: '#/components/schemas/Location'
description: Address.
RequestDeliveryQuoteEvent:
type: object
properties:
deliveryReferenceId:
type: string
description: Generated delivery reference id.
example: d1a5e7c6-a79a-49bc-83bf-4169cd9c9dda
provider:
type: string
description: the pre-configured fulfillment provider slug in the onboarding process.
example: doordash
preferredPickupDuration:
type: integer
description: Preferred time for courier to arrive to pick up order. Value expressed in minutes and is relative to time delivery request is made. If not provided, or if the value is 0, please treat it as an ASAP request.
format: int32
pickupAddress:
allOf:
- $ref: '#/components/schemas/RequiredAddress'
description: Order pickup address.
dropoffAddress:
allOf:
- $ref: '#/components/schemas/RequiredAddress'
description: Order drop-off address.
destinationAddress:
allOf:
- $ref: '#/components/schemas/RequiredAddress'
description: Order destination address. Deprecated in favor of dropoffAddress.
deprecated: true
pickUpLocationId:
type: string
nullable: true
description: An identifier for the pick up location
example: d197bd64-a037-4b6e-aad7-06918e7e2d75
orderSubTotal:
type: number
nullable: true
description: The sum of all item and modifier pricing
example: 15
currencyCode:
type: string
nullable: true
minLength: 3
maxLength: 3
description: The 3-letter currency code (ISO 4217) to use for all monetary values.
example: KRW
containsAlcoholicItem:
type: boolean
nullable: true
description: Whether or not the order contains an alcoholic item.
customerPayments:
type: array
nullable: true
description: Processed and collectible payments from the customer.
items:
$ref: '#/components/schemas/CustomerPayment'
orderExternalIdentifiers:
nullable: true
$ref: '#/components/schemas/OrderExternalIdentifiers'
description: ID info associated with the order in external system, which is utilized for 3pl integrations.
RequiredPerson:
type: object
properties:
name:
type: string
nullable: true
description: The person's name as it should be displayed.
example: Jane Doe
maxLength: 255
phone:
type: string
nullable: true
description: The person's phone number.
example: +1-555-555-5555
maxLength: 25
phoneCode:
type: string
nullable: true
description: A code or extension of the phone number.
example: 111 11 111
maxLength: 25
email:
type: string
nullable: true
description: The person's email address.
example: email@email.com
personalIdentifiers:
$ref: '#/components/schemas/PersonalIdentifiers'
description: Details about the customer who placed the order.
CustomerTip:
type: object
nullable: true
required:
- value
properties:
value:
type: number
description: The amount that the customer tipped.
example: 2
Store-3:
type: object
nullable: true
properties:
name:
type: string
nullable: true
description: The name of the store.
example: Chipotle
phone:
type: string
nullable: true
description: The phone number to contact the store.
example: +1-555-555-5555
ModifierItem:
type: object
nullable: true
properties:
modifierId:
type: string
nullable: true
description: ID for this modifier.
name:
type: string
nullable: true
description: Human-readable name for this modifier.
price:
type: number
nullable: true
description: Per-unit price of this modifier.
quantity:
type: number
nullable: true
description: Number of units of this modifier being added to the item.
modifiers:
type: array
nullable: true
description: Nested modifier items.
items:
$ref: '#/components/schemas/ModifierItem'
Item-4:
type: object
nullable: true
properties:
name:
type: string
nullable: true
description: Human-readable name for this item.
price:
type: number
nullable: true
description: Per-unit price. This value excludes modifier prices.
quantity:
type: number
nullable: true
description: Number of units of this item being ordered.
itemId:
type: string
nullable: true
description: ID for this item.
modifiers:
type: array
nullable: true
description: Any modifiers attached to this item.
items:
$ref: '#/components/schemas/ModifierItem'
PickUpInfo:
type: object
nullable: true
properties:
readyAtTime:
type: string
description: The timestamp the order(s) became ready for pick up by a courier. If not provided, the order is not yet ready to be picked up.
format: date-time
example: '2007-12-03T10:15:30+01:00'
description: Pick up information for delivery.
DeliveryFee:
type: object
nullable: true
required:
- value
properties:
value:
type: number
description: The delivery fee paid by the customer.
example: 2
AcceptDeliveryEvent:
type: object
properties:
deliveryReferenceId:
type: string
description: Generated delivery reference id.
example: d1a5e7c6-a79a-49bc-83bf-4169cd9c9dda
provider:
type: string
description: the pre-configured fulfillment provider slug in the onboarding process.
example: doordash
preferredPickupTime:
type: string
description: Preferred time for courier to arrive to pick up order. If not provided or if the timestamp is in the past, treat it as an ASAP request.
format: date-time
example: '2007-12-03T10:15:30+01:00'
pickupOrderId:
type: string
description: An identifier used for picking up order from pickup address.
example: 19dc56c8-4497-4392-a612-9f81beb5fe5f
pickupNote:
type: string
nullable: true
deprecated: true
description: Additional information to instruct couriers how to pickup the order. Deprecated in favor of pickUpInstructions.
example: Left side of the restaurant
pickupAddress:
allOf:
- $ref: '#/components/schemas/RequiredAddress'
description: Order pickup address.
dropoffNote:
type: string
nullable: true
description: Additional information to instruct couriers how to dropoff the order.
example: Please ring the doorbell
dropoffAddress:
allOf:
- $ref: '#/components/schemas/RequiredAddress'
description: Order drop-off address.
customer:
$ref: '#/components/schemas/RequiredPerson'
customerPayments:
type: array
nullable: true
description: Processed and collectible payments from the customer.
items:
$ref: '#/components/schemas/CustomerPayment'
currencyCode:
type: string
minLength: 3
maxLength: 3
nullable: true
description: The 3-letter currency code (ISO 4217) to use for all monetary values.
example: KRW
customerTip:
$ref: '#/components/schemas/CustomerTip'
orderSubTotal:
type: number
nullable: true
description: The sum of all item and modifier pricing
example: 15
pickUpLocationId:
type: string
nullable: true
description: An identifier for the pick up location
example: d197bd64-a037-4b6e-aad7-06918e7e2d75
containsAlcoholicItem:
type: boolean
nullable: true
description: Whether or not the order contains an alcoholic item.
pickUpInstructions:
type: string
nullable: true
description: Additional information to instruct couriers how to pickup the order.
store:
$ref: '#/components/schemas/Store-3'
orderItems:
type: array
nullable: true
description: Items and modifiers in the order.
items:
$ref: '#/components/schemas/Item-4'
ofoDisplayId:
type: string
nullable: true
description: An identifier used to reference the order in the order source.
example: 5989
ofoSlug:
type: string
nullable: true
description: Slug to identify the OFO that is the source of order.
example: ifood
pickUpInfo:
$ref: '#/components/schemas/PickUpInfo'
orderExternalIdentifiers:
nullable: true
$ref: '#/components/schemas/OrderExternalIdentifiers'
description: ID info associated with the order in the external system, which is utilized for 3pl integrations.
dropoffInstructions:
nullable: true
$ref: '#/components/schemas/DropoffInstructions'
description: Information to instruct couriers how to dropoff the order.
deliveryFee:
$ref: '#/components/schemas/DeliveryFee'
CancelDeliveryEvent:
type: object
properties:
deliveryReferenceId:
type: string
description: Generated delivery reference id.
example: d1a5e7c6-a79a-49bc-83bf-4169cd9c9dda
UpdateDeliveryRequestEvent:
type: object
properties:
deliveryReferenceId:
type: string
description: Generated delivery reference id.
example: d1a5e7c6-a79a-49bc-83bf-4169cd9c9dda
provider:
type: string
description: the pre-configured fulfillment provider slug in the onboarding process.
example: doordash
currencyCode:
type: string
minLength: 3
maxLength: 3
nullable: true
description: The 3-letter currency code (ISO 4217) to use for all monetary values.
example: USD
customerPayments:
type: array
nullable: true
description: Processed and collectible payments from the customer.
items:
$ref: '#/components/schemas/CustomerPayment'
customerTip:
$ref: '#/components/schemas/CustomerTip'
pickUpInfo:
$ref: '#/components/schemas/PickUpInfo'
ReportGeneratedEvent:
type: object
properties:
reportUrl:
type: string
description: Public URL to download generated report
example: https://example.com/
jobId:
type: string
description: Job id as returned by /v1/reports call
example: 38ab397f-b142-4b06-b70c-40c68a408bea
description: Event data containing metadata of the generated report
PingEvent:
type: object
properties:
message:
type: string
example: Hello World
FulfilledCredential:
required:
- key
- value
type: object
properties:
key:
type: string
description: The key of the credential.
example: userEmail
value:
type: string
description: The value of the credential.
example: test-user@gmail.com
StoreInfo-2:
required:
- name
- address
- currencyCode
- timezone
- internalStoreId
type: object
description: Useful information about the store.
properties:
name:
type: string
description: The store name.
address:
type: string
description: The store address.
currencyCode:
type: string
description: The currency code for the store.
timezone:
type: string
description: The store timezone.
internalStoreId:
type: string
description: Our internal store identifier, also known as "SkuSku ID".
example:
name: Store Public Name
address: Some Street, 1234
currencyCode: USD
timezone: America/Los_Angeles
internalStoreId: 51608e41-5d9e-477f-ae02-8c0c68036d5d
UpsertStorelinkEvent:
required:
- credentialsSchemaVersion
- credentials
- storeInfo
type: object
properties:
credentialsSchemaVersion:
type: string
description: The version of the credentials schema.
example: '1.0'
credentials:
type: array
description: Array of fulfilled credentials containing its keys and values.
items:
$ref: '#/components/schemas/FulfilledCredential'
example:
- key: email
value: test@email.com
- key: password
value: test-pwd-1234
storeInfo:
$ref: '#/components/schemas/StoreInfo-2'
RemoveStorelinkEvent:
required:
- storeInfo
type: object
properties:
storeInfo:
$ref: '#/components/schemas/StoreInfo-2'
EventNotificationBase:
required:
- eventId
- eventTime
- eventType
- metadata
type: object
properties:
eventId:
type: string
description: Unique identifier of the event.
format: uuid
eventTime:
type: string
description: Date of event occurrence.
format: date-time
example: '2007-12-03T10:15:30+01:00'
eventType:
type: string
description: The type of event.
description: Notification message sent on relevant events.
OptionalStoreIdInMetadata:
type: object
properties:
metadata:
type: object
properties:
storeId:
$ref: '#/components/schemas/StoreId'
ExistingCredential:
required:
- key
- value
type: object
properties:
key:
type: string
description: The key of the credential.
example: userEmail
value:
type: string
description: The value of the credential.
example: test-user@gmail.com
FetchCredentialsEvent:
type: object
properties:
credentials:
type: array
description: Array of existing credentials added so far. It's used by multi step onboarding to verify if other credentials are needed based on existing ones values.
items:
$ref: '#/components/schemas/ExistingCredential'
example:
- key: email
value: test@email.com
- key: password
value: test-pwd-1234
CredentialsSchemaVersion:
type: string
description: The version of the credentials schema.
example: '1.0'
ViewCredential:
required:
- key
- label
type: object
properties:
key:
type: string
description: The key of the credential.
example: userEmail
label:
type: string
description: The friendly name of the credential.
example: User Email
value:
type: string
description: The value of the credential. Only returned if the Store ID was provided in the request.
example: test-user@gmail.com
inputType:
type: string
description: The type of input
enum:
- TEXT
- SELECT
- MULTI_SELECT
default: TEXT
selectOptions:
type: array
description: options to select when type is `SELECT` or `MULTI_SELECT`
items:
type: string
ViewCredentialsArray:
type: object
properties:
credentialsSchemaVersion:
$ref: '#/components/schemas/CredentialsSchemaVersion'
credentials:
type: array
description: Array of credentials containing its keys, labels and values.
items:
$ref: '#/components/schemas/ViewCredential'
example:
- key: email
label: Email
value: foodstore@email.com
- key: password
label: Password
value: test-pwd-1234
- key: language
label: Choose the language
inputType: SELECT
selectOptions:
- English
- Portuguese
- key: supported_sizes
label: Choose all supported sizes
inputType: SELECT
selectOptions:
- SMALL
- MEDIUM
- LARGE
parameters:
storeIdHeader:
name: X-Store-Id
in: header
required: true
schema:
$ref: '#/components/schemas/StoreId'
orderId:
name: orderId
in: path
required: true
schema:
type: string
description: A unique identifier of the order in a UUID format.
example: 295f76b4-5725-4bf5-a8ab-97943dbdc3b4
eventIdOptionalHeader:
name: X-Event-Id
in: header
required: false
schema:
type: string
description: Optional unique identifier of the event that this callback refers to.
example: cf0ce51b-d74e-40d3-b177-1925ab4edc0c
eventIdHeader:
name: X-Event-Id
in: header
required: true
schema:
type: string
description: Unique identifier of the event that this callback refers to.
example: cf0ce51b-d74e-40d3-b177-1925ab4edc0c
limit:
name: limit
in: query
required: true
schema:
type: string
description: Max number of orders to retrieve
example: 5
opaquePaginationToken:
name: token
in: query
required: false
schema:
type: string
description: Opaque token used for paging. Query parameters must be URL encoded.
example: CgwI09+kjQYQwOvF2AM=/(urlencoded:CgwI09%2BkjQYQwOvF2AM%3D)
minDateTime:
name: minDateTime
in: query
required: false
schema:
type: string
description: Minimum date/time filter in ISO 8601 format with time zone. Limited to the past 20 days.
example: '2023-07-20T10:15:30-05:00'
maxDateTime:
name: maxDateTime
in: query
required: false
schema:
type: string
description: Maximum date/time filter in ISO 8601 format with time zone.
example: '2023-08-15T10:15:30-05:00'
source:
name: source
in: path
required: true
schema:
type: string
description: The source the order is managed under. This is the value reported as `externalIdentifiers.source` by the order feed ([**fetch order feed**](/api-reference/#operation/managerGetOrderFeed)) — always read it from the feed rather than assuming it matches the original marketplace label. For orders submitted through the Orders API it is the submitting integration's own source identifier, which can differ from the marketplace `source` that was set on the order when it was created.
example: ubereats
requestId:
name: requestId
in: path
required: true
schema:
type: string
description: A unique identifier of the order in a UUID format.
example: 295f76b4-5725-4bf5-a8ab-97943dbdc3b4
deliveryReferenceId:
name: deliveryReferenceId
in: path
required: true
schema:
type: string
description: A unique identifier of the delivery in a UUID format.
example: 295f76b4-5725-4bf5-a8ab-97943dbdc3b4
jobId:
name: jobId
in: path
required: true
schema:
$ref: '#/components/schemas/JobId'
applicationIdHeader:
name: X-Application-Id
in: header
required: true
schema:
$ref: '#/components/schemas/ApplicationId'
inventory-summary-limit:
name: limit
in: query
required: false
schema:
type: string
description: Max number of entities to retrieve
example: 5
maximum: 200
inventory-limit:
name: limit
in: query
required: false
schema:
type: string
description: Max number of entities to retrieve
example: 5
maximum: 50
brandId:
name: brandId
in: path
required: true
schema:
type: string
description: A unique identifier of a brand in a UUID format.
example: 295f76b4-5725-4bf5-a8ab-97943dbdc3b4
limit-2:
name: limit
in: query
required: true
schema:
type: string
description: Max number of stores to retrieve
example: 5
storeId:
name: storeId
in: path
required: true
schema:
type: string
description: A unique identifier of a store in a UUID format.
example: 295f76b4-5725-4bf5-a8ab-97943dbdc3b4
source-2:
name: source
in: path
required: true
schema:
type: string
description: Loyalty provider source
example: css-loyalty
id:
name: id
in: query
required: true
schema:
type: string
description: User's id
example: somestring
limit-3:
name: limit
in: query
required: true
schema:
type: string
description: Max number of items to retrieve (minimum 1, maximum is 10, anything smaller/larger than min/max resets to min/max)
example: 5
term:
name: term
in: query
required: true
schema:
type: string
description: Used to search for users in the loyalty program. The search is case-sensitive and will match any part of the user's fields.
example: john
responses:
'200':
description: Return 200 status to indicate that the data was processed successfully
'202':
description: Return 202 status to indicate that the data was accepted for processing
'400':
description: The request is malformed.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorMessage'
'401':
description: Invalid authorization.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorMessage'
'403':
description: Authorization not valid for the requested resource.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorMessage'
'404':
description: Resource not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorMessage'
'409':
description: The connection between the partner application and the store already exists.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorMessage'
'422':
description: The request body is not valid.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorMessage'
2XX:
description: Return any 2XX status to indicate that the data was received successfully
x-tagGroups:
- name: Endpoints
tags:
- account_pairing_endpoints
- auth_endpoints
- callback_endpoints
- delivery_endpoints
- finance_endpoints
- inventory_endpoints
- manager_menu_endpoints
- manager_order_endpoints
- manager_storefront_endpoints
- menus_endpoints
- orders_endpoints
- organization_endpoints
- ping_endpoints
- reports_endpoints
- reviews_endpoints
- storefront_endpoints
- manager_loyalty_endpoints
- direct_orders_endpoints
- store_endpoints
- name: Webhooks
tags:
- account_pairing_webhooks
- delivery_webhooks
- manager_orders_webhooks
- menus_webhooks
- orders_webhooks
- ping_webhooks
- reports_webhooks
- storefront_webhooks