Getting started¶
Release Candidate (V2.0.0-rc)
This documentation is a Release Candidate. It was consolidated in technical committees and is now in an ecosystem validation period: company review and implementation pilots.
During this phase the specification may still change based on feedback. A stable release will be published only after validation completes. V1 remains active and is the production reference during the transition.
Send feedback via the GitHub repository. Details in the changelog.
Open Delivery is an open protocol, not a product. It defines how independent food-tech systems — ordering apps, restaurant management systems, logistics operators, and CRM platforms — interoperate without custom bilateral integrations.
This guide covers the minimum you need to start an integration.
1. Understand your role in the ecosystem¶
The protocol defines four roles. A system may play more than one.
| Role | Who | What they do |
|---|---|---|
| Originator | Ordering app, marketplace, kiosk | Creates the order; receives lifecycle updates |
| Software Service (POS) | Restaurant management system | Accepts orders; manages menu, account, fiscal |
| Logistics | Delivery operator, own fleet | Executes delivery; emits tracking events |
| CRM software | Customer data / loyalty platform | Consumes the Customer capability (and Reviews/Loyalty modules); does not drive kitchen order lifecycle |
Identify which role(s) your system plays. That determines which capabilities you need.
Detailed guide: Paths by role.
2. Authenticate¶
Open Delivery V2 uses OAuth 2.0 with application-level authentication: a single client_id for every store your system integrates.
Three models are supported:
| Model | Identifier | Recommendation |
|---|---|---|
| Client credentials by application | client_credentials + by_app |
Recommended for new integrations |
| Client credentials by store | client_credentials + by_merchant |
V1 compatibility |
| Authorization code | authorization_code |
Advanced use cases |
Request an access token:
POST /oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
&client_id={your_client_id}
&client_secret={your_client_secret}
&scope=od.orders od.menu
Include the token as Authorization: Bearer {token} on every request.
Available scopes
od.orders · od.menu · od.logistics · od.crm · od.all
See Authentication and the Authentication API reference.
3. Declare capabilities via Discovery¶
Every integration MUST publish a Discovery endpoint in the Well-Known pattern:
GET /.well-known/opendelivery
This endpoint declares which capabilities you implement, which protocol versions you support, and how partners authenticate. No integration can proceed without Discovery.
Minimal response example:
{
"appId": "550e8400-e29b-41d4-a716-446655440000",
"openDelivery": {
"currentVersion": "2.0",
"supportedVersions": ["2.0"]
},
"discovery": { "version": "1.0.0" },
"authentication": {
"supportedGrantTypes": ["client_credentials"],
"clientIdGeneration": ["by_app"]
},
"capabilities": {
"orders": { "endpoint": "https://api.yourcompany.com/v2" }
}
}
See Discovery and the Discovery API reference.
4. Choose which capability to implement first¶
Depending on your role:
- Discovery — publish your Well-Known endpoint
- Orders — create orders and consume lifecycle events
- Merchant — read menus and store status
- Discovery — publish your Well-Known endpoint
- Merchant — expose menu, hours, and pause
- Orders — accept and process incoming orders
- Indoor — if you support dine-in / tab / kiosk
- Discovery — publish your Well-Known endpoint
- Logistics — receive delivery requests and emit tracking events
- Discovery — publish your Well-Known endpoint
- Customer — customer-data capability (Reviews and/or Loyalty modules as needed)
- Loyalty (module) — programs and redemptions, if applicable