AutessaDB Triggers
A trigger is attached to an AutessaDB table and fires an action — invoke an agent, invoke a tool, invoke a manager, or update an AutessaDB table — whenever rows are inserted, updated, or deleted. A trigger's condition names the database event it listens for and, optionally, column filters that narrow it down to specific column changes or values. Triggers execute asynchronously after the row operation commits.
All endpoints are POST with a JSON body and require a poweruser key in the Authorization header, in the form pwrusr:{id}:{secret}. Every request identifies the table the trigger lives on via its tableId.
Base URL
https://api.autessa.com/autessa_poweruser/autessadb/trigger
Trigger anatomy
A trigger definition is a single JSON object. The same shape is sent when creating or updating a trigger and returned by every endpoint that responds with a trigger.
Exactly one of the four action config fields must be set, and it must match triggerType — otherwise the request is rejected with an error.
- Name
triggerId- Type
- string
- Description
Unique identifier for the trigger — a UUID string. Assigned by the server on
/add(any value you send is overwritten) and immutable afterwards.
- Name
triggerName- Type
- string
- Description
Human-readable name for the trigger.
- Name
description- Type
- string
- Description
Optional description of what the trigger does.
- Name
triggerType- Type
- string
- Description
The kind of action this trigger performs. One of
INVOKE_AGENT,INVOKE_TOOL,INVOKE_MANAGER,UPDATE_AUTESSADB.
- Name
condition- Type
- object
- Description
When the trigger should fire. See Trigger condition.
- Name
invokeAgentActionConfig- Type
- object
- Description
Action config for
INVOKE_AGENTtriggers. See Invoke an agent.
- Name
invokeToolActionConfig- Type
- object
- Description
Action config for
INVOKE_TOOLtriggers. See Invoke a tool.
- Name
invokeManagerActionConfig- Type
- object
- Description
Action config for
INVOKE_MANAGERtriggers. See Invoke a manager.
- Name
updateDbActionConfig- Type
- object
- Description
Action config for
UPDATE_AUTESSADBtriggers. See Update AutessaDB.
- Name
enabled- Type
- boolean
- Description
Whether the trigger is active. Defaults to
true. Disabled triggers never fire.
- Name
priority- Type
- integer
- Description
Execution ordering when multiple triggers match the same operation — lower numbers run first. Defaults to
100.
Each table also has table-level trigger settings (configured on the table itself, not through these endpoints): a master enabled switch that silences all triggers on the table, and maxTriggersPerOperation (default 10) that caps how many matching triggers fire for a single row operation. When more triggers match than the cap allows, the highest-priority (lowest number) triggers win.
{
"triggerId": "3f8c2a1e-9b4d-4c6a-8e2f-1d5a7b9c0e3d",
"triggerName": "New lead follow-up",
"description": "Qualify every new lead and store the summary on the row.",
"triggerType": "INVOKE_AGENT",
"condition": {
"event": "INSERT",
"filterMode": "SPECIFIED_COLUMNS",
"logicalOperator": "AND",
"columnFilters": [
{
"columnName": "status",
"operator": "EQUALS",
"compareValue": { "textValue": "new" },
"caseSensitive": false
}
]
},
"invokeAgentActionConfig": {
"agentExecutionRequest": {
"agentId": "kTn4vB2p9Q",
"version": { "versionState": "PUBLISHED" },
"input": [
{
"inputType": "TEXT",
"content": "Qualify this lead: @@{name} from @@{company}. Message: @@{message}"
}
],
"environmentVariables": {
"LEAD_EMAIL": "@@{email}"
},
"executionOutputMode": "TEXT"
},
"storeOutputInColumn": true,
"outputColumnName": "qualification_summary",
"continueOnError": true
},
"enabled": true,
"priority": 100
}
Trigger condition
The condition object decides when the trigger fires.
- Name
event- Type
- string
- Description
The database event to listen for. One of
INSERT,UPDATE,DELETE, orANY(fires on all three).
- Name
filterMode- Type
- string
- Description
How column filters are applied:
ANY_COLUMN,SPECIFIED_COLUMNS, orALL_EXCEPT_SPECIFIED. See Column filters. If omitted, the server treats a condition withcolumnFiltersasSPECIFIED_COLUMNSand a condition without them asANY_COLUMN.
- Name
columnFilters- Type
- array<ColumnFilter>
- Description
The column filters to evaluate. See Column filters.
- Name
logicalOperator- Type
- string
- Description
How multiple column filters combine in
SPECIFIED_COLUMNSmode:AND(all must match — the default),OR(any must match), orXOR(exactly one must match).
{
"event": "UPDATE",
"filterMode": "SPECIFIED_COLUMNS",
"logicalOperator": "AND",
"columnFilters": [
{
"columnName": "stage",
"operator": "EQUALS",
"compareValue": { "textValue": "won" }
},
{
"columnName": "deal_value",
"operator": "GREATER_THAN",
"compareValue": { "integerValue": 10000 }
}
]
}
Variable substitution
Action configs can reference the triggering row's data with the @@{columnName} placeholder syntax. Placeholders inside input content, tool variables, environment variables, and prompt template variables are replaced with the actual column values at execution time. On UPDATE events, @@{old.columnName} references the value before the change.
Invoke an agent
invokeAgentActionConfig — for INVOKE_AGENT triggers. Each firing creates a fresh, single-turn, autonomous agent conversation; do not set a conversationId inside the execution request.
- Name
agentExecutionRequest- Type
- object
- Description
The agent execution request, with the same shape as the Agent API execute call. Fields:
agentId(string, required),version(object withversionState—PUBLISHED, and optionallyversionNumber; defaults to the published version),input(array of multimodal inputs; each hasinputType—TEXT,AUDIO,IMAGE,FILE,IMAGE_URL,FILE_URL— and its content fields, e.g.contentforTEXT),environmentVariables(object of string key-value pairs),promptTemplateVariables(object of string key-value pairs), andexecutionOutputMode(TEXTorAUDIO). Input content and variable values support@@{columnName}substitution.
- Name
storeOutputInColumn- Type
- boolean
- Description
If
true, the agent's text output is written back to a column of the triggering record. Defaults tofalse.
- Name
outputColumnName- Type
- string
- Description
Name of the column that receives the agent output. Only used when
storeOutputInColumnistrue.
- Name
continueOnError- Type
- boolean
- Description
If
true(the default), the trigger completes even when the agent invocation fails. Iffalse, an agent failure fails the whole trigger.
{
"agentExecutionRequest": {
"agentId": "kTn4vB2p9Q",
"version": { "versionState": "PUBLISHED" },
"input": [
{
"inputType": "TEXT",
"content": "Analyze this feedback: @@{customer_feedback}"
}
],
"environmentVariables": {
"CUSTOMER_ID": "@@{customer_id}"
},
"executionOutputMode": "TEXT"
},
"storeOutputInColumn": true,
"outputColumnName": "analysis",
"continueOnError": true
}
Invoke a tool
invokeToolActionConfig — for INVOKE_TOOL triggers.
- Name
toolExecutionRequest- Type
- object
- Description
The tool execution request. Fields:
toolId(string, required),variables(object of string key-value pairs — the tool's arguments),environmentVariables(object of string key-value pairs), andprivateVariables(object of string key-value pairs that are not logged). All three maps support@@{columnName}substitution in their values.
- Name
storeResultInColumn- Type
- boolean
- Description
If
true, the tool execution result is written back to a column of the triggering record. Defaults tofalse.
- Name
resultColumnName- Type
- string
- Description
Name of the column that receives the tool result. Only used when
storeResultInColumnistrue.
- Name
continueOnError- Type
- boolean
- Description
If
true(the default), the trigger completes even when the tool invocation fails. Iffalse, a tool failure fails the whole trigger.
{
"toolExecutionRequest": {
"toolId": "pQ7wE2rT9y",
"variables": {
"email": "@@{user_email}",
"priority": "high"
},
"environmentVariables": {
"REGION": "us-west-2"
}
},
"storeResultInColumn": false,
"continueOnError": true
}
Invoke a manager
invokeManagerActionConfig — for INVOKE_MANAGER triggers. Like agent triggers, each firing creates a fresh, single-turn conversation; do not set a conversationId.
- Name
managerExecutionRequest- Type
- object
- Description
The manager execution request. Fields:
managerId(string, required),input(array of multimodal inputs, same shape as agent input),environmentVariables(object of string key-value pairs),promptTemplateVariables(object of string key-value pairs), andexecutionOutputMode(TEXTorAUDIO). Input content and variable values support@@{columnName}substitution.
- Name
storeOutputInColumn- Type
- boolean
- Description
If
true, the manager's text output is written back to a column of the triggering record. Defaults tofalse.
- Name
outputColumnName- Type
- string
- Description
Name of the column that receives the manager output. Only used when
storeOutputInColumnistrue.
- Name
continueOnError- Type
- boolean
- Description
If
true(the default), the trigger completes even when the manager invocation fails. Iffalse, a manager failure fails the whole trigger.
{
"managerExecutionRequest": {
"managerId": "mR5tY8uI3o",
"input": [
{
"inputType": "TEXT",
"content": "Handle escalation for ticket @@{ticket_id}: @@{summary}"
}
],
"executionOutputMode": "TEXT"
},
"storeOutputInColumn": false,
"continueOnError": true
}
Update AutessaDB
updateDbActionConfig — for UPDATE_AUTESSADB triggers. Performs a database operation against another (or the same) AutessaDB table when the trigger fires.
- Name
targetTableId- Type
- string
- Description
The table the operation is performed on.
- Name
operation- Type
- string
- Description
The operation to perform:
INSERT(create a record fromvalues),UPDATE(modify records selected byrecordIdorwhereGroups),UPSERT(insert, or update on conflict perconflictResolution, usingvaluesandwhereGroupsfor conflict detection), orDELETE(remove records selected byrecordIdorwhereGroups).
- Name
values- Type
- object
- Description
Column values for
INSERT,UPDATE, andUPSERT— a map from column name to a column value object. Each value object carriescolumnType(one of the AutessaDB column types) plus the matching typed field:textValue(string),integerValue(integer),floatValue(float),booleanValue(boolean),multiSelectValue(array<string>),filePath(string, for file-backed types), orvariableValue(string with@@{columnName}placeholders, resolved and parsed to the column's type at execution time). String values also support@@{columnName}substitution.
- Name
recordId- Type
- integer
- Description
Record ID for single-row
UPDATEorDELETE. When set,whereGroupsis ignored.
- Name
whereGroups- Type
- array<WhereGroup>
- Description
WHERE conditions for batch
UPDATE/DELETE, or conflict detection forUPSERT. Each group haslogicalOperator("AND"or"OR", combining the conditions inside the group) andconditions— an array of objects withcolumnName(string),operator(string, e.g.EQUALS,NOT_EQUALS,GREATER_THAN,LESS_THAN,IN,NOT_IN,IS_NULL,IS_NOT_NULL), andvalue.
- Name
groupsLogicalOperator- Type
- string
- Description
How multiple WHERE groups combine:
"AND"or"OR". Defaults to"OR".
- Name
conflictResolution- Type
- string
- Description
UPSERT conflict strategy:
REPLACE(replace the entire record — the default),MERGE(merge fields, new values win),SKIP(leave the existing record untouched), orERROR(fail the trigger on conflict).
- Name
skipIfTargetTableMissing- Type
- boolean
- Description
If
true, the trigger does not fail when the target table is missing or inaccessible. Defaults tofalse.
{
"targetTableId": "zX8cV3bN6m",
"operation": "UPSERT",
"values": {
"customer_email": {
"columnType": "SHORT_TEXT",
"variableValue": "@@{email}"
},
"total_orders": {
"columnType": "INTEGER",
"integerValue": 1
},
"last_seen": {
"columnType": "SHORT_TEXT",
"variableValue": "@@{updated_at}"
}
},
"whereGroups": [
{
"logicalOperator": "AND",
"conditions": [
{
"columnName": "customer_email",
"operator": "EQUALS",
"value": "@@{email}"
}
]
}
],
"groupsLogicalOperator": "OR",
"conflictResolution": "MERGE",
"skipIfTargetTableMissing": false
}
Column filters
Column filters narrow a condition down from "any row event" to specific column changes or values. How they are applied depends on the condition's filterMode:
-
ANY_COLUMN— the trigger fires whenever anything about the row changed. Every column is compared between the old and new record (inserts and deletes always count as a change), including columns added to the table after the trigger was created.columnFiltersare not evaluated in this mode. -
SPECIFIED_COLUMNS— only the listedcolumnFiltersare evaluated, each with itsoperatorandcompareValue, combined with the condition'slogicalOperator(AND,OR, orXOR). Columns added later are ignored. An empty filter list in this mode means the trigger never fires. -
ALL_EXCEPT_SPECIFIED— the trigger fires when any column not named incolumnFilterschanged. Filters are used only for theircolumnNamehere (operators and compare values are ignored). Columns added later are included.
A filter that names a column that does not exist in the table schema never matches.
ColumnFilter
- Name
columnName- Type
- string
- Description
The column the filter applies to.
- Name
operator- Type
- string
- Description
The comparison operator. See Filter operators.
- Name
compareValue- Type
- object
- Description
Typed comparison value, required by value-comparison operators. See below.
- Name
caseSensitive- Type
- boolean
- Description
Whether text comparisons (
EQUALS,NOT_EQUALS,CONTAINS,STARTS_WITH,ENDS_WITH) are case-sensitive. Defaults totrue.
ColumnFilterValue
A type-safe wrapper — populate the one field that matches the column's type, or use variableValue for dynamic comparison.
- Name
textValue- Type
- string
- Description
For
SHORT_TEXT,LONG_TEXT,SINGLE_SELECT, and file-backed column types. For text columns this may itself contain@@{columnName}placeholders, resolved at evaluation time. Also used as the single value checked by the multi-select operators.
- Name
integerValue- Type
- integer
- Description
For
INTEGERcolumns.
- Name
floatValue- Type
- float
- Description
For
FLOATcolumns.
- Name
booleanValue- Type
- boolean
- Description
For
BOOLEANcolumns.
- Name
multiSelectValue- Type
- array<string>
- Description
For
MULTI_SELECTcolumns.
- Name
variableValue- Type
- string
- Description
A variable reference using
@@{columnName}or@@{old.columnName}notation. When set, it takes precedence over the typed fields: the placeholder is replaced with the row's actual data at evaluation time, then parsed to the compared column's type (forMULTI_SELECT, as a comma-separated list). For example, comparingunit_pricewithvariableValue"@@{old.unit_price}"fires on price changes relative to the previous value.
{
"columnName": "status",
"operator": "CHANGED"
}
{
"columnName": "tags",
"operator": "VALUE_ADDED",
"compareValue": { "textValue": "vip" }
}
{
"columnName": "quantity",
"operator": "GREATER_THAN",
"compareValue": { "variableValue": "@@{reorder_threshold}" }
}
Filter operators
Value-comparison operators are evaluated against the new (post-operation) value of the column; the change-detection and multi-select add/remove operators compare the old and new values. On INSERT the old record is empty; on DELETE the new record is empty.
| Operator | Meaning | Column types |
|---|---|---|
CHANGED | The column's value differs between old and new record. | All |
BECAME_NULL | The column had a value and is now empty. | All |
BECAME_NON_NULL | The column was empty and now has a value. | All |
EQUALS | New value equals compareValue (honors caseSensitive for text). | All |
NOT_EQUALS | New value does not equal compareValue. | All |
NULL | New value is empty. | All |
NOT_NULL | New value is present. | All |
GREATER_THAN | New value is greater than compareValue. | INTEGER, FLOAT |
LESS_THAN | New value is less than compareValue. | INTEGER, FLOAT |
GREATER_OR_EQUAL | New value is greater than or equal to compareValue. | INTEGER, FLOAT |
LESS_OR_EQUAL | New value is less than or equal to compareValue. | INTEGER, FLOAT |
CONTAINS | New text contains compareValue.textValue as a substring. | SHORT_TEXT, LONG_TEXT |
STARTS_WITH | New text starts with compareValue.textValue. | SHORT_TEXT, LONG_TEXT |
ENDS_WITH | New text ends with compareValue.textValue. | SHORT_TEXT, LONG_TEXT |
VALUE_ADDED | compareValue.textValue is in the new selection but was not in the old one. | MULTI_SELECT |
VALUE_REMOVED | compareValue.textValue was in the old selection but is not in the new one. | MULTI_SELECT |
CONTAINS_VALUE | The new selection contains compareValue.textValue. | MULTI_SELECT |
IS_TRUE | New value is true. | BOOLEAN |
IS_FALSE | New value is false. | BOOLEAN |
For file-backed column types (FILE, IMAGE, AUDIO, VIDEO), value comparisons operate on the stored file path.
Add Trigger POST/add
Creates a trigger on a table. The server assigns the triggerId (a UUID string) — any triggerId in the submitted trigger is ignored. The trigger must have exactly one action config set, matching its triggerType. Requires publish or admin access to the table.
Request Body
- Name
tableId- Type
- string
- Description
The table to attach the trigger to.
- Name
trigger- Type
- object
- Description
The full trigger definition. See Trigger anatomy.
Response
- Name
trigger- Type
- object
- Description
The stored trigger, including its server-assigned
triggerId.
- Name
errors- Type
- array<string>
- Description
Error messages if the request failed. Absent on success.
- cURL
- JavaScript
- Python
curl https://api.autessa.com/autessa_poweruser/autessadb/trigger/add \
-H "Authorization: $POWERUSER_KEY" \
-H "Content-Type: application/json" \
-d '{
"tableId": "aB3xK9mQ2w",
"trigger": {
"triggerName": "New lead follow-up",
"description": "Qualify every new lead and store the summary on the row.",
"triggerType": "INVOKE_AGENT",
"condition": {
"event": "INSERT",
"filterMode": "SPECIFIED_COLUMNS",
"logicalOperator": "AND",
"columnFilters": [
{
"columnName": "status",
"operator": "EQUALS",
"compareValue": { "textValue": "new" },
"caseSensitive": false
}
]
},
"invokeAgentActionConfig": {
"agentExecutionRequest": {
"agentId": "kTn4vB2p9Q",
"version": { "versionState": "PUBLISHED" },
"input": [
{
"inputType": "TEXT",
"content": "Qualify this lead: @@{name} from @@{company}. Message: @@{message}"
}
],
"environmentVariables": { "LEAD_EMAIL": "@@{email}" },
"executionOutputMode": "TEXT"
},
"storeOutputInColumn": true,
"outputColumnName": "qualification_summary",
"continueOnError": true
},
"enabled": true,
"priority": 100
}
}'
const response = await fetch(
'https://api.autessa.com/autessa_poweruser/autessadb/trigger/add',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': process.env.POWERUSER_KEY
},
body: JSON.stringify({
tableId: 'aB3xK9mQ2w',
trigger: {
triggerName: 'New lead follow-up',
triggerType: 'INVOKE_AGENT',
condition: {
event: 'INSERT',
filterMode: 'SPECIFIED_COLUMNS',
columnFilters: [
{
columnName: 'status',
operator: 'EQUALS',
compareValue: { textValue: 'new' },
caseSensitive: false
}
]
},
invokeAgentActionConfig: {
agentExecutionRequest: {
agentId: 'kTn4vB2p9Q',
input: [
{
inputType: 'TEXT',
content: 'Qualify this lead: @@{name} from @@{company}.'
}
],
executionOutputMode: 'TEXT'
},
storeOutputInColumn: true,
outputColumnName: 'qualification_summary'
}
}
})
}
);
const data = await response.json();
console.log(data.trigger.triggerId);
import os
import requests
response = requests.post(
'https://api.autessa.com/autessa_poweruser/autessadb/trigger/add',
headers={'Authorization': os.environ['POWERUSER_KEY']},
json={
'tableId': 'aB3xK9mQ2w',
'trigger': {
'triggerName': 'New lead follow-up',
'triggerType': 'INVOKE_AGENT',
'condition': {
'event': 'INSERT',
'filterMode': 'SPECIFIED_COLUMNS',
'columnFilters': [
{
'columnName': 'status',
'operator': 'EQUALS',
'compareValue': {'textValue': 'new'},
'caseSensitive': False
}
]
},
'invokeAgentActionConfig': {
'agentExecutionRequest': {
'agentId': 'kTn4vB2p9Q',
'input': [
{
'inputType': 'TEXT',
'content': 'Qualify this lead: @@{name} from @@{company}.'
}
],
'executionOutputMode': 'TEXT'
},
'storeOutputInColumn': True,
'outputColumnName': 'qualification_summary'
}
}
}
)
print(response.json()['trigger']['triggerId'])
{
"trigger": {
"triggerId": "3f8c2a1e-9b4d-4c6a-8e2f-1d5a7b9c0e3d",
"triggerName": "New lead follow-up",
"description": "Qualify every new lead and store the summary on the row.",
"triggerType": "INVOKE_AGENT",
"condition": {
"event": "INSERT",
"filterMode": "SPECIFIED_COLUMNS",
"logicalOperator": "AND",
"columnFilters": [
{
"columnName": "status",
"operator": "EQUALS",
"compareValue": { "textValue": "new" },
"caseSensitive": false
}
]
},
"invokeAgentActionConfig": {
"agentExecutionRequest": {
"agentId": "kTn4vB2p9Q",
"version": { "versionState": "PUBLISHED" },
"input": [
{
"inputType": "TEXT",
"content": "Qualify this lead: @@{name} from @@{company}. Message: @@{message}"
}
],
"environmentVariables": { "LEAD_EMAIL": "@@{email}" },
"executionOutputMode": "TEXT"
},
"storeOutputInColumn": true,
"outputColumnName": "qualification_summary",
"continueOnError": true
},
"enabled": true,
"priority": 100
}
}
Update Trigger POST/update
Replaces an existing trigger's definition. This is a full replacement, not a patch — send the complete trigger object. The top-level triggerId identifies the trigger and always wins over any triggerId inside the trigger object. The replacement must pass the same validation as /add (exactly one action config, matching the triggerType). Requires admin access to the table.
Request Body
- Name
tableId- Type
- string
- Description
The table the trigger belongs to.
- Name
triggerId- Type
- string
- Description
UUID of the trigger to update.
- Name
trigger- Type
- object
- Description
The complete replacement definition. See Trigger anatomy.
Response
- Name
trigger- Type
- object
- Description
The updated trigger.
- Name
errors- Type
- array<string>
- Description
Error messages if the request failed. Absent on success.
- cURL
- JavaScript
- Python
curl https://api.autessa.com/autessa_poweruser/autessadb/trigger/update \
-H "Authorization: $POWERUSER_KEY" \
-H "Content-Type: application/json" \
-d '{
"tableId": "aB3xK9mQ2w",
"triggerId": "3f8c2a1e-9b4d-4c6a-8e2f-1d5a7b9c0e3d",
"trigger": {
"triggerName": "New lead follow-up",
"triggerType": "INVOKE_AGENT",
"condition": {
"event": "INSERT",
"filterMode": "SPECIFIED_COLUMNS",
"columnFilters": [
{
"columnName": "status",
"operator": "EQUALS",
"compareValue": { "textValue": "new" },
"caseSensitive": false
}
]
},
"invokeAgentActionConfig": {
"agentExecutionRequest": {
"agentId": "kTn4vB2p9Q",
"input": [
{
"inputType": "TEXT",
"content": "Qualify this lead: @@{name} from @@{company}."
}
],
"executionOutputMode": "TEXT"
},
"storeOutputInColumn": true,
"outputColumnName": "qualification_summary"
},
"enabled": true,
"priority": 50
}
}'
const response = await fetch(
'https://api.autessa.com/autessa_poweruser/autessadb/trigger/update',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': process.env.POWERUSER_KEY
},
body: JSON.stringify({
tableId: 'aB3xK9mQ2w',
triggerId: '3f8c2a1e-9b4d-4c6a-8e2f-1d5a7b9c0e3d',
trigger: updatedTriggerDefinition // full trigger object
})
}
);
const data = await response.json();
import os
import requests
response = requests.post(
'https://api.autessa.com/autessa_poweruser/autessadb/trigger/update',
headers={'Authorization': os.environ['POWERUSER_KEY']},
json={
'tableId': 'aB3xK9mQ2w',
'triggerId': '3f8c2a1e-9b4d-4c6a-8e2f-1d5a7b9c0e3d',
'trigger': updated_trigger_definition, # full trigger object
},
)
data = response.json()
{
"trigger": {
"triggerId": "3f8c2a1e-9b4d-4c6a-8e2f-1d5a7b9c0e3d",
"triggerName": "New lead follow-up",
"triggerType": "INVOKE_AGENT",
"condition": {
"event": "INSERT",
"filterMode": "SPECIFIED_COLUMNS",
"columnFilters": [
{
"columnName": "status",
"operator": "EQUALS",
"compareValue": { "textValue": "new" },
"caseSensitive": false
}
]
},
"invokeAgentActionConfig": {
"agentExecutionRequest": {
"agentId": "kTn4vB2p9Q",
"input": [
{
"inputType": "TEXT",
"content": "Qualify this lead: @@{name} from @@{company}."
}
],
"executionOutputMode": "TEXT"
},
"storeOutputInColumn": true,
"outputColumnName": "qualification_summary",
"continueOnError": true
},
"enabled": true,
"priority": 50
}
}
Delete Trigger POST/delete
Permanently removes a trigger from a table. Requires admin access to the table.
Request Body
- Name
tableId- Type
- string
- Description
The table the trigger belongs to.
- Name
triggerId- Type
- string
- Description
UUID of the trigger to delete.
Response
- Name
errors- Type
- array<string>
- Description
Error messages if the request failed. Absent on success — a successful delete returns an empty JSON object.
curl https://api.autessa.com/autessa_poweruser/autessadb/trigger/delete \
-H "Authorization: $POWERUSER_KEY" \
-H "Content-Type: application/json" \
-d '{
"tableId": "aB3xK9mQ2w",
"triggerId": "3f8c2a1e-9b4d-4c6a-8e2f-1d5a7b9c0e3d"
}'
{}
Enable Trigger POST/enable
Sets a trigger's enabled flag to true so it resumes firing. Requires admin access to the table.
Request Body
- Name
tableId- Type
- string
- Description
The table the trigger belongs to.
- Name
triggerId- Type
- string
- Description
UUID of the trigger to enable.
Response
- Name
trigger- Type
- object
- Description
The trigger with
enabledset totrue.
- Name
errors- Type
- array<string>
- Description
Error messages if the request failed. Absent on success.
curl https://api.autessa.com/autessa_poweruser/autessadb/trigger/enable \
-H "Authorization: $POWERUSER_KEY" \
-H "Content-Type: application/json" \
-d '{
"tableId": "aB3xK9mQ2w",
"triggerId": "3f8c2a1e-9b4d-4c6a-8e2f-1d5a7b9c0e3d"
}'
{
"trigger": {
"triggerId": "3f8c2a1e-9b4d-4c6a-8e2f-1d5a7b9c0e3d",
"triggerName": "New lead follow-up",
"triggerType": "INVOKE_AGENT",
"enabled": true,
"priority": 100
}
}
Disable Trigger POST/disable
Sets a trigger's enabled flag to false. The trigger definition is kept but it stops firing until re-enabled. Requires admin access to the table.
Request Body
- Name
tableId- Type
- string
- Description
The table the trigger belongs to.
- Name
triggerId- Type
- string
- Description
UUID of the trigger to disable.
Response
- Name
trigger- Type
- object
- Description
The trigger with
enabledset tofalse.
- Name
errors- Type
- array<string>
- Description
Error messages if the request failed. Absent on success.
curl https://api.autessa.com/autessa_poweruser/autessadb/trigger/disable \
-H "Authorization: $POWERUSER_KEY" \
-H "Content-Type: application/json" \
-d '{
"tableId": "aB3xK9mQ2w",
"triggerId": "3f8c2a1e-9b4d-4c6a-8e2f-1d5a7b9c0e3d"
}'
{
"trigger": {
"triggerId": "3f8c2a1e-9b4d-4c6a-8e2f-1d5a7b9c0e3d",
"triggerName": "New lead follow-up",
"triggerType": "INVOKE_AGENT",
"enabled": false,
"priority": 100
}
}
Get Trigger POST/get
Fetches a single trigger's definition. Requires any access level to the table.
Request Body
- Name
tableId- Type
- string
- Description
The table the trigger belongs to.
- Name
triggerId- Type
- string
- Description
UUID of the trigger to fetch.
Response
- Name
trigger- Type
- object
- Description
The trigger definition. See Trigger anatomy.
- Name
errors- Type
- array<string>
- Description
Error messages if the request failed. Absent on success.
curl https://api.autessa.com/autessa_poweruser/autessadb/trigger/get \
-H "Authorization: $POWERUSER_KEY" \
-H "Content-Type: application/json" \
-d '{
"tableId": "aB3xK9mQ2w",
"triggerId": "3f8c2a1e-9b4d-4c6a-8e2f-1d5a7b9c0e3d"
}'
{
"trigger": {
"triggerId": "3f8c2a1e-9b4d-4c6a-8e2f-1d5a7b9c0e3d",
"triggerName": "New lead follow-up",
"triggerType": "INVOKE_AGENT",
"condition": {
"event": "INSERT",
"filterMode": "SPECIFIED_COLUMNS",
"columnFilters": [
{
"columnName": "status",
"operator": "EQUALS",
"compareValue": { "textValue": "new" },
"caseSensitive": false
}
]
},
"invokeAgentActionConfig": {
"agentExecutionRequest": {
"agentId": "kTn4vB2p9Q",
"input": [
{
"inputType": "TEXT",
"content": "Qualify this lead: @@{name} from @@{company}."
}
],
"executionOutputMode": "TEXT"
},
"storeOutputInColumn": true,
"outputColumnName": "qualification_summary",
"continueOnError": true
},
"enabled": true,
"priority": 100
}
}
List Triggers POST/all
Lists every trigger configured on a table. Requires any access level to the table.
Request Body
- Name
tableId- Type
- string
- Description
The table to list triggers for.
Response
- Name
triggers- Type
- array<object>
- Description
All triggers on the table. Each element is a full trigger definition — see Trigger anatomy.
- Name
errors- Type
- array<string>
- Description
Error messages if the request failed. Absent on success.
curl https://api.autessa.com/autessa_poweruser/autessadb/trigger/all \
-H "Authorization: $POWERUSER_KEY" \
-H "Content-Type: application/json" \
-d '{
"tableId": "aB3xK9mQ2w"
}'
{
"triggers": [
{
"triggerId": "3f8c2a1e-9b4d-4c6a-8e2f-1d5a7b9c0e3d",
"triggerName": "New lead follow-up",
"triggerType": "INVOKE_AGENT",
"enabled": true,
"priority": 100
},
{
"triggerId": "7a1d4e9b-2c5f-4b8a-9d3e-6f0c8b2a4e7d",
"triggerName": "Sync won deals to customers",
"triggerType": "UPDATE_AUTESSADB",
"enabled": true,
"priority": 200
}
]
}
Execution History POST/history
Returns the trigger execution log for a table, one calendar month at a time, newest first. Results are paginated with a server-defined page size (50 by default). Requires any access level to the table.
Request Body
- Name
tableId- Type
- string
- Description
The table whose trigger history to fetch.
- Name
year- Type
- integer
- Description
Calendar year to filter by (e.g.
2026). Must be between 2000 and next year.
- Name
month- Type
- integer
- Description
Calendar month to filter by,
1–12.
- Name
page- Type
- integer
- Description
Zero-based page number. Defaults to
0. Negative values are treated as0.
Response
- Name
triggerEvents- Type
- array<object>
- Description
The trigger events for the requested page. Each event has the following fields:
-
eventId(string) — unique identifier of the execution event, a UUID string. -
tableId(string) — the table the trigger ran on. -
triggerId(string) — UUID of the trigger that fired. -
triggerDefinition(object) — the trigger's current full definition (see Trigger anatomy), looked up at read time.nullif the trigger has since been deleted. -
triggerEvent(string) — JSON-encoded payload describing what fired the trigger, including the before/after records of the row operation. -
triggerResponse(string) — JSON-encoded result of the trigger execution. -
createdAt(string) — when the trigger fired, as an ISO-8601 UTC timestamp.
-
- Name
totalElements- Type
- integer
- Description
Total number of trigger events in the requested month.
- Name
totalPages- Type
- integer
- Description
Total number of pages.
- Name
currentPage- Type
- integer
- Description
The zero-based page number returned.
- Name
pageSize- Type
- integer
- Description
Number of events per page.
- Name
hasNext- Type
- boolean
- Description
Whether a next page exists.
- Name
hasPrevious- Type
- boolean
- Description
Whether a previous page exists.
- Name
errors- Type
- array<string>
- Description
Error messages if the request failed. Absent on success.
- cURL
- JavaScript
- Python
curl https://api.autessa.com/autessa_poweruser/autessadb/trigger/history \
-H "Authorization: $POWERUSER_KEY" \
-H "Content-Type: application/json" \
-d '{
"tableId": "aB3xK9mQ2w",
"year": 2026,
"month": 6,
"page": 0
}'
const response = await fetch(
'https://api.autessa.com/autessa_poweruser/autessadb/trigger/history',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': process.env.POWERUSER_KEY
},
body: JSON.stringify({
tableId: 'aB3xK9mQ2w',
year: 2026,
month: 6,
page: 0
})
}
);
const data = await response.json();
for (const event of data.triggerEvents) {
console.log(event.createdAt, event.triggerDefinition?.triggerName);
}
import os
import requests
response = requests.post(
'https://api.autessa.com/autessa_poweruser/autessadb/trigger/history',
headers={'Authorization': os.environ['POWERUSER_KEY']},
json={
'tableId': 'aB3xK9mQ2w',
'year': 2026,
'month': 6,
'page': 0,
},
)
data = response.json()
for event in data['triggerEvents']:
print(event['createdAt'], event['eventId'])
{
"triggerEvents": [
{
"eventId": "b6e2f8a4-1c3d-4e5f-9a7b-8c0d2e4f6a1b",
"tableId": "aB3xK9mQ2w",
"triggerId": "3f8c2a1e-9b4d-4c6a-8e2f-1d5a7b9c0e3d",
"triggerDefinition": {
"triggerId": "3f8c2a1e-9b4d-4c6a-8e2f-1d5a7b9c0e3d",
"triggerName": "New lead follow-up",
"triggerType": "INVOKE_AGENT",
"enabled": true,
"priority": 100
},
"triggerEvent": "{\"event\":\"INSERT\",\"newRecord\":{\"name\":{\"columnType\":\"SHORT_TEXT\",\"textValue\":\"Ada Lovelace\"},\"status\":{\"columnType\":\"SHORT_TEXT\",\"textValue\":\"new\"}}}",
"triggerResponse": "{\"status\":\"SUCCESS\",\"output\":\"Qualified: strong fit, recommend follow-up call.\"}",
"createdAt": "2026-06-15T09:21:07"
}
],
"totalElements": 42,
"totalPages": 1,
"currentPage": 0,
"pageSize": 50,
"hasNext": false,
"hasPrevious": true
}
Errors
All responses share the same envelope. On failure the response contains an errors array of human-readable messages — server-side exceptions are caught and folded into errors rather than surfaced as raw stack traces — and the HTTP status is non-2xx whenever errors is present. The envelope may also carry deprecationWarnings (array<string>) on otherwise-successful calls.
Common failure cases:
-
401 — missing or invalid poweruser key, or insufficient table access: creating a trigger requires publish or admin access; updating, deleting, enabling, or disabling requires admin access; reads require any access to the table.
-
Validation errors — missing
triggerortriggerId, a trigger whose action config does not match itstriggerType(or with zero / more than one action config set), a missingyear/monthon/history, a month outside1–12, or a year outside the accepted range. -
Not found — unknown
tableIdor atriggerIdthat does not exist on the table.