/v1/broadcasts/precheckbetaCheck broadcast readiness
- Needs
- Send WhatsApp messages; manage templates, quick messages and WhatsApp short links
(messaging:write) - Plan
- Any plan with API access
- Limits
- 60 a minute per key
- Dry run
- Yes — every check runs with ?dry_run=true, nothing changes
- Undo
- Nothing to undo: nothing changes.
Runs the workspace's broadcast readiness check (channel connected, messaging limits, plan and quota, billing) and lists each check as PASS, WARNING or FAIL, with whether it blocks sending. It sends nothing and changes nothing; it is a POST because the check runs live.
With a test key or ?dry_run=true the check does not run: you get the example answer.
Try it
Code and response
curl -X POST 'https://mcp.wa-api.cloud/v1/broadcasts/precheck?dry_run=true' \ -H "Authorization: Bearer $API_KEY"
The code reads your key from $API_KEY.
Headers
| Field | Type | What it is |
|---|---|---|
| Authorizationrequired | header | Bearer $API_KEY — your API key. |
| Api-Version | header | The API version to use, e.g. 2026-10-01. Default: the version your key is pinned to.one of: 2026-10-01 · pattern ^\d{4}-\d{2}-\d{2}$ |
Response 200
Each check (`channel_connected`, `service_health`, `usage_limits`, `phone_quality`, `payment_method`, `system_error`, `other`) with its status and a sentence, and whether you can send. `errors` repeats the sentence of each failed blocking check, `warnings` that of each warning.
| Field | Type | What it is |
|---|---|---|
| can_sendrequired | boolean | |
| checksrequired | array of object | |
| namerequired | string | Stable check name.one of: channel_connected, service_health, usage_limits, phone_quality, payment_method, system_error, other |
| statusrequired | string | |
| messagerequired | string | A fixed sentence for the check and its status. |
| blockingrequired | boolean | |
| errorsrequired | array of string | The sentence of each failed blocking check. |
| warningsrequired | array of string | The sentence of each check with a warning. |
| dry_run | boolean | true when this was a dry run: every check ran and nothing changed. |
Errors
Errors are application/problem+json. Branch on code.
| Status | Code | When |
|---|---|---|
| 401 | unauthenticated | The Authorization header is missing, the key is unknown, expired or revoked. |
| 403 | entitlement_required | The workspace's plan does not include API access ( |
| 403 | insufficient_scope | The key does not have the permission this operation needs. |
| 429 | rate_limited | The key or workspace went over its rate limit. Wait for |
| 503 | upstream_unavailable | A service behind the API is briefly unavailable. Safe to retry with backoff. |
| 504 | timeout | The change did not finish in time. Retry with the same Idempotency-Key: it never runs twice. |
Examples
Ready to send
Response 200
{
"can_send": true,
"checks": [
{
"name": "channel_connected",
"status": "PASS",
"message": "Your WhatsApp channel is connected.",
"blocking": true
},
{
"name": "phone_quality",
"status": "WARNING",
"message": "Your WhatsApp number's quality rating is low; WhatsApp may limit how many customers you can message.",
"blocking": false
}
],
"errors": [],
"warnings": [
"Your WhatsApp number's quality rating is low; WhatsApp may limit how many customers you can message."
]
}Operation path
The same operation is also at POST /v1/ops/messaging_precheck_broadcast, with every field in the JSON body.