Ready2order Order API
The Order API from Ready2order — 2 operation(s) for order.
The Order API from Ready2order — 2 operation(s) for order.
openapi: 3.0.0
info:
title: ready2order Public Account Token Order API
contact:
name: support@ready2order.com
license:
name: proprietary
version: R2-2026.30.2
description: "# First Steps\n\n## Authorization\n\nThe ready2order API uses a three-token flow to grant your integration access to a ready2order account. Your integration identifies itself with a Developer Token, requests permission from the account owner, and receives a long-lived Account Token to use for all subsequent requests.\n\nEvery API request to account data must include:\n\n```http\nAuthorization: Bearer <ACCOUNT_TOKEN>\n```\n\n| Token | Scope | Lifetime |\n|-------|-------|----------|\n| **Developer Token** | Identifies your integration | Permanent |\n| **Grant Access Token** | One-time permission request | 10 minutes |\n| **Account Token** | Access to a ready2order account | Until revoked |\n\n---\n\n## Setup\n\nThis is a one-time process per account you want to integrate with.\n\n### Step 1 — Get your Developer Token\n\nRegister at [https://api.ready2order.com](https://api.ready2order.com). Your Developer Token will be emailed to you.\n\nStore it securely — it identifies your integration across all accounts.\n\n---\n\n### Step 2 — Request a Grant Access Token\n\nCall this endpoint using your Developer Token:\n\n```http\nPOST /v1/developerToken/grantAccessToken\nAuthorization: Bearer <DEVELOPER_TOKEN>\n```\n\n```json\n{\n \"callbackUri\": \"https://your-app.com/callback\"\n}\n```\n\n`callbackUri` is optional but strongly recommended (see Step 3).\n\n**Response:**\n\n```json\n{\n \"grantAccessToken\": \"...\",\n \"grantAccessUri\": \"https://app.ready2order.com/...\"\n}\n```\n\n---\n\n### Step 3 — Account owner approves access\n\nRedirect the account owner to the `grantAccessUri`. They will log in to their ready2order account and click **Approve**.\n\n**With `callbackUri`** — after approval, ready2order redirects the account owner back to your URL:\n\n```\nhttps://your-app.com/callback?accountToken=<ACCOUNT_TOKEN>&grantAccessToken=<GRANT_ACCESS_TOKEN>&status=approved\n```\n\nThe `accountToken` in that redirect is what you store and use for all future requests.\n\n**Without `callbackUri`** — poll for the result instead:\n\n```http\nGET /v1/developerToken/grantAccessToken/{grantAccessToken}\nAuthorization: Bearer <DEVELOPER_TOKEN>\n```\n\nThe response will include `accountToken` once the account owner has approved.\n\n> The Grant Access Token expires after **10 minutes**. If the account owner does not approve in time, repeat Step 2 to generate a new one.\n\n---\n\n## Training Mode\n\nSome resources support a training mode that keeps test transactions separate from live data. It is handy for staff training and demos where test sales should not show up in reports or fiscal records.\n\nWhen a cashier puts the POS into training mode, all transactions in that session are flagged as training records and kept separate from live data. On the API side, the `trainingMode` field on a resource tells you whether it is a training record, and most list endpoints accept a `trainingMode` query parameter to filter by it.\n\n---\n\n## Error Responses\n\n| Status | Likely cause |\n|--------|-------------|\n| `401 Unauthorized` | Wrong token type, or `Authorization` header missing |\n| `403 Forbidden` | Developer Token used where Account Token is required (or vice versa) |\n| `429 Too Many Requests` | Rate limit exceeded — max 60 requests per minute per Account Token |\n"
servers:
- url: https://api.ready2order.com/v1
tags:
- name: Order
paths:
/orders:
get:
tags:
- Order
summary: List all Orders
description: ''
operationId: orderGetAllPaginated
parameters:
- name: page
in: query
description: Page you want to display
required: false
schema:
type: integer
example: 1
- name: limit
in: query
description: Items per page
required: false
schema:
type: integer
example: 25
- name: groupBy
in: query
description: 'allowed values: table_id or product_id or both'
required: false
schema:
type: string
enum:
- table_id
- product_id
example: table_id
- name: trainingsMode
in: query
description: retrieve results for trainingsMode or liveMode
required: false
schema:
type: string
enum:
- '0'
- '1'
- 'true'
- 'false'
example: 'true'
- name: table_id
in: query
description: table id
required: false
schema:
type: integer
example: 123
- name: product_id
in: query
description: product id
required: false
schema:
type: integer
example: 123
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
properties:
order_id:
type: integer
example: 123
order_quantity:
type: string
example: 123
order_priceGross:
type: string
example: 123.12
order_priceNet:
type: string
example: 123.12
order_vat:
type: string
example: 10
order_discount_valueGross:
type: string
example: 10
order_discount_valueNet:
type: string
example: 10
order_vatRate:
type: string
example: 10
order_product_priceGrossPerUnit:
type: string
example: 123
order_product_priceNetPerUnit:
type: string
example: 123
order_discount_name:
type: string
example: discountA
order_discountable:
type: boolean
example: true
order_mergeable:
type: boolean
example: true
order_retour:
type: boolean
example: false
order_number:
type: integer
example: 123
order_group:
type: integer
example: 123
order_product_name:
type: string
example: productA
order_product_itemnumber:
type: string
example: 123
order_product_serialnumber:
type: string
example: 1231234
order_course:
type: integer
example: 1
order_status:
type: integer
example: 1
order_comment:
type: string
example: very long text
table_id:
type: integer
example: 123456
product_id:
type: integer
example: 123456
user_id:
type: integer
example: 123456
productgroup_type_id:
type: integer
example: 123456
order_created_at:
type: string
example: '2019-01-01'
type: object
'401':
description: Unauthorized
'403':
description: Forbidden
security:
- Bearer: []
post:
tags:
- Order
summary: Create a new Order
description: ''
operationId: orderCreate
requestBody:
content:
application/json:
schema:
required:
- table_id
- items
properties:
table_id:
description: Table on which the orders are booked
type: integer
example: 1234
price_base:
description: '''gross'' or ''net'''
type: string
enum:
- '0'
- '1'
- brutto
- netto
- gross
- net
example: gross
training_mode:
description: Whether to place the order in training- or normal-mode
type: boolean
example: false
items:
description: List of items
type: array
items:
properties:
item_quantity:
description: Quantity
type: string
example: 3
item_price:
description: Price of product
type: string
example: 25.75
item_vatRate:
description: VAT-rate of product
type: string
example: 20
item_vatId:
type: integer
item_course:
description: Menu course
type: integer
example: 1
item_orderGroup:
description: Order group on the table to book on. Use this if multiple parties are sharing the same table.
type: integer
example: 1
item_discountable:
description: Whether the product should be applicable to apply discounts on it
type: boolean
example: true
item_mergeable:
description: Whether the product should be merged into one line on the final invoice.
type: boolean
example: true
product_id:
description: Id of product
type: integer
example: 4321
item_name:
description: Name of product (if different)
type: string
example: Some custom product name
item_comment:
description: Custom comment
type: string
example: An optional comment
item_variations:
description: List of product variations
type: array
items:
properties:
product_id:
description: Id of product variation
type: integer
example: 1
variation_name:
description: Product variation name
type: string
example: Schnitzel with chips and mayo
variation_price:
description: Product variation price
type: string
example: 15.2
type: object
type: object
example: []
type: object
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
properties:
order_id:
type: integer
example: 123
order_quantity:
type: string
example: 123
order_priceGross:
type: string
example: 123.12
order_priceNet:
type: string
example: 123.12
order_vat:
type: string
example: 10
order_discount_valueGross:
type: string
example: 10
order_discount_valueNet:
type: string
example: 10
order_vatRate:
type: string
example: 10
order_product_priceGrossPerUnit:
type: string
example: 123
order_product_priceNetPerUnit:
type: string
example: 123
order_discount_name:
type: string
example: discountA
order_discountable:
type: boolean
example: true
order_mergeable:
type: boolean
example: true
order_retour:
type: boolean
example: false
order_number:
type: integer
example: 123
order_group:
type: integer
example: 123
order_product_name:
type: string
example: productA
order_product_itemnumber:
type: string
example: 123
order_product_serialnumber:
type: string
example: 1231234
order_course:
type: integer
example: 1
order_status:
type: integer
example: 1
order_comment:
type: string
example: very long text
table_id:
type: integer
example: 123456
product_id:
type: integer
example: 123456
user_id:
type: integer
example: 123456
productgroup_type_id:
type: integer
example: 123456
order_created_at:
type: string
example: '2019-01-01'
type: object
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
security:
- Bearer: []
/orders/transfer:
post:
tags:
- Order
summary: Transfer
description: Transfers unbilled order items from one table to another.<br>Pass specific `order_ids` to transfer a subset, or omit the field to transfer all unbilled items on the source table.
operationId: orderTransfer
requestBody:
content:
application/json:
schema:
required:
- source_table_id
- target_table_id
- target_order_group_id
properties:
source_table_id:
description: ID of the table to transfer order items from
type: integer
example: 10
target_table_id:
description: ID of the table to transfer order items to
type: integer
example: 20
target_order_group_id:
description: Order group on the target table to assign transferred items to
type: integer
example: 1
target_order_group_name:
description: Name of the target order group (optional)
type: string
example: Group A
order_ids:
description: IDs of the specific order items to transfer. Omit or pass an empty array to transfer every unbilled item on the source table.
type: array
items:
type: integer
example:
- 101
- 102
- 103
training_mode:
description: Whether to operate in training mode
type: boolean
example: false
type: object
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
properties:
order_id:
type: integer
example: 123
order_quantity:
type: string
example: 123
order_priceGross:
type: string
example: 123.12
order_priceNet:
type: string
example: 123.12
order_vat:
type: string
example: 10
order_discount_valueGross:
type: string
example: 10
order_discount_valueNet:
type: string
example: 10
order_vatRate:
type: string
example: 10
order_product_priceGrossPerUnit:
type: string
example: 123
order_product_priceNetPerUnit:
type: string
example: 123
order_discount_name:
type: string
example: discountA
order_discountable:
type: boolean
example: true
order_mergeable:
type: boolean
example: true
order_retour:
type: boolean
example: false
order_number:
type: integer
example: 123
order_group:
type: integer
example: 123
order_product_name:
type: string
example: productA
order_product_itemnumber:
type: string
example: 123
order_product_serialnumber:
type: string
example: 1231234
order_course:
type: integer
example: 1
order_status:
type: integer
example: 1
order_comment:
type: string
example: very long text
table_id:
type: integer
example: 123456
product_id:
type: integer
example: 123456
user_id:
type: integer
example: 123456
productgroup_type_id:
type: integer
example: 123456
order_created_at:
type: string
example: '2019-01-01'
type: object
'400':
description: Bad Request
'401':
description: Unauthorized
'403':
description: Forbidden
security:
- Bearer: []
components:
securitySchemes:
Bearer:
type: apiKey
description: Account Token obtained after completing the authorization flow. See First Steps for details.
name: Authorization
in: header
x-tagGroups:
- name: Essentials
tags:
- Product
- Product Group
- Bill
- Storno
- Payment Method
- Payment Method Type
- Coupon
- Coupon Category
- Discount
- Discount Group
- Customer
- name: Gastro
tags:
- Order
- Table
- Table Area
- name: POS
tags:
- Printer
- Printer Profile
- Print Job
- Terminal Transaction
- User
- User Roles
- name: Reporting
tags:
- Daily Report
- Accounting Financial Year
- Export
- name: Reference Data
tags:
- Bill Type
- Customer Group
- Currency
- Country
- Device
- Language
- Legal Form
- Units
- Vat Rate
- name: Integration
tags:
- Account Token
- Grant Access Token
- Developer Token
- Webhook
- Job Status
- name: Internal
tags:
- Account
- Admin
- CashboxRegistration
- ConfirmableAction
- Constant
- Item
- License
- MobileConstant
- ReadyPaySellRate
- Signup
- Tss