Check send readiness
Find out whether this workspace can actually send yet, and what is standing in the way, as branchable data rather than a failed send.
- Channels belong to a business, so readiness is answered per business. Pass ?business_id= to ask about one of your customers; a key already narrowed to a business answers for that business automatically.
scope.business_idin the response says which. If it is null, the answer covers the whole organization and is not about any single customer. - Most integrations stall on provisioning, not code: a WhatsApp Business Account has to be connected and a wallet funded, and both need a human at the customer's business. This endpoint turns that from a support question into something your code can read.
- There are two answers because the send gate has two floors.
can_sendis for a TRANSACTIONAL send (what you get when you do not setmessage_type) andcan_send_marketingis for a marketing one, which is stricter: an empty wallet still lets transactional messages out on a small grace allowance while marketing is refused at zero. Read the field that matches the send you are about to make. WhatsApp is never wallet-blocked either way; it bills direct between the business and Meta. - Every blocker carries a stable code, the channels it blocks, the message types it blocks on those channels (
blocks_message_types), and how it is resolved.resolve: dashboardmeans a person must act: surface it to your user rather than retrying.meta_reviewmeans wait and poll. - A blu_test_ key always reports ready with an empty blockers list: the sandbox simulates every provider, bills nothing, and needs no connected channel. What a live key would still be waiting on is returned as pending_for_live, so you can show your customer their remaining setup while you build.
- Read-only and cheap, with no provider calls. Safe to poll while waiting on a human step.
curl -X GET "https://app.blueticked.com/api/v1/readiness" \
-H "Authorization: Bearer $BLUETICKED_API_KEY"Response
{
"environment": "live",
"ready": true,
"can_send": {
"whatsapp": false,
"sms": true,
"email": true
},
"can_send_marketing": {
"whatsapp": false,
"sms": false,
"email": false
},
"blockers": [
{
"code": "no_whatsapp_channel",
"message": "No WhatsApp channel is connected for this business, so WhatsApp sends will be refused. A person with dashboard access has to connect it once.",
"blocks": [
"whatsapp"
],
"blocks_message_types": [
"transactional",
"marketing"
],
"resolve": "dashboard",
"url": "https://app.blueticked.com/whatsapp/setup"
},
{
"code": "wallet_empty",
"message": "The prepaid wallet has no balance, so billable sends will be refused with insufficient_balance. Transactional messages still send on 2000 cents of grace; marketing is refused now. Top up in Billing. WhatsApp bills direct with Meta and is unaffected, and sandbox sends with a blu_test_ key are never billed.",
"blocks": [
"sms",
"email"
],
"blocks_message_types": [
"marketing"
],
"resolve": "dashboard",
"url": "https://app.blueticked.com/billing"
}
],
"wallet": {
"balance_zar_cents": 0,
"enforced": true
},
"channels": {
"connected": [
"email",
"sms"
]
},
"scope": {
"business_id": "22222222-2222-4222-9222-222222222222",
"business_ids": [
"22222222-2222-4222-9222-222222222222"
]
},
"request_id": "req_b2e3d610e10f1b07468721ee98f0e1d2"
}