Event
Registers a Kit webhook endpoint in the tenant's account on publish and starts one run per delivered event, verified against Kit's signature.
Start a run when Kit (ConvertKit) emits an event — a subscriber, tag, form, sequence or broadcast change.
Connection
- Required
- Yes — the node will not save without one
- Auth type
- API key
- Providers
- ConvertKit
- Secret shape
- the Kit v4 API key ({"api_key": …}) or an OAuth {"access_token": …}
- Resolved by
- config.connection_id, else node.connection_id
- Note
- A v4 API key (X-Kit-Api-Key) or an OAuth token — a v3 api_key/api_secret pair is a different, incompatible credential and Kit answers it with 401. Publishing also needs MANTLE_APP_PUBLIC_BASE_URL set to a publicly reachable URL: Kit refuses to deliver to private, internal or loopback addresses.
Configuration
1 field, none required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.
| Field | Type | Required | Default | Constraints | Example |
|---|---|---|---|---|---|
events Kit event types to subscribe to. One endpoint covers all of them. Any well-formed type is accepted, not only the ones listed — Kit ships new ones — but a type Kit has not shipped yet is refused at publish. | array | No | ["subscriber.created"] | 1–64 characters; array of string | — |
Example configuration
Every value below is the contract’s own example or default — nothing invented.
{
"events": [
"subscriber.created"
]
}Output
One shape.
convertkit event
One flattened Kit event. `data`'s own keys vary by `type`, so the shape is open below the declared fields.
Extra keys beyond the ones listed can appear.
| Field | Type | Example |
|---|---|---|
id Kit's UUID for this event. Also the idempotency key: a retried delivery repeats the same event id, so it joins the run it already started instead of starting a second. Kit retries a failure eight times over about 41 hours, while the ingress remembers a key for 24, so a very late retry can still start a fresh run. | string | 9c2e1f3a-6b7d-4e8f-a1b2-c3d4e5f60718 |
type The event type, e.g. subscriber.created. Branch on this when the trigger subscribes to more than one. | string | subscriber.created |
created When the event happened (ISO-8601 UTC) — not when it was delivered. | string | 2026-07-29T14:32:10Z |
delivery_id Kit's id for the POST this event arrived in. One delivery can carry up to 100 events of the same type, so this is NOT the deduplication key — `id` is. | string | 123456 |
subscriber_id The subscriber the event is about, as a string. Empty on the resource events (tag.created, sequence.published, broadcast.sent…), which are about the account rather than a person. | string | 987654 |
email_address That subscriber's email address, lifted out so the next node need not dig. | string | ada@example.com |
data Kit's event payload: the subscriber, plus the related resource where the type has one (`tag` on subscriber.tag_added, `form` on subscriber.subscribed_to_form, `sequence`, `custom_field`…). Its keys depend on `type`, which is why this shape is open. | object | — |
payload The single event exactly as Kit sent it, for anything the fields above do not lift out. | object | — |
{
"created": "2026-07-29T14:32:10Z",
"data": {
"subscriber": {
"created_at": "2026-07-29T14:32:10Z",
"email_address": "ada@example.com",
"fields": {
"company": "Kit"
},
"first_name": "Ada",
"id": 987654,
"state": "active"
}
},
"delivery_id": "123456",
"email_address": "ada@example.com",
"id": "9c2e1f3a-6b7d-4e8f-a1b2-c3d4e5f60718",
"payload": {
"created": "2026-07-29T14:32:10Z",
"id": "9c2e1f3a-6b7d-4e8f-a1b2-c3d4e5f60718",
"type": "subscriber.created"
},
"subscriber_id": "987654",
"type": "subscriber.created"
}Notes
- Publishing creates the endpoint at Kit; unpublishing, disabling or archiving deletes it. A workflow that is off is off at Kit too.
- One delivery can carry up to 100 events (Kit batches a bulk action), and each one starts its own run.
- Each delivery is verified against Kit's signature over '{timestamp}.{body}' and refused outside a 5-minute window.
- An endpoint created through an OAuth connection can only be deleted by that same OAuth app; swapping the connection for an API key leaves the old endpoint to be removed by hand.
See Event run in a workflow.
In a technical demo we add the ConvertKit connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.