List webhooks
GEThttps://api.wapito.com/v1/webhooks
Send a channel token on every request: Authorization: Bearer wpt_YOUR_TOKEN
Returns the webhook subscriptions configured for this channel, with their URLs, event filters, custom headers and a masked preview of each signing secret. Secrets are never returned in full after creation. Sandbox channels may have two webhooks and premium channels five, which the channel limits endpoint also reports.
Responses
200
Every webhook on the channel.
| Field | Type | Required | Description |
|---|---|---|---|
count | integer | Required | Number of items in this page. |
webhooks | array of object | Required | Page of results. |
created_at | string | null | Required | ISO 8601 timestamp.date-time |
enabled | boolean | Required | Disabled webhooks are skipped without queueing jobs. |
events | array of string | Required | Subscribed events: exact names, prefix wildcards such as `messages.*`, or `*`. |
headers | object | Required | Extra headers sent with every delivery. |
id | string | Required | Webhook id (`whk_` + ULID). |
secret_preview | string | null | Required | Masked signing secret, e.g. `whsec_…f31a`. |
url | string | Required | HTTPS endpoint Wapito posts events to.uri |
{
"count": 1,
"webhooks": [
{
"created_at": "2026-09-01T08:30:00.000Z",
"enabled": true,
"events": [
"messages",
"messages.status",
"groups.participants"
],
"headers": {
"X-Acme-Tenant": "eu-1"
},
"id": "whk_01JRQ8F4X9N2K7YB3C5V6W8H0T",
"secret_preview": "whsec_…f31a",
"url": "https://hooks.acme.example/wapito"
}
]
}401
The channel token is missing, malformed, revoked or belongs to a deleted channel.
Show 2 example bodies
token_revoked — the token was rotated in the dashboard
{
"error": {
"code": "token_revoked",
"message": "This channel token has been revoked.",
"request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
}
}unauthorized — no or unusable Bearer token
{
"error": {
"code": "unauthorized",
"message": "Missing or invalid channel token.",
"request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
}
}403
The token is valid but the channel may not perform this action right now.
Show 2 example bodies
channel_locked — billing lapsed or the channel was locked by an operator
{
"error": {
"code": "channel_locked",
"details": {
"reason": "plan_required"
},
"message": "This channel is locked.",
"request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
}
}forbidden — the channel does not own the target object
{
"error": {
"code": "forbidden",
"message": "You are not allowed to perform this action.",
"request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
}
}429
A rate limit, a plan quota or one of the anti-ban guards stopped the request. Every one of these is safe to retry later; read `Retry-After` when present.
Show 5 example bodies
cold_send_limit — too many first messages to new recipients this hour
{
"error": {
"code": "cold_send_limit",
"details": {
"resets_at": "2026-09-15T09:00:00.000Z",
"window_cap": 20
},
"message": "The hourly limit for messages to new recipients is reached.",
"request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
}
}quota_exceeded — plan quota for the day or month
{
"error": {
"code": "quota_exceeded",
"details": {
"quota": "sent",
"resets_at": "2026-09-16T00:00:00.000Z",
"used": 150
},
"message": "The plan quota for this resource is exhausted.",
"request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
}
}rate_limited — per-minute API rate limit
{
"error": {
"code": "rate_limited",
"details": {
"retry_after": 12
},
"message": "Too many requests.",
"request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
}
}send_rate_limited — the send queue did not drain within 20 s
{
"error": {
"code": "send_rate_limited",
"details": {
"retry_after": 5
},
"message": "The send queue for this channel is saturated.",
"request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
}
}warmup_limit — the warm-up ladder cap for today
{
"error": {
"code": "warmup_limit",
"details": {
"cap": 200,
"day": 2
},
"message": "The warm-up limit for this channel is reached.",
"request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
}
}500
Something went wrong inside Wapito. Quote `request_id` when reporting it.
Show the example body
internal_error — unexpected failure
{
"error": {
"code": "internal_error",
"message": "Something went wrong on our side.",
"request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
}
}Errors
Code examples
import requests
url = "https://api.wapito.com/v1/webhooks"
headers = {"Authorization": "Bearer wpt_YOUR_TOKEN"}
response = requests.get(url, headers=headers)
print(response.json())Related
Other endpoints in this group
Glossary
Reference
Try it on your own number
Create a channel, link a WhatsApp number by QR or pairing code, and call the API in a couple of minutes. The Sandbox plan is free and needs no card.