Skip to main content

Revisions

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.

Every change to an automation appends an immutable revision — a frozen snapshot of its definition. There is no "active version" pointer; to roll back, retrieve a revision and PUT its definition back. Both endpoints require a user API key and workspace-admin access, and cost 1x base credits.

Rolling back is not always a verbatim re-PUT

A revision is a read snapshot with a wider envelope than the update body accepts. Two things make a whole-object PUT fail with a 400: the envelope keys id, automation_id, created_at, paused and broken are not writable (the update body is closed to stray keys), and a filter (or action condition) that uses a change-tracking condition has no writable form (see filters). Re-submit only the definition members the revision carries — name, trigger, filter and actions — and strip any change-tracking condition first. A revision has no description (see the field table below), so rollback cannot restore it: description keeps its current value and must be reset separately if you need to revert it too. Ordinary field / metadata / trigger / action subjects round-trip fine.

Note that a webhook_received trigger's server-assigned webhook_url is present on the live automation object but is not included in a revision snapshot, so it is never the cause of a rollback 400.

List revisions

GEThttps://api.tapeapp.com/v1/automation/{automation_id}/revision

Returns the automation's full history, newest-first. This listing is unpaginated — there is no cursor or total. Simulation snapshots are excluded.

➡️ Request
curl https://api.tapeapp.com/v1/automation/4021/revision -u user_key_replace_with_your_api_key:
⬅️ Response
{
"revisions": [
{
"id": "90071992547409929",
"automation_id": 4021,
"created_at": "2024-05-20 16:03:08",
"name": "Email the owner on a new high-priority lead",
"paused": false,
"broken": false,
"trigger": { "type": "record_created", "config": {} },
"filter": null,
"actions": []
}
]
}

Retrieve a revision

GEThttps://api.tapeapp.com/v1/automation/{automation_id}/revision/{revision_id}

Returns one frozen revision, which must belong to this automation. A revision_id that is unknown, malformed, or belongs to another automation all answer the same 404 (never an existence oracle).

➡️ Request
curl https://api.tapeapp.com/v1/automation/4021/revision/90071992547409929 -u user_key_replace_with_your_api_key:

Returns { revision }.

The revision object

A revision snapshots the automation's definition as of one edit.

FieldTypeDescription
idstringThe revision ID — a 64-bit value, returned as a string.
automation_idintegerThe automation this revision belongs to.
created_atstringWhen the revision was created, UTC YYYY-MM-DD HH:mm:ss.
namestringThe name as of this revision.
paused / brokenbooleanState as of this revision.
triggerobject | nullThe trigger as of this revision.
filterobject | nullThe filter as of this revision.
actionsarrayThe actions as of this revision.

A revision is deliberately narrower than the automation object: it has no description, broken_reason, updated_at, app_id or workspace_id.