---
title: "WhatsApp readiness"
method: GET
path: "/api/v1/channels/whatsapp/readiness"
tags: ["channels"]
---

# WhatsApp readiness

`GET /api/v1/channels/whatsapp/readiness`

## Request

- Base URL: `https://app.blueticked.com`
- URL: `https://app.blueticked.com/api/v1/channels/whatsapp/readiness`
- Auth: HTTP bearer

Check WABA connection, template, test send, reply and webhook readiness.

Run this before live pilots and after Meta account changes.

Overall status is "ready", "needs_attention" (warnings only) or "blocked" (at least one failing check).

Each check reports status "ok", "warn" or "fail" with keys channel_connected, channel_credentials, approved_templates, recent_outbound and recent_inbound.

`action_url` and each channel's `settings_url` are in-dashboard deep links: the account area is `/settings`, a specific number is `/settings/whatsapp/{wabaId}` (falling back to `/settings` when no WABA id is known), templates live at `/templates`, a pilot send at `/whatsapp/campaigns/new` and inbound proof at `/conversations`.

Pass `?channel_id=` to scope the snapshot to a single WhatsApp channel; an unknown id returns 404 not_found.

Gate launch automation on status === "ready" (or accept needs_attention if warnings are acceptable).

## Response `200`

Success

- object
  - `status` 'ready' | 'needs_attention' | 'blocked', required
  - `checks` object[], required
    - `key` string, required
    - `label` string, required
    - `status` 'ok' | 'warn' | 'fail', required
    - `message` string, required
    - `action_url` string
  - `summary` object, required
    - `connected_channels` number, required
    - `approved_templates` number, required
    - `pending_templates` number, required
    - `rejected_templates` number, required
    - `recent_outbound` number, required
    - `recent_successful_outbound` number, required
    - `recent_inbound` number, required
  - `channels` object[], required
    - `id` string, uuid, required
    - `business_id` string, uuid, nullable, required
    - `display_name` string, required
    - `identifier` string, required
    - `status` string, required
    - `connected_at` string, date-time, nullable, required
    - `last_error` string, nullable, required
    - `settings_url` string, required
  - `request_id` string, required

## Other responses

- `400`: Validation failed
- `401`: Unauthorized: missing or invalid API key
- `402`: Insufficient wallet balance
- `403`: Forbidden: scope, plan limit, or suspension
- `404`: Not found
- `409`: Conflict (idempotency-key reuse or resource in use)
- `422`: Understood but refused: the request is well-formed, the action is not permitted for this resource
- `429`: Rate limited
- `500`: Internal error
- `502`: An upstream provider refused or failed the request
- `503`: Channel or send queue unavailable

---

[API](https://skmtc.dev/blueticked/apis/blueticked-api.md) · [All operations](https://skmtc.dev/blueticked/apis/blueticked-api/llms.txt) · [OpenAPI document](https://skmtc.dev/blueticked/apis/blueticked-api/revisions/07132284f4ff?raw)
