Events
The event log and stream; what every webhook delivery is built from.
Base URL https://api.showpilot.com/v1. Every call needs Authorization: Bearer <api key>; see Authentication.
The event log, oldest first from a cursor
GET /events
Scope: webhooks:manage. Operation id: listEvents.
Every event the workspace produced, in order. Pass the nextSince you
were handed to continue; a consumer that was down catches up from where
it stopped. Same envelope as a webhook delivery.
Parameters
| Name | In | Type | Meaning |
|---|---|---|---|
since | query | string | The event id to continue after; 0 or omitted starts at the beginning. |
types | query | string | Comma-separated event types to keep; omit for all. |
limit | query | integer | Page size, 1 to 200. Default 50. |
Example request
curl "https://api.showpilot.com/v1/events?since=0&types=meeting.booked,lead.identified&limit=50" \
-H "Authorization: Bearer $SHOWPILOT_API_KEY"Response
One page of events.
| Field | Type | Always | Meaning |
|---|---|---|---|
items | array of Event | yes | |
nextSince | string | yes | Pass as since next time. |
Event
The envelope every delivery, log row and stream frame carries.
| Field | Type | Always | Meaning |
|---|---|---|---|
id | string | yes | Monotonic within the workspace; use it as since. |
livemode | boolean | yes | False when the event came from the sandbox (a test key's workspace). |
type | string | yes | One of: conversation.started, conversation.engaged, conversation.ended, visitor.identified, lead.identified, intent.hot, meeting.booked, form.submitted, segment.entered, segment.left, offer.shown, offer.accepted, offer.declined, tour.played, tour.step_viewed, tour.cta_clicked, tour.completed, experience.viewed, checklist.task_completed, checklist.converted, follow_up.created, follow_up.answered. |
occurredAt | string (date-time) | yes | |
data | object | yes | The event's document; fields per type in the Webhooks guide. |
links | object | yes | API paths of the objects involved. |
Example response
{
"items": [
{
"id": "1042",
"type": "meeting.booked",
"occurredAt": "2026-09-25T14:02:11.000Z",
"data": {
"meetingId": "d0000001-0000-4000-8000-000000000000",
"visitorId": "b0000001-0000-4000-8000-000000000000",
"startAt": "2026-09-29T15:00:00.000Z",
"attendee": {
"email": "sam@example.com",
"name": "Sam"
}
},
"links": {
"meeting": "/v1/meetings/d0000001-0000-4000-8000-000000000000",
"visitor": "/v1/visitors/b0000001-0000-4000-8000-000000000000"
}
}
],
"nextSince": "1042"
}Errors
| Status | When |
|---|---|
| 400 | A parameter is malformed, such as a cursor this API did not issue, a limit under 1, or an unknown status. Code invalid-request. |
| 401 | No key, or an unknown or revoked key. Code unauthorized. |
| 403 | A valid key without the operation's scope (code insufficient-scope), or a plan without API access (code plan-api-off). |
| 429 | The key's bucket is empty. Code rate-limited; wait the Retry-After seconds. |
The event log as server-sent events
GET /events/stream
Scope: webhooks:manage. Operation id: streamEvents.
Opens a stream that emits each new event as it lands (event: is the
type, id: the event id, data: the envelope), polling every two
seconds, for up to five minutes; then it sends end with the last id
and closes, and the client reconnects with since. For agents that
cannot host a webhook receiver.
Parameters
| Name | In | Type | Meaning |
|---|---|---|---|
since | query | string | |
types | query | string |
Example request
curl "https://api.showpilot.com/v1/events/stream?since=1042" \
-H "Authorization: Bearer $SHOWPILOT_API_KEY"Response
Status 200. text/event-stream.
Errors
| Status | When |
|---|---|
| 400 | A parameter is malformed, such as a cursor this API did not issue, a limit under 1, or an unknown status. Code invalid-request. |
| 401 | No key, or an unknown or revoked key. Code unauthorized. |
| 403 | A valid key without the operation's scope (code insufficient-scope), or a plan without API access (code plan-api-off). |
| 429 | The key's bucket is empty. Code rate-limited; wait the Retry-After seconds. |