Requirements
- API key delivery mode must be
polling - A bot can use either polling or webhooks, not both at the same time
- Requests use the same auth/signature flow as the rest of the API:
Authorization: Bearer <API_KEY>X-Timestamp: <Unix milliseconds>X-Signature: HMAC-SHA256("{timestamp}.{uri}")for this GET endpoint
Endpoint
UseGET /v2/updates.
Query parameters:
| Parameter | Type | Description |
|---|---|---|
offset | string | Opaque cursor from the previous response (nextOffset). Omit on first call. |
limit | integer | Max updates to return. Default 50, max 100. |
timeout | integer | Wait time in seconds when no updates are available. Default 0, max 30. |
- If updates exist after
offset, response returns immediately - If no updates and
timeout > 0, request waits up totimeoutseconds - If still no updates, returns
updates: []and anextOffset
Response Shape
nextOffset from each response as the offset in your next request.
Event Payloads
Pollingdata payloads match webhook data payloads for the same event type.
See Webhook Events for field-level payload details.
Attachments
Attachments are included directly in polling message events (message.created, message.updated)
under data.message.attachments.
Attachment fields:
| Field | Type | Description |
|---|---|---|
id | string | Attachment ID |
type | string | image, file, video, audio |
name | string | Original filename (when available) |
url | string | Signed download URL |
transcription | object | Audio transcription status/details (voice messages only) |
- Attachment
urlis signed and expires (currently 60 minutes) - Voice transcription is asynchronous:
message.createdusually arrives withtranscription.status: "Pending"message.updatedcan arrive later withstatus: "Done"andtext
message.createdmessage.updatedmessage.deletedreaction.addedreaction.removedmember.addedmember.removedtopic.updated
Errors
400bad request (invalidoffset,limit, ortimeout)401unauthorized409delivery mode is not polling, or providedoffsetis no longer available500internal server error