Row Event

trigger.seatable_event
TriggerDatabases & warehousesconnection requiredruns in-engine

Registers a webhook in the tenant's SeaTable base on publish and starts one run per row change, verified against SeaTable's X-SeaTable-Signature.

Start a run when a row is added, changed or deleted in a SeaTable base.

Connection

Required
Yes — the node will not save without one
Auth type
API key
Providers
SeaTable
Secret shape
{"api_token", "account_token"}
Config it needs
server_url
Resolved by
config.connection_id, else node.connection_id
Note
Two credentials, and they are not interchangeable: the base 'api_token' names the workspace and base, and the 40-character 'account_token' (POST /api2/auth-token/ with a username and password) is the only one SeaTable's webhook endpoints accept. Publishing also needs MANTLE_APP_PUBLIC_BASE_URL set to a URL SeaTable can reach.

Configuration

This node takes no configuration beyond its connection.

Output

One shape.

seatable row event

The flattened SeaTable delivery. row_data's own entries depend on the table's columns, so the shape is open below the declared fields.

Extra keys beyond the ones listed can appear.

FieldTypeExample
event
SeaTable's event name. It is 'update' for every row change today — SeaTable ships one event type — so branch on op_type, not on this.
stringupdate
op_type
What happened to the row: insert_row, modify_row or delete_row. This is the field to branch on, because SeaTable's webhook has no server-side filter and delivers all three.
stringinsert_row
dtable_uuid
Uuid of the base the change happened in. One webhook covers one base, so this is constant for a given trigger.
string—
table_id
Four-character internal id of the table. Stable across a rename, unlike table_name.
string9g8f
table_name
The table's name as it reads in the SeaTable UI. Check it before acting: the webhook fires for every table in the base.
stringOpportunities
row_id
Id of the row that changed — what seatable.get_row takes.
stringQoNno3QiTF26sxmG1sl3_g
row_name
The row's primary-column value, when it has one.
string—
row_count
How many rows this one delivery covers. A paste across several rows produces ONE webhook with a count above 1, not one per row, and only the first row is described — re-read the table if it is not 1.
number1
op_user
Who made the change, as a SeaTable account id (…@auth.local).
string—
op_time
When SeaTable applied the change, Unix seconds with millisecond precision.
number1649922777.279
op_time_at
The same instant as an ISO-8601 UTC string.
string—
op_app
The API token name the change was made through, or empty when a person made it in the SeaTable UI.
string—
row_data
The changed columns, as SeaTable reports them on a modify_row. Empty on an insert or a delete.
array—
payload
SeaTable's delivery exactly as it arrived, for anything the fields above do not lift out.
object—
{
  "dtable_uuid": "fae0a3a42ba94df88e8303fd385e37de",
  "event": "update",
  "op_app": "Mantle",
  "op_time": 1649922777.279,
  "op_time_at": "2022-04-14T07:52:57.279000Z",
  "op_type": "insert_row",
  "op_user": "4bc9a7c79c5942c5b6238413f2132bea@auth.local",
  "payload": {
    "data": {
      "op_type": "insert_row"
    },
    "event": "update"
  },
  "row_count": 1,
  "row_data": [],
  "row_id": "QoNno3QiTF26sxmG1sl3_g",
  "row_name": "Acme renewal",
  "table_id": "9g8f",
  "table_name": "Opportunities"
}

Notes

  • Publishing creates the webhook in SeaTable; unpublishing, disabling or archiving deletes it. A workflow that is off is off at SeaTable too.
  • SeaTable's webhook has no event filter: it fires for every row inserted, modified or deleted anywhere in the base. Branch on table_name and op_type.
  • A change that touches several rows at once (a paste, a bulk edit) arrives as ONE delivery with row_count above 1 — not one per row.
  • Structural changes — adding a column, creating a view, renaming a table — do not fire a webhook. Only row content does.
  • SeaTable disables a webhook after five consecutive deliveries that do not answer HTTP 200; re-publishing the workflow registers it again.

See Row Event run in a workflow.

In a technical demo we add the SeaTable connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.