Modules

Point of Sale

Read the tickets sold in the POS screen, with payments, credit and lines.

Overview

The Point of sale module is a full screen for selling at a counter with an open cash register. Each ticket (psal_...) issues a core invoice, so revenue, payments and stock work like any other invoice. The API is read-only: sales are made and voided by a cashier in the POS screen.

Requires the Point of sale module. An owner or admin turns it on in Settings > Modules. While it is off, every endpoint on this page returns 403 with type permission_error and code module_disabled.

The POS Sale Object

JSON
1{
2 "id": "psal_a1b2c3d4e5f6",
3 "object": "pos_sale",
4 "sale_number": "TKV-000231",
5 "status": "completed",
6 "currency": "USD",
7 "total": 59.9,
8 "paid_amount": 59.9,
9 "credit_amount": 0,
10 "cash_received": 60,
11 "change_amount": 0.1,
12 "customer_id": "cus_a1b2c3d4e5f6g7h8",
13 "customer": { "id": "cus_a1b2c3d4e5f6g7h8", "name": "Walk-in customer" },
14 "invoice_id": "inv_b2c3d4e5f6g7h8i9",
15 "invoice": { "id": "inv_b2c3d4e5f6g7h8i9", "invoice_number": "INV-2026-000231", "status": "paid", "amount_due": 0 },
16 "register_id": "creg_a1b2c3d4e5f6",
17 "register": { "id": "creg_a1b2c3d4e5f6", "name": "Front desk" },
18 "session_id": "cses_a1b2c3d4e5f6",
19 "session": { "id": "cses_a1b2c3d4e5f6", "session_number": "CS-000012", "status": "open" },
20 "cashier": { "id": "usr_a1b2c3d4e5f6", "name": "Jane Doe" },
21 "payments": [{ "payment_method": "cash", "amount": 59.9 }],
22 "voided_at": null,
23 "void_reason": null,
24 "created_at": "2026-10-11T15:30:00.000Z",
25 "lines": [
26 { "object": "pos_sale_line", "item_id": "itm_e5f6g7h8i9j0k1l2", "code": "SKU-001", "name": "USB-C cable", "quantity": 2, "unit": "unit", "unit_price": 29.95, "discount": 0, "total": 59.9 }
27 ]
28}
  • status is completed or voided; pending sales are never returned
  • credit_amount is the part left on credit (the balance of the invoice)
  • payments aggregates the invoice payments by method: cash, credit_card, debit_card, bank_transfer, wallet, other
  • lines is only included when you retrieve one sale. For the full document use GET /v1/invoices/{invoice_id}

Endpoints

MethodPathPermissionDescription
GET/v1/pos-salesreadList sales (session_id, register_id, customer_id, status, created[gte], created[lte])
GET/v1/pos-sales/{id}readRetrieve a sale with its lines

Sales of the Day

1curl -G "https://api.corebill.io/v1/pos-sales" \
2 -H "Authorization: Bearer sk_live_your_api_key" \
3 --data-urlencode "created[gte]=2026-10-11" \
4 --data-urlencode "status=completed" \
5 -d limit=100

created[gte] and created[lte] accept ISO 8601 (2026-10-11 or 2026-10-11T15:30:00Z) or unix seconds. Invalid values return 400 invalid_timestamp. POS sales emit pos_sale.completed and pos_sale.voided.