API reference / Point of sale
Point of sale API
34 endpoints. Scopes: Scalar360.pos.READ, .CREATE, .UPDATE, .DELETE or .ALL. All calls need Authorization: Scalar360-oauthtoken <access_token> — see Authentication.
Catalog
/api/v1/pos/catalog
Scope: Scalar360.pos.READ
| Parameter | In | Type | Required |
|---|---|---|---|
registerId | query | string (uuid) | Yes |
page | query | integer (default 0) | No |
size | query | integer (default 200) | No |
curl -X GET "https://api.scalar360.com/api/v1/pos/catalog" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Checkout
/api/v1/pos/checkout
Scope: Scalar360.pos.CREATE
| Body field | Type | Required | Notes |
|---|---|---|---|
registerId | string (uuid) | Yes | |
customerId | string (uuid) | ||
customerName | string | ||
lines | array of object | Yes | required |
lines[].itemId | string (uuid) | ||
lines[].qty | number | Yes | required |
lines[].rate | number | ||
lines[].discount | number | ||
tenders | array of object | Yes | required |
tenders[].method | string | Yes | required |
tenders[].amount | number | Yes | required |
tenders[].reference | string | ||
notes | string | ||
idempotencyKey | string | ||
couponCode | string | ||
redeemPoints | integer | ||
orderDiscount | number | ||
invoiceNo | string | ||
offline | boolean |
curl -X POST "https://api.scalar360.com/api/v1/pos/checkout" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"registerId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","lines":[{"itemId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","qty":100,"rate":100,"discount":100}],"tenders":[{"method":"string","amount":100,"reference":"string"}]}'Coupons
/api/v1/pos/coupons
Scope: Scalar360.pos.READ
curl -X GET "https://api.scalar360.com/api/v1/pos/coupons" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Create coupon
/api/v1/pos/coupons
Scope: Scalar360.pos.CREATE
| Body field | Type | Required | Notes |
|---|---|---|---|
code | string | Yes | required, not blank |
description | string | ||
discountType | string | Yes | required, not blank |
value | number | Yes | required |
minAmount | number | ||
maxDiscount | number | ||
validFrom | string (date) | ||
validUntil | string (date) | ||
maxRedemptions | integer | ||
active | boolean |
curl -X POST "https://api.scalar360.com/api/v1/pos/coupons" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"code":"string","discountType":"string","value":100}'Update coupon
/api/v1/pos/coupons/{id}
Scope: Scalar360.pos.UPDATE
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
| Body field | Type | Required | Notes |
|---|---|---|---|
code | string | Yes | required, not blank |
description | string | ||
discountType | string | Yes | required, not blank |
value | number | Yes | required |
minAmount | number | ||
maxDiscount | number | ||
validFrom | string (date) | ||
validUntil | string (date) | ||
maxRedemptions | integer | ||
active | boolean |
curl -X PUT "https://api.scalar360.com/api/v1/pos/coupons/{id}" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"code":"string","description":"string","discountType":"string","value":100,"minAmount":100,"maxDiscount":100}'Validate coupon
/api/v1/pos/coupons/validate
Scope: Scalar360.pos.READ
| Parameter | In | Type | Required |
|---|---|---|---|
code | query | string | Yes |
amount | query | number | No |
curl -X GET "https://api.scalar360.com/api/v1/pos/coupons/validate" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Customers
/api/v1/pos/customers
Scope: Scalar360.pos.READ
| Parameter | In | Type | Required |
|---|---|---|---|
q | query | string | No |
curl -X GET "https://api.scalar360.com/api/v1/pos/customers" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Dashboard
/api/v1/pos/dashboard
Scope: Scalar360.pos.READ
| Parameter | In | Type | Required |
|---|---|---|---|
from | query | string (date) | No |
to | query | string (date) | No |
curl -X GET "https://api.scalar360.com/api/v1/pos/dashboard" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Reserve invoice numbers
/api/v1/pos/invoice-numbers
Scope: Scalar360.pos.CREATE
curl -X POST "https://api.scalar360.com/api/v1/pos/invoice-numbers" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'Items
/api/v1/pos/items
Scope: Scalar360.pos.READ
| Parameter | In | Type | Required |
|---|---|---|---|
registerId | query | string (uuid) | Yes |
q | query | string | No |
curl -X GET "https://api.scalar360.com/api/v1/pos/items" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Loyalty config
/api/v1/pos/loyalty/config
Scope: Scalar360.pos.READ
curl -X GET "https://api.scalar360.com/api/v1/pos/loyalty/config" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Set loyalty config
/api/v1/pos/loyalty/config
Scope: Scalar360.pos.UPDATE
| Body field | Type | Required | Notes |
|---|---|---|---|
enabled | boolean | ||
earnRate | number | ||
redeemValue | number |
curl -X PUT "https://api.scalar360.com/api/v1/pos/loyalty/config" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"enabled":true,"earnRate":100,"redeemValue":100}'Customer points
/api/v1/pos/loyalty/points
Scope: Scalar360.pos.READ
| Parameter | In | Type | Required |
|---|---|---|---|
customerId | query | string (uuid) | Yes |
curl -X GET "https://api.scalar360.com/api/v1/pos/loyalty/points" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Promotions
/api/v1/pos/promotions
Scope: Scalar360.pos.READ
curl -X GET "https://api.scalar360.com/api/v1/pos/promotions" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Create promotion
/api/v1/pos/promotions
Scope: Scalar360.pos.CREATE
| Body field | Type | Required | Notes |
|---|---|---|---|
name | string | Yes | required |
type | string | Yes | required |
priority | integer | ||
active | boolean | ||
validFrom | string (date) | ||
validUntil | string (date) | ||
weekdays | string | ||
timeStart | string | ||
timeEnd | string | ||
warehouseId | string (uuid) | ||
registerIds | array of string (uuid) | ||
percent | number | ||
amount | number | ||
minAmount | number | ||
buyQty | integer | ||
getQty | integer | ||
rewardItemId | string (uuid) | ||
targets | array of object | ||
targets[].itemId | string (uuid) | ||
targets[].category | string | ||
targets[].qty | number |
curl -X POST "https://api.scalar360.com/api/v1/pos/promotions" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"string","type":"string"}'Update promotion
/api/v1/pos/promotions/{id}
Scope: Scalar360.pos.UPDATE
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
| Body field | Type | Required | Notes |
|---|---|---|---|
name | string | Yes | required |
type | string | Yes | required |
priority | integer | ||
active | boolean | ||
validFrom | string (date) | ||
validUntil | string (date) | ||
weekdays | string | ||
timeStart | string | ||
timeEnd | string | ||
warehouseId | string (uuid) | ||
registerIds | array of string (uuid) | ||
percent | number | ||
amount | number | ||
minAmount | number | ||
buyQty | integer | ||
getQty | integer | ||
rewardItemId | string (uuid) | ||
targets | array of object | ||
targets[].itemId | string (uuid) | ||
targets[].category | string | ||
targets[].qty | number |
curl -X PUT "https://api.scalar360.com/api/v1/pos/promotions/{id}" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"string","type":"string","priority":1,"active":true,"validFrom":"2026-10-12","validUntil":"2026-10-12"}'Delete promotion
/api/v1/pos/promotions/{id}
Scope: Scalar360.pos.DELETE
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
curl -X DELETE "https://api.scalar360.com/api/v1/pos/promotions/{id}" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Promotion lookup
/api/v1/pos/promotions/lookup
Scope: Scalar360.pos.READ
| Parameter | In | Type | Required |
|---|---|---|---|
q | query | string | No |
curl -X GET "https://api.scalar360.com/api/v1/pos/promotions/lookup" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Promotion snapshot
/api/v1/pos/promotions/snapshot
Scope: Scalar360.pos.READ
| Parameter | In | Type | Required |
|---|---|---|---|
registerId | query | string (uuid) | Yes |
curl -X GET "https://api.scalar360.com/api/v1/pos/promotions/snapshot" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Registers
/api/v1/pos/registers
Scope: Scalar360.pos.READ
curl -X GET "https://api.scalar360.com/api/v1/pos/registers" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Create register
/api/v1/pos/registers
Scope: Scalar360.pos.CREATE
| Body field | Type | Required | Notes |
|---|---|---|---|
name | string | Yes | required, not blank |
code | string | ||
warehouseId | string (uuid) | Yes | |
active | boolean | ||
receiptHeader | string | ||
receiptFooter | string | ||
receiptPaper | string | ||
showTaxBreakup | boolean | ||
allowLineDiscount | boolean | ||
allowPriceEdit | boolean | ||
requireCustomer | boolean | ||
defaultCustomer | string | ||
defaultTender | string | ||
openingFloat | number | ||
autoPrint | boolean | ||
allowDecimalQty | boolean | ||
maxDiscountPct | number | ||
blindClose | boolean |
curl -X POST "https://api.scalar360.com/api/v1/pos/registers" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"string","warehouseId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"}'Update register
/api/v1/pos/registers/{id}
Scope: Scalar360.pos.UPDATE
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
| Body field | Type | Required | Notes |
|---|---|---|---|
name | string | Yes | required, not blank |
code | string | ||
warehouseId | string (uuid) | ||
active | boolean | ||
receiptHeader | string | ||
receiptFooter | string | ||
receiptPaper | string | ||
showTaxBreakup | boolean | ||
allowLineDiscount | boolean | ||
allowPriceEdit | boolean | ||
requireCustomer | boolean | ||
defaultCustomer | string | ||
defaultTender | string | ||
openingFloat | number | ||
autoPrint | boolean | ||
allowDecimalQty | boolean | ||
maxDiscountPct | number | ||
blindClose | boolean |
curl -X PUT "https://api.scalar360.com/api/v1/pos/registers/{id}" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"string","code":"string","warehouseId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","active":true,"receiptHeader":"string","receiptFooter":"string"}'Process return
/api/v1/pos/returns
Scope: Scalar360.pos.CREATE
| Body field | Type | Required | Notes |
|---|---|---|---|
registerId | string (uuid) | Yes | |
invoiceId | string (uuid) | Yes | |
reason | string | ||
refundCash | boolean | ||
items | array of object | Yes | required |
items[].itemId | string (uuid) | ||
items[].itemName | string | ||
items[].quantity | number | Yes | required |
items[].rate | number | ||
items[].gstRate | number |
curl -X POST "https://api.scalar360.com/api/v1/pos/returns" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"registerId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","invoiceId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","items":[{"itemId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d","itemName":"string","quantity":100,"rate":100,"gstRate":100}]}'Lookup sale
/api/v1/pos/sales/{invoiceNo}
Scope: Scalar360.pos.READ
| Parameter | In | Type | Required |
|---|---|---|---|
invoiceNo | path | string | Yes |
curl -X GET "https://api.scalar360.com/api/v1/pos/sales/{invoiceNo}" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Email receipt
/api/v1/pos/sales/{invoiceNo}/email
Scope: Scalar360.pos.CREATE
| Parameter | In | Type | Required |
|---|---|---|---|
invoiceNo | path | string | Yes |
curl -X POST "https://api.scalar360.com/api/v1/pos/sales/{invoiceNo}/email" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'Sale receipt
/api/v1/pos/sales/{invoiceNo}/receipt
Scope: Scalar360.pos.READ
| Parameter | In | Type | Required |
|---|---|---|---|
invoiceNo | path | string | Yes |
curl -X GET "https://api.scalar360.com/api/v1/pos/sales/{invoiceNo}/receipt" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Recent sales
/api/v1/pos/sales/recent
Scope: Scalar360.pos.READ
| Parameter | In | Type | Required |
|---|---|---|---|
registerId | query | string (uuid) | Yes |
limit | query | integer (default 20) | No |
curl -X GET "https://api.scalar360.com/api/v1/pos/sales/recent" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Cash movement
/api/v1/pos/sessions/{id}/cash
Scope: Scalar360.pos.CREATE
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
| Body field | Type | Required | Notes |
|---|---|---|---|
type | string | Yes | required |
category | string | ||
amount | number | Yes | required |
reason | string |
curl -X POST "https://api.scalar360.com/api/v1/pos/sessions/{id}/cash" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"type":"string","amount":100}'Close session
/api/v1/pos/sessions/{id}/close
Scope: Scalar360.pos.CREATE
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
| Body field | Type | Required | Notes |
|---|---|---|---|
countedCash | number | Yes | required |
notes | string | ||
denominationJson | string |
curl -X POST "https://api.scalar360.com/api/v1/pos/sessions/{id}/close" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"countedCash":100}'Session report
/api/v1/pos/sessions/{id}/report
Scope: Scalar360.pos.READ
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string (uuid) | Yes |
curl -X GET "https://api.scalar360.com/api/v1/pos/sessions/{id}/report" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Current session
/api/v1/pos/sessions/current
Scope: Scalar360.pos.READ
| Parameter | In | Type | Required |
|---|---|---|---|
registerId | query | string (uuid) | Yes |
curl -X GET "https://api.scalar360.com/api/v1/pos/sessions/current" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"Open session
/api/v1/pos/sessions/open
Scope: Scalar360.pos.CREATE
| Body field | Type | Required | Notes |
|---|---|---|---|
registerId | string (uuid) | Yes | |
openingFloat | number |
curl -X POST "https://api.scalar360.com/api/v1/pos/sessions/open" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"registerId":"3f1c2b9e-7a1d-4c3e-9b2a-1e5f6a7b8c9d"}'Set settings
/api/v1/pos/settings
Scope: Scalar360.pos.UPDATE
curl -X PUT "https://api.scalar360.com/api/v1/pos/settings" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'Status
/api/v1/pos/status
Scope: Scalar360.pos.READ
curl -X GET "https://api.scalar360.com/api/v1/pos/status" \
-H "Authorization: Scalar360-oauthtoken $ACCESS_TOKEN"