Tactill API v0 (latest)

Download OpenAPI specification:

API Integration Support: hello@tactill.com URL: https://tactill.com License: Tactill Terms of Service

Introduction

The Tactill API is built on HTTP and is RESTful. It has predictable resource URLs and returns HTTP response codes to indicate errors. It also accepts and returns JSON in the HTTP body. Use your favorite HTTP/REST library in your programming language when using this API, or use the Tactill TypeScript SDK for seamless integration.

Most actions in the Tactill Backoffice are supported by an API which is documented and available for use, so that you may automate any necessary workflows or processes. This API reference documentation contains the most commonly integrated resources.

Authentication

This topic describes the authentication method available in the Tactill API.

Tactill uses API keys for authentication. Each API key is scoped to a single organization and grants the permissions configured at issue time.

To authenticate your requests, send your API key in the X-Api-Key header on every call:

X-Api-Key: v5_<your-api-key>

API keys are prefixed with v5_. Keep them secret — never embed them in client-side code or commit them to source control. If a key is compromised, revoke it from the Tactill Backoffice and issue a new one.

Errors

Tactill follows the error response format.

{
  status_code: number,
  error: string,
  message: string
}

As with any API responses, your client must be prepared to gracefully handle additional members of the response.

All error responses include structured information to help you understand and resolve issues quickly.

Rate limits

Tactill enforces rate limits on the API to ensure optimal performance and fair usage across all partners. Rate limits are applied per organization and are designed to accommodate typical business operations. In sandbox environment, rate limits are enforced for non-GET endpoints and are set at 3000 requests per 10 minutes. You can find the exact number of consumed requests in the X-RateLimit-Limit and X-RateLimit-Remaining headers in the response. If the rate limit is exceeded, the API returns a 429 Too Many Requests response and a X-RateLimit-Retry-After header that includes a UTC timestamp of when the rate limit resets.

Environment Management

All resources support test and production modes. The mode is bound to your API key — it is not a request-body parameter.

  • A key issued in test mode reads and writes test data only; production data is invisible to it.
  • A key issued in production mode reads and writes production data only; test data is invisible to it.

To switch environments, use a different API key. Reach out to support to provision a test key alongside your production key.

Responses include test: true or test: false on each resource so you can confirm which environment the data belongs to.

General Best Practices

  1. Business validation - Respect the constraints of each resource
  2. Traceability - Maintain history for audit and accounting purposes
  3. Consistency - Maintain uniform naming conventions
  4. Performance - Limit API calls and use pagination
  5. Security - Protect sensitive data according to GDPR

📝 Response Format

All APIs follow consistent conventions:

  • Dates: ISO 8601 format (2024-01-01T10:00:00Z)
  • Amounts: In cents (1200 = €12.00)
  • IDs: UUIDs or system identifiers
  • Pagination: Token-based with next_token

SDKs

Tactill provides a TypeScript SDK to help interact with the Tactill API. However, no SDK is required to use the API. All TypeScript SDK code examples are included in the SDK's reference documentation on NPM.

Postman collection

For developers who prefer using Postman for API testing and exploration, we provide a comprehensive Postman collection that includes all available endpoints with example requests and responses.

The collection contains pre-configured requests for all API operations, making it easy to get started with the Tactill API without writing code. You can import the collection directly into Postman and begin testing endpoints immediately.

Download the Postman collection: Tactill API Postman Collection

Get started

The full Tactill API provides comprehensive access to manage your business operations. This includes managing products, customers, orders, inventory, and much more. If you would like to implement a particular use case, contact us for guidance and feedback on the best API operations to use for the task.

To integrate Tactill and become a partner, reach out to us at hello@tactill.com.

Product

Products are the individual items sold in your cash register system. Each product belongs to a category, has an associated tax system, and can be customized with options, tags, and custom fields. This resource is the core of your sales catalog.

Warning: Products belong to either the test or production environment based on the API key used to create them — they are not visible across modes. A product must have an associated category and tax rate when created.

Best practices

  1. Consistent pricing: Always define a buy_price (purchase price) and a sell_price (selling price) to correctly calculate your margins.

  2. Categorization: Organize your products in logical categories to facilitate navigation and reporting.

  3. Barcodes and references: Use unique barcodes and clear internal references for inventory management.

  4. Custom fields: Store business-specific information (allergens, origin, brand, etc.) in custom fields.

  5. Smart tags: Use tags for cross-cutting groupings (organic, seasonal, promotion, etc.).

  6. Variations: For products with variants (size, color), use the variation system for centralized management.

  7. Optimized images: Store image URLs on a CDN for better cash register performance.

Create a product

Creates a new product in the desired catalog.

Authorizations:
apiKey
Request Body schema: application/json
required

Product creation payload

name
required
string

Display name of the product as shown to customers

buy_price
required
number

Cost price paid by the merchant to acquire the product (in cents) - used for profit calculations

sell_price
required
number

Retail price charged to customers (in cents) - this is the base price before taxes or discounts

required
object or string
required
object or string
Array of objects or strings
Default: []

List of tags for product organization and filtering - helps customers find related products

options
Array of strings
Default: []

List of product variant options (size, color, etc.) that customers can select with potential price adjustments

Array of objects
Default: []

Additional custom data fields specific to your business needs (e.g. warehouse codes, supplier info)

photo
string

URL of the main product image displayed to customers in the catalog

Responses

Request samples

Content type
application/json
{
  • "name": "Blue shorts",
  • "buy_price": 1000,
  • "sell_price": 1200,
  • "category": {
    },
  • "tax": {
    },
  • "tags": [
    ],
  • "options": [
    ],
  • "custom_fields": [
    ],
}

Response samples

Content type
application/json
{
  • "id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "updated_at": "2025-07-02T10:26:31.829Z",
  • "created_at": "2025-07-02T10:26:31.829Z",
  • "catalog_id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "test": true,
  • "name": "Blue shorts",
  • "color": "BLUE",
  • "icon_text": "BS",
  • "category_id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "tax_id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "bulk_type": "string",
  • "buy_price": 1000,
  • "sell_price": 1200,
  • "barcode": "MY_BARCODE",
  • "reference": "MY_REFERENCE",
  • "variations": [
    ],
  • "variants_count": 0,
  • "tax": {
    },
  • "category": {
    },
  • "tags": [
    ],
  • "custom_fields": [
    ],
  • "options": [
    ],
}

Patch a product

Updates specific fields of an existing product.

Authorizations:
apiKey
Request Body schema: application/json
required

Product patch payload

id
required
string

Product unique identifier

name
string

Product name

buy_price
number

Product buy price (in cents)

sell_price
number

Product sell price (in cents)

barcode
string or null

Product barcode

reference
string or null

Product reference

category_id
string

Category ID

tax_id
string

Tax ID

Responses

Request samples

Content type
application/json
{
  • "id": "prod_123",
  • "name": "Updated Blue Shorts",
  • "buy_price": 1100,
  • "sell_price": 1300,
  • "barcode": "1234567890123",
  • "reference": "REF-001",
  • "category_id": "ea9f3f98-6f35-41e3-8c47-92fc313be733",
  • "tax_id": "dcc2a3cf-7357-40ab-8a3b-adc43d93afb0"
}

Response samples

Content type
application/json
{
  • "id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "updated_at": "2025-07-02T10:26:31.829Z",
  • "created_at": "2025-07-02T10:26:31.829Z",
  • "catalog_id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "test": true,
  • "name": "Blue shorts",
  • "color": "BLUE",
  • "icon_text": "BS",
  • "category_id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "tax_id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "bulk_type": "string",
  • "buy_price": 1000,
  • "sell_price": 1200,
  • "barcode": "MY_BARCODE",
  • "reference": "MY_REFERENCE",
  • "variations": [
    ],
  • "variants_count": 0,
  • "tax": {
    },
  • "category": {
    },
  • "tags": [
    ],
  • "custom_fields": [
    ],
  • "options": [
    ],
}

Request products

Requests a list of products with optional filtering and sorting.

Authorizations:
apiKey
Request Body schema: application/json
required

Product request payload

object

Request input parameters

Responses

Request samples

Content type
application/json
{
  • "input": {
    }
}

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "next_token": "xxx.yyy.zzz",
  • "total": 10
}

Get a product by ID

Fetches a product by its unique identifier.

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: cb75a73d-0c3b-4b38-8064-56b6ec77c10d

Unique identifier of the product

Responses

Response samples

Content type
application/json
{
  • "id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "updated_at": "2025-07-02T10:26:31.829Z",
  • "created_at": "2025-07-02T10:26:31.829Z",
  • "catalog_id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "test": true,
  • "name": "Blue shorts",
  • "color": "BLUE",
  • "icon_text": "BS",
  • "category_id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "tax_id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "bulk_type": "string",
  • "buy_price": 1000,
  • "sell_price": 1200,
  • "barcode": "MY_BARCODE",
  • "reference": "MY_REFERENCE",
  • "variations": [
    ],
  • "variants_count": 0,
  • "tax": {
    },
  • "category": {
    },
  • "tags": [
    ],
  • "custom_fields": [
    ],
  • "options": [
    ],
}

Delete a product by ID

Deletes a product by its unique identifier.

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: cb75a73d-0c3b-4b38-8064-56b6ec77c10d

Unique identifier of the product

Responses

Response samples

Content type
application/json
{
  • "id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "updated_at": "2025-07-02T10:26:31.829Z",
  • "created_at": "2025-07-02T10:26:31.829Z",
  • "catalog_id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "test": true,
  • "name": "Blue shorts",
  • "color": "BLUE",
  • "icon_text": "BS",
  • "category_id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "tax_id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "bulk_type": "string",
  • "buy_price": 1000,
  • "sell_price": 1200,
  • "barcode": "MY_BARCODE",
  • "reference": "MY_REFERENCE",
  • "variations": [
    ],
  • "variants_count": 0,
}

Remove a custom field from a product

Deletes the connection between a product and a custom field.

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: cb75a73d-0c3b-4b38-8064-56b6ec77c10d

Unique identifier of the product

custom_field_id
required
string
Example: ba19240a-0442-4bd9-8c15-01b8409e1346__product_champpersotexte1

Unique identifier of the custom field to remove from the product

Responses

Response samples

Content type
application/json
{
  • "id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d"
}

Remove a tag from a product

Deletes the connection between a product and a tag.

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: cb75a73d-0c3b-4b38-8064-56b6ec77c10d

Unique identifier of the product

tag_id
required
string <uuid>
Example: cb75a73d-0c3b-4b38-8064-56b6ec77c10d

Unique identifier of the tag to remove from the product

Responses

Response samples

Content type
application/json
{
  • "id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d"
}

Remove an option from a product

Deletes the connection between a product and an option.

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: cb75a73d-0c3b-4b38-8064-56b6ec77c10d

Unique identifier of the product

option_id
required
string <uuid>
Example: cb75a73d-0c3b-4b38-8064-56b6ec77c10d

Unique identifier of the option to remove from the product

Responses

Response samples

Content type
application/json
{
  • "id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d"
}

Update a product variation name

Updates the name of a specific product variation.

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: 74112fef-687b-469e-a6ca-74fcf456ca42

Unique identifier of the product

variation_name
required
string non-empty
Example: couleur

Current name of the variation to update

Request Body schema: application/json
required

Product variation name update payload

new_name
required
string non-empty

New name for the product variation

Responses

Request samples

Content type
application/json
{
  • "new_name": "couleurs"
}

Response samples

Content type
application/json
{
  • "catalog_id": "ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": false,
  • "product_id": "74112fef-687b-469e-a6ca-74fcf456ca42",
  • "product": {
    },
  • "variations": [
    ],
  • "insertions": [
    ],
  • "modifications": [
    ],
  • "deletions": [
    ]
}

Update a product variation option value

Updates the value of a specific product variation option.

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: 74112fef-687b-469e-a6ca-74fcf456ca42

Unique identifier of the product

variation_name
required
string non-empty
Example: couleur

Name of the variation containing the option to update

option_value
required
string non-empty
Example: rouge

Current value of the option to update

Request Body schema: application/json
required

Product variation option value update payload

new_value
required
string non-empty

New value for the product variation option

Responses

Request samples

Content type
application/json
{
  • "new_value": "red"
}

Response samples

Content type
application/json
{
  • "catalog_id": "ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": false,
  • "product_id": "74112fef-687b-469e-a6ca-74fcf456ca42",
  • "product": {
    },
  • "variations": [
    ],
  • "insertions": [
    ],
  • "modifications": [
    ],
  • "deletions": [
    ]
}

Discount

Discounts allow you to apply commercial reductions to your sales. They can be percentage-based or fixed amounts and are used for promotions, loyalty programs, or commercial gestures. Discounts are referenced in sales for commercial performance tracking.

Warning: Discounts belong to either the test or production environment based on the API key used to create them — they are not visible across modes. For percentage discounts, the rate must be between 0 and 100. For numeric discounts, the amount is in cents.

Best practices

  1. Appropriate types: Use PERCENTAGE for proportional discounts (e.g. 10%) and NUMERIC for fixed amounts (e.g. €5).

  2. Explicit naming: Choose clear names that indicate the nature of the discount ("Black Friday 20%", "Loyalty €5").

  3. Rate validation: For PERCENTAGE discounts, verify that the rate remains between 0 and 100.

  4. Seasonal discounts: Create specific discounts for your commercial campaigns with dated names.

  5. Performance tracking: Regularly analyze your discount usage through statistics to optimize your strategies.

  6. Rights management: Control access to discounts according to user profiles to prevent abuse.

  7. Archiving: Maintain a history of your discounts even when expired for accounting and commercial tracking.

Create a discount

Creates a new discount in the desired catalog.

Authorizations:
apiKey
Request Body schema: application/json
required

Discount creation payload

name
required
string

Display name of the discount shown to staff and customers

type
required
string
Enum: "PERCENTAGE" "NUMERIC"

Type of discount calculation: PERCENTAGE for percentage-based discounts or NUMERIC for fixed amount discounts

rate
required
number >= 0

Discount value - for PERCENTAGE type: percentage value (0-100), for NUMERIC type: amount in cents

Responses

Request samples

Content type
application/json
{
  • "name": "Black Friday",
  • "type": "PERCENTAGE",
  • "rate": 10
}

Response samples

Content type
application/json
{
  • "id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "catalog_id": "ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": true,
  • "name": "Black Friday",
  • "type": "PERCENTAGE",
  • "rate": 10,
  • "created_at": "2024-01-01T00:00:00.000Z",
  • "updated_at": "2024-01-01T00:00:00.000Z"
}

Patch a discount

Updates specific fields of an existing discount.

Authorizations:
apiKey
Request Body schema: application/json
required

Discount patch payload

id
required
string

Discount unique identifier

name
string

Discount name

type
string
Enum: "PERCENTAGE" "NUMERIC"

Discount type

rate
number >= 0

Discount rate (percentage or amount in cents)

Responses

Request samples

Content type
application/json
{
  • "id": "disc_123",
  • "name": "Updated Black Friday",
  • "type": "PERCENTAGE",
  • "rate": 15
}

Response samples

Content type
application/json
{
  • "id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "catalog_id": "ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": true,
  • "name": "Black Friday",
  • "type": "PERCENTAGE",
  • "rate": 10,
  • "created_at": "2024-01-01T00:00:00.000Z",
  • "updated_at": "2024-01-01T00:00:00.000Z"
}

Request discounts

Requests a list of discounts with optional filtering and sorting.

Authorizations:
apiKey
Request Body schema: application/json
required

Discount request payload

filter
any

Filter criteria for discounts with support for and/or/not operators

object

Sort criteria for discounts

limit
integer [ 1 .. 100 ]

Maximum number of discounts to return

next_token
string

Token for pagination

Responses

Request samples

Content type
application/json
{
  • "filter": {
    },
  • "sort": {
    },
  • "limit": 20,
  • "next_token": "eyJpZCI6IjEyMyJ9"
}

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "next_token": "xxx.yyy.zzz",
  • "total": 10
}

Get a discount by ID

Fetches a discount by its unique identifier.

Authorizations:
apiKey
path Parameters
id
required
string
Example: cb75a73d-0c3b-4b38-8064-56b6ec77c10d

Unique identifier of the discount

Responses

Response samples

Content type
application/json
{
  • "id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "catalog_id": "ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": true,
  • "name": "Black Friday",
  • "type": "PERCENTAGE",
  • "rate": 10,
  • "created_at": "2024-01-01T00:00:00.000Z",
  • "updated_at": "2024-01-01T00:00:00.000Z"
}

Delete a discount by ID

Deletes a discount by its unique identifier.

Authorizations:
apiKey
path Parameters
id
required
string
Example: cb75a73d-0c3b-4b38-8064-56b6ec77c10d

Unique identifier of the discount

Responses

Response samples

Content type
application/json
{
  • "id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "catalog_id": "ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": true,
  • "name": "Black Friday",
  • "type": "PERCENTAGE",
  • "rate": 10,
  • "created_at": "2024-01-01T00:00:00.000Z",
  • "updated_at": "2024-01-01T00:00:00.000Z"
}

Customer

Customers represent your customer base in the cash register system. They enable management of named sales, loyalty, customer accounts, and commercial tracking. Customers belong to a company and can have accounts with balances.

Warning: Customers belong to either the test or production environment based on the API key used to create them — they are not visible across modes. A customer can be created without email or phone, but at least one contact method is recommended for customer relations.

Best practices

  1. Complete data: Fill in as much information as possible (name, email, phone, address) for better customer relations.

  2. GDPR management: Comply with personal data regulations and only store necessary information.

  3. Customer accounts: Use the customer account system for deferred billing and installment payments.

  4. Loyalty cards: Assign unique loyalty card numbers for your loyalty programs.

  5. Segmentation: Use custom fields to segment your clientele (VIP, professional, individual).

  6. Standardized addresses: Follow standard address formats with valid postal codes for deliveries.

  7. Duplicate merging: Regularly check for duplicates on email/phone to maintain a clean database.

  8. Useful notes: Use the note field to store important information about customer preferences.

Create a customer

Creates a new customer in the desired catalog.

Authorizations:
apiKey
Request Body schema: application/json
required

Customer creation payload

original_id
string or null

External customer ID from your existing system or third-party integrations

first_name
string or null

Customer's first name or given name

last_name
string or null

Customer's last name or family name

email
string or null

Customer's email address for communication and marketing

phone
string or null

Complete phone number including country code

phone_code
string or null

International dialing code for the phone number (e.g., +33 for France)

company_name
string or null

Name of the company or organization the customer represents

color
string or null
Enum: "GREEN" "LIME" "RED" "BLUE" "YELLOW" "ORANGE" "PINK" "PURPLE" "TURQUOISE" "GREY" "BROWN" "BLACK"

Visual color theme for the customer profile in the user interface

icon_text
string or null

Short text (usually initials) displayed as customer avatar in the interface

object or null
note
string or null

Internal notes or comments about the customer for staff reference

fidelity_card_number
string or null

Loyalty program card number or membership ID for rewards and points tracking

Array of objects
Default: []

Additional custom data fields specific to your business needs for customer management

Responses

Request samples

Content type
application/json
{
  • "original_id": "4r5Ty67",
  • "first_name": "John",
  • "last_name": "Doe",
  • "email": "john.doe@example.com",
  • "phone": "+33123456789",
  • "phone_code": "+33",
  • "company_name": "Acme Corp",
  • "color": "BLUE",
  • "icon_text": "JD",
  • "address": {
    },
  • "note": "VIP customer",
  • "fidelity_card_number": "FIDELITY123",
  • "custom_fields": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "ed18750a-0442-4be9-8c15-034e409ef225",
  • "updated_at": "2023-01-02T00:00:00Z",
  • "created_at": "2023-01-01T00:00:00Z",
  • "company_id": "ba18760a-0442-4be9-8c15-01b8409ea236",
  • "original_id": "4r5Ty67",
  • "first_name": "John",
  • "last_name": "Doe",
  • "email": "john.doe@example.com",
  • "phone": "+33123456789",
  • "company_name": "Acme Corp",
  • "color": "BLUE",
  • "icon_text": "JD",
  • "address": {
    },
  • "note": "VIP customer",
  • "fidelity_card_number": "FIDELITY123",
  • "test": true,
  • "custom_fields": [
    ]
}

Patch a customer

Updates specific fields of an existing customer.

Authorizations:
apiKey
Request Body schema: application/json
required

Customer patch payload

id
required
string

Customer unique identifier

first_name
string

Customer first name

last_name
string

Customer last name

email
string <email>

Customer email

phone
string

Customer phone

object

Customer address

company_name
string

Customer company name

company_vat_number
string

Customer company VAT number

Responses

Request samples

Content type
application/json
{
  • "id": "cust_123",
  • "first_name": "John",
  • "last_name": "Doe",
  • "email": "john.doe@example.com",
  • "phone": "+1234567890",
  • "address": {
    },
  • "company_name": "ACME Corp",
  • "company_vat_number": "VAT123456789"
}

Response samples

Content type
application/json
{
  • "id": "ed18750a-0442-4be9-8c15-034e409ef225",
  • "updated_at": "2023-01-02T00:00:00Z",
  • "created_at": "2023-01-01T00:00:00Z",
  • "company_id": "ba18760a-0442-4be9-8c15-01b8409ea236",
  • "original_id": "4r5Ty67",
  • "first_name": "John",
  • "last_name": "Doe",
  • "email": "john.doe@example.com",
  • "phone": "+33123456789",
  • "company_name": "Acme Corp",
  • "color": "BLUE",
  • "icon_text": "JD",
  • "address": {
    },
  • "note": "VIP customer",
  • "fidelity_card_number": "FIDELITY123",
  • "test": true,
  • "custom_fields": [
    ]
}

Get a customer by ID

Fetches a customer by its unique identifier.

Authorizations:
apiKey
path Parameters
id
required
string
Example: c123

Unique identifier of the customer

Responses

Response samples

Content type
application/json
{
  • "id": "ed18750a-0442-4be9-8c15-034e409ef225",
  • "updated_at": "2023-01-02T00:00:00Z",
  • "created_at": "2023-01-01T00:00:00Z",
  • "company_id": "ba18760a-0442-4be9-8c15-01b8409ea236",
  • "original_id": "4r5Ty67",
  • "first_name": "John",
  • "last_name": "Doe",
  • "email": "john.doe@example.com",
  • "phone": "+33123456789",
  • "company_name": "Acme Corp",
  • "color": "BLUE",
  • "icon_text": "JD",
  • "address": {
    },
  • "note": "VIP customer",
  • "fidelity_card_number": "FIDELITY123",
  • "test": true,
  • "custom_fields": [
    ]
}

Delete a customer by ID

Deletes a customer by its unique identifier.

Authorizations:
apiKey
path Parameters
id
required
string
Example: c123

Unique identifier of the customer

Responses

Response samples

Content type
application/json
{
  • "id": "ed18750a-0442-4be9-8c15-034e409ef225",
  • "updated_at": "2023-01-02T00:00:00Z",
  • "created_at": "2023-01-01T00:00:00Z",
  • "company_id": "ba18760a-0442-4be9-8c15-01b8409ea236",
  • "original_id": "4r5Ty67",
  • "first_name": "John",
  • "last_name": "Doe",
  • "email": "john.doe@example.com",
  • "phone": "+33123456789",
  • "company_name": "Acme Corp",
  • "color": "BLUE",
  • "icon_text": "JD",
  • "address": {
    },
  • "note": "VIP customer",
  • "fidelity_card_number": "FIDELITY123",
  • "test": true
}

Remove a custom field from a customer

Deletes the connection between a customer and a custom field.

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: ed18750a-0442-4be9-8c15-034e409ef225

Unique identifier of the customer

custom_field_id
required
string
Example: ba19240a-0442-4bd9-8c15-01b8409e1346__customer_champpersotext1

Unique identifier of the custom field to remove from the customer

Responses

Response samples

Content type
application/json
{
  • "id": "ed18750a-0442-4be9-8c15-034e409ef225"
}

Request customers

Requests a list of customers with optional filtering and sorting.

Authorizations:
apiKey
Request Body schema: application/json
required

Customer request payload

filter
any

Filter criteria for customers with support for and/or/not operators

object

Sort criteria for customers

limit
integer [ 1 .. 100 ]

Maximum number of customers to return

next_token
string

Token for pagination

Responses

Request samples

Content type
application/json
{
  • "filter": {
    },
  • "sort": {
    },
  • "limit": 20,
  • "next_token": "eyJpZCI6IjEyMyJ9"
}

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "next_token": "xxx.yyy.zzz",
  • "total": 10
}

Category

Categories allow you to organize and structure your product catalog. They facilitate cash register navigation, menu organization, and generation of sales reports by segment. Each product must belong to a category.

Warning: Categories belong to either the test or production environment based on the API key used to create them — they are not visible across modes. Deletion of a category that contains products is blocked by the system.

Best practices

  1. Logical hierarchy: Organize your categories intuitively for your teams (e.g. "Beverages", "Hot dishes", "Desserts").

  2. Color codes: Use distinct colors for each category to facilitate visual identification at the cash register.

  3. Explicit icons: Choose short and meaningful icon_text (emojis or abbreviations) for quick recognition.

  4. Custom fields: Store category metadata (sales commission, target margin, etc.) in custom fields.

  5. Quality images: Use representative images to improve user experience at the cash register.

  6. Naming convention: Adopt a consistent and scalable nomenclature for your categories.

  7. Optimal granularity: Neither too broad (difficult to manage) nor too specific (complex navigation) - find the right balance.

Edge Cases & Constraints

Deletion of category associated with a product

⚠️ Blocking case: It is impossible to delete a category that currently contains one or more products.

Behavior:

  • Error code: 403 Forbidden
  • Message: The system refuses deletion to preserve catalog integrity

Solution:

  1. Identify all products belonging to this category
  2. Reassign these products to another valid category
  3. Once all products are migrated, deletion becomes possible

Best practice: Before deleting a category, verify it is empty by using the product search API filtered by category.

Create a category

Creates a new category in the desired catalog.

Authorizations:
apiKey
Request Body schema: application/json
required

Category creation payload

id
string or null

Unique identifier of the category (auto-generated if not provided)

created_at
string or null

ISO 8601 timestamp when the category was created

updated_at
string or null

ISO 8601 timestamp when the category was last modified

name
required
string

Display name of the category used for product organization and navigation

color
string or null

Visual color theme for the category in the user interface (hex color code or palette name)

icon_text
string or null

Short text (usually 1-2 characters) or emoji displayed as category icon in the interface

Array of objects
Default: []

Additional custom data fields specific to your business needs for category management

Responses

Request samples

Content type
application/json
{
  • "id": "cat_123",
  • "created_at": "2024-01-01T00:00:00Z",
  • "updated_at": "2024-01-02T00:00:00Z",
  • "name": "Beverages",
  • "color": "#FF0000",
  • "icon_text": "🍹",
  • "custom_fields": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "ea9f3f98-6f35-41e3-8c47-92fc313be733",
  • "catalog_id": "ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": true,
  • "name": "Ma catégorie 1",
  • "color": "BLUE",
  • "icon_text": "C",
  • "created_at": "2025-06-30T15:32:27.290Z",
  • "updated_at": "2025-07-07T08:52:01.492Z",
  • "custom_fields": [
    ]
}

Patch a category

Updates specific fields of an existing category.

Authorizations:
apiKey
Request Body schema: application/json
required

Category patch payload

id
required
string

Category unique identifier

name
string

Category name

color
string

Color palette (hex or palette name)

icon_text
string

Icon text for the category

Responses

Request samples

Content type
application/json
{
  • "id": "cat_123",
  • "name": "Updated Beverages",
  • "color": "#FF0000",
  • "icon_text": "🍹"
}

Response samples

Content type
application/json
{
  • "id": "ea9f3f98-6f35-41e3-8c47-92fc313be733",
  • "catalog_id": "ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": true,
  • "name": "Ma catégorie 1",
  • "color": "BLUE",
  • "icon_text": "C",
  • "created_at": "2025-06-30T15:32:27.290Z",
  • "updated_at": "2025-07-07T08:52:01.492Z",
  • "custom_fields": [
    ]
}

Request categories

Requests a list of categories with optional filtering and sorting.

Authorizations:
apiKey
Request Body schema: application/json
required

Category request payload

filter
any

Filter criteria for categories with support for and/or/not operators

object

Sort criteria for categories

limit
integer [ 1 .. 100 ]

Maximum number of categories to return

next_token
string

Token for pagination

Responses

Request samples

Content type
application/json
{
  • "filter": {
    },
  • "sort": {
    },
  • "limit": 20,
  • "next_token": "eyJpZCI6IjEyMyJ9"
}

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "next_token": "xxx.yyy.zzz",
  • "total": 10
}

Get a category by ID

Fetches a category by its unique identifier.

Authorizations:
apiKey
path Parameters
id
required
string
Example: c123

Unique identifier of the category

Responses

Response samples

Content type
application/json
{
  • "id": "ea9f3f98-6f35-41e3-8c47-92fc313be733",
  • "catalog_id": "ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": true,
  • "name": "Ma catégorie 1",
  • "color": "BLUE",
  • "icon_text": "C",
  • "created_at": "2025-06-30T15:32:27.290Z",
  • "updated_at": "2025-07-07T08:52:01.492Z",
  • "custom_fields": [
    ]
}

Delete a category by ID

Deletes a category by its unique identifier.

Authorizations:
apiKey
path Parameters
id
required
string
Example: c123

Unique identifier of the category

Responses

Response samples

Content type
application/json
{
  • "id": "ea9f3f98-6f35-41e3-8c47-92fc313be733",
  • "catalog_id": "ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": true,
  • "name": "Ma catégorie 1",
  • "color": "BLUE",
  • "icon_text": "C",
  • "created_at": "2025-06-30T15:32:27.290Z",
  • "updated_at": "2025-07-07T08:52:01.492Z"
}

Remove a custom field from a category

Deletes the connection between a category and a custom field.

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: cb75a73d-0c3b-4b38-8064-56b6ec77c10d

Unique identifier of the category

custom_field_id
required
string
Example: ba19240a-0442-4bd9-8c15-01b8409e1346__category_champpersotexte1

Unique identifier of the custom field to remove from the category

Responses

Response samples

Content type
application/json
{
  • "id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d"
}

Custom Field

Custom Fields allow you to extend system objects (products, categories, customers, etc.) with data specific to your business needs. They offer the flexibility to add information not covered by standard fields.

Warning: Custom fields belong to either the test or production environment based on the API key used to create them — they are not visible across modes. Each field has a defined data type (text, number, boolean) that determines possible values.

Best practices

  1. Explicit naming: Choose clear field names that are understandable by the entire team.

  2. Unique keys: Use consistent and durable system keys (key) for technical integration.

  3. Appropriate types: Select the right value type (TEXT, NUMBER, BOOLEAN) according to intended use.

  4. Organization by object: Logically group your fields by object type to simplify management.

  5. Internal documentation: Document the usage and expected values of each custom field.

  6. Scalability: Anticipate future needs to avoid multiplication of similar fields.

  7. Business validation: Implement consistency checks on the application side for critical values.

  8. Secure migration: Plan structure changes carefully to preserve existing data.

  9. Performance: Limit the number of custom fields per object to maintain display performance.

Create a new custom field

Creates a new custom field for data collection

Authorizations:
apiKey
Request Body schema: application/json
required

Custom field creation payload

name
required
string [ 1 .. 100 ] characters

Human-readable name of the custom field displayed in the user interface

object_type
required
string
Enum: "PRODUCT" "PACK" "CATEGORY" "CASHBOOK" "CUSTOMER"

Type of object this custom field applies to (PRODUCT for products, CATEGORY for categories, CUSTOMER for customers, etc.)

value_type
required
string
Enum: "TEXT" "DATE" "NUMBER"

Data type of the custom field value (TEXT for text strings, NUMBER for numeric values, BOOLEAN for true/false, etc.)

key
required
string non-empty

Internal unique key used to identify this custom field in the system (must be unique within the object type)

Responses

Request samples

Content type
application/json
{
  • "name": "Brand",
  • "object_type": "PRODUCT",
  • "value_type": "TEXT",
  • "key": "brand_field"
}

Response samples

Content type
application/json
{
  • "id": "123e4567-e89b-12d3-a456-426614174000",
  • "name": "Brand",
  • "object_type": "PRODUCT",
  • "value_type": "TEXT",
  • "test": false,
  • "created_at": "2023-01-01T00:00:00Z",
  • "updated_at": "2023-01-01T00:00:00Z",
  • "catalog_id": "456e7890-e89b-12d3-a456-426614174001"
}

Get custom field by ID

Retrieves a custom field by its unique identifier

Authorizations:
apiKey
path Parameters
id
required
string
Example: 123e4567-e89b-12d3-a456-426614174000

Unique identifier of the custom field definition

Responses

Response samples

Content type
application/json
{
  • "id": "123e4567-e89b-12d3-a456-426614174000",
  • "name": "Brand",
  • "object_type": "PRODUCT",
  • "value_type": "TEXT",
  • "test": false,
  • "created_at": "2023-01-01T00:00:00Z",
  • "updated_at": "2023-01-01T00:00:00Z",
  • "catalog_id": "456e7890-e89b-12d3-a456-426614174001"
}

Delete custom field

Deletes a custom field by its unique identifier

Authorizations:
apiKey
path Parameters
id
required
string
Example: 123e4567-e89b-12d3-a456-426614174000

Unique identifier of the custom field definition

Responses

Response samples

Content type
application/json
{
  • "id": "123e4567-e89b-12d3-a456-426614174000",
  • "name": "Brand",
  • "object_type": "PRODUCT",
  • "value_type": "TEXT",
  • "test": false,
  • "created_at": "2023-01-01T00:00:00Z",
  • "updated_at": "2023-01-01T00:00:00Z",
  • "catalog_id": "456e7890-e89b-12d3-a456-426614174001"
}

Option

Options define the available variants for products (size, color, ingredients, etc.). Each option contains several possible values with their respective price adjustments, allowing customization of items according to customer choices.

Warning: Options belong to either the test or production environment based on the API key used to create them — they are not visible across modes. Each option must contain at least one value. Prices are in cents.

Best practices

  1. Logical categories: Create options by type of variation (Size, Color, Material, Supplement).

  2. Complete values: Define all possible variants with explicit names ("Small", "Medium", "Large").

  3. Adjusted prices: Use additional_price for supplements (positive) or discounts (negative) linked to options.

  4. Pricing consistency: Maintain consistent pricing logic between different values of the same option.

  5. Combinable options: Consider possible combinations between options on the same product.

  6. Stock management: Coordinate options with your stock management if variants have separate inventories.

  7. Clear interface: Organize your options for intuitive selection at the cash register or customer interface.

  8. Scalability: Structure your options to easily add new values without redesign.

Create a option

Creates a new option in the desired catalog.

Authorizations:
apiKey
Request Body schema: application/json
required

Option creation payload

name
required
string

Name of the option category that defines the type of variant (e.g., "Size", "Color", "Material")

required
Array of objects non-empty

Available choices for this option that customers can select, each with its own pricing

Responses

Request samples

Content type
application/json
{
  • "name": "Size",
  • "values": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "0dd7eeee-3f87-4bd7-a950-b1f1b7fb8726",
  • "updated_at": "2024-04-01T12:00:00.000Z",
  • "created_at": "2024-04-01T11:00:00.000Z",
  • "catalog_id": "ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": false,
  • "name": "Size",
  • "values": [
    ]
}

Patch an option

Updates specific fields of an existing option.

Authorizations:
apiKey
Request Body schema: application/json
required

Option patch payload

id
required
string

Option unique identifier

name
string

Option name

Array of objects

Option values

Responses

Request samples

Content type
application/json
{
  • "id": "opt_123",
  • "name": "Updated Size",
  • "values": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "0dd7eeee-3f87-4bd7-a950-b1f1b7fb8726",
  • "updated_at": "2024-04-01T12:00:00.000Z",
  • "created_at": "2024-04-01T11:00:00.000Z",
  • "catalog_id": "ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": false,
  • "name": "Size",
  • "values": [
    ]
}

Request options

Requests a list of options with optional filtering and sorting.

Authorizations:
apiKey
Request Body schema: application/json
required

Option request payload

filter
any

Filter criteria for options with support for and/or/not operators

object

Sort criteria for options

limit
integer [ 1 .. 100 ]

Maximum number of options to return

next_token
string

Token for pagination

Responses

Request samples

Content type
application/json
{
  • "filter": {
    },
  • "sort": {
    },
  • "limit": 20,
  • "next_token": "eyJpZCI6IjEyMyJ9"
}

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "next_token": "xxx.yyy.zzz",
  • "total": 10
}

Get a option by ID

Fetches a option by its unique identifier.

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: 0dd7eeee-3f87-4bd7-a950-b1f1b7fb8726

Unique identifier of the option

Responses

Response samples

Content type
application/json
{
  • "id": "0dd7eeee-3f87-4bd7-a950-b1f1b7fb8726",
  • "updated_at": "2024-04-01T12:00:00.000Z",
  • "created_at": "2024-04-01T11:00:00.000Z",
  • "catalog_id": "ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": false,
  • "name": "Size",
  • "values": [
    ]
}

Delete a option by ID

Deletes a option by its unique identifier.

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: 0dd7eeee-3f87-4bd7-a950-b1f1b7fb8726

Unique identifier of the option

Responses

Response samples

Content type
application/json
{
  • "id": "0dd7eeee-3f87-4bd7-a950-b1f1b7fb8726",
  • "updated_at": "2024-04-01T12:00:00.000Z",
  • "created_at": "2024-04-01T11:00:00.000Z",
  • "catalog_id": "ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": false,
  • "name": "Size",
  • "values": [
    ]
}

Pack

Packs are product bundles that allow grouping several items into a single sellable element. A pack can contain different product variations with specific quantities and price adjustments. This resource is essential for creating combined offers, menus, or kits in your cash register system.

Warning: Packs belong to either the test or production environment based on the API key used to create them — they are not visible across modes. Make sure to create your packs with the correct mode according to your environment.

Best practices

  1. Consistent naming: Use a clear naming convention for your packs (e.g. "Menu [Name]", "Pack [Season]")

  2. Price management: The pack's sell_price replaces individual pricing. Use additional_price in options for fine adjustments.

  3. Test mode: Always test your packs in test mode before deploying to production.

  4. Multiple variations: Use multiple variations to offer choices (size, quality level, etc.)

  5. Custom fields: Use custom fields to store business-specific metadata (allergens, ingredients, etc.)

Create a pack

Creates a new pack in the desired catalog.

Authorizations:
apiKey
Request Body schema: application/json
required

Pack creation payload

name
required
string

Display name of the product bundle shown to customers

color
string
Enum: "GREEN" "LIME" "RED" "BLUE" "YELLOW" "ORANGE" "PINK" "PURPLE" "TURQUOISE" "GREY" "BROWN" "BLACK"

Visual color theme for the pack in the user interface

icon_text
string

Short text (usually initials) displayed as pack icon in the interface

photo
string

URL of the main pack image displayed to customers

barcode
string

Barcode number for the complete pack for inventory and scanning

reference
string

Internal reference code for the pack used for identification and inventory

sell_price
number

Total retail price for the complete pack in cents (overrides individual product pricing)

required
Array of objects non-empty

Different combinations of products that can be included in this pack bundle

Array of objects
Default: []

Additional custom data fields specific to your business needs for pack management

Responses

Request samples

Content type
application/json
{
  • "name": "Summer Pack",
  • "color": "BLUE",
  • "icon_text": "SP",
  • "barcode": "1234567890",
  • "reference": "PACK-001",
  • "sell_price": 2500,
  • "pack_variations": [
    ],
  • "custom_fields": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "ed18750a-0442-4be9-8c15-034e409ef225",
  • "updated_at": "2023-01-02T00:00:00Z",
  • "created_at": "2023-01-01T00:00:00Z",
  • "catalog_id": "ba18760a-0442-4be9-8c15-01b8409ea236",
  • "test": true,
  • "name": "Summer Pack",
  • "color": "BLUE",
  • "icon_text": "SP",
  • "barcode": "1234567890",
  • "reference": "PACK-001",
  • "sell_price": 2500,
  • "pack_variations": [
    ],
  • "custom_fields": [
    ]
}

Patch a pack

Updates specific fields of an existing pack.

Authorizations:
apiKey
Request Body schema: application/json
required

Pack patch payload

id
required
string

Pack unique identifier

name
string

Pack name

barcode
string or null

Pack barcode

reference
string or null

Pack reference

sell_price
number

Pack sell price (in cents)

Array of objects

Pack variations

Responses

Request samples

Content type
application/json
{
  • "id": "pack_123",
  • "name": "Updated Combo Pack",
  • "barcode": "1234567890123",
  • "reference": "PACK-001",
  • "sell_price": 2500,
  • "pack_variations": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "ed18750a-0442-4be9-8c15-034e409ef225",
  • "updated_at": "2023-01-02T00:00:00Z",
  • "created_at": "2023-01-01T00:00:00Z",
  • "catalog_id": "ba18760a-0442-4be9-8c15-01b8409ea236",
  • "test": true,
  • "name": "Summer Pack",
  • "color": "BLUE",
  • "icon_text": "SP",
  • "barcode": "1234567890",
  • "reference": "PACK-001",
  • "sell_price": 2500,
  • "pack_variations": [
    ],
  • "custom_fields": [
    ]
}

Get a pack by ID

Fetches a pack by its unique identifier.

Authorizations:
apiKey
path Parameters
id
required
string
Example: ed18750a-0442-4be9-8c15-034e409ef225

Unique identifier of the pack

Responses

Response samples

Content type
application/json
{
  • "id": "ed18750a-0442-4be9-8c15-034e409ef225",
  • "updated_at": "2023-01-02T00:00:00Z",
  • "created_at": "2023-01-01T00:00:00Z",
  • "catalog_id": "ba18760a-0442-4be9-8c15-01b8409ea236",
  • "test": true,
  • "name": "Summer Pack",
  • "color": "BLUE",
  • "icon_text": "SP",
  • "barcode": "1234567890",
  • "reference": "PACK-001",
  • "sell_price": 2500,
  • "pack_variations": [
    ],
  • "custom_fields": [
    ]
}

Delete a pack by ID

Deletes a pack by its unique identifier.

Authorizations:
apiKey
path Parameters
id
required
string
Example: ed18750a-0442-4be9-8c15-034e409ef225

Unique identifier of the pack

Responses

Response samples

Content type
application/json
{
  • "id": "ed18750a-0442-4be9-8c15-034e409ef225",
  • "updated_at": "2023-01-02T00:00:00Z",
  • "created_at": "2023-01-01T00:00:00Z",
  • "catalog_id": "ba18760a-0442-4be9-8c15-01b8409ea236",
  • "test": true,
  • "name": "Summer Pack",
  • "color": "BLUE",
  • "icon_text": "SP",
  • "barcode": "1234567890",
  • "reference": "PACK-001",
  • "sell_price": 2500,
  • "pack_variations": [
    ],
  • "custom_fields": [
    ]
}

Remove a custom field from a pack

Deletes the connection between a pack and a custom field.

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: ed18750a-0442-4be9-8c15-034e409ef225

Unique identifier of the pack

custom_field_id
required
string
Example: ba19240a-0442-4bd9-8c15-01b8409e1346__pack_champpersotext1

Unique identifier of the custom field to remove from the pack

Responses

Response samples

Content type
application/json
{
  • "id": "ed18750a-0442-4be9-8c15-034e409ef225"
}

Request packs

Requests a list of packs with optional filtering and sorting.

Authorizations:
apiKey
Request Body schema: application/json
required

Pack request payload

filter
any

Filter criteria for packs with support for and/or/not operators

object

Sort criteria for packs

limit
integer [ 1 .. 100 ]

Maximum number of packs to return

next_token
string

Token for pagination

Responses

Request samples

Content type
application/json
{
  • "filter": {
    },
  • "sort": {
    },
  • "limit": 20,
  • "next_token": "eyJpZCI6IjEyMyJ9"
}

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "next_token": "xxx.yyy.zzz",
  • "total": 10
}

Tag

Tags allow labeling and classifying products in a way that cuts across categories. They facilitate search, filtering, and creation of custom business groupings for sales analysis and catalog management.

Warning: Tags belong to either the test or production environment based on the API key used to create them — they are not visible across modes. Tags must be associated with products through specific connections.

Best practices

  1. Consistent system: Define a clear tagging strategy (origin, seasonality, promotion, allergens, etc.).

  2. Standardized names: Use a uniform naming convention to avoid duplicates ("Organic", "Vegetarian", "Gluten-Free").

  3. Functional tags: Create tags useful for your business processes (promotion, new product,...).

  4. Reasonable limit: Don't overload your products with too many tags to maintain readability.

  5. Temporary tags: Use tags for temporary campaigns ("Summer Sale 2024", "Black Friday").

  6. Optimized search: Leverage tags to create advanced search filters in your sales interface.

  7. Targeted analysis: Use tags to generate sales reports by segment or product characteristic.

  8. Maintenance: Periodically review your tags to remove obsolete ones and maintain relevance.

Create a new tag

Creates a new tag for organizing products

Authorizations:
apiKey
Request Body schema: application/json
required

Tag creation payload

name
required
string [ 1 .. 100 ] characters

Name of the tag used for product organization and filtering (e.g., "Premium", "Seasonal", "New Arrival")

Responses

Request samples

Content type
application/json
{
  • "name": "Premium"
}

Response samples

Content type
application/json
{
  • "id": "123e4567-e89b-12d3-a456-426614174000",
  • "name": "Premium",
  • "test": false,
  • "created_at": "2023-01-01T00:00:00Z",
  • "updated_at": "2023-01-01T00:00:00Z",
  • "catalog_id": "456e7890-e89b-12d3-a456-426614174001"
}

Patch a tag

Updates specific fields of an existing tag.

Authorizations:
apiKey
Request Body schema: application/json
required

Tag patch payload

id
required
string

Tag unique identifier

name
string

Tag name

Responses

Request samples

Content type
application/json
{
  • "id": "tag_123",
  • "name": "Updated Tag"
}

Response samples

Content type
application/json
{
  • "id": "123e4567-e89b-12d3-a456-426614174000",
  • "name": "Premium",
  • "test": false,
  • "created_at": "2023-01-01T00:00:00Z",
  • "updated_at": "2023-01-01T00:00:00Z",
  • "catalog_id": "456e7890-e89b-12d3-a456-426614174001"
}

Get tag by ID

Retrieves a tag by its unique identifier

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: 123e4567-e89b-12d3-a456-426614174000

Unique identifier of the tag

Responses

Response samples

Content type
application/json
{
  • "id": "123e4567-e89b-12d3-a456-426614174000",
  • "name": "Premium",
  • "test": false,
  • "created_at": "2023-01-01T00:00:00Z",
  • "updated_at": "2023-01-01T00:00:00Z",
  • "catalog_id": "456e7890-e89b-12d3-a456-426614174001"
}

Delete tag

Deletes a tag by its unique identifier

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: 123e4567-e89b-12d3-a456-426614174000

Unique identifier of the tag

Responses

Response samples

Content type
application/json
{
  • "id": "123e4567-e89b-12d3-a456-426614174000",
  • "name": "Premium",
  • "test": false,
  • "created_at": "2023-01-01T00:00:00Z",
  • "updated_at": "2023-01-01T00:00:00Z",
  • "catalog_id": "456e7890-e89b-12d3-a456-426614174001"
}

Request tags

Requests a list of tags with optional filtering and sorting.

Authorizations:
apiKey
Request Body schema: application/json
required

Tag request payload

filter
any

Filter criteria for tags with support for and/or/not operators

object

Sort criteria for tags

limit
integer [ 1 .. 100 ]

Maximum number of tags to return

next_token
string

Token for pagination

Responses

Request samples

Content type
application/json
{
  • "filter": {
    },
  • "sort": {
    },
  • "limit": 20,
  • "next_token": "eyJpZCI6IjEyMyJ9"
}

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "next_token": "xxx.yyy.zzz",
  • "total": 10
}

Tax

Taxes define the tax rates applied to products and packs in your cash register system. Each product must be associated with a tax rate for correct calculation of tax-inclusive amounts and generation of tax reports.

Warning: Taxes belong to either the test or production environment based on the API key used to create them — they are not visible across modes. Rates are expressed in basis points (1 basis point = 0.01%), so 1900 = 19% VAT.

Best practices

  1. Standard rates: Create the common tax rates for your country (VAT 20%, 10%, 5.5%, etc.) from initialization.

  2. Explicit naming: Use clear names like "VAT 20%", "Reduced VAT 5.5%" to facilitate selection.

  3. Basis points: Follow the basis point format (2000 for 20%, 550 for 5.5%) to avoid calculation errors.

  4. Tax compliance: Verify conformity of your rates with current local tax regulations.

  5. Regulatory changes: Create new rates rather than modifying existing ones during regulatory changes.

  6. Archiving: Keep old tax rates even when obsolete for sales history and accounting.

  7. Validation: Test your tax calculations with reference amounts before production deployment.

Edge Cases & Constraints

Deletion of tax associated with a product

⚠️ Blocking case: It is impossible to delete a tax rate that is currently associated with one or more products.

Behavior:

  • Error code: 403 Forbidden
  • Message: The system refuses deletion to preserve data integrity

Solution:

  1. Identify all products using this tax rate
  2. Reassign these products to another valid tax rate
  3. Once all products are migrated, deletion becomes possible

Best practice: Before deleting a tax rate, use the search API to verify that no product references it.

Create a new tax

Creates a new tax rate for products

Authorizations:
apiKey
Request Body schema: application/json
required
rate
required
number [ 0 .. 10000 ]

Tax rate in basis points where 1 basis point = 0.01% (e.g., 1900 for 19% VAT, 2000 for 20% sales tax)

Responses

Request samples

Content type
application/json
{
  • "rate": 1900
}

Response samples

Content type
application/json
{
  • "rate": 1900
}

Patch a tax

Updates specific fields of an existing tax.

Authorizations:
apiKey
Request Body schema: application/json
required

Tax patch payload

id
required
string

Tax unique identifier

rate
number >= 0

Tax rate (in basis points, e.g. 2000 = 20%)

Responses

Request samples

Content type
application/json
{
  • "id": "tax_123",
  • "rate": 2100
}

Response samples

Content type
application/json
{
  • "id": "123e4567-e89b-12d3-a456-426614174000",
  • "rate": 1900,
  • "test": false,
  • "created_at": "2023-01-01T00:00:00Z",
  • "updated_at": "2023-01-01T00:00:00Z",
  • "catalog_id": "456e7890-e89b-12d3-a456-426614174001"
}

Get tax by ID

Retrieves a tax by its unique identifier

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: 123e4567-e89b-12d3-a456-426614174000

Unique identifier of the tax rate configuration

Responses

Response samples

Content type
application/json
{
  • "id": "123e4567-e89b-12d3-a456-426614174000",
  • "rate": 1900,
  • "test": false,
  • "created_at": "2023-01-01T00:00:00Z",
  • "updated_at": "2023-01-01T00:00:00Z",
  • "catalog_id": "456e7890-e89b-12d3-a456-426614174001"
}

Delete tax

Deletes a tax by its unique identifier

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: 123e4567-e89b-12d3-a456-426614174000

Unique identifier of the tax rate configuration

Responses

Response samples

Content type
application/json
{
  • "id": "123e4567-e89b-12d3-a456-426614174000",
  • "rate": 1900,
  • "test": false,
  • "created_at": "2023-01-01T00:00:00Z",
  • "updated_at": "2023-01-01T00:00:00Z",
  • "catalog_id": "456e7890-e89b-12d3-a456-426614174001"
}

Cashbook

Cashbooks represent work sessions at a point of sale, from opening to closing. They group all sales and payments from a period, enable fund control, and ensure accounting traceability of operations.

Warning: Cashbooks belong to either the test or production environment based on the API key used to create them — they are not visible across modes. A cashbook can only be closed after reconciliation of expected and actual amounts.

Best practices

  1. Single session: Only one open cashbook per point of sale to avoid accounting conflicts.

  2. Controlled opening: Precisely document the initial cash drawer amount by payment method.

  3. Tracked movements: Record all cash additions/withdrawals with explicit reasons.

  4. Rigorous closing: Verify concordance between expected and counted amounts before closing.

  5. Legal archiving: Maintain cashbook history according to current accounting obligations.

  6. Bank reconciliation: Use cashbook data to facilitate daily bank reconciliations.

Create a new cashbook

Creates a new cashbook with the provided data.

Authorizations:
apiKey
Request Body schema: application/json
required

Cashbook creation payload

shop_id
required
string

Unique identifier of the shop where this cashbook operates

source_id
required
string

Identifier of the POS terminal or system creating this cashbook

source_name
required
string

Human-readable name of the POS terminal or system for identification

number
required
number

Sequential number of this cashbook session for the day or period

state
required
string
Enum: "OPEN" "CLOSED"

Initial state of the cashbook - typically OPEN when creating a new session

total
number

Initial total sales amount for this cashbook session in cents

total_tax_free
number

Initial total amount excluding taxes for this session in cents

min_sale_number
number

Starting minimum sale number for this cashbook session

max_sale_number
number

Starting maximum sale number for this cashbook session

sales_count
number

Initial count of sales for this session

min_payment_number
number

Starting minimum payment number for this cashbook session

max_payment_number
number

Starting maximum payment number for this cashbook session

payments_count
number

Initial count of payments for this session

opened_at
required
string

ISO 8601 timestamp when the cashbook session is opened

closed_at
string

ISO 8601 timestamp when the cashbook session will be closed (optional at creation)

note
string

Optional notes or comments about this cashbook session for reference

opening_seller_id
string

Unique identifier of the seller opening this cashbook

closing_seller_id
string

Unique identifier of the seller who will close this cashbook (optional at creation)

total_expected
number

Expected total cash amount that should be in the drawer at closing in cents

total_difference
number

Difference between expected and actual cash amounts in cents (calculated at closing)

Array of objects

Initial cash movements (additions or removals) for this cashbook session

Array of objects

Starting cash amounts by payment method at the beginning of the cashbook session

Array of objects

Final cash amounts by payment method at the end of the cashbook session (optional at creation)

Array of objects

Additional custom data fields specific to your business needs for cashbook management

Responses

Request samples

Content type
application/json
{
  • "shop_id": "shop_ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "source_id": "pos_terminal_001",
  • "source_name": "Main Register",
  • "number": 1,
  • "state": "OPEN",
  • "total": 0,
  • "total_tax_free": 0,
  • "min_sale_number": 1001,
  • "max_sale_number": 1000,
  • "sales_count": 0,
  • "min_payment_number": 2001,
  • "max_payment_number": 2000,
  • "payments_count": 0,
  • "opened_at": "2023-01-01T09:00:00Z",
  • "closed_at": "2023-01-01T18:00:00Z",
  • "note": "Starting new shift",
  • "opening_seller_id": "seller_ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "closing_seller_id": "seller_ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "total_expected": 15000,
  • "total_difference": 0,
  • "movements": [
    ],
  • "opening_cash_fund": [
    ],
  • "closing_cash_fund": [
    ],
  • "custom_fields": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "cb_ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "original_id": "CB-2023-001",
  • "updated_at": "2023-01-01T18:00:00Z",
  • "created_at": "2023-01-01T09:00:00Z",
  • "deprecated": false,
  • "company_id": "ba18760a-0442-4be9-8c15-01b8409ea236",
  • "shop_id": "shop_ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": false,
  • "source_id": "pos_terminal_001",
  • "source_name": "Main Register",
  • "number": 1,
  • "state": "OPEN",
  • "total": 45670,
  • "total_tax_free": 38000,
  • "min_sale_number": 1001,
  • "max_sale_number": 1045,
  • "sales_count": 45,
  • "min_payment_number": 2001,
  • "max_payment_number": 2087,
  • "payments_count": 87,
  • "opened_at": "2023-01-01T09:00:00Z",
  • "closed_at": "2023-01-01T18:00:00Z",
  • "opening_seller_id": "seller_ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "closing_seller_id": "seller_ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "note": "Busy Saturday shift",
  • "total_expected": 45000,
  • "total_difference": 670,
  • "opening_seller": {
    },
  • "closing_seller": {
    },
  • "movements": [
    ],
  • "opening_cash_fund": [
    ],
  • "closing_cash_fund": [
    ],
  • "custom_fields": [
    ],
  • "stats": {
    }
}

Get a cashbook by ID

Retrieves a cashbook by its unique identifier.

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: cb_ba19240a-0442-4bd9-8c15-01b8409e1346

Cashbook ID

Responses

Response samples

Content type
application/json
{
  • "id": "cb_ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "original_id": "CB-2023-001",
  • "updated_at": "2023-01-01T18:00:00Z",
  • "created_at": "2023-01-01T09:00:00Z",
  • "deprecated": false,
  • "company_id": "ba18760a-0442-4be9-8c15-01b8409ea236",
  • "shop_id": "shop_ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": false,
  • "source_id": "pos_terminal_001",
  • "source_name": "Main Register",
  • "number": 1,
  • "state": "OPEN",
  • "total": 45670,
  • "total_tax_free": 38000,
  • "min_sale_number": 1001,
  • "max_sale_number": 1045,
  • "sales_count": 45,
  • "min_payment_number": 2001,
  • "max_payment_number": 2087,
  • "payments_count": 87,
  • "opened_at": "2023-01-01T09:00:00Z",
  • "closed_at": "2023-01-01T18:00:00Z",
  • "opening_seller_id": "seller_ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "closing_seller_id": "seller_ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "note": "Busy Saturday shift",
  • "total_expected": 45000,
  • "total_difference": 670,
  • "opening_seller": {
    },
  • "closing_seller": {
    },
  • "movements": [
    ],
  • "opening_cash_fund": [
    ],
  • "closing_cash_fund": [
    ],
  • "custom_fields": [
    ],
  • "stats": {
    }
}

Update a cashbook

Updates an existing cashbook with the provided data.

Authorizations:
apiKey
path Parameters
id
required
string <uuid>

Cashbook ID

Request Body schema: application/json
required

Cashbook update payload

id
required
string <uuid>

Unique identifier of the cashbook

state
string
Enum: "OPEN" "CLOSED"

Updated state of the cashbook - use CLOSED to finalize the session

total
number

Updated total sales amount processed during this cashbook session in cents

total_tax_free
number

Updated total amount excluding taxes processed during this session in cents

min_sale_number
number

Updated lowest sale number recorded in this cashbook session

max_sale_number
number

Updated highest sale number recorded in this cashbook session

sales_count
number

Updated total number of sales processed in this session

min_payment_number
number

Updated lowest payment number recorded in this cashbook session

max_payment_number
number

Updated highest payment number recorded in this cashbook session

payments_count
number

Updated total number of payments processed in this session

closed_at
string

ISO 8601 timestamp when the cashbook session was closed

note
string

Updated notes or comments about this cashbook session for reference

closing_seller_id
string

Unique identifier of the seller closing this cashbook

total_expected
number

Updated expected total cash amount that should be in the drawer at closing in cents

total_difference
number

Updated difference between expected and actual cash amounts at closing in cents (positive = surplus, negative = shortage)

Array of objects

Updated list of cash movements (additions or removals) during this cashbook session

Array of objects

Updated final cash amounts by payment method at the end of the cashbook session

Array of objects

Updated custom data fields specific to your business needs for cashbook management

Responses

Request samples

Content type
application/json
{
  • "id": "0dd7eeee-3f87-4bd7-a950-b1f1b7fb8726",
  • "state": "CLOSED",
  • "total": 45670,
  • "total_tax_free": 38000,
  • "min_sale_number": 1001,
  • "max_sale_number": 1045,
  • "sales_count": 45,
  • "min_payment_number": 2001,
  • "max_payment_number": 2087,
  • "payments_count": 87,
  • "closed_at": "2023-01-01T18:00:00Z",
  • "note": "Successful busy day shift",
  • "closing_seller_id": "seller_ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "total_expected": 45000,
  • "total_difference": 670,
  • "movements": [
    ],
  • "closing_cash_fund": [
    ],
  • "custom_fields": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "cb_ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "original_id": "CB-2023-001",
  • "updated_at": "2023-01-01T18:00:00Z",
  • "created_at": "2023-01-01T09:00:00Z",
  • "deprecated": false,
  • "company_id": "ba18760a-0442-4be9-8c15-01b8409ea236",
  • "shop_id": "shop_ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": false,
  • "source_id": "pos_terminal_001",
  • "source_name": "Main Register",
  • "number": 1,
  • "state": "OPEN",
  • "total": 45670,
  • "total_tax_free": 38000,
  • "min_sale_number": 1001,
  • "max_sale_number": 1045,
  • "sales_count": 45,
  • "min_payment_number": 2001,
  • "max_payment_number": 2087,
  • "payments_count": 87,
  • "opened_at": "2023-01-01T09:00:00Z",
  • "closed_at": "2023-01-01T18:00:00Z",
  • "opening_seller_id": "seller_ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "closing_seller_id": "seller_ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "note": "Busy Saturday shift",
  • "total_expected": 45000,
  • "total_difference": 670,
  • "opening_seller": {
    },
  • "closing_seller": {
    },
  • "movements": [
    ],
  • "opening_cash_fund": [
    ],
  • "closing_cash_fund": [
    ],
  • "custom_fields": [
    ],
  • "stats": {
    }
}

Delete a cashbook

Deletes a cashbook by its unique identifier.

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: cb_ba19240a-0442-4bd9-8c15-01b8409e1346

Cashbook ID

Responses

Response samples

Content type
application/json
{
  • "id": "cb_ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "success": true
}

Request cashbooks with filtering

Retrieves a list of cashbooks based on the provided filters.

Authorizations:
apiKey
Request Body schema: application/json
required

Cashbook request payload with filters

object

Filter cashbooks by creation date range using ISO 8601 timestamps

object

Filter cashbooks by last update date range using ISO 8601 timestamps

object

Filter cashbooks by opening date range using ISO 8601 timestamps

object

Filter cashbooks by closing date range using ISO 8601 timestamps

object

Filter cashbooks by POS terminal or system name using string operations

object

Filter cashbooks by notes content using string search operations

object

Filter cashbooks by sequential number using numeric comparisons

object

Filter cashbooks by total sales amount range in cents using numeric comparisons

object

Filter cashbooks by tax-free total amount range in cents using numeric comparisons

object

Filter cashbooks by minimum sale number range using numeric comparisons

object

Filter cashbooks by maximum sale number range using numeric comparisons

object

Filter cashbooks by sales count range using numeric comparisons

object

Filter cashbooks by minimum payment number range using numeric comparisons

object

Filter cashbooks by maximum payment number range using numeric comparisons

object

Filter cashbooks by payments count range using numeric comparisons

object

Filter cashbooks by expected total amount range in cents using numeric comparisons

object

Filter cashbooks by cash difference range in cents using numeric comparisons (positive = surplus, negative = shortage)

object

Filter cashbooks by state (OPEN for active sessions, CLOSED for completed sessions)

object

Filter cashbooks by shop identifier using exact match or list operations

object

Filter cashbooks by POS terminal or system identifier using exact match or list operations

object

Filter cashbooks by opening seller identifier using exact match or list operations

object

Filter cashbooks by closing seller identifier using exact match or list operations

object

Sort criteria for cashbooks by field and direction (ascending or descending)

limit
number [ 1 .. 100 ]
Default: 20

Maximum number of cashbooks to return per page (1-100)

next_token
string

Pagination token for retrieving the next page of results

Responses

Request samples

Content type
application/json
{
  • "created_at": {
    },
  • "updated_at": {
    },
  • "opened_at": {
    },
  • "closed_at": {
    },
  • "source_name": {
    },
  • "note": {
    },
  • "number": {
    },
  • "total": {
    },
  • "total_tax_free": {
    },
  • "min_sale_number": {
    },
  • "max_sale_number": {
    },
  • "sales_count": {
    },
  • "min_payment_number": {
    },
  • "max_payment_number": {
    },
  • "payments_count": {
    },
  • "total_expected": {
    },
  • "total_difference": {
    },
  • "state": {
    },
  • "shop_id": {
    },
  • "source_id": {
    },
  • "opening_seller_id": {
    },
  • "closing_seller_id": {
    },
  • "sort": {
    },
  • "limit": 20,
  • "next_token": "eyJpZCI6IjEyMyJ9"
}

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "next_token": "eyJpZCI6IjEyMyJ9",
  • "total": 25
}

Payment

Payments record financial transactions associated with sales in your cash register system. They allow tracking collections by payment method, managing refunds, and ensuring accounting reconciliation.

Warning: Payments belong to either the test or production environment based on the API key used to create them — they are not visible across modes. A payment always belongs to a sale and uses a defined payment method.

Best practices

  1. Complete traceability: Record all payments with their method, amount, and precise timestamp.

  2. Consistent links: Ensure each payment is correctly linked to its parent sale.

  3. Standardized methods: Use consistent payment method identifiers (cash, credit card, check, etc.).

  4. Error management: Document failed payments with their reasons for customer service.

  5. Daily reconciliation: Verify concordance between recorded payments and bank deposits.

Get payment by ID

Fetches a payment by its unique identifier.

Authorizations:
apiKey
path Parameters
id
required
string <uuid>
Example: a1b2c3d4-e5f6-7890-abcd-ef1234567890

Payment ID

Responses

Response samples

Content type
application/json
{
  • "id": "pay_123456789",
  • "original_id": "orig_987654321",
  • "updated_at": "2024-01-02T14:30:00Z",
  • "created_at": "2024-01-01T10:00:00Z",
  • "deprecated": false,
  • "company_id": "comp_abc123def456",
  • "shop_id": "shop_xyz789uvw012",
  • "test": false,
  • "sale_id": "sale_456789abc123",
  • "source_id": "src_pos_terminal_01",
  • "source_name": "POS Terminal #1",
  • "state": "VALID",
  • "type": "IN",
  • "date": "2024-01-01T10:00:00Z",
  • "number": 1001,
  • "payment_method_id": "pm_cash_001",
  • "payment_method_name": "Cash",
  • "payment_method_type": "CASH",
  • "source_payment_id": "sp_external_123456",
  • "customer_movement_id": "cm_abc123def456",
  • "cashbook_id": "cb_main_register",
  • "amount": 1200,
  • "total_tax_free": 1000,
  • "total_tax": 200,
  • "integration_payment_id": "stripe_pi_1234567890",
  • "integration_refund_id": "stripe_re_0987654321",
  • "taxes": [
    ]
}

Request payments with filters

Retrieves a list of payments based on specified filters and sorting criteria.

Authorizations:
apiKey
Request Body schema: application/json
required

Payment request payload with filters and pagination options

object

Filter payments by creation date range using comparison operators (gte, lte, gt, lt, eq)

object

Filter payments by last update date range using comparison operators

object

Filter payments by processing date range using comparison operators

object

Filter payments by source name using string comparison operators (contains, eq, startsWith, endsWith)

object

Filter payments by sequential number using numeric comparison operators

object

Filter payments by amount in cents using numeric comparison operators

object

Filter payments by tax-free amount in cents using numeric comparison operators

object

Filter payments by tax amount in cents using numeric comparison operators

object

Filter payments by processing state using enum comparison operators (in, eq)

object

Filter payments by transaction type using enum comparison operators

object

Filter payments by payment method type using enum comparison operators

object

Filter payments by shop identifier using ID comparison operators

object

Filter payments by sale identifier using ID comparison operators

object

Filter payments by source identifier using ID comparison operators

object

Filter payments by payment method identifier using ID comparison operators

object

Filter payments by source payment identifier using ID comparison operators

object

Filter payments by customer movement identifier using ID comparison operators

object

Filter payments by cashbook identifier using ID comparison operators

object

Filter payments by external integration payment identifier using ID comparison operators

object

Filter payments by external integration refund identifier using ID comparison operators

object

Sorting configuration to order the payment results

limit
number [ 1 .. 100 ]
Default: 20

Maximum number of payments to return per page (1-100)

next_token
string

Pagination token for retrieving the next page of results

Responses

Request samples

Content type
application/json
{
  • "created_at": {
    },
  • "updated_at": {
    },
  • "date": {
    },
  • "source_name": {
    },
  • "number": {
    },
  • "amount": {
    },
  • "total_tax_free": {
    },
  • "total_tax": {
    },
  • "state": {
    },
  • "type": {
    },
  • "payment_method_type": {
    },
  • "shop_id": {
    },
  • "sale_id": {
    },
  • "source_id": {
    },
  • "payment_method_id": {
    },
  • "source_payment_id": {
    },
  • "customer_movement_id": {
    },
  • "cashbook_id": {
    },
  • "integration_payment_id": {
    },
  • "integration_refund_id": {
    },
  • "sort": [
    ],
  • "limit": 20,
  • "next_token": "eyJpZCI6IjEyMyJ9"
}

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "next_token": "eyJpZCI6IjEyNCJ9",
  • "total": 50
}

Sale

Sales represent complete commercial transactions in your cash register system. They include products/packs sold, discounts applied, payments made, and all details necessary for accounting and commercial tracking.

Warning: Sales belong to either the test or production environment based on the API key used to create them — they are not visible across modes. A sale can have multiple states (open, closed, refunded) and distinct payment statuses.

Best practices

  1. Consistent states: Properly manage state transitions (open → closed → paid) according to your workflow.

  2. Explanatory notes: Use the note field to document particular circumstances of sale.

  3. Legal archiving: Maintain sales history according to legal obligations in your jurisdiction.

Create a sale

Creates a new sale in the desired company.

Authorizations:
apiKey
Request Body schema: application/json
required

Sale creation payload

original_id
string

Original sale identifier if this is a copy or migration from another system - used for data traceability and audit purposes

shop_id
required
string

Unique identifier of the shop where the sale is taking place - determines inventory, pricing, and tax rules

source_id
required
string

Unique identifier of the source system or device creating the sale - used for tracking transaction origins

source_name
required
string

Human-readable name of the source system or device - helps staff identify which terminal processed the sale

cashbook_id
string

Unique identifier of the cashbook associated with this sale - determines cash flow tracking and reporting

name
string

Custom name or description for the sale transaction - useful for restaurant table management or special orders

number
number

Sequential number assigned to the sale for reference - used for receipt numbering and record keeping

state
required
string
Enum: "OPEN" "AVAILABLE" "CLOSED" "DELETED"

Current state of the sale (OPEN for in-progress, AVAILABLE for ready to pay, CLOSED for completed, DELETED for cancelled)

refund_status
required
string
Enum: "NONE" "PARTIAL" "FULL"

Status of refund processing (NONE for no refunds, PARTIAL for some items refunded, FULL for completely refunded)

refunded_status
required
string
Enum: "NONE" "PARTIAL" "FULL"

Status indicating if this sale has been refunded (NONE for original sale, PARTIAL/FULL for refunds of other sales)

payment_status
required
string
Enum: "NONE" "PARTIAL" "FULL"

Status of payment processing (NONE for unpaid, PARTIAL for partially paid, FULL for completely paid)

note
string

Additional notes or comments about the sale - used for special instructions or customer preferences

target_id
string

Identifier of the target sale for refund or return operations - links this refund to the original sale

opened_at
required
string

ISO 8601 timestamp when the sale was opened - marks the beginning of the transaction

closed_at
string

ISO 8601 timestamp when the sale was closed - marks the completion of the transaction

pending_at
string

ISO 8601 timestamp when the sale was set to pending status - used for payment processing workflows

customer_id
string

Unique identifier of the customer associated with this sale - enables loyalty programs and customer history

seller_id
string

Unique identifier of the seller or employee handling the sale - used for commission tracking and performance analytics

Array of objects

List of sale line items containing products, quantities, and prices - represents the actual items being purchased

Array of objects

List of discounts applied to the sale - includes percentage discounts, fixed amount discounts, and promotional codes

Array of objects

List of payments made for this sale - supports multiple payment methods like cash, card, and digital payments

total
required
number

Total amount of the sale including all taxes and discounts - this is the final amount the customer pays

total_discount
required
number

Total discount amount applied to the sale - sum of all discounts before tax calculations

total_tax_free
required
number

Total amount of the sale excluding taxes - used for tax reporting and accounting purposes

total_tax
required
number

Total tax amount applied to the sale - sum of all taxes calculated on the sale items

total_rest
required
number

Remaining amount to be paid for the sale - becomes 0 when sale is fully paid

Responses

Request samples

Content type
application/json
{
  • "original_id": "SALE-001",
  • "shop_id": "123e4567-e89b-12d3-a456-426614174000",
  • "source_id": "123e4567-e89b-12d3-a456-426614174001",
  • "source_name": "POS Terminal 1",
  • "cashbook_id": "123e4567-e89b-12d3-a456-426614174002",
  • "name": "Table 5 - Lunch Service",
  • "number": 1001,
  • "state": "OPEN",
  • "refund_status": "NONE",
  • "refunded_status": "NONE",
  • "payment_status": "NONE",
  • "note": "Customer requested extra napkins",
  • "target_id": "123e4567-e89b-12d3-a456-426614174003",
  • "opened_at": "2024-01-15T10:00:00Z",
  • "closed_at": "2024-01-15T10:30:00Z",
  • "pending_at": "2024-01-15T10:25:00Z",
  • "customer_id": "123e4567-e89b-12d3-a456-426614174000",
  • "seller_id": "123e4567-e89b-12d3-a456-426614174000",
  • "lines": [
    ],
  • "discounts": [
    ],
  • "payments": [
    ],
  • "total": 125.5,
  • "total_discount": 12.5,
  • "total_tax_free": 104.17,
  • "total_tax": 21.33,
  • "total_rest": 0
}

Response samples

Content type
application/json
{
  • "id": "123e4567-e89b-12d3-a456-426614174000",
  • "original_id": "SALE-001",
  • "updated_at": "2024-01-15T14:30:00Z",
  • "created_at": "2024-01-15T10:00:00Z",
  • "deprecated": false,
  • "company_id": "456e7890-e89b-12d3-a456-426614174001",
  • "shop_id": "123e4567-e89b-12d3-a456-426614174000",
  • "test": false,
  • "source_id": "123e4567-e89b-12d3-a456-426614174001",
  • "source_name": "POS Terminal 1",
  • "cashbook_id": "123e4567-e89b-12d3-a456-426614174002",
  • "name": "Table 5 - Lunch Service",
  • "number": 1001,
  • "state": "OPEN",
  • "refund_status": "NONE",
  • "refunded_status": "NONE",
  • "payment_status": "NONE",
  • "note": "Customer requested extra napkins",
  • "target_id": "123e4567-e89b-12d3-a456-426614174003",
  • "opened_at": "2024-01-15T10:00:00Z",
  • "closed_at": "2024-01-15T10:30:00Z",
  • "pending_at": "2024-01-15T10:25:00Z",
  • "customer_id": "123e4567-e89b-12d3-a456-426614174004",
  • "seller_id": "123e4567-e89b-12d3-a456-426614174005",
  • "total": 125.5,
  • "total_discount": 12.5,
  • "total_tax_free": 104.17,
  • "total_tax": 21.33,
  • "total_rest": 0,
  • "cashbook": {
    },
  • "customer": {
    },
  • "seller": {
    },
  • "target_sale": {
    },
  • "refund_sales": {
    },
  • "lines": [
    ],
  • "discounts": [
    ],
  • "payments": [
    ],
  • "stats": {
    }
}

Update a sale

Updates an existing sale with the provided data.

Authorizations:
apiKey
Request Body schema: application/json
required

Sale update payload

id
required
string (Sale Identifier)

Unique identifier of the sale to update - this field is required to specify which sale transaction should be modified

source_id
string (Source System Identifier)

Unique identifier of the source system or device - update to change which system is credited with processing the sale

source_name
string (Source System Name)

Human-readable name of the source system or device - useful for updating terminal assignments or corrections

cashbook_id
string (Cashbook Identifier)

Unique identifier of the cashbook to associate with this sale - change to move sale between cashbooks for accounting purposes

name
string (Sale Name)

Custom name or description for the sale transaction - update for table reassignments or order clarifications

number
number (Sale Number)

Sequential number assigned to the sale for reference - update for receipt numbering corrections or adjustments

state
string (Sale State)
Enum: "OPEN" "AVAILABLE" "CLOSED" "DELETED"

Current state of the sale transaction - update to progress sale through workflow (OPEN → AVAILABLE → CLOSED) or cancel (DELETED)

refund_status
string (Refund Processing Status)
Enum: "NONE" "PARTIAL" "FULL"

Status of refund processing for this sale - update when processing refunds (NONE → PARTIAL → FULL)

refunded_status
string (Refunded Transaction Status)
Enum: "NONE" "PARTIAL" "FULL"

Status indicating if this sale has been refunded by other transactions - system typically manages this automatically

payment_status
string (Payment Processing Status)
Enum: "NONE" "PARTIAL" "FULL"

Status of payment processing for this sale - update when payments are processed (NONE → PARTIAL → FULL)

note
string (Sale Notes)

Additional notes or comments about the sale - update to add special instructions, customer preferences, or staff communications

target_id
string (Target Sale Identifier)

Identifier of the target sale for refund operations - set when converting a sale to a refund or linking refund transactions

closed_at
string (Sale Closed Timestamp)

ISO 8601 timestamp when the sale was closed - set when finalizing the transaction and completing payment

pending_at
string (Sale Pending Timestamp)

ISO 8601 timestamp when the sale was set to pending status - set during payment processing workflows or approval processes

customer_id
string (Customer Identifier)

Unique identifier of the customer - update to assign or change customer association for loyalty programs and history tracking

seller_id
string (Seller Identifier)

Unique identifier of the seller or employee - update to reassign commission credit or correct staff assignments

Array of objects (Sale Line Items)

List of sale line items containing products, quantities, and prices - update to add, remove, or modify items in the sale

Array of objects (Applied Discounts)

List of discounts applied to the sale - update to add promotional codes, loyalty discounts, or remove invalid discounts

Array of objects (Payment Transactions)

List of payments made for this sale - update to process new payments, add payment methods, or handle refunds

total
number (Sale Total Amount)

Total amount of the sale including all taxes and discounts - typically calculated automatically but can be overridden for adjustments

total_discount
number (Total Discount Amount)

Total discount amount applied to the sale - update when applying additional discounts or correcting discount calculations

total_tax_free
number (Tax-Free Total Amount)

Total amount of the sale excluding taxes - typically calculated automatically for tax reporting compliance

total_tax
number (Total Tax Amount)

Total tax amount applied to the sale - update when tax rates change or tax exemptions are applied

total_rest
number (Remaining Amount)

Remaining amount to be paid for the sale - update when processing partial payments or adjusting payment amounts

Responses

Request samples

Content type
application/json
{
  • "id": "123e4567-e89b-12d3-a456-426614174000",
  • "source_id": "123e4567-e89b-12d3-a456-426614174001",
  • "source_name": "POS Terminal 2",
  • "cashbook_id": "123e4567-e89b-12d3-a456-426614174002",
  • "name": "Table 7 - Dinner Service",
  • "number": 1002,
  • "state": "CLOSED",
  • "refund_status": "PARTIAL",
  • "refunded_status": "NONE",
  • "payment_status": "FULL",
  • "note": "Customer paid with cash - change given",
  • "target_id": "123e4567-e89b-12d3-a456-426614174003",
  • "closed_at": "2024-01-15T11:00:00Z",
  • "pending_at": "2024-01-15T10:55:00Z",
  • "customer_id": "123e4567-e89b-12d3-a456-426614174004",
  • "seller_id": "123e4567-e89b-12d3-a456-426614174005",
  • "lines": [
    ],
  • "discounts": [
    ],
  • "payments": [
    ],
  • "total": 135.75,
  • "total_discount": 15.25,
  • "total_tax_free": 113.13,
  • "total_tax": 22.62,
  • "total_rest": 0
}

Response samples

Content type
application/json
{
  • "id": "123e4567-e89b-12d3-a456-426614174000",
  • "original_id": "SALE-001",
  • "updated_at": "2024-01-15T14:30:00Z",
  • "created_at": "2024-01-15T10:00:00Z",
  • "deprecated": false,
  • "company_id": "456e7890-e89b-12d3-a456-426614174001",
  • "shop_id": "123e4567-e89b-12d3-a456-426614174000",
  • "test": false,
  • "source_id": "123e4567-e89b-12d3-a456-426614174001",
  • "source_name": "POS Terminal 1",
  • "cashbook_id": "123e4567-e89b-12d3-a456-426614174002",
  • "name": "Table 5 - Lunch Service",
  • "number": 1001,
  • "state": "OPEN",
  • "refund_status": "NONE",
  • "refunded_status": "NONE",
  • "payment_status": "NONE",
  • "note": "Customer requested extra napkins",
  • "target_id": "123e4567-e89b-12d3-a456-426614174003",
  • "opened_at": "2024-01-15T10:00:00Z",
  • "closed_at": "2024-01-15T10:30:00Z",
  • "pending_at": "2024-01-15T10:25:00Z",
  • "customer_id": "123e4567-e89b-12d3-a456-426614174004",
  • "seller_id": "123e4567-e89b-12d3-a456-426614174005",
  • "total": 125.5,
  • "total_discount": 12.5,
  • "total_tax_free": 104.17,
  • "total_tax": 21.33,
  • "total_rest": 0,
  • "cashbook": {
    },
  • "customer": {
    },
  • "seller": {
    },
  • "target_sale": {
    },
  • "refund_sales": {
    },
  • "lines": [
    ],
  • "discounts": [
    ],
  • "payments": [
    ],
  • "stats": {
    }
}

Get a sale by ID

Retrieves a sale by its unique identifier.

Authorizations:
apiKey
path Parameters
id
required
string (Sale Identifier)
Example: 123e4567-e89b-12d3-a456-426614174000

Unique identifier of the sale to perform operations on - used in URL path parameters to specify which sale to retrieve, update, or delete

Responses

Response samples

Content type
application/json
{
  • "id": "123e4567-e89b-12d3-a456-426614174000",
  • "original_id": "SALE-001",
  • "updated_at": "2024-01-15T14:30:00Z",
  • "created_at": "2024-01-15T10:00:00Z",
  • "deprecated": false,
  • "company_id": "456e7890-e89b-12d3-a456-426614174001",
  • "shop_id": "123e4567-e89b-12d3-a456-426614174000",
  • "test": false,
  • "source_id": "123e4567-e89b-12d3-a456-426614174001",
  • "source_name": "POS Terminal 1",
  • "cashbook_id": "123e4567-e89b-12d3-a456-426614174002",
  • "name": "Table 5 - Lunch Service",
  • "number": 1001,
  • "state": "OPEN",
  • "refund_status": "NONE",
  • "refunded_status": "NONE",
  • "payment_status": "NONE",
  • "note": "Customer requested extra napkins",
  • "target_id": "123e4567-e89b-12d3-a456-426614174003",
  • "opened_at": "2024-01-15T10:00:00Z",
  • "closed_at": "2024-01-15T10:30:00Z",
  • "pending_at": "2024-01-15T10:25:00Z",
  • "customer_id": "123e4567-e89b-12d3-a456-426614174004",
  • "seller_id": "123e4567-e89b-12d3-a456-426614174005",
  • "total": 125.5,
  • "total_discount": 12.5,
  • "total_tax_free": 104.17,
  • "total_tax": 21.33,
  • "total_rest": 0,
  • "cashbook": {
    },
  • "customer": {
    },
  • "seller": {
    },
  • "target_sale": {
    },
  • "refund_sales": {
    },
  • "lines": [
    ],
  • "discounts": [
    ],
  • "payments": [
    ],
  • "stats": {
    }
}

Request sales with filtering

Retrieves a list of sales based on the provided filters.

Authorizations:
apiKey
Request Body schema: application/json
required

Sale request payload with filters

object (Filter Criteria)

Advanced filtering options for sale queries - supports filtering by timestamps, financial amounts, identifiers, states, and related entities to narrow down search results

object (Sort Configuration)

List of sorting rules applied to query results - supports multiple sort criteria with field names and directions for complex result ordering

limit
integer (Result Limit) ( 0 .. 100 ]

Maximum number of sales to return in a single response - must be a positive integer between 1 and 100 for performance and pagination efficiency

next_token
string (Pagination Token)

Token for retrieving the next page of results - obtained from previous query responses to continue pagination through large result sets

Responses

Request samples

Content type
application/json
{
  • "filter": {
    },
  • "sort": [
    ],
  • "limit": 20,
  • "next_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "next_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  • "total": 1523
}

Inventorymovement

Create an inventory movement

Creates a new inventory movement operation in the specified catalog.

Authorizations:
apiKey
Request Body schema: application/json
required

Inventory movement creation data

update_prices
boolean (Update Price)
Default: false

Whether to update the prices of the products in the inventory movement

state
required
string (State)
Enum: "DRAFT" "CLOSED" "CANCELLED"

Initial state of the inventory movement

motive
string (Motive)

Reason or motivation for the inventory movement operation

origin
string (Origin)
Enum: "SHOP" "SUPPLIER"

Source location type where inventory is being moved from

origin_id
string (Origin ID)

Unique identifier of the specific origin location

destination
string (Destination)
Enum: "SHOP" "TRASH"

Target location type where inventory is being moved to

destination_id
string (Destination ID)

Unique identifier of the specific destination location

Array of objects (Insertions)

Array of product line items to add to the inventory movement

Responses

Request samples

Content type
application/json
{
  • "update_prices": false,
  • "state": "DRAFT",
  • "motive": "Regular stock transfer between locations",
  • "origin": "SHOP",
  • "origin_id": "shop-a-001",
  • "destination": "SHOP",
  • "destination_id": "shop-b-002",
  • "insertions": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "updated_at": "2025-07-02T10:26:31.829Z",
  • "created_at": "2025-07-02T10:26:31.829Z",
  • "deprecated": false,
  • "company_id": "company-001",
  • "test": false,
  • "state": "DRAFT",
  • "state_date": "2025-07-02T10:26:31.829Z",
  • "motive": "Stock transfer between shops",
  • "origin": "SHOP",
  • "origin_id": "shop-001",
  • "destination": "SHOP",
  • "destination_id": "shop-002",
  • "total_quantity": 500,
  • "number_of_products": 25,
  • "number_of_variants": 15,
  • "number_of_products_or_variants": 40,
  • "number_of_lines": 30,
  • "number_of_lines_with_price": 28,
  • "number_of_lines_with_quantity": 30
}

Update an inventory movement

Updates specific fields of an existing inventory movement.

Authorizations:
apiKey
Request Body schema: application/json
required

Inventory movement update data

id
required
string <uuid> (ID)

Unique identifier of the inventory movement to update

state
string (State)
Enum: "DRAFT" "CLOSED" "CANCELLED"

Updated state of the inventory movement

name
string (Name)

New display name for the inventory movement

motive
string (Motive)

Updated reason for the inventory movement operation

origin
string (Origin)
Enum: "SHOP" "SUPPLIER"

Updated source location type for the inventory movement

origin_id
string (Origin ID)

Updated unique identifier of the origin location

destination
string (Destination)
Enum: "SHOP" "TRASH"

Updated target location type for the inventory movement

destination_id
string (Destination ID)

Updated unique identifier of the destination location

Array of objects (Insertions)

Array of product line items to add to the inventory movement

Array of objects (Deletions)

Array of product line items to delete from the inventory movement

Array of objects (Modifications)

Array of product line items to modify in the inventory movement

update_prices
required
boolean

Update prices of the products?

Responses

Request samples

Content type
application/json
{
  • "id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "state": "DRAFT",
  • "name": "Updated Stock Transfer Operation",
  • "motive": "Emergency stock rebalancing",
  • "origin": "SHOP",
  • "origin_id": "shop-main-001",
  • "destination": "SHOP",
  • "destination_id": "shop-branch-002",
  • "insertions": [
    ],
  • "deletions": [
    ],
  • "modifications": [
    ],
  • "update_prices": true
}

Response samples

Content type
application/json
{
  • "id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "updated_at": "2025-07-02T10:26:31.829Z",
  • "created_at": "2025-07-02T10:26:31.829Z",
  • "deprecated": false,
  • "company_id": "company-001",
  • "test": false,
  • "state": "DRAFT",
  • "state_date": "2025-07-02T10:26:31.829Z",
  • "motive": "Stock transfer between shops",
  • "origin": "SHOP",
  • "origin_id": "shop-001",
  • "destination": "SHOP",
  • "destination_id": "shop-002",
  • "total_quantity": 500,
  • "number_of_products": 25,
  • "number_of_variants": 15,
  • "number_of_products_or_variants": 40,
  • "number_of_lines": 30,
  • "number_of_lines_with_price": 28,
  • "number_of_lines_with_quantity": 30
}

Get an inventory movement by ID

Retrieves a specific inventory movement by its unique identifier.

Authorizations:
apiKey
path Parameters
id
required
string <uuid> (ID)
Example: cb75a73d-0c3b-4b38-8064-56b6ec77c10d

Unique identifier of the inventory movement

Responses

Response samples

Content type
application/json
{
  • "id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "updated_at": "2025-07-02T10:26:31.829Z",
  • "created_at": "2025-07-02T10:26:31.829Z",
  • "deprecated": false,
  • "company_id": "company-001",
  • "test": false,
  • "state": "DRAFT",
  • "state_date": "2025-07-02T10:26:31.829Z",
  • "motive": "Stock transfer between shops",
  • "origin": "SHOP",
  • "origin_id": "shop-001",
  • "destination": "SHOP",
  • "destination_id": "shop-002",
  • "total_quantity": 500,
  • "number_of_products": 25,
  • "number_of_variants": 15,
  • "number_of_products_or_variants": 40,
  • "number_of_lines": 30,
  • "number_of_lines_with_price": 28,
  • "number_of_lines_with_quantity": 30
}

Delete an inventory movement

Deletes a specific inventory movement by its unique identifier.

Authorizations:
apiKey
path Parameters
id
required
string <uuid> (ID)
Example: cb75a73d-0c3b-4b38-8064-56b6ec77c10d

Unique identifier of the inventory movement

Responses

Response samples

Content type
application/json
{
  • "id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d"
}

List inventory movements

Retrieves a list of inventory movements based on specified criteria.

Authorizations:
apiKey
Request Body schema: application/json
required

Inventory movement request criteria

filter
any (Filter)

Filter criteria for inventory movements with support for and/or/not operators

object (Sort)

Sort criteria for inventory movements

limit
integer (Limit) [ 1 .. 100 ]

Maximum number of inventory movements to return

next_token
string (Next Token)

Pagination token for fetching next set of results

Responses

Request samples

Content type
application/json
{
  • "filter": {
    },
  • "sort": {
    },
  • "limit": 20,
  • "next_token": "next-token-001"
}

Response samples

Content type
application/json
[
  • {
    }
]

Productvariant

Create a product variant

Creates a new product variant in the desired catalog.

Authorizations:
apiKey
Request Body schema: application/json
required

Product variant creation payload

product_id
required
string (Parent Product ID)

The unique identifier of the parent product to which this variant belongs

variant_id
string (Variant ID)

An optional unique identifier for the variant, if not provided it will be generated automatically

required
Array of objects (Variation Options)

An array of variation options that define the specific characteristics of this product variant

tax_id
required
string (Tax Rate ID)

The unique identifier of the tax rate that will be applied to this product variant during sales transactions

buy_price
number (Buy Price)

The cost price that the merchant pays to acquire this product variant, expressed in cents (e.g., 1500 = $15.00)

sell_price
number (Sell Price)

The retail price that customers pay to purchase this product variant, expressed in cents (e.g., 2000 = $20.00)

barcode
string or null (Barcode)

The barcode identifier used for inventory management and point-of-sale scanning of this specific product variant

reference
string or null (Reference Code)

An internal reference code used for inventory tracking and variant identification within the merchant system

Responses

Request samples

Content type
application/json
{
  • "product_id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "variant_id": "var_cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "options": [
    ],
  • "tax_id": "dcc2a3cf-7357-40ab-8a3b-adc43d93afb0",
  • "buy_price": 1500,
  • "sell_price": 2000,
  • "barcode": "1234567890123",
  • "reference": "SHIRT-L-BLUE"
}

Response samples

Content type
application/json
{
  • "id": "7c5b8017-c28b-4e89-b056-5287f88d0a3d__20572f85-6236-4645-a65e-32dc1126dd99",
  • "updated_at": "2025-07-02T10:26:31.829Z",
  • "created_at": "2025-07-02T10:26:31.829Z",
  • "deprecated": false,
  • "catalog_id": "ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": true,
  • "product_id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "variant_id": "var_cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "options": [
    ],
  • "order": 1,
  • "tax_id": "dcc2a3cf-7357-40ab-8a3b-adc43d93afb0",
  • "tax": {
    },
  • "buy_price": 1500,
  • "sell_price": 2000,
  • "barcode": "1234567890123",
  • "reference": "SHIRT-L-BLUE",
  • "is_selected": false
}

Update a product variant

Updates specific fields of an existing product variant.

Authorizations:
apiKey
Request Body schema: application/json
required

Product variant update payload

product_id
required
string (Parent Product ID)

The unique identifier of the parent product to which this variant belongs

variant_id
required
string (Variant ID)

The unique identifier of the variant being updated

Array of objects (Updated Variation Options)

The updated array of variation options that define the characteristics of this product variant

tax_id
string (Updated Tax ID)

The updated unique identifier of the tax rate to be applied to this product variant

buy_price
number (Updated Buy Price)

The updated cost price in cents that the business pays to acquire this product variant

sell_price
number (Updated Sell Price)

The updated retail price in cents that customers pay to purchase this product variant

barcode
string or null (Updated Barcode)

The updated barcode identifier for inventory management and point-of-sale scanning

reference
string or null (Updated Reference Code)

The updated internal reference code for inventory tracking and variant identification

Responses

Request samples

Content type
application/json
{
  • "product_id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "variant_id": "var_cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "options": [
    ],
  • "tax_id": "dcc2a3cf-7357-40ab-8a3b-adc43d93afb0",
  • "buy_price": 1600,
  • "sell_price": 2100,
  • "barcode": "9876543210987",
  • "reference": "SHIRT-L-RED"
}

Response samples

Content type
application/json
{
  • "id": "7c5b8017-c28b-4e89-b056-5287f88d0a3d__20572f85-6236-4645-a65e-32dc1126dd99",
  • "updated_at": "2025-07-02T10:26:31.829Z",
  • "created_at": "2025-07-02T10:26:31.829Z",
  • "deprecated": false,
  • "catalog_id": "ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": true,
  • "product_id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "variant_id": "var_cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "options": [
    ],
  • "order": 1,
  • "tax_id": "dcc2a3cf-7357-40ab-8a3b-adc43d93afb0",
  • "tax": {
    },
  • "buy_price": 1500,
  • "sell_price": 2000,
  • "barcode": "1234567890123",
  • "reference": "SHIRT-L-BLUE",
  • "is_selected": false
}

Get a product variant by ID

Fetches a product variant by its unique identifier.

Authorizations:
apiKey
path Parameters
productId
required
string <uuid> (Product ID)
Example: cb75a73d-0c3b-4b38-8064-56b6ec77c10d

The unique identifier of the parent product in UUID format

variantId
required
string (Variant ID)
Example: var_cb75a73d-0c3b-4b38-8064-56b6ec77c10d

The unique identifier of the specific product variant

Responses

Response samples

Content type
application/json
{
  • "id": "7c5b8017-c28b-4e89-b056-5287f88d0a3d__20572f85-6236-4645-a65e-32dc1126dd99",
  • "updated_at": "2025-07-02T10:26:31.829Z",
  • "created_at": "2025-07-02T10:26:31.829Z",
  • "deprecated": false,
  • "catalog_id": "ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": true,
  • "product_id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "variant_id": "var_cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "options": [
    ],
  • "order": 1,
  • "tax_id": "dcc2a3cf-7357-40ab-8a3b-adc43d93afb0",
  • "tax": {
    },
  • "buy_price": 1500,
  • "sell_price": 2000,
  • "barcode": "1234567890123",
  • "reference": "SHIRT-L-BLUE",
  • "is_selected": false
}

Delete a product variant by ID

Deletes a product variant by its unique identifier.

Authorizations:
apiKey
path Parameters
productId
required
string <uuid> (Product ID)
Example: cb75a73d-0c3b-4b38-8064-56b6ec77c10d

The unique identifier of the parent product in UUID format

variantId
required
string (Variant ID)
Example: var_cb75a73d-0c3b-4b38-8064-56b6ec77c10d

The unique identifier of the specific product variant

Responses

Response samples

Content type
application/json
{
  • "id": "7c5b8017-c28b-4e89-b056-5287f88d0a3d__20572f85-6236-4645-a65e-32dc1126dd99",
  • "updated_at": "2025-07-02T10:26:31.829Z",
  • "created_at": "2025-07-02T10:26:31.829Z",
  • "deprecated": false,
  • "catalog_id": "ba19240a-0442-4bd9-8c15-01b8409e1346",
  • "test": true,
  • "product_id": "cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "variant_id": "var_cb75a73d-0c3b-4b38-8064-56b6ec77c10d",
  • "options": [
    ],
  • "order": 1,
  • "tax_id": "dcc2a3cf-7357-40ab-8a3b-adc43d93afb0",
  • "buy_price": 1500,
  • "sell_price": 2000,
  • "barcode": "1234567890123",
  • "reference": "SHIRT-L-BLUE",
  • "is_selected": false
}