Ready2order Discount API

Discounts are preset price reductions that cashiers can apply at the point of sale. Unlike coupons, they are not financial instruments; they simply reduce the sale price, with VAT calculated on the reduced amount. Every discount belongs to a group via `discountGroup_id`. The group determines how discounts are organised and presented at the POS. You need at least one [discount group](#operation/discountGroupCreateDiscountGroup) before you can create a discount. **Discount unit** `discount_unit` controls how the reduction is calculated: | Unit | Behaviour | `discount_value` | |------|-----------|-----------------| | `percent` | Reduces the price by a percentage | 0–100 | | `currency` | Reduces the price by a fixed amount | Any positive number | | `custom` | The cashier enters the amount at checkout | Not required | **Visibility and ordering** Set `discount_active` to `false` to hide a discount at the POS without deleting it. `discount_order` controls the position in the list shown to cashiers.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/ready2order-discount-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

ready2order-discount-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: ready2order Public Account Token Discount 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: Discount
  description: '<!-- markdownlint-disable MD041 MD051 github-internal-links relative-links -- tag description snippet, not a standalone document; the tag name serves as the heading in the API docs -->

    Discounts are preset price reductions that cashiers can apply at the point of sale. Unlike coupons, they are not financial instruments; they simply reduce the sale price, with VAT calculated on the reduced amount.


    Every discount belongs to a group via `discountGroup_id`. The group determines how discounts are organised and presented at the POS. You need at least one [discount group](#operation/discountGroupCreateDiscountGroup) before you can create a discount.


    **Discount unit**


    `discount_unit` controls how the reduction is calculated:


    | Unit | Behaviour | `discount_value` |

    |------|-----------|-----------------|

    | `percent` | Reduces the price by a percentage | 0–100 |

    | `currency` | Reduces the price by a fixed amount | Any positive number |

    | `custom` | The cashier enters the amount at checkout | Not required |


    **Visibility and ordering**


    Set `discount_active` to `false` to hide a discount at the POS without deleting it. `discount_order` controls the position in the list shown to cashiers.

    '
paths:
  /discounts:
    get:
      tags:
      - Discount
      summary: List discounts
      description: Returns all discounts for the account, including inactive ones.
      operationId: discountGetAll
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  properties:
                    discount_id:
                      type: integer
                      example: 123
                    discount_name:
                      type: string
                      example: Discount
                    discount_description:
                      type: string
                      example: A discount description
                    discount_value:
                      type: string
                      example: 30
                    discount_unit:
                      type: string
                      example: custom
                    discount_active:
                      type: boolean
                      example: true
                    discount_order:
                      type: integer
                      example: 0
                    discountGroup_id:
                      type: integer
                      example: 116
                    discount_created_at:
                      type: string
                      example: '2018-12-20 11:00:00'
                    discount_updated_at:
                      type: string
                      example: '2018-12-20 11:15:00'
                  type: object
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
      - Bearer: []
    post:
      tags:
      - Discount
      summary: Create a discount
      description: Creates a new discount.
      operationId: discountCreate
      requestBody:
        content:
          application/json:
            schema:
              required:
              - discount_name
              - discountGroup_id
              - discount_unit
              - discount_value
              properties:
                discount_name:
                  description: The name of the discount
                  type: string
                  example: Discount
                discountGroup_id:
                  description: The id of the discount group
                  type: integer
                  example: 116
                discount_unit:
                  description: The unit of the discount
                  type: string
                  enum:
                  - percent
                  - currency
                  - custom
                  example: custom
                discount_order:
                  description: The order of the discount
                  type: integer
                  example: 9999
                discount_description:
                  description: The description of the discount
                  type: string
                  example: A discount description
                discount_active:
                  description: Whether the discount is active or not
                  type: boolean
                  example: true
                discount_value:
                  description: The value of the discount
                  type: string
                  example: 30
              type: object
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                properties:
                  discount_id:
                    type: integer
                    example: 123
                  discount_name:
                    type: string
                    example: Discount
                  discount_description:
                    type: string
                    example: A discount description
                  discount_value:
                    type: string
                    example: 30
                  discount_unit:
                    type: string
                    example: custom
                  discount_active:
                    type: boolean
                    example: true
                  discount_order:
                    type: integer
                    example: 0
                  discountGroup_id:
                    type: integer
                    example: 116
                  discount_created_at:
                    type: string
                    example: '2018-12-20 11:00:00'
                  discount_updated_at:
                    type: string
                    example: '2018-12-20 11:15:00'
                type: object
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      security:
      - Bearer: []
  /discounts/{id}:
    get:
      tags:
      - Discount
      summary: Get a discount
      description: Returns a single discount by its ID.
      operationId: discountFindById
      parameters:
      - name: id
        in: path
        description: ID to find
        required: true
        schema:
          type: integer
          example: 123456
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                properties:
                  discount_id:
                    type: integer
                    example: 123
                  discount_name:
                    type: string
                    example: Discount
                  discount_description:
                    type: string
                    example: A discount description
                  discount_value:
                    type: string
                    example: 30
                  discount_unit:
                    type: string
                    example: custom
                  discount_active:
                    type: boolean
                    example: true
                  discount_order:
                    type: integer
                    example: 0
                  discountGroup_id:
                    type: integer
                    example: 116
                  discount_created_at:
                    type: string
                    example: '2018-12-20 11:00:00'
                  discount_updated_at:
                    type: string
                    example: '2018-12-20 11:15:00'
                type: object
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
      security:
      - Bearer: []
    put:
      tags:
      - Discount
      summary: Update a discount
      description: Updates an existing discount.
      operationId: discountUpdate
      parameters:
      - name: id
        in: path
        description: ID to find
        required: true
        schema:
          type: integer
          example: 123456
      requestBody:
        content:
          application/json:
            schema:
              properties:
                discount_name:
                  description: The name of the discount
                  type: string
                  example: Discount
                discountGroup_id:
                  description: The id of the discount group
                  type: integer
                  example: 116
                discount_unit:
                  description: The unit of the discount
                  type: string
                  enum:
                  - percent
                  - currency
                  - custom
                  example: custom
                discount_order:
                  description: The order of the discount
                  type: integer
                  example: 9999
                discount_description:
                  description: The description of the discount
                  type: string
                  example: A discount description
                discount_active:
                  description: Whether the discount is active or not
                  type: boolean
                  example: true
                discount_value:
                  description: The value of the discount
                  type: string
                  example: 30
              type: object
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                properties:
                  discount_id:
                    type: integer
                    example: 123
                  discount_name:
                    type: string
                    example: Discount
                  discount_description:
                    type: string
                    example: A discount description
                  discount_value:
                    type: string
                    example: 30
                  discount_unit:
                    type: string
                    example: custom
                  discount_active:
                    type: boolean
                    example: true
                  discount_order:
                    type: integer
                    example: 0
                  discountGroup_id:
                    type: integer
                    example: 116
                  discount_created_at:
                    type: string
                    example: '2018-12-20 11:00:00'
                  discount_updated_at:
                    type: string
                    example: '2018-12-20 11:15:00'
                type: object
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
      security:
      - Bearer: []
    delete:
      tags:
      - Discount
      summary: Delete a discount
      description: Deletes a discount.
      operationId: discountDelete
      parameters:
      - name: id
        in: path
        description: ID to find
        required: true
        schema:
          type: integer
          example: 123456
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                properties:
                  error:
                    type: boolean
                    example: false
                  success:
                    type: boolean
                    example: true
                  msg:
                    type: string
                    example: Discount was successfully deleted!
                type: object
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
      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