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.

Fields of the 200 response
FieldTypeRequiredDescription
connected_atstring | nullRequiredISO 8601 timestamp of the current link.date-time
created_atstring | nullRequiredISO 8601 timestamp the channel was created.date-time
enginestringRequiredProtocol engine running this channel.one of gows, noweb
idstringRequiredChannel id (`ch_` + ULID).
last_seen_atstring | nullRequiredISO 8601 timestamp of the last engine heartbeat.date-time
lidstring | nullRequiredLID of the linked account.
namestringRequiredName you gave the channel in the dashboard.
phonestring | nullRequiredLinked phone number in digits, once connected.
planstringRequiredBilling plan in force.one of sandbox, premium
push_namestring | nullRequiredProfile name the linked account publishes.
settingsobjectRequiredPer-channel behaviour flags, including the anti-ban knobs described in the sending guide.
auto_readbooleanRequiredMark inbound messages as read automatically.
include_rawbooleanRequiredAttach the untouched engine payload as `raw` on webhook events.
proxyobject | nullRequiredOutbound proxy, or `null` for a direct connection.
passwordstring | nullOptionalProxy password. Write-only: reads return `null`.
urlstringRequiredProxy URL, for example `http://gw.proxy.example:8000`.
usernamestring | nullOptionalProxy username.
reject_callsbooleanRequiredReject incoming WhatsApp calls automatically.
send_delay_msintegerRequiredSpacing between queued sends in milliseconds; minimum 500 on sandbox.
typing_simulationstringRequired`auto` types for roughly 60 ms per character before sending, capped at 8 s.one of off, auto
statusstringRequiredConnection state mirrored from the engine session.one of created, qr, pairing, connected, disconnected, logged_out, banned
webhooks_countintegerRequiredNumber 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.