Help
DevelopersReference

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

NameInTypeMeaning
sincequerystringThe event id to continue after; 0 or omitted starts at the beginning.
typesquerystringComma-separated event types to keep; omit for all.
limitqueryintegerPage 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"
Runs against your sandbox with a test key.

Response

One page of events.

FieldTypeAlwaysMeaning
itemsarray of Eventyes
nextSincestringyesPass as since next time.

Event

The envelope every delivery, log row and stream frame carries.

FieldTypeAlwaysMeaning
idstringyesMonotonic within the workspace; use it as since.
livemodebooleanyesFalse when the event came from the sandbox (a test key's workspace).
typestringyesOne 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.
occurredAtstring (date-time)yes
dataobjectyesThe event's document; fields per type in the Webhooks guide.
linksobjectyesAPI 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

StatusWhen
400A parameter is malformed, such as a cursor this API did not issue, a limit under 1, or an unknown status. Code invalid-request.
401No key, or an unknown or revoked key. Code unauthorized.
403A valid key without the operation's scope (code insufficient-scope), or a plan without API access (code plan-api-off).
429The 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

NameInTypeMeaning
sincequerystring
typesquerystring

Example request

curl "https://api.showpilot.com/v1/events/stream?since=1042" \
  -H "Authorization: Bearer $SHOWPILOT_API_KEY"
Runs against your sandbox with a test key.

Response

Status 200. text/event-stream.

Errors

StatusWhen
400A parameter is malformed, such as a cursor this API did not issue, a limit under 1, or an unknown status. Code invalid-request.
401No key, or an unknown or revoked key. Code unauthorized.
403A valid key without the operation's scope (code insufficient-scope), or a plan without API access (code plan-api-off).
429The key's bucket is empty. Code rate-limited; wait the Retry-After seconds.

On this page