Skip to main content

Angible Edge API (20261027-6c2ff19)

Download OpenAPI specification:Download

Angible Edge APIs

Auth

Device Register

Exchange a device client_id / client_secret for a session token. On success returns an access_token valid for 24 hours; each call issues a fresh token and prunes the caller's expired sessions. Set the returned token as the token header on all subsequent requests.

Recommended: handle token refresh. Every other request is authenticated and will return 403 ("Authorization error") when the token is missing, invalid, or expired. If a previously succeeding (200) session starts receiving 403, the token has almost certainly expired: call this endpoint again to obtain a fresh access_token, then retry the failed request.

path Parameters
sco_id
required
string (Sco Id)
Examples: EXAMPLE_SCO_ID

SCO ID — identifies which SCO device the events belong to. Present in the path of every request.

Request Body schema: application/json
required
client_id
required
string (Client Id)

The device ID issued by Angible. Used with client_secret to authenticate the device. One pair per SCO.

client_secret
required
string (Client Secret)

The device secret issued by Angible.

Responses

Request samples

Content type
application/json
{
  • "client_id": "EXAMPLE_CLIENT_ID",
  • "client_secret": "secret"
}

Response samples

Content type
application/json
{
  • "code": 200,
  • "msg": "Success",
  • "data": {
    }
}

Item

Item added

Records that an item was added to the cart for the given transaction. The transaction must already exist and still be open — calls against a missing or already-finalized transaction are rejected.

path Parameters
sco_id
required
string (Sco Id)
header Parameters
token
required
string (Token)
Examples: EXAMPLE_ACCESS_TOKEN

Session token authenticating the request — the access_token returned by the device-register call. Valid for 24 hours.

Request Body schema: application/json
required
transaction_id
required
string (Transaction Id)

Unique identifier for the transaction

item_id
required
string (Item Id)

Client-assigned identifier for this item, unique within the transaction. Two units of the same product share the same barcode but each carry a distinct item_id. Used as the matching key for Item Remove and Update Items.

barcode
required
string (Barcode)

Barcode of the item

name
required
string (Name)

Name of the item

quantity
required
integer (Quantity)

Number of scan events this action represents — currently always 1, even for items priced by weight in the POS (e.g. a bag of apples charged by weight but scanned once).

added_method
required
string (AddedMethod)
Enum: "scanner" "manual" "order" "manual_input"

How the item was added. One of: scanner, manual, order, manual_input. manual_input is deprecated — send manual instead; it is still accepted and normalized to manual.

timestamp
required
integer (Timestamp)

Time the action occurred on the client device, as a Unix epoch in milliseconds.

Is Kitchen Item (boolean) or Is Kitchen Item (null) (Is Kitchen Item)
Deprecated

Deprecated — use is_scanning_required instead (inverse meaning). Set to true for a kitchen item — food or drink prepared by staff, so the customer does not scan a barcode for it; otherwise false. Still accepted for backward compatibility, but is_scanning_required takes precedence when both are sent.

Is Scanning Required (boolean) or Is Scanning Required (null) (Is Scanning Required)

true = the customer must scan a barcode for this item; false = no scan required (e.g. an item with no barcode, pre-paid in store, or a staff-prepared kitchen item). Defaults to true if omitted.

price
number (Price)

Price of the item. Optional — send a number, or omit the key entirely when the price isn't known yet (it can be finalized later via the item-prices endpoint). Do not send null.

Responses

Request samples

Content type
application/json
{
  • "transaction_id": "txn-123456",
  • "item_id": "51432",
  • "barcode": "1234567890123",
  • "name": "Apple",
  • "quantity": 1,
  • "added_method": "scanner",
  • "timestamp": 1742355063000,
  • "is_kitchen_item": false,
  • "is_scanning_required": true,
  • "price": 5.8
}

Response samples

Content type
application/json
{
  • "code": 200,
  • "msg": "Success",
  • "data": { }
}

Item removed

Records that a previously added item was removed from the cart, identified by item_id. The transaction must already exist and still be open — calls against a missing or already-finalized transaction are rejected.

path Parameters
sco_id
required
string (Sco Id)
header Parameters
token
required
string (Token)
Examples: EXAMPLE_ACCESS_TOKEN

Session token authenticating the request — the access_token returned by the device-register call. Valid for 24 hours.

Request Body schema: application/json
required
transaction_id
required
string (Transaction Id)

Unique identifier for the transaction

item_id
required
string (Item Id)

Identifier of the item being removed — the item_id given when the item was added.

barcode
required
string (Barcode)

Barcode of the item

name
required
string (Name)

Name of the item

quantity
required
integer (Quantity)

Number of units being removed, usually matching the quantity selected in the POS UI (e.g. 5 when removing 5 of the same item at once). Exception: if the item was added via a single barcode scan (e.g. a weight-priced item like a bag of apples), send 1 here to match that original scan-based add, even if the POS quantity differs.

removed_user
required
string (Removed User)

Who removed the item.

timestamp
required
integer (Timestamp)

Time the action occurred on the client device, as a Unix epoch in milliseconds.

Is Kitchen Item (boolean) or Is Kitchen Item (null) (Is Kitchen Item)
Deprecated

Deprecated — use is_scanning_required instead (inverse meaning). Set to true for a kitchen item — food or drink prepared by staff, so the customer does not scan a barcode for it; otherwise false. Still accepted for backward compatibility, but is_scanning_required takes precedence when both are sent.

Is Scanning Required (boolean) or Is Scanning Required (null) (Is Scanning Required)

true = the customer must scan a barcode for this item; false = no scan required (e.g. an item with no barcode, pre-paid in store, or a staff-prepared kitchen item). Defaults to true if omitted.

Responses

Request samples

Content type
application/json
{
  • "transaction_id": "txn-123456",
  • "item_id": "51432",
  • "barcode": "1234567890123",
  • "name": "Apple",
  • "quantity": 1,
  • "removed_user": "staff",
  • "timestamp": 1742355063000,
  • "is_kitchen_item": false,
  • "is_scanning_required": true
}

Response samples

Content type
application/json
{
  • "code": 200,
  • "msg": "Success",
  • "data": { }
}

Update items

Updates the price of items already in the cart, each matched by item_id. The response reports how many items matched (modified) and any item_ids that were not found in the transaction or supplied with no price to set (unmatched_item_ids). The transaction must already exist and still be open.

To set final checkout prices, integrate either this endpoint or Finalized item prices (PUT /v1/{sco_id}/transactions/{transaction_id}/item-prices) — not both. Prefer this endpoint: because it matches per item_id, two units of the same barcode can take different prices (e.g. item1: $100, item2: $0).

path Parameters
sco_id
required
string (Sco Id)
header Parameters
token
required
string (Token)
Examples: EXAMPLE_ACCESS_TOKEN

Session token authenticating the request — the access_token returned by the device-register call. Valid for 24 hours.

Request Body schema: application/json
required
transaction_id
required
string (Transaction Id)

Unique identifier for the transaction

required
Array of objects (Items)

List of items with updated information

Responses

Request samples

Content type
application/json
{
  • "transaction_id": "txn-123456",
  • "items": [
    ]
}

Response samples

Content type
application/json
{
  • "code": 200,
  • "msg": "Success",
  • "data": {
    }
}

Finalized item prices

Applies the final per-item prices (after promotions/discounts) to the transaction. Prices are matched to items by barcode; quantity sets how many units each price applies to, assigned in the order the items were added. Only items still in the cart (added and not since removed) receive a price, so it should be called once the cart contents are final (all item additions and removals settled).

To set final checkout prices, integrate either this endpoint or Update items (PATCH /v1/events/{sco_id}/items) — not both. Prefer Update items unless the SCO system cannot express prices as per-item lines and must aggregate by barcode instead.

path Parameters
sco_id
required
string (Sco Id)
transaction_id
required
string (Transaction Id)
header Parameters
token
required
string (Token)
Examples: EXAMPLE_ACCESS_TOKEN

Session token authenticating the request — the access_token returned by the device-register call. Valid for 24 hours.

Request Body schema: application/json
required
Array
barcode
required
string (Barcode)

Barcode of the item

name
required
string (Name)

Name of the item

price
required
number (Price)

Finalized price of the item after promotions/discounts. Required.

quantity
required
integer (Quantity)

Quantity of the item at this price

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "code": 200,
  • "msg": "Success",
  • "data": { }
}

State

State Change

path Parameters
sco_id
required
string (Sco Id)
header Parameters
token
required
string (Token)
Examples: EXAMPLE_ACCESS_TOKEN

Session token authenticating the request — the access_token returned by the device-register call. Valid for 24 hours.

Request Body schema: application/json
required
transaction_id
required
string (Transaction Id)

Unique identifier for the transaction

transaction_type
string (Transaction Type)
Default: "pending"

Transaction type (e.g., pending, paid)

ui_state
required
string (Ui State)

UI state change (e.g., staff_mode_on, system_pause, system_resume)

timestamp
required
integer (Timestamp)

Timestamp

reason
string (Reason)
Default: ""

Reason for the UI state change (e.g., Manual override by staff)

Staff Id (string) or Staff Id (null) (Staff Id)

Unique identifier for the staff member

Responses

Request samples

Content type
application/json
{
  • "transaction_id": "txn-123456",
  • "transaction_type": "pending",
  • "ui_state": "staff_mode_on",
  • "timestamp": 1742355063000,
  • "reason": "Manual override by staff",
  • "staff_id": "staff_123"
}

Response samples

Content type
application/json
{
  • "code": 200,
  • "msg": "Success",
  • "data": { }
}

Transaction

Transaction started

Call this when a customer begins a checkout session on the SCO — typically when they tap Start or touch the screen.

path Parameters
sco_id
required
string (Sco Id)
header Parameters
token
required
string (Token)
Examples: EXAMPLE_ACCESS_TOKEN

Session token authenticating the request — the access_token returned by the device-register call. Valid for 24 hours.

Request Body schema: application/json
required
transaction_id
required
string (Transaction Id)

Unique identifier assigned to this transaction.

Transaction Type (string) or Transaction Type (null) (Transaction Type)
Default: "pending"

Transaction type (e.g., pending, paid)

User Id (string) or User Id (null) (User Id)

Unique identifier for the end customer

timestamp
required
integer (Timestamp)

Time the event occurred on the client device, as a Unix epoch in milliseconds.

Responses

Request samples

Content type
application/json
{
  • "transaction_id": "txn-123456",
  • "transaction_type": "pending",
  • "user_id": "user_123",
  • "timestamp": 1742355063000
}

Response samples

Content type
application/json
{
  • "code": 200,
  • "msg": "Success",
  • "data": { }
}

Transaction reset

Call this to discard a transaction that was started but will not be completed, so its transaction_id can be used again. Everything held locally for that transaction is deleted and nothing is sent to the cloud. A transaction can be reset whether or not items were scanned — the only requirement is that it has not been completed.

path Parameters
sco_id
required
string (Sco Id)
header Parameters
token
required
string (Token)
Examples: EXAMPLE_ACCESS_TOKEN

Session token authenticating the request — the access_token returned by the device-register call. Valid for 24 hours.

Request Body schema: application/json
required
transaction_id
required
string (Transaction Id)

Identifier of the transaction to discard. Must be one that has been started but not completed.

timestamp
required
integer (Timestamp)

Time the event occurred on the client device, as a Unix epoch in milliseconds.

Responses

Request samples

Content type
application/json
{
  • "transaction_id": "txn-123456",
  • "timestamp": 1742355063000
}

Response samples

Content type
application/json
{
  • "code": 200,
  • "msg": "Success",
  • "data": { }
}

Transaction completed

Call this to close the transaction — typically when payment is made or the receipt is printed. Every opened transaction must be closed. If the customer leaves the SCO idle partway through, close it with status=checkout_abandoned and open a new transaction for the next session rather than reusing the idle one.

path Parameters
sco_id
required
string (Sco Id)
header Parameters
token
required
string (Token)
Examples: EXAMPLE_ACCESS_TOKEN

Session token authenticating the request — the access_token returned by the device-register call. Valid for 24 hours.

Request Body schema: application/json
required
transaction_id
required
string (Transaction Id)

The transaction_id assigned when the transaction was started.

Final Transaction Id (string) or Final Transaction Id (null) (Final Transaction Id)
Default: ""

Include this only when the POS or SCO refers to this transaction by a separate ID, so the transaction's events can be looked up by that ID.

Transaction Type (string) or Transaction Type (null) (Transaction Type)
Default: "pending"

Transaction type (e.g., pending, paid)

User Id (string) or User Id (null) (User Id)

Unique identifier for the end customer

total_items
required
integer (Total Items)

Total number of items scanned

status
required
string (Status)

Status of the transaction (e.g., checkout_ready_to_pay, checkout_abandoned)

timestamp
required
integer (Timestamp)

Time the event occurred on the client device, as a Unix epoch in milliseconds.

Responses

Request samples

Content type
application/json
{
  • "transaction_id": "txn-123456",
  • "final_transaction_id": "final-txn-123456",
  • "transaction_type": "pending",
  • "user_id": "user_123",
  • "total_items": 10,
  • "status": "completed",
  • "timestamp": 1742355063000
}

Response samples

Content type
application/json
{
  • "code": 200,
  • "msg": "Success",
  • "data": { }
}

Scan started

Call this when the customer enters the scanning page — typically when the cart list appears on the screen.

path Parameters
sco_id
required
string (Sco Id)
header Parameters
token
required
string (Token)
Examples: EXAMPLE_ACCESS_TOKEN

Session token authenticating the request — the access_token returned by the device-register call. Valid for 24 hours.

Request Body schema: application/json
required
transaction_id
required
string (Transaction Id)

The transaction_id assigned when the transaction was started.

Transaction Type (string) or Transaction Type (null) (Transaction Type)
Default: "pending"

Transaction type (e.g., pending, paid)

timestamp
required
integer (Timestamp)

Time the event occurred on the client device, as a Unix epoch in milliseconds.

Responses

Request samples

Content type
application/json
{
  • "transaction_id": "txn-123456",
  • "transaction_type": "pending",
  • "timestamp": 1742355063000
}

Response samples

Content type
application/json
{
  • "code": 200,
  • "msg": "Success",
  • "data": { }
}

Scan completed

Call this when the customer leaves the scanning page — typically when they tap Pay to move to the payment page.

path Parameters
sco_id
required
string (Sco Id)
header Parameters
token
required
string (Token)
Examples: EXAMPLE_ACCESS_TOKEN

Session token authenticating the request — the access_token returned by the device-register call. Valid for 24 hours.

Request Body schema: application/json
required
transaction_id
required
string (Transaction Id)

The transaction_id assigned when the transaction was started.

Transaction Type (string) or Transaction Type (null) (Transaction Type)
Default: "pending"

Transaction type (e.g., pending, paid)

total_items
required
integer (Total Items)

The number of items scanned

timestamp
required
integer (Timestamp)

Time the event occurred on the client device, as a Unix epoch in milliseconds.

Responses

Request samples

Content type
application/json
{
  • "transaction_id": "txn-123456",
  • "transaction_type": "pending",
  • "total_items": 10,
  • "timestamp": 1742355063000
}

Response samples

Content type
application/json
{
  • "code": 200,
  • "msg": "Success",
  • "data": { }
}

Get a transaction

Retrieve the record collected for a transaction — scan events, scanned items, states, alerts, and totals — for a given transaction_id on the SCO. Use it to confirm the submitted events were received.

path Parameters
sco_id
required
string (Sco Id)
transaction_id
required
string (Transaction Id)
header Parameters
token
required
string (Token)
Examples: EXAMPLE_ACCESS_TOKEN

Session token authenticating the request — the access_token returned by the device-register call. Valid for 24 hours.

Responses

Response samples

Content type
application/json
{
  • "code": 200,
  • "msg": "Success",
  • "data": {
    }
}

Sco Alert

Weighting Scale Not Matched

path Parameters
sco_id
required
string (Sco Id)
header Parameters
token
required
string (Token)
Examples: EXAMPLE_ACCESS_TOKEN

Session token authenticating the request — the access_token returned by the device-register call. Valid for 24 hours.

Request Body schema: application/json
required
transaction_id
required
string (Transaction Id)

Unique identifier for the transaction

transaction_type
string (Transaction Type)
Default: "pending"

Transaction type (e.g., pending, paid)

item_id
required
string (Item Id)

Unique identifier for the item

name
required
string (Name)

Name of the item

barcode
required
string (Barcode)

Barcode of the item

detected_weight
required
number (Detected Weight)

Detected weight of the item

expected_weight
required
number (Expected Weight)

Expected weight of the item

timestamp
required
integer (Timestamp)

Timestamp

Responses

Request samples

Content type
application/json
{
  • "transaction_id": "txn-123456",
  • "transaction_type": "pending",
  • "item_id": "51432",
  • "name": "Apple",
  • "barcode": "1234567890123",
  • "detected_weight": 50,
  • "expected_weight": 100,
  • "timestamp": 1742355063000
}

Response samples

Content type
application/json
{
  • "code": 200,
  • "msg": "Success",
  • "data": { }
}

AI Service

Update Alert

Update how an AI alert was resolved. Prefer per-item results: give each entry in issue_items its own managed_result, so different items can carry different outcomes. A single whole-alert managed_result is the legacy pattern, used when every issue item shares the same outcome.

path Parameters
alert_id
required
string (Alert Id)
header Parameters
token
required
string (Token)
Examples: EXAMPLE_ACCESS_TOKEN

Session token authenticating the request — the access_token returned by the device-register call. Valid for 24 hours.

Request Body schema: application/json
required
AIServiceAlertsManagedBy (string) or null

Who resolved the alert.

AIServiceAlertsManagedResult (string) or null

Resolution applied to the entire alert (legacy).

Array of objects (Issue Items)

Per-item resolutions (recommended). When provided, omit the root managed_result.

Responses

Request samples

Content type
application/json
Example
{
  • "managed_by": "staff",
  • "issue_items": [
    ]
}

Response samples

Content type
application/json
{
  • "code": 200,
  • "msg": "Success",
  • "data": { }
}

Set AI service test mode

Test-only endpoint that switches the AI box between live AI processing and alert simulations for lab integration.

An alert only fires while an active transaction_id exists — sending a "scan start" signal alone will not trigger the simulation events. You can call this again with a different event_type at any time to switch simulations.

Event type Triggered by Published topic
item_left Scan completed API angible/v1/events/{sco_id}/alerts (alert_type=item_left)
no_scan Item added API angible/v1/events/{sco_id}/alerts (alert_type=no_scan)
no_alert Scan completed API angible/v1/events/{sco_id}/no-alert

For item_left, each simulated alert varies its issue_items count (e.g. 1, then 2) to exercise UI testing.

header Parameters
token
required
string (Token)
Examples: EXAMPLE_ACCESS_TOKEN

Session token authenticating the request — the access_token returned by the device-register call. Valid for 24 hours.

Request Body schema: application/json
required
test_mode
required
boolean (Test Mode)

true enables test mode, simulating AI events for validation; false disables test mode and restores normal AI processing.

event_type
string (AIServiceEventType)
Default: "no_alert"
Enum: "no_alert" "no_scan" "item_left" "item_switch"

AI event type to simulate (only used when test_mode=true). item_switch is reserved for future use and not currently applicable.

Responses

Request samples

Content type
application/json
{
  • "test_mode": true,
  • "event_type": "no_scan"
}

Response samples

Content type
application/json
{
  • "code": 200,
  • "msg": "Success",
  • "data": {
    }
}

Get AI service test mode

Retrieve whether this AI box is currently in AI test mode and, if so, which event_type it is simulating.

header Parameters
token
required
string (Token)
Examples: EXAMPLE_ACCESS_TOKEN

Session token authenticating the request — the access_token returned by the device-register call. Valid for 24 hours.

Responses

Response samples

Content type
application/json
{
  • "code": 200,
  • "msg": "Success",
  • "data": {
    }
}

Multimedia

Get an image

Serves the image file referenced by issue_items[].image_path in the MQTT alert payload — use it to display the issue-item image for an alert.

path Parameters
image_id
required
string (Image Id)
header Parameters
token
required
string (Token)
Examples: EXAMPLE_ACCESS_TOKEN

Session token authenticating the request — the access_token returned by the device-register call. Valid for 24 hours.

Responses

Response samples

Content type
application/json
null