Download OpenAPI specification:Download
TrakRF public REST API. See docs.trakrf.id/api for the customer-facing reference.
Paginated assets list with natural-key filters, sort, and substring search
| limit | integer Default: 50 max 200 |
| offset | integer Default: 0 min 0 |
| location | string filter by location natural key (may repeat) |
| is_active | boolean filter by active flag |
| type | string filter by type |
| q | string substring search (case-insensitive) on name, identifier, description, and active identifier values |
| sort | string comma-separated; prefix '-' for DESC |
{- "data": [
- {
- "created_at": "2019-08-24T14:15:22Z",
- "current_location": "string",
- "description": "string",
- "identifier": "string",
- "identifiers": [
- {
- "id": 0,
- "is_active": true,
- "type": "rfid",
- "value": "string"
}
], - "is_active": true,
- "metadata": { },
- "name": "string",
- "surrogate_id": 0,
- "type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "valid_from": "2019-08-24T14:15:22Z",
- "valid_to": "2019-08-24T14:15:22Z"
}
], - "limit": 50,
- "offset": 0,
- "total_count": 100
}Create a new asset record, optionally with one or more tag identifiers (RFID, BLE, barcode). Returns the created asset with its assigned identifiers. The Location response header contains the canonical URL.
Asset to create with optional identifiers
| current_location | string [ 1 .. 255 ] characters |
| description | string <= 1024 characters |
| identifier | string <= 255 characters |
Array of objects (github_com_trakrf_platform_backend_internal_models_shared.TagIdentifierRequest) | |
| is_active | boolean |
object | |
| name required | string [ 1 .. 255 ] characters |
| type | string Enum: "asset" "person" "inventory" |
| valid_from | string <date-time> |
| valid_to | string <date-time> |
{- "current_location": "WHS-01",
- "description": "string",
- "identifier": "string",
- "identifiers": [
- {
- "type": "rfid",
- "value": "string"
}
], - "is_active": true,
- "metadata": { },
- "name": "string",
- "type": "asset",
- "valid_from": "2025-01-01T00:00:00Z",
- "valid_to": "2026-01-01T00:00:00Z"
}{- "data": {
- "created_at": "2019-08-24T14:15:22Z",
- "current_location": "string",
- "description": "string",
- "identifier": "string",
- "identifiers": [
- {
- "id": 0,
- "is_active": true,
- "type": "rfid",
- "value": "string"
}
], - "is_active": true,
- "metadata": { },
- "name": "string",
- "surrogate_id": 0,
- "type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "valid_from": "2019-08-24T14:15:22Z",
- "valid_to": "2019-08-24T14:15:22Z"
}
}Delete an asset by its natural identifier. The asset is removed from all subsequent queries and its identifier becomes immediately available for reuse. Returns 204 on success, 404 if the asset does not exist or has already been deleted.
| identifier required | string Asset identifier |
{- "error": {
- "detail": "string",
- "fields": [
- {
- "code": "string",
- "field": "string",
- "message": "string",
- "params": {
- "property1": null,
- "property2": null
}
}
], - "instance": "string",
- "request_id": "string",
- "status": 0,
- "title": "string",
- "type": "validation_error"
}
}Retrieve an asset by its natural identifier. Returns 404 if the asset does not exist.
| identifier required | string Asset identifier (natural key) |
{- "data": {
- "created_at": "2019-08-24T14:15:22Z",
- "current_location": "string",
- "description": "string",
- "identifier": "string",
- "identifiers": [
- {
- "id": 0,
- "is_active": true,
- "type": "rfid",
- "value": "string"
}
], - "is_active": true,
- "metadata": { },
- "name": "string",
- "surrogate_id": 0,
- "type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "valid_from": "2019-08-24T14:15:22Z",
- "valid_to": "2019-08-24T14:15:22Z"
}
}Update mutable fields on an existing asset. Only fields included in the request body are changed.
| identifier required | string Asset identifier |
Fields to update
| current_location | string [ 1 .. 255 ] characters |
| description | string <= 1024 characters |
| identifier | string [ 1 .. 255 ] characters |
| is_active | boolean |
object | |
| name | string [ 1 .. 255 ] characters |
| type | string Enum: "asset" "person" "inventory" |
| valid_from | string <date-time> |
| valid_to | string <date-time> |
{- "current_location": "WHS-01",
- "description": "string",
- "identifier": "string",
- "is_active": true,
- "metadata": { },
- "name": "string",
- "type": "asset",
- "valid_from": "2025-01-01T00:00:00Z",
- "valid_to": "2026-01-01T00:00:00Z"
}{- "data": {
- "created_at": "2019-08-24T14:15:22Z",
- "current_location": "string",
- "description": "string",
- "identifier": "string",
- "identifiers": [
- {
- "id": 0,
- "is_active": true,
- "type": "rfid",
- "value": "string"
}
], - "is_active": true,
- "metadata": { },
- "name": "string",
- "surrogate_id": 0,
- "type": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "valid_from": "2019-08-24T14:15:22Z",
- "valid_to": "2019-08-24T14:15:22Z"
}
}Attach a tag identifier (RFID EPC, BLE beacon ID, barcode, etc.) to an existing asset. The identifier must be unique within the organization.
| identifier required | string Asset identifier |
Tag identifier to attach
| type | string Enum: "rfid" "ble" "barcode" |
| value required | string [ 1 .. 255 ] characters |
{- "type": "rfid",
- "value": "string"
}{ }Detach a tag identifier from an asset by its identifier record ID.
| identifier required | string Asset identifier |
| identifierId required | integer Identifier ID |
{- "error": {
- "detail": "string",
- "fields": [
- {
- "code": "string",
- "field": "string",
- "message": "string",
- "params": {
- "property1": null,
- "property2": null
}
}
], - "instance": "string",
- "request_id": "string",
- "status": 0,
- "title": "string",
- "type": "validation_error"
}
}Location history for an asset identified by its natural key.
| identifier required | string Asset identifier (natural key) |
| limit | integer Default: 50 max 200 |
| offset | integer Default: 0 min 0 |
| from | string RFC 3339 start timestamp |
| to | string RFC 3339 end timestamp |
{- "data": [
- {
- "duration_seconds": 0,
- "location": "string",
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "limit": 50,
- "offset": 0,
- "total_count": 100
}Snapshot of each asset's most recent location, filterable by natural key.
| limit | integer Default: 50 max 200 |
| offset | integer Default: 0 min 0 |
| location | string filter by location identifier (may repeat) |
| q | string substring search (case-insensitive) on asset name, identifier, and active identifier values |
| sort | string comma-separated sort fields; prefix '-' for DESC |
{- "data": [
- {
- "asset": "string",
- "last_seen": "2019-08-24T14:15:22Z",
- "location": "string"
}
], - "limit": 50,
- "offset": 0,
- "total_count": 100
}Persist scanned RFID assets to the asset_scans hypertable
Save request with location and asset IDs
| asset_identifiers | Array of strings non-empty |
| location_identifier | string [ 1 .. 255 ] characters |
{- "asset_identifiers": [
- "ASSET-0001"
], - "location_identifier": "WH-01"
}{- "data": {
- "count": 0,
- "location_id": 0,
- "location_name": "string",
- "timestamp": "2019-08-24T14:15:22Z"
}
}| limit | integer Default: 50 max 200 |
| offset | integer Default: 0 min 0 |
| parent | string filter by parent identifier (may repeat) |
| is_active | boolean filter by active flag |
| q | string substring search (case-insensitive) on name, identifier, description, and active identifier values |
| sort | string comma-separated, prefix '-' for DESC |
{- "data": [
- {
- "created_at": "2019-08-24T14:15:22Z",
- "depth": 0,
- "description": "string",
- "identifier": "string",
- "identifiers": [
- {
- "id": 0,
- "is_active": true,
- "type": "rfid",
- "value": "string"
}
], - "is_active": true,
- "name": "string",
- "parent": "string",
- "path": "string",
- "surrogate_id": 0,
- "updated_at": "2019-08-24T14:15:22Z",
- "valid_from": "2019-08-24T14:15:22Z",
- "valid_to": "2019-08-24T14:15:22Z"
}
], - "limit": 50,
- "offset": 0,
- "total_count": 100
}Create a new location in the hierarchy, optionally with one or more tag identifiers. Set ParentLocationID to nest the location under an existing parent. The Location response header contains the canonical URL.
Location to create with optional identifiers
| description | string <= 1024 characters |
| identifier required | string [ 1 .. 255 ] characters |
Array of objects (github_com_trakrf_platform_backend_internal_models_shared.TagIdentifierRequest) | |
| is_active | boolean |
| name required | string [ 1 .. 255 ] characters |
| parent_identifier | string [ 1 .. 255 ] characters |
| valid_from | string <date-time> |
| valid_to | string <date-time> |
{- "description": "Main warehouse location",
- "identifier": "wh1",
- "identifiers": [
- {
- "type": "rfid",
- "value": "string"
}
], - "is_active": true,
- "name": "Warehouse 1",
- "parent_identifier": "wh1",
- "valid_from": "2025-12-14T00:00:00Z",
- "valid_to": "2026-12-14T00:00:00Z"
}{- "data": {
- "created_at": "2019-08-24T14:15:22Z",
- "depth": 0,
- "description": "string",
- "identifier": "string",
- "identifiers": [
- {
- "id": 0,
- "is_active": true,
- "type": "rfid",
- "value": "string"
}
], - "is_active": true,
- "name": "string",
- "parent": "string",
- "path": "string",
- "surrogate_id": 0,
- "updated_at": "2019-08-24T14:15:22Z",
- "valid_from": "2019-08-24T14:15:22Z",
- "valid_to": "2019-08-24T14:15:22Z"
}
}Delete a location by its natural identifier. The location is removed from all subsequent queries and its identifier becomes immediately available for reuse. Returns 204 on success, 404 if the location does not exist or has already been deleted.
| identifier required | string Location identifier |
{- "error": {
- "detail": "string",
- "fields": [
- {
- "code": "string",
- "field": "string",
- "message": "string",
- "params": {
- "property1": null,
- "property2": null
}
}
], - "instance": "string",
- "request_id": "string",
- "status": 0,
- "title": "string",
- "type": "validation_error"
}
}Retrieve a location by its natural identifier. Returns 404 if the location does not exist.
| identifier required | string Location identifier (natural key) |
{- "data": {
- "created_at": "2019-08-24T14:15:22Z",
- "depth": 0,
- "description": "string",
- "identifier": "string",
- "identifiers": [
- {
- "id": 0,
- "is_active": true,
- "type": "rfid",
- "value": "string"
}
], - "is_active": true,
- "name": "string",
- "parent": "string",
- "path": "string",
- "surrogate_id": 0,
- "updated_at": "2019-08-24T14:15:22Z",
- "valid_from": "2019-08-24T14:15:22Z",
- "valid_to": "2019-08-24T14:15:22Z"
}
}Update mutable fields on an existing location. Only fields included in the request body are changed.
| identifier required | string Location identifier |
Fields to update
| description | string <= 1024 characters |
| identifier | string [ 1 .. 255 ] characters |
| is_active | boolean |
| name | string [ 1 .. 255 ] characters |
| parent_identifier | string [ 1 .. 255 ] characters |
| valid_from | string <date-time> |
| valid_to | string <date-time> |
{- "description": "Updated description",
- "identifier": "wh1",
- "is_active": true,
- "name": "Warehouse 1",
- "parent_identifier": "wh1",
- "valid_from": "2025-12-14T00:00:00Z",
- "valid_to": "2026-12-14T00:00:00Z"
}{- "data": {
- "created_at": "2019-08-24T14:15:22Z",
- "depth": 0,
- "description": "string",
- "identifier": "string",
- "identifiers": [
- {
- "id": 0,
- "is_active": true,
- "type": "rfid",
- "value": "string"
}
], - "is_active": true,
- "name": "string",
- "parent": "string",
- "path": "string",
- "surrogate_id": 0,
- "updated_at": "2019-08-24T14:15:22Z",
- "valid_from": "2019-08-24T14:15:22Z",
- "valid_to": "2019-08-24T14:15:22Z"
}
}Return all ancestor locations from the root of the hierarchy down to the immediate parent of the specified location.
| identifier required | string Location identifier |
| limit | integer Default: 50 max 200 |
| offset | integer Default: 0 min 0 |
{- "data": [
- {
- "created_at": "2019-08-24T14:15:22Z",
- "depth": 0,
- "description": "string",
- "identifier": "string",
- "identifiers": [
- {
- "id": 0,
- "is_active": true,
- "type": "rfid",
- "value": "string"
}
], - "is_active": true,
- "name": "string",
- "parent": "string",
- "path": "string",
- "surrogate_id": 0,
- "updated_at": "2019-08-24T14:15:22Z",
- "valid_from": "2019-08-24T14:15:22Z",
- "valid_to": "2019-08-24T14:15:22Z"
}
], - "limit": 50,
- "offset": 0,
- "total_count": 100
}Return the immediate child locations of the specified location (one level deep only).
| identifier required | string Location identifier |
| limit | integer Default: 50 max 200 |
| offset | integer Default: 0 min 0 |
{- "data": [
- {
- "created_at": "2019-08-24T14:15:22Z",
- "depth": 0,
- "description": "string",
- "identifier": "string",
- "identifiers": [
- {
- "id": 0,
- "is_active": true,
- "type": "rfid",
- "value": "string"
}
], - "is_active": true,
- "name": "string",
- "parent": "string",
- "path": "string",
- "surrogate_id": 0,
- "updated_at": "2019-08-24T14:15:22Z",
- "valid_from": "2019-08-24T14:15:22Z",
- "valid_to": "2019-08-24T14:15:22Z"
}
], - "limit": 50,
- "offset": 0,
- "total_count": 100
}Return all descendant locations (children, grandchildren, etc.) beneath the specified location in the hierarchy.
| identifier required | string Location identifier |
| limit | integer Default: 50 max 200 |
| offset | integer Default: 0 min 0 |
{- "data": [
- {
- "created_at": "2019-08-24T14:15:22Z",
- "depth": 0,
- "description": "string",
- "identifier": "string",
- "identifiers": [
- {
- "id": 0,
- "is_active": true,
- "type": "rfid",
- "value": "string"
}
], - "is_active": true,
- "name": "string",
- "parent": "string",
- "path": "string",
- "surrogate_id": 0,
- "updated_at": "2019-08-24T14:15:22Z",
- "valid_from": "2019-08-24T14:15:22Z",
- "valid_to": "2019-08-24T14:15:22Z"
}
], - "limit": 50,
- "offset": 0,
- "total_count": 100
}Attach a tag identifier (RFID EPC, BLE beacon ID, barcode, etc.) to an existing location. The identifier must be unique within the organization.
| identifier required | string Location identifier |
Tag identifier to attach
| type | string Enum: "rfid" "ble" "barcode" |
| value required | string [ 1 .. 255 ] characters |
{- "type": "rfid",
- "value": "string"
}{ }Detach a tag identifier from a location by its identifier record ID.
| identifier required | string Location identifier |
| identifierId required | integer Identifier ID |
{- "error": {
- "detail": "string",
- "fields": [
- {
- "code": "string",
- "field": "string",
- "message": "string",
- "params": {
- "property1": null,
- "property2": null
}
}
], - "instance": "string",
- "request_id": "string",
- "status": 0,
- "title": "string",
- "type": "validation_error"
}
}| id required | integer Organization id |
| limit | integer Default: 50 max 200 |
| offset | integer Default: 0 min 0 |
{- "data": [
- {
- "created_at": "2019-08-24T14:15:22Z",
- "created_by": 0,
- "created_by_key_id": 0,
- "expires_at": "2019-08-24T14:15:22Z",
- "id": 0,
- "jti": "string",
- "last_used_at": "2019-08-24T14:15:22Z",
- "name": "string",
- "scopes": [
- "string"
]
}
], - "limit": 50,
- "offset": 0,
- "total_count": 100
}Mints an API-key JWT scoped to the target org. Accepts either session-admin or an API key with the keys:admin scope.
| id required | integer Organization id |
Key creation payload
| expires_at | string <date-time> |
| name required | string [ 1 .. 255 ] characters |
| scopes required | Array of strings non-empty |
{- "expires_at": "2019-08-24T14:15:22Z",
- "name": "string",
- "scopes": [
- "string"
]
}{- "data": {
- "created_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z",
- "id": 0,
- "jti": "string",
- "key": "string",
- "name": "string",
- "scopes": [
- "string"
]
}
}| id required | integer Organization id |
| key_id required | string Either the integer surrogate id or the UUID jti |
{- "error": {
- "detail": "string",
- "fields": [
- {
- "code": "string",
- "field": "string",
- "message": "string",
- "params": {
- "property1": null,
- "property2": null
}
}
], - "instance": "string",
- "request_id": "string",
- "status": 0,
- "title": "string",
- "type": "validation_error"
}
}Returns the organization scoped by the API key presented in Authorization. Intended as a lightweight health-check primitive for integrators verifying a key works end-to-end.
{- "data": {
- "id": 42,
- "name": "Acme Logistics"
}
}