Welcome to the Ordering API!
Ordering.co gives you a complete ordering back end as an API — businesses and menus, carts and checkout, orders and their lifecycle, delivery logistics, customers, loyalty, payments and reporting. You build the experience; we handle everything behind it.
This page gets you from zero to your first authenticated request. Every endpoint in the reference is live — you can call it from the browser using Try It.
Base URL
https://apiv4.ordering.co
Every URL has the same shape
This is the single most important thing to understand before your first call:
https://apiv4.ordering.co/{api_version}/{language}/{project}/{resource}
| Segment | What it is | Example |
|---|---|---|
api_version | The API version you're targeting | v400 |
language | ISO code for localized content (names, descriptions, messages) | en, es |
project | Your project code. Identifies your tenant — its own isolated data | demo |
resource | What you're acting on | business, orders, users |
Put together:
https://apiv4.ordering.co/v400/en/demo/business
AboutprojectOrdering is multi-tenant. Your project code routes the request to your own data, so the same endpoint returns different results for different projects. You'll find your project code in your Ordering dashboard — replace
demoin every example below with it.
Authenticate
The Ordering API supports two authentication methods. Pick based on who is calling.
Option 1 — Bearer token (for apps acting on behalf of a user)
This is the common path. Exchange credentials for a JWT, then send it on every request.
curl -X POST "https://apiv4.ordering.co/v400/en/demo/auth" \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"password": "your-password"
}'The token comes back inside the user object, under session:
{
"error": false,
"result": {
"id": 1,
"name": "Demo",
"email": "[email protected]",
"level": 0,
"session": {
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"token_type": "bearer"
}
}
}Send it as a Bearer token from then on:
curl "https://apiv4.ordering.co/v400/en/demo/business" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"You can also authenticate with cellphone instead of email, and there are dedicated endpoints for social and SMS login — see the Auth section of the reference.
Option 2 — API key (for server-to-server integrations)
For backend integrations that shouldn't hold user credentials, create a long-lived API key tied to a user and send it in the X-Api-Key header:
curl "https://apiv4.ordering.co/v400/en/demo/business" \
-H "X-Api-Key: YOUR_API_KEY"Create and list keys through POST and GET on /users/USER_ID/keys. The key inherits that user's permission level, so create it from a user with the access the integration actually needs — and no more.
Keep keys server-sideAn API key never expires on its own and carries its user's full permissions. Never ship one in a mobile app, browser bundle, or public repository.
Your first request
With a token in hand, list the businesses in your project:
curl "https://apiv4.ordering.co/v400/en/demo/business" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"{
"error": false,
"result": [
{
"id": 7,
"name": "Twirly Laundry",
"slug": "thetwirlylaundry",
"email": "[email protected]"
}
]
}Response format
Every response — success or failure — uses the same envelope:
{
"error": false,
"result": { }
}error— boolean. Always check this first.result— the payload on success; an array of human-readable messages on failure.
A failed request looks like this:
{
"error": true,
"result": [
"The Email field is required when Phone / Mobile is not present.",
"The Password field is required."
]
}Because result changes shape between success and error, branch on error before you read it.
| Status | Meaning |
|---|---|
200 | Success — check error in the body anyway |
400 | Validation failed; result lists what to fix |
401 | Missing, invalid, or insufficiently privileged credentials |
429 | Rate limited — back off and retry |
Pagination
List endpoints paginate with page and page_size:
curl "https://apiv4.ordering.co/v400/en/demo/business?page=2&page_size=20" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"When you paginate, a pagination object comes back alongside your results:
{
"error": false,
"result": [],
"pagination": {
"total": 143,
"current_page": 2,
"page_size": 20,
"total_pages": 8,
"from": 21,
"to": 40,
"next_page": "https://apiv4.ordering.co/v400/en/demo/business?page_size=20&page=3",
"back_page": "https://apiv4.ordering.co/v400/en/demo/business?page_size=20&page=1"
}
}next_page and back_page are complete URLs — follow them instead of building your own.
page_sizehas a ceilingRequests above the maximum page size fall back to the default rather than returning an error. Page through large collections instead of asking for everything at once.
Ask for only the fields you need
Most list endpoints accept params — a comma-separated list of fields. Responses in Ordering can be large (a business carries schedule, fees, locations, and more), so this is the cheapest performance win available to you:
curl "https://apiv4.ordering.co/v400/en/demo/business?params=id,name,slug" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"Where to go next
The API is organized around these areas:
| Area | What lives there |
|---|---|
| Auth & Users | Login, signup, social and SMS auth, addresses, API keys, permission levels |
| Business | Businesses, menus, categories, products, options, schedules, delivery zones |
| Carts | Building a cart, applying offers, validating before checkout |
| Orders | Placing orders, status lifecycle, messages, order history |
| Logistics | Drivers, driver companies, groups, assignment |
| Payments | Payment methods, gateway credentials, wallets |
| Loyalty & Offers | Loyalty plans and levels, coupons, promotions |
| Reports | Sales, product and business analytics |
| Webhooks | Subscribe to events instead of polling |
Every endpoint page includes runnable examples in cURL, Node, Ruby, JavaScript and Python — switch languages with the tabs above the code block, and hit Try It to call the endpoint with your own credentials.

As always, happy ordering.

