Skip to main content

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.

➡️ Request
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.

➡️ Request
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.

➡️ Request
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.

➡️ Request
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).

➡️ Request
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.

➡️ Request
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.