Overview
Base URL
All API requests should be made to:
https://sales.smarthome.com.gh/api/v1
Authentication
Use Laravel Sanctum Bearer tokens. Include in all requests:
Authorization: Bearer {token}
Content Type
All requests and responses use JSON format:
Content-Type: application/json
Accept: application/json
Rate Limiting
Default limits per endpoint type:
Standard: 60/min
POS lookups: 120/min
Bulk operations: 10/min
Generated Contract
This documentation and the downloadable JSON contract are generated from the Laravel route surface.
OpenAPI JSON
Generated Mar 25, 2026 04:17
Response Format
All API responses follow a consistent structure:
{
"success": true,
"data": { "...response data..." },
"meta": { "...pagination info (if applicable)..." }
}
{
"success": false,
"message": "Error description",
"errors": { "...validation errors (if applicable)..." }
}
Authentication
User authentication and session management.
Authenticate a user and issue a Sanctum token for API requests.
| Parameter | In | Type | Description |
|---|---|---|---|
| email *required | body | string | User email address |
| password *required | body | string | User password |
| device_name | body | string | Optional device label |
| store_id | body | integer | Preferred store context for login |
| two_factor_code | body | string | Two-factor code when required |
{
"email": "cashier@example.com",
"password": "secret123",
"device_name": "iPhone 15 Pro",
"store_id": 1
}
{
"success": true,
"data": {
"token": "1|abc123xyz...",
"user": {
"id": 1,
"name": "John Doe",
"email": "cashier@example.com",
"role": {
"id": 2,
"name": "Cashier",
"slug": "cashier"
},
"store_id": 1,
"store_name": "Main Store",
"is_super_admin": false,
"has_two_factor": false
},
"permissions": [
"pos.access",
"sales.create",
"customers.view"
],
"store_id": 1
}
}
{
"success": false,
"message": "The given data was invalid.",
"errors": {
"email": [
"The provided credentials are incorrect."
]
}
}
Revoke the current token and end the current API session.
[]
{
"success": true,
"data": {
"message": "Successfully logged out."
}
}
{
"success": false,
"message": "Unauthorized."
}
Return the authenticated user profile, permissions, and discount limits.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Products & Catalog
Items, categories, stores, warehouses, and reference data.
Get paginated categories with optional hierarchy and count metadata.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Categories request to /categories.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Delete Categories data through /categories/{category}.
| Parameter | In | Type | Description |
|---|---|---|---|
| category *required | path | string | Path parameter: Category |
[]
{
"success": true,
"message": "Operation completed successfully."
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Categories data from /categories/{category}.
| Parameter | In | Type | Description |
|---|---|---|---|
| category *required | path | string | Path parameter: Category |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Update Categories data through /categories/{category}.
| Parameter | In | Type | Description |
|---|---|---|---|
| category *required | path | string | Path parameter: Category |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Get paginated items with optional search by query, SKU, barcode, or related catalog metadata.
| Parameter | In | Type | Description |
|---|---|---|---|
| q | query | string | Search query |
| search | query | string | Legacy search parameter alias for q |
| per_page | query | integer | Results per page (default: 50, max: 100) |
{
"q": "example",
"search": "example",
"per_page": 1
}
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
],
"meta": {
"current_page": 1,
"last_page": 1,
"per_page": 50,
"total": 1
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Items data from /items/check-name.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Items data from /items/{item}/applicable-price-books.
| Parameter | In | Type | Description |
|---|---|---|---|
| item *required | path | string | Path parameter: Item |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Items data from /items/{item}/price.
| Parameter | In | Type | Description |
|---|---|---|---|
| item *required | path | string | Path parameter: Item |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Items data from /items/{item}/price-breakdown.
| Parameter | In | Type | Description |
|---|---|---|---|
| item *required | path | string | Path parameter: Item |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Payment Methods data from /payment-methods.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Payment Methods data from /payment-methods/{paymentMethod}.
| Parameter | In | Type | Description |
|---|---|---|---|
| paymentMethod *required | path | string | Path parameter: Payment Method |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Price Books data from /price-books.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Price Books data from /price-books/{priceBook}.
| Parameter | In | Type | Description |
|---|---|---|---|
| priceBook *required | path | string | Path parameter: Price Book |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Return stores the authenticated user can access, with optional warehouses and payment methods.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Stores data from /stores/{store}.
| Parameter | In | Type | Description |
|---|---|---|---|
| store *required | path | string | Path parameter: Store |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Return active warehouses for a specific store, optionally including standalone warehouses that serve it.
| Parameter | In | Type | Description |
|---|---|---|---|
| store *required | path | string | Path parameter: Store |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Return active warehouses with store and standalone filtering options.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Warehouses data from /warehouses/standalone.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Warehouses data from /warehouses/{warehouse}.
| Parameter | In | Type | Description |
|---|---|---|---|
| warehouse *required | path | string | Path parameter: Warehouse |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
POS Operations
POS catalog, checkout, tax, discounts, and session status.
Validate, price, tax, and complete a POS sale.
| Parameter | In | Type | Description |
|---|---|---|---|
| items *required | body | array | Field: Items |
| items.*.id *required | body | string | Field: Items * Id |
| items.*.qty *required | body | number | Field: Items * Qty |
| items.*.serial_number | body | string | Field: Items * Serial Number |
| items.*.price | body | number | Field: Items * Price |
| items.*.unit_id | body | string | Field: Items * Unit Id |
| items.*.base_quantity | body | number | Field: Items * Base Quantity |
| items.*.warehouse_id | body | integer | Field: Items * Warehouse Id |
| items.*.discount_type | body | string | Field: Items * Discount Type |
| items.*.discount_value | body | number | Field: Items * Discount Value |
| items.*.discount_amount | body | number | Field: Items * Discount Amount |
| items.*.discount_reason | body | string | Field: Items * Discount Reason |
| items.*.discount_approved_by | body | string | Field: Items * Discount Approved By |
| items.*.discount_approval_token | body | string | Field: Items * Discount Approval Token |
| payments *required | body | array | Field: Payments |
| payments.*.payment_method_code *required | body | string | Field: Payments * Payment Method Code |
| payments.*.payment_method_id | body | string | Field: Payments * Payment Method Id |
| payments.*.amount *required | body | number | Field: Payments * Amount |
| payments.*.tendered | body | number | Field: Payments * Tendered |
| payments.*.change | body | number | Field: Payments * Change |
| payments.*.reference | body | string | Field: Payments * Reference |
| payment_method | body | string | Field: Payment Method |
| payment_method_id | body | string | Field: Payment Method Id |
| total_amount *required | body | number | Field: Total Amount |
| subtotal | body | number | Field: Subtotal |
| customer_id | body | string | Field: Customer Id |
| reference | body | string | Field: Reference |
| cart_discount_type | body | string | Field: Cart Discount Type |
| cart_discount_value | body | number | Field: Cart Discount Value |
| cart_discount_amount | body | number | Field: Cart Discount Amount |
| cart_discount_reason | body | string | Field: Cart Discount Reason |
| cart_discount_approved_by | body | string | Field: Cart Discount Approved By |
| cart_discount_approval_token | body | string | Field: Cart Discount Approval Token |
| total_discount | body | number | Field: Total Discount |
| tax_exempt | body | boolean | Field: Tax Exempt |
| idempotency_key *required | body | string | Field: Idempotency Key |
| store_id *required | body | integer | Field: Store Id |
| offline_created_at | body | date | Field: Offline Created At |
{
"items": [],
"items.*.id": "example",
"items.*.qty": 9.99,
"items.*.serial_number": "example",
"items.*.price": 9.99,
"items.*.unit_id": "example",
"items.*.base_quantity": 9.99,
"items.*.warehouse_id": 1,
"items.*.discount_type": "example",
"items.*.discount_value": 9.99,
"items.*.discount_amount": 9.99,
"items.*.discount_reason": "example",
"items.*.discount_approved_by": "example",
"items.*.discount_approval_token": "example",
"payments": [],
"payments.*.payment_method_code": "example",
"payments.*.payment_method_id": "example",
"payments.*.amount": 9.99,
"payments.*.tendered": 9.99,
"payments.*.change": 9.99,
"payments.*.reference": "example",
"payment_method": "example",
"payment_method_id": "example",
"total_amount": 9.99,
"subtotal": 9.99,
"customer_id": "example",
"reference": "example",
"cart_discount_type": "example",
"cart_discount_value": 9.99,
"cart_discount_amount": 9.99,
"cart_discount_reason": "example",
"cart_discount_approved_by": "example",
"cart_discount_approval_token": "example",
"total_discount": 9.99,
"tax_exempt": true,
"idempotency_key": "example",
"store_id": 1,
"offline_created_at": "2026-03-16"
}
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Pos Checkout request to /pos/checkout/validate.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Pos data from /pos/discount-limits.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Pos Discount request to /pos/discount/approve.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Get paginated POS-ready products with live price and stock data.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Search POS products by name, SKU, or barcode.
| Parameter | In | Type | Description |
|---|---|---|---|
| q *required | query | string | Field: Q |
| store_id *required | query | integer | Field: Store Id |
| warehouse_id | query | integer | Field: Warehouse Id |
| category_id | query | integer | Field: Category Id |
| limit | query | integer | Field: Limit |
{
"q": "example",
"store_id": 1,
"warehouse_id": 1,
"category_id": 1,
"limit": 1
}
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Pos Products data from /pos/products/{item}.
| Parameter | In | Type | Description |
|---|---|---|---|
| item *required | path | string | Path parameter: Item |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Return POS readiness, including store access and active cashier session status.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Return tax details for a POS cart before checkout.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Pos Tax data from /pos/tax/info.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Cashier Sessions
Cashier shift open, close, suspend, and cash movement APIs.
Return the open cashier session, if any, for the current user and store.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Open a new cashier session for the authenticated user.
| Parameter | In | Type | Description |
|---|---|---|---|
| store_id *required | body | integer | Field: Store Id |
| opening_balance *required | body | number | Field: Opening Balance |
| cash_register_id | body | integer | Field: Cash Register Id |
| notes | body | string | Field: Notes |
{
"store_id": 1,
"opening_balance": 9.99,
"cash_register_id": 1,
"notes": "example"
}
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Sessions data from /sessions/{session}.
| Parameter | In | Type | Description |
|---|---|---|---|
| session *required | path | string | Path parameter: Session |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Sessions request to /sessions/{session}/cash-movement.
| Parameter | In | Type | Description |
|---|---|---|---|
| session *required | path | string | Path parameter: Session |
| type *required | body | string | Field: Type |
| amount *required | body | number | Field: Amount |
| reason *required | body | string | Field: Reason |
| notes | body | string | Field: Notes |
| reference | body | string | Field: Reference |
{
"type": "example",
"amount": 9.99,
"reason": "example",
"notes": "example",
"reference": "example"
}
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Sessions request to /sessions/{session}/close.
| Parameter | In | Type | Description |
|---|---|---|---|
| session *required | path | string | Path parameter: Session |
| closing_balance *required | body | number | Field: Closing Balance |
| notes | body | string | Field: Notes |
| discrepancy_notes | body | string | Field: Discrepancy Notes |
{
"closing_balance": 9.99,
"notes": "example",
"discrepancy_notes": "example"
}
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Sessions request to /sessions/{session}/resume.
| Parameter | In | Type | Description |
|---|---|---|---|
| session *required | path | string | Path parameter: Session |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Return the summary rollup for a cashier session.
| Parameter | In | Type | Description |
|---|---|---|---|
| session *required | path | string | Path parameter: Session |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Sessions request to /sessions/{session}/suspend.
| Parameter | In | Type | Description |
|---|---|---|---|
| session *required | path | string | Path parameter: Session |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Customers
Customer search, listing, and CRUD operations.
Get paginated customers with status and search filters.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Customers request to /customers.
| Parameter | In | Type | Description |
|---|---|---|---|
| name *required | body | string | Field: Name |
| body | string | Field: Email | |
| phone | body | string | Field: Phone |
| address | body | string | Field: Address |
| customer_group_id | body | integer | Field: Customer Group Id |
{
"name": "example",
"email": "user@example.com",
"phone": "example",
"address": "example",
"customer_group_id": 1
}
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Search customers by name, phone, email, or address for quick POS selection.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Delete Customers data through /customers/{customer}.
| Parameter | In | Type | Description |
|---|---|---|---|
| customer *required | path | string | Path parameter: Customer |
[]
{
"success": true,
"message": "Operation completed successfully."
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Customers data from /customers/{customer}.
| Parameter | In | Type | Description |
|---|---|---|---|
| customer *required | path | string | Path parameter: Customer |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Update Customers data through /customers/{customer}.
| Parameter | In | Type | Description |
|---|---|---|---|
| customer *required | path | string | Path parameter: Customer |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Sales
Sales history, receipt, and search endpoints.
Retrieve Sales data from /sales.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Sales data from /sales/search.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Sales data from /sales/{sale}.
| Parameter | In | Type | Description |
|---|---|---|---|
| sale *required | path | string | Path parameter: Sale |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Sales data from /sales/{sale}/receipt.
| Parameter | In | Type | Description |
|---|---|---|---|
| sale *required | path | string | Path parameter: Sale |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Returns
Return validation, creation, approval, and lookup endpoints.
Get paginated returns scoped by store, warehouse, status, date, and search filters.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Returns request to /returns.
| Parameter | In | Type | Description |
|---|---|---|---|
| sale_id *required | body | string | Field: Sale Id |
| items *required | body | array | Field: Items |
| items.*.sale_item_id *required | body | string | Field: Items * Sale Item Id |
| items.*.quantity *required | body | integer | Field: Items * Quantity |
| items.*.condition | body | string | Field: Items * Condition |
| items.*.restock | body | boolean | Field: Items * Restock |
| items.*.notes | body | string | Field: Items * Notes |
| items.*.warehouse_id | body | string | Field: Items * Warehouse Id |
| reason_id | body | string | Field: Reason Id |
| reason_notes | body | string | Field: Reason Notes |
| internal_notes | body | string | Field: Internal Notes |
| process_immediately | body | boolean | Field: Process Immediately |
| idempotency_key | body | string | Field: Idempotency Key |
{
"sale_id": "example",
"items": [],
"items.*.sale_item_id": "example",
"items.*.quantity": 1,
"items.*.condition": "example",
"items.*.restock": true,
"items.*.notes": "example",
"items.*.warehouse_id": "example",
"reason_id": "example",
"reason_notes": "example",
"internal_notes": "example",
"process_immediately": true,
"idempotency_key": "example"
}
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Validate whether a sale can be returned and return returnable items when eligible.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Return active return reasons for return creation flows.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Returns data from /returns/{saleReturn}.
| Parameter | In | Type | Description |
|---|---|---|---|
| saleReturn *required | path | string | Path parameter: Sale Return |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Returns request to /returns/{saleReturn}/approve.
| Parameter | In | Type | Description |
|---|---|---|---|
| saleReturn *required | path | string | Path parameter: Sale Return |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Returns request to /returns/{saleReturn}/cancel.
| Parameter | In | Type | Description |
|---|---|---|---|
| saleReturn *required | path | string | Path parameter: Sale Return |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Returns request to /returns/{saleReturn}/process.
| Parameter | In | Type | Description |
|---|---|---|---|
| saleReturn *required | path | string | Path parameter: Sale Return |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Returns request to /returns/{saleReturn}/reject.
| Parameter | In | Type | Description |
|---|---|---|---|
| saleReturn *required | path | string | Path parameter: Sale Return |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Offline Sync
Initial sync, delta sync, upload, and sync status APIs.
Return only records changed since the provided timestamp.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Return the full offline payload needed to bootstrap a device.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Return sync health, pending uploads, and related status metadata.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Upload offline-created transactions in bulk for server reconciliation.
| Parameter | In | Type | Description |
|---|---|---|---|
| store_id *required | body | integer | Field: Store Id |
| transactions *required | body | array | Field: Transactions |
| transactions.*.idempotency_key *required | body | string | Field: Transactions * Idempotency Key |
| transactions.*.type *required | body | string | Field: Transactions * Type |
| transactions.*.offline_created_at | body | date | Field: Transactions * Offline Created At |
| transactions.*.data *required | body | array | Field: Transactions * Data |
{
"store_id": 1,
"transactions": [],
"transactions.*.idempotency_key": "example",
"transactions.*.type": "example",
"transactions.*.offline_created_at": "2026-03-16",
"transactions.*.data": []
}
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Pricing & Bundles
Price books, pricing rules, pricing calculators, bundles, and currencies.
Get paginated bundles with optional store and validity filters.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Bundles request to /bundles.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Bundles request to /bundles/calculate.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Delete Bundles data through /bundles/{bundle}.
| Parameter | In | Type | Description |
|---|---|---|---|
| bundle *required | path | string | Path parameter: Bundle |
[]
{
"success": true,
"message": "Operation completed successfully."
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Bundles data from /bundles/{bundle}.
| Parameter | In | Type | Description |
|---|---|---|---|
| bundle *required | path | string | Path parameter: Bundle |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Update Bundles data through /bundles/{bundle}.
| Parameter | In | Type | Description |
|---|---|---|---|
| bundle *required | path | string | Path parameter: Bundle |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Bundles data from /bundles/{bundle}/availability.
| Parameter | In | Type | Description |
|---|---|---|---|
| bundle *required | path | string | Path parameter: Bundle |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Currencies data from /currencies.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Currencies data from /currencies/convert.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Currencies data from /currencies/{currency}.
| Parameter | In | Type | Description |
|---|---|---|---|
| currency *required | path | string | Path parameter: Currency |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Get paginated pricing rules with optional store, validity, and relationship filters.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Pricing Rules request to /pricing-rules.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Pricing Rules request to /pricing-rules/evaluate.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Delete Pricing Rules data through /pricing-rules/{pricingRule}.
| Parameter | In | Type | Description |
|---|---|---|---|
| pricingRule *required | path | string | Path parameter: Pricing Rule |
[]
{
"success": true,
"message": "Operation completed successfully."
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Pricing Rules data from /pricing-rules/{pricingRule}.
| Parameter | In | Type | Description |
|---|---|---|---|
| pricingRule *required | path | string | Path parameter: Pricing Rule |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Update Pricing Rules data through /pricing-rules/{pricingRule}.
| Parameter | In | Type | Description |
|---|---|---|---|
| pricingRule *required | path | string | Path parameter: Pricing Rule |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Pricing Rules request to /pricing-rules/{pricingRule}/toggle.
| Parameter | In | Type | Description |
|---|---|---|---|
| pricingRule *required | path | string | Path parameter: Pricing Rule |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Evaluate pricing rules for a single item request.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Pricing request to /pricing/calculate-result.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Pricing request to /pricing/cart.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Pricing data from /pricing/rules.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Pricing data from /pricing/rules-for-item/{item}.
| Parameter | In | Type | Description |
|---|---|---|---|
| item *required | path | string | Path parameter: Item |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Submit a Pricing request to /pricing/validate.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Reporting
Read-only integration sales and report feeds for external consumers.
Retrieve Integration Reports data from /integration/reports/cashier.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports Cashier data from /integration/reports/cashier/{cashier}.
| Parameter | In | Type | Description |
|---|---|---|---|
| cashier *required | path | string | Path parameter: Cashier |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports data from /integration/reports/closeout.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports data from /integration/reports/customers.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports data from /integration/reports/discounts.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports data from /integration/reports/heatmap.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports Inventory data from /integration/reports/inventory/damage-spoilage.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports Inventory data from /integration/reports/inventory/dead-stock.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports Inventory data from /integration/reports/inventory/movement.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports Inventory data from /integration/reports/inventory/overview.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports Inventory data from /integration/reports/inventory/replenishment.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports Inventory data from /integration/reports/inventory/stock.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports Inventory data from /integration/reports/inventory/turns.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports Inventory data from /integration/reports/inventory/valuation.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports data from /integration/reports/invoices.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports Invoices data from /integration/reports/invoices/aging.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports Invoices data from /integration/reports/invoices/credit-notes.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports Invoices data from /integration/reports/invoices/dso.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports Invoices data from /integration/reports/invoices/funnel.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Return high-level report overview data for external consumers.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports data from /integration/reports/payments.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports data from /integration/reports/price-source.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports data from /integration/reports/products.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports Products data from /integration/reports/products/abc.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports data from /integration/reports/profit.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports data from /integration/reports/return-rate.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports data from /integration/reports/returns.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports data from /integration/reports/revenue.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Return detailed sales reporting rows for external consumers.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports data from /integration/reports/stores.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports data from /integration/reports/tax.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Reports data from /integration/reports/voids.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Pull sales for reporting and aggregation. Compatibility alias: `/integrations/sales`. Common scenarios include Store Rollup Pull and Warehouse Rollup Pull using `store_id` and `warehouse_id` filters.
| Parameter | In | Type | Description |
|---|---|---|---|
| from | query | date | Start date (YYYY-MM-DD) |
| to | query | date | End date (YYYY-MM-DD) |
| status | query | string | Sale status filter |
| store_id | query | integer | Optional store filter |
| warehouse_id | query | integer | Optional warehouse filter |
| q | query | string | Free-text search on receipt, barcode, or reference |
| per_page | query | integer | Results per page (default: 50, max: 200) |
{
"from": "2026-02-11",
"to": "2026-02-11",
"status": "completed",
"store_id": 1,
"per_page": 100
}
{
"success": true,
"data": [
{
"id": 901,
"receipt_number": "RCP-20260211-0001",
"status": "completed",
"store": {
"id": 1,
"name": "Main Store"
},
"warehouse": {
"id": 2,
"name": "Sales Floor"
},
"total_amount": 245,
"created_at": "2026-02-11T09: 15: 00Z"
}
],
"meta": {
"current_page": 1,
"last_page": 3,
"per_page": 100,
"total": 467
}
}
{
"success": false,
"message": "Unauthorized."
}
Use sale detail lookups to reconcile line items and payments flagged during reporting syncs. Compatibility alias: `/integrations/sales/{sale}`.
| Parameter | In | Type | Description |
|---|---|---|---|
| sale *required | path | string | Path parameter: Sale |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Integration Data
Read-only integration access to items, customers, stores, warehouses, and related data feeds.
Return paginated customer data for external integrations.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Data Customers data from /integration/data/customers/{customer}.
| Parameter | In | Type | Description |
|---|---|---|---|
| customer *required | path | string | Path parameter: Customer |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Data Inventory data from /integration/data/inventory.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Data Invoices data from /integration/data/invoices.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Data Invoices data from /integration/data/invoices/{invoice}.
| Parameter | In | Type | Description |
|---|---|---|---|
| invoice *required | path | string | Path parameter: Invoice |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Return paginated item data for external integrations.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Data Returns data from /integration/data/returns.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Data Returns data from /integration/data/returns/{saleReturn}.
| Parameter | In | Type | Description |
|---|---|---|---|
| saleReturn *required | path | string | Path parameter: Sale Return |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Data Sales data from /integration/data/sales.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Data Sales data from /integration/data/sales/{sale}.
| Parameter | In | Type | Description |
|---|---|---|---|
| sale *required | path | string | Path parameter: Sale |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Return store reference data for external integrations.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Data Stores data from /integration/data/stores/{store}.
| Parameter | In | Type | Description |
|---|---|---|---|
| store *required | path | string | Path parameter: Store |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Return warehouse reference data for external integrations.
[]
{
"success": true,
"data": [
{
"id": 1,
"name": "Example"
}
]
}
{
"success": false,
"message": "Unauthorized."
}
Retrieve Integration Data Warehouses data from /integration/data/warehouses/{warehouse}.
| Parameter | In | Type | Description |
|---|---|---|---|
| warehouse *required | path | string | Path parameter: Warehouse |
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Other
Additional authenticated API endpoints.
Submit a Prices request to /prices/bulk.
[]
{
"success": true,
"data": {
"id": 1,
"name": "Example"
}
}
{
"success": false,
"message": "Unauthorized."
}
Error Handling
HTTP Status Codes
The API uses standard HTTP status codes to indicate the success or failure of requests:
| Status | Meaning | Description |
|---|---|---|
| 200 | OK | Request succeeded |
| 201 | Created | Resource created successfully |
| 400 | Bad Request | Invalid request data or checkout validation error |
| 401 | Unauthorized | Missing or invalid authentication token |
| 403 | Forbidden | User lacks permission for this action |
| 404 | Not Found | Resource not found |
| 409 | Conflict | Conflict (e.g., duplicate session) |
| 422 | Unprocessable Entity | Validation errors in request data |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Server Error | Internal server error |
Validation Error Response
When validation fails (422), the response includes field-specific errors:
{
"success": false,
"message": "The given data was invalid.",
"errors": {
"email": ["The email field is required."],
"password": ["The password must be at least 8 characters."]
}
}