Skip to content
TriedDocs
Integrations

Execute app action

Run one action of an integration app now, the same way an agent's integration_app tool runs it.

POSThttps://api.tried.com.au/apps/{id}/execute

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.