GetUserInfo lookup). Use these public routes to create, read, update, delete, and test both from your backend, so a workspace can be set up entirely through the API instead of the dashboard.
The wire-format paths use
/hc-tools and /api-function-configs because that is the current controller contract. In this reference we call them actions, attributes, and data steps because that is what they represent in the product.An Action and an Attribute are the same resource, distinguished by one field:
alwaysGet: false: an Action, invoked by a rule.alwaysGet: true: an Attribute, fetched automatically each conversation.
alwaysGet to separate them.How the pieces fit
An action or attribute holds the name, description, and typed input and output schema. Its actual HTTP calls live in one or more Data Steps (api-function-configs) linked by toolId and run in stepNumber order, each feeding its extracted output into the next.
Setup order
Creating a working action or attribute is a short sequence, the same one the dashboard performs:1
Create the action or attribute
POST /v2/hc-tools/public with name and alwaysGet.2
Add the input and output schema
PATCH /v2/hc-tools/{id}/public with inputSchema and outputSchema.3
Add one or more Data Steps
POST /v2/api-function-configs/public with toolId set and a stepNumber.4
Attach to agents (attributes and testing)
POST /v2/hc-tools/junctions/public to assign the action or attribute to agents.5
Test it
POST /v2/hc-tools/{id}/test-run/public to run the whole chain, or POST /v2/api-function-configs/test-run/public to test one HTTP call.Endpoint map
Eachhc-tools route is documented twice, once per type, since the same endpoint serves both.
Action or Attribute object
string
Action or attribute ID.
string
ISO 8601 creation timestamp.
string
Workspace ID that owns the record.
string
Display name.
string | null
Human-readable description. Read by your team, not used for routing.
boolean
false for an Action (rule-invoked), true for an Attribute (fetched automatically each conversation).string | null
Optional source. Current values include
ui, api, widget, and integration providers such as zendesk and intercom.InputSchemaField[]
Typed inputs the action or attribute expects. Set through the update route.
OutputSchemaField[]
Typed outputs the action or attribute returns. Set through the update route.
string | null
Set when the record is backed by a built-in integration handler instead of Data Steps. Read-only through the public API.
InputSchemaField object
string
Field name.
string
Current values are
string, number, boolean, array, object, and date.boolean
Whether the field is required.
string
Optional runtime path to bind the value from.
any
Optional literal value.
string
Optional field source. Current values are
metadata, jwt, and apiResponse.any
Optional default value.
string
Optional path to auto-bind from runtime context.
OutputSchemaField object
string
Output field name.
string
Current values are
string, number, boolean, array, object, and date.string
Path into the accumulated Data Step responses to read this value from.
boolean
The “Visible to AI” flag. When
true, the resolved value is exposed to the agent. Applies to attributes.string
Optional field source. Current values are
metadata, jwt, and apiResponse.Data Step object
Returned by the Data Step routes. Sensitive header and body values are masked on read (see below).string
Data Step ID.
string
ISO 8601 creation timestamp.
string
Workspace ID that owns the Data Step.
string
Step name.
string
ID of the action or attribute this step belongs to.
number | null
Position of the step in the chain. Steps run in ascending order.
string
Request URL. Supports
{{placeholder}} interpolation from inputs and earlier steps.string
HTTP verb, for example
GET, POST, PUT, PATCH, or DELETE.object | null
Request headers. Values are wrapped for masking (see below).
object | null
Request body. Values are wrapped for masking (see below).
ResponseMapping
Map of output keys to paths in the HTTP response (the “Save From Response” mapping).
ResponseMapping object
A map of output key to either a response path string, or an object with a path and data type. A path of"." means the entire response body.
Sensitive values and masking
Header and body values can be marked sensitive (for example, an API key). On read, a sensitive value comes back as{ "hide": true, "value": "********" }. Non-sensitive values come back as { "hide": false, "value": <value> }.
When you update a Data Step, you can send the masked
"********" back unchanged and the stored secret is preserved. Send a new string to replace it. To store a value as sensitive, send { "hide": true, "value": "<secret>" }.Action or Attribute test-run result
Returned by Test action and Test attribute.string
Name of the action or attribute that ran.
string
Action or attribute ID.
string
Action or attribute name.
boolean
Whether every Data Step in the chain succeeded.
object
Final output values, keyed by output field name.
object
For attributes, a map of output field name to its
sendToLlm (Visible to AI) flag. Empty for actions.object[]
Per-step results, including the resolved request and each step’s extracted data.
Data Step test-run result
Returned by Test data step.boolean
Whether the HTTP call succeeded.
number
HTTP status code of the outbound call.
any
Raw response body from the call.
string
Present when the call failed.
Agent assignment object
Returned by the action and attribute agent-assignment routes.string
Assignment ID.
string
Agent ID the action or attribute is assigned to.
string
Action or attribute ID.
string
Workspace ID.
string[]
Channels the assignment applies to, for example
chat and email.
