Skip to main content
Actions and Attributes are both configured outbound API calls. An Action runs when a Rulebook Tool node invokes it. An Attribute runs automatically at the start of a conversation to load context (for example, a 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.
The list route returns both. Filter on 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.
A rule gets nothing back from an Action unless the Action declares an output schema. Set outputSchema on the action (via Update action) and map each output field to a Data Step response path. You can inspect this through the API to catch the gotcha before wiring the rule.

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

Each hc-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.