Quickstart
Internal beta — not released yet
The Automation API is an internal beta and is not released yet. Its endpoints and payloads are not final and may change or be withdrawn at any time without notice.
This walks the full lifecycle end to end: discover → create → configure → validate → activate → run → observe. Every call uses a user API key and assumes you administrate the app's workspace.
1. Discover the vocabulary
Learn what triggers, actions and filter operators exist — never hard-code them.
curl https://api.tapeapp.com/v1/automation/meta/trigger -u user_key_replace_with_your_api_key:
Do the same for /meta/action and /meta/filter?field_type=number. Trigger and action entries each carry a
config_schema you build against; a /meta/filter entry is an operator — { operator, label, description?, value_arity },
with no config_schema. See Discovery.
2. Create the automation
Create it in an app. A new automation lands paused and not broken — a draft you finish, then activate.
curl -X POST https://api.tapeapp.com/v1/automation/app/87 \
-u user_key_replace_with_your_api_key: \
-H "Content-Type: application/json" \
--data '{
"name": "Email the owner on a new high-priority lead",
"trigger": { "type": "record_created", "config": {} }
}'
The response is the automation object wrapped as { "automation": … }.
Note its id for the next steps.
3. Configure the filter and actions
Add a filter and actions with a partial update. Omitted fields are left unchanged.
curl -X PUT https://api.tapeapp.com/v1/automation/4021 \
-u user_key_replace_with_your_api_key: \
-H "Content-Type: application/json" \
--data '{
"filter": {
"operator": "and",
"rows": [
{
"subject": { "kind": "variable", "source": "field", "field_id": 512, "field_type": "single_category", "previous": false, "collection": false, "triggering": false },
"operator": "is_any_of",
"value": { "type": "ids", "ids": [9001] }
}
]
},
"actions": [
{ "type": "send_email", "config": { "to_address": ["[email protected]"], "subject": ["A new high-priority lead was created"] } }
]
}'
Node IDs are optional — omit them and the server mints them. Dynamic values (like the field reference above) are how a value pulls in live record data.
4. Validate
Check the definition before going live — create/update don't re-validate, so broken may lag.
curl https://api.tapeapp.com/v1/automation/4021/validate -u user_key_replace_with_your_api_key:
A { "valid": true, "errors": [] } means it's ready. Otherwise each entry names the fault — see
Errors & broken reasons.
5. Activate
Go live. A broken definition is refused with 409 (validity is recomputed server-side).
curl -X POST https://api.tapeapp.com/v1/automation/4021/activate -u user_key_replace_with_your_api_key:
6. Run and observe
Trigger a run manually against a record (real side effects), then poll for the result. Execution is asynchronous —
the response is 202 with a message and no run ID.
curl -X POST https://api.tapeapp.com/v1/automation/4021/manual-run \
-u user_key_replace_with_your_api_key: \
-H "Content-Type: application/json" \
--data '{ "record_id": 5001 }'
Observe the resulting run through the Automation Run API — list the automation's runs and match on the record. See Execution for the per-trigger run body and the polling model.