Get channel status and settings
GEThttps://api.wapito.com/v1/channel
Send a channel token on every request: Authorization: Bearer wpt_YOUR_TOKEN
Returns the live state of the channel your token belongs to: the linked phone number, the protocol engine running it, the plan in force, the current connection status and the behaviour settings applied to every send. Poll this after linking a number to watch the status move from `qr` or `pairing` to `connected`, or subscribe to the `channel` webhook event and stop polling entirely.
Responses
200
Current channel state.
| Field | Type | Required | Description |
|---|---|---|---|
connected_at | string | null | Required | ISO 8601 timestamp of the current link.date-time |
created_at | string | null | Required | ISO 8601 timestamp the channel was created.date-time |
engine | string | Required | Protocol engine running this channel.one of gows, noweb |
id | string | Required | Channel id (`ch_` + ULID). |
last_seen_at | string | null | Required | ISO 8601 timestamp of the last engine heartbeat.date-time |
lid | string | null | Required | LID of the linked account. |
name | string | Required | Name you gave the channel in the dashboard. |
phone | string | null | Required | Linked phone number in digits, once connected. |
plan | string | Required | Billing plan in force.one of sandbox, premium |
push_name | string | null | Required | Profile name the linked account publishes. |
settings | object | Required | Per-channel behaviour flags, including the anti-ban knobs described in the sending guide. |
auto_read | boolean | Required | Mark inbound messages as read automatically. |
include_raw | boolean | Required | Attach the untouched engine payload as `raw` on webhook events. |
proxy | object | null | Required | Outbound proxy, or `null` for a direct connection. |
password | string | null | Optional | Proxy password. Write-only: reads return `null`. |
url | string | Required | Proxy URL, for example `http://gw.proxy.example:8000`. |
username | string | null | Optional | Proxy username. |
reject_calls | boolean | Required | Reject incoming WhatsApp calls automatically. |
send_delay_ms | integer | Required | Spacing between queued sends in milliseconds; minimum 500 on sandbox. |
typing_simulation | string | Required | `auto` types for roughly 60 ms per character before sending, capped at 8 s.one of off, auto |
status | string | Required | Connection state mirrored from the engine session.one of created, qr, pairing, connected, disconnected, logged_out, banned |
webhooks_count | integer | Required | Number of configured webhooks. |
{
"connected_at": "2026-09-04T10:22:31.000Z",
"created_at": "2026-09-04T10:19:02.000Z",
"engine": "gows",
"id": "ch_01JRQ8F4X9N2K7YB3C5V6W8H0T",
"last_seen_at": "2026-09-15T07:41:08.000Z",
"lid": "992814736450921@lid",
"name": "Acme Support",
"phone": "15557654321",
"plan": "premium",
"push_name": "Acme Support",
"settings": {
"auto_read": false,
"include_raw": false,
"proxy": null,
"reject_calls": true,
"send_delay_ms": 1500,
"typing_simulation": "auto"
},
"status": "connected",
"webhooks_count": 2
}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/channel"
headers = {"Authorization": "Bearer wpt_YOUR_TOKEN"}
response = requests.get(url, headers=headers)
print(response.json())Used in
Related
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.