Controls API
Endpoints for direct hardware control of vending bins and refrigerated cabinets. All control endpoints require the controls:write or controls:read scope.
response_data aren't documented by the API and may be empty or vary by action, so don't rely on a fixed shape for it beyond what's shown per endpoint below.Bin Controls
Open a specific vending bin door.
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/open_bin?bin=1&hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
bin | Integer | Query | Required | Bin number (1–4) |
hub | Integer | Query | Required | Hub ID |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}
Errors
| Error Code | Description |
|---|---|
| hub_access_denied | API key does not have access to the specified hub |
| bin_not_found | The specified bin number does not exist on this hub |
| hardware_error | Failed to communicate with bin hardware |
Close a specific vending bin door.
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/close_bin?bin=1&hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
bin | Integer | Query | Required | Bin number (1–4) |
hub | Integer | Query | Required | Hub ID |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}
Enable a bin to accept customer orders.
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/enable_bin?bin=1&hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
bin | Integer | Query | Required | Bin number (1–4) |
hub | Integer | Query | Required | Hub ID |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}
Disable a bin from accepting orders (maintenance mode).
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/disable_bin?bin=1&hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
bin | Integer | Query | Required | Bin number (1–4) |
hub | Integer | Query | Required | Hub ID |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}
Get current operational status of a bin.
Example Request
curl -X GET \ "https://tina-api.venhub.com/api/v1/owners/controls/get_bin_status?bin=1&hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
bin | Integer | Query | Required | Bin number (1–4) |
hub | Integer | Query | Required | Hub ID |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}
Toggle bin enabled/disabled state.
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/toggle_bin?bin=1&hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
bin | Integer | Query | Required | Bin number (1–4) |
hub | Integer | Query | Required | Hub ID |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}
Raise the lift panel for product retrieval.
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/raise_bin?bin=1&hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
bin | Integer | Query | Required | Bin number (1–4) |
hub | Integer | Query | Required | Hub ID |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}
Lower the lift panel after restocking.
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/lower_bin?bin=1&hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
bin | Integer | Query | Required | Bin number (1–4) |
hub | Integer | Query | Required | Hub ID |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}
Cycle a bin door open/close multiple times (for testing).
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/cycle_bin?bin=1&hub=123&num_cycles=3" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
bin | Integer | Query | Required | Bin number (1–4) |
hub | Integer | Query | Required | Hub ID |
num_cycles | Integer | Query | Required | Number of times to cycle the door |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}
Reconnect communication to a bin after connection loss.
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/reconnect_bin?bin=1&hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
bin | Integer | Query | Required | Bin number (1–4) |
hub | Integer | Query | Required | Hub ID |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}
Enable a bin over the SSH management channel, bypassing the primary control path.
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/enable_bin_ssh?bin=1&hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
bin | Integer | Query | Required | Bin number |
hub | Integer | Query | Required | Hub ID |
Response
{
"status": "ok",
"result": {
"success": true,
"hub_id": 123,
"bin_number": 1,
"enabled_bin": 1,
"disabled_bins": [2, 3, 4],
"stop_result": null,
"start_result": null
}
}
{
"status": "error",
"result": {
"success": false,
"error": "Bin 1 not found on hub 123",
"error_type": "validation_error",
"hub_id": 123,
"bin_number": 1
}
}
Disable a bin over the SSH management channel, bypassing the primary control path.
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/disable_bin_ssh?bin=1&hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
bin | Integer | Query | Required | Bin number |
hub | Integer | Query | Required | Hub ID |
Response
{
"status": "ok",
"result": {
"success": true,
"hub_id": 123,
"bin_number": 1,
"enabled_bin": 1,
"disabled_bins": [1],
"stop_result": null,
"start_result": null
}
}
{
"status": "error",
"result": {
"success": false,
"error": "Bin 1 not found on hub 123",
"error_type": "validation_error",
"hub_id": 123,
"bin_number": 1
}
}
Fridge Controls
Open the left door of a refrigerated cabinet.
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/open_fridge_left?fridge=1&hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
fridge | Integer | Query | Required | Fridge number |
hub | Integer | Query | Required | Hub ID |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}
Open the right door of a refrigerated cabinet.
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/open_fridge_right?fridge=1&hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
fridge | Integer | Query | Required | Fridge number |
hub | Integer | Query | Required | Hub ID |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}
Open the middle door of a refrigerated cabinet.
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/open_fridge_middle?fridge=1&hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
fridge | Integer | Query | Required | Fridge number |
hub | Integer | Query | Required | Hub ID |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}
Close a refrigerated cabinet door.
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/close_fridge?fridge=1&hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
fridge | Integer | Query | Required | Fridge number |
hub | Integer | Query | Required | Hub ID |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}
Enable a refrigerated cabinet for operation.
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/enable_fridge?fridge=1&hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
fridge | Integer | Query | Required | Fridge number |
hub | Integer | Query | Required | Hub ID |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}
Disable a refrigerated cabinet (maintenance mode).
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/disable_fridge?fridge=1&hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
fridge | Integer | Query | Required | Fridge number |
hub | Integer | Query | Required | Hub ID |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}
Reconnect communication to a fridge after connection loss.
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/reconnect_fridge?fridge=1&hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
fridge | Integer | Query | Required | Fridge number |
hub | Integer | Query | Required | Hub ID |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}
Order Flow Controls
Pause new customer orders hub-wide, independent of any single bin or fridge.
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/stop_orders?hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
hub | Integer | Query | Required | Hub ID — the only parameter this endpoint takes |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}
Resume customer orders hub-wide after a stop_orders call.
Example Request
curl -X POST \ "https://tina-api.venhub.com/api/v1/owners/controls/resume_orders?hub=123" \ --header "X-API-Key: vh_abc123..."
Parameters
| Parameter | Type | Location | Required | Description |
|---|---|---|---|---|
hub | Integer | Query | Required | Hub ID — the only parameter this endpoint takes |
Response
{
"status": "ok",
"result": {
"success": true,
"status_code": 200,
"response_data": null
}
}