Solink tags video to cash management events based on a unique place and time pairing. Time is absolute and must adhere to the convention defined here.
Cash management events capture cash movements and shift-lifecycle changes at a till, safe, or register. Two enumerated fields: cashAction and shiftAction describe what occurred.
Required Object Fields
| Field | Type | Description |
|---|---|---|
| dataSourceId | String | A unique identifier representing the source of the cash management data, typically a point-of-sale (POS) register, cash recycler, or safe within the environment. This ID helps differentiate where each event originated within the site. |
| dataType | String | Must be set to "cash-management" to specify which data type the current event is. |
| endTime | Number / String | End time of the event in either Unix time format milliseconds or ISO-8601 compliant format. |
| eventUniqueId | String | Unique ID which identifies the event in the originating software. Used for de-duplication. The schema rejects the following characters: ! * ' ( ) ; : @ & = + $ , / ? % # [ ]WARNING: Events sharing the same eventUniqueId will be upserted, meaning the latest data will overwrite the previous record. |
| items | Array | The list of items, actions or events processed in the event. Pass an empty array [] when there are no items. |
| schemaVersion | String | Must be set to "1" to specify which version of the schema is being used for this event (e.g. "1", "2", etc). |
| siteExternalId | String | Unique location identifier within the customer's set of locations. |
| startTime | Number / String | Start time of the event in either Unix time format milliseconds or ISO-8601 compliant format. |
Optional Object Fields
| Field | Type | Description |
|---|---|---|
| acceptedCashDeposit | Number | Cash amount accepted by the device. |
| cashAction | String | Type of cash movement. May be one of the following allowed values:"STARTING_AMOUNT": Opening cash declared at the start of a shift."TILL_DELIVERY": Additional float (change) added to the till during a shift."REMOVE_TENDER": Counted cash removed from the till."TILL_DROP": Uncounted cash dropped into the floor safe."BANK_DROP": Cash moved from the safe to the bank."BANK_DELIVERY": Cash moved from the bank to the safe."INCOME_EXPENSE": Non-sale cash in or out of the till."TENDER_DECLARATION": Declared cash count without finalizing the shift."NO_SALE": Drawer opened without an associated transaction."CASH_IN": Generic cash added to the till."CASH_OUT": Generic cash removed from the till. |
| cashAmount | Number | Monetary amount associated with the action. |
| cashDispensed | Number | Cash amount dispensed. |
| declaredCashDeposits | Number | Cash amount declared as deposited. |
| depositError | Boolean | Whether a deposit error occurred. |
| depositId | String | Identifier of the deposit transaction. |
| dispenseId | String | Identifier of the dispense transaction. |
| employeeId | String | Unique employee id to identify the employee associated with the event. |
| employeeName | String | The name of the employee associated with the event. |
| eventType | String | Legacy free-text event type. Superseded by cashAction / shiftAction, and retained for backwards compatibility. |
| notes | String | Additional notes or comments about the event. |
| rejectedCashDeposit | Number | Cash amount rejected by the device. |
| safeId | String | Identifier of the safe involved in the event. |
| servicingId | String | Identifier of a device servicing event. |
| shiftAction | String | Shift-lifecycle state. May be one of the following allowed values:"OPEN_SHIFT": Shift opened; register session started."BLIND_CLOSE_SHIFT": Shift parked without a full cash count."CLOSE_SHIFT": Shift finalized; totals and variance recorded. |
| shiftId | String | Identifier of the shift the event belongs to. |
| status | String | Status of the event. |
| tillId | String | Identifier of the till / drawer involved in the event. |
Required Item Object Fields
| Field | Type | Description |
|---|---|---|
| description | String | Human-readable description of the item. |
| time | Number / String | Time of the item in either Unix time format milliseconds or ISO-8601 compliant format. |
| type | String | Item type. For example: "PAYMENT" or "CHANGE_DUE". |
Optional Item Object Fields
| Field | Type | Description |
|---|---|---|
| cardNumberLast4 | String | For credit/debit/gift card payment/refund/void. Last four digits of the card number. |
| category | String | Used to track Item Category. |
| currency | String | Currency code. For example: "USD". |
| denomination | Number | Denomination of the counted cash. May be one of the following allowed values, or null:0.01, 0.02, 0.05, 0.1, 0.2, 0.25, 0.5, 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000 |
| quantity | Number | Quantity of the item. |
| sku | String | SKU or other unique item identifier. |
| tray | String | Identifier of the drawer tray / compartment the counted cash belongs to (e.g. the till insert or coin tray). |
| unitPrice | Number | Per unit price of the item. |
JSON Example
{
"dataType": "cash-management",
"schemaVersion": "1",
"startTime": "2026-06-16T14:32:00Z",
"endTime": "2026-06-16T14:32:45Z",
"siteExternalId": "123",
"dataSourceId": "1",
"eventUniqueId": "cm-93688-2026061614",
"employeeId": "27",
"employeeName": "MICHELLE",
"cashAction": "TENDER_DECLARATION",
"shiftId": "SHIFT-4471",
"tillId": "TILL-02",
"cashAmount": 340.00,
"status": "COMPLETED",
"items": [
{
"type": "PAYMENT",
"description": "Twenty dollar bills",
"quantity": 15,
"unitPrice": 20,
"denomination": 20,
"currency": "USD",
"tray": "INSERT",
"time": "2026-06-16T14:32:30Z"
},
{
"type": "PAYMENT",
"description": "Quarters",
"quantity": 160,
"unitPrice": 0.25,
"denomination": 0.25,
"currency": "USD",
"tray": "COIN",
"time": "2026-06-16T14:32:40Z"
}
]
}