Needs keys Live actions call the vendor (Cal.com, HubSpot, Calendly, Zendesk, Salesforce, Dynamics 365, GoHighLevel or Zoho) with the app's credentials. In mock mode the action returns deterministic sample data, and mock Cal.com bookings persist so list, reschedule and cancel stay consistent.
Runs an action against an app and logs the run in List app usages. It is the same code path the voice runtime uses for integration_app tools, so use it to test a tool before you attach it to an agent. This is the dashboard's Test tool button.
Request#
| Path parameter | Type | Required | Description |
|---|---|---|---|
id |
string | Yes | The app_id. |
| Field | Type | Required | Description |
|---|---|---|---|
action |
string | Yes | One of the app's actions, for example cal_com.check_availability. |
arguments |
object | No | Arguments for the action, as the LLM would pass them. Defaults to {}. See Get app tool schema for each action's schema. |
tool |
object | No | Tool settings to apply, as on an integration_app tool. app_id and action are taken from the path and body. |
tool.static_arguments |
object | No | Fixed arguments merged under arguments. Keys in arguments win. |
tool.response_variables |
object | No | Variable name to JSON path in the output, for example { "first_slot": "slots[0].start" }. |
tool.output_selection |
string[] | No | JSON paths of the output to return. Empty or missing returns the whole output. |
Example request#
curl -X POST https://api.tried.com.au/apps/app_6f1c2a9e4b7d3058a1e2c4f9/execute \
-H "Authorization: Bearer $TRIED_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"action": "cal_com.check_availability",
"arguments": { "start": "2026-10-20", "time_zone": "Australia/Sydney" },
"tool": { "response_variables": { "first_slot": "slots[0].start" } }
}'const res = await fetch("https://api.tried.com.au/apps/app_6f1c2a9e4b7d3058a1e2c4f9/execute", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.TRIED_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
action: "cal_com.check_availability",
arguments: { start: "2026-10-20", time_zone: "Australia/Sydney" },
tool: { response_variables: { first_slot: "slots[0].start" } },
}),
});
const run = await res.json();import os, requests
res = requests.post(
"https://api.tried.com.au/apps/app_6f1c2a9e4b7d3058a1e2c4f9/execute",
headers={"Authorization": f"Bearer {os.environ['TRIED_API_KEY']}"},
json={
"action": "cal_com.check_availability",
"arguments": {"start": "2026-10-20", "time_zone": "Australia/Sydney"},
"tool": {"response_variables": {"first_slot": "slots[0].start"}},
},
)
run = res.json()Response#
200 OK, also when the vendor call fails. Check success.
This example is from an app in mock mode:
{
"success": true,
"result": "{\"slots\":[{\"start\":\"2026-10-20T09:00:00Z\"},{\"start\":\"2026-10-20T14:00:00Z\"},{\"start\":\"2026-10-21T09:00:00Z\"},{\"start\":\"2026-10-21T14:00:00Z\"},{\"start\":\"2026-10-22T09:00:00Z\"},{\"start\":\"2026-10-22T14:00:00Z\"}],\"time_zone\":\"Australia/Sydney\"}",
"output": {
"slots": [
{ "start": "2026-10-20T09:00:00Z" },
{ "start": "2026-10-20T14:00:00Z" },
{ "start": "2026-10-21T09:00:00Z" },
{ "start": "2026-10-21T14:00:00Z" },
{ "start": "2026-10-22T09:00:00Z" },
{ "start": "2026-10-22T14:00:00Z" }
],
"time_zone": "Australia/Sydney"
},
"response_variables": { "first_slot": "2026-10-20T09:00:00Z" },
"error": null,
"mock": true,
"duration_ms": 4,
"app_id": "app_6f1c2a9e4b7d3058a1e2c4f9",
"action": "cal_com.check_availability"
}| Field | Type | Description |
|---|---|---|
success |
boolean | false when the vendor or mock action failed. |
result |
string | What the LLM receives: JSON of output, or {"error": "..."} on failure. Cut at 15,000 characters. |
output |
any | The output after output_selection. null on failure. |
response_variables |
object | Extracted values as strings (objects are JSON encoded). Empty on failure. |
error |
string or null | Vendor error, for example POST /v2/bookings returned 400: {...}, or a mock error such as That slot is no longer available. |
mock |
boolean | true when no vendor call was made. |
duration_ms |
integer | Time the action took. |
A live action that gets a 401 or 403 from the vendor also sets the app's status to error.
Errors#
| Status | When |
|---|---|
400 |
Body fails validation (for example action: Required), or <action> is not an action of <app_type>. |
401 |
Missing or invalid API key. |
403 |
The key's IP allowlist or scopes reject the request. This route needs the admin scope. Dashboard members are read-only. |
404 |
App <id> not found in this workspace. |
429 |
Rate limit exceeded. See Rate limits. |
See Errors for the body format.