OTP and verification
Send sign-in and verification codes with an approved authentication template, then follow delivery on your webhook.
Send one-time codes, notifications and conversations from your customers' own WhatsApp numbers — every customer and every number under one API key, with signed webhooks for everything that comes back.
POST /wp-json/scale/v1/messages
Authorization: Bearer sk_live_…
Idempotency-Key: login-attempt-7731
Content-Type: application/json
{
"number_id": "num_XXXX",
"to": "201012345678",
"type": "template",
"template": {
"name": "otp_code",
"language": "en_US",
"components": [
{
"type": "body",
"parameters": [{ "type": "text", "text": "482913" }]
},
{
"type": "button",
"sub_type": "url",
"index": "0",
"parameters": [{ "type": "text", "text": "482913" }]
}
]
}
}Scale AI answers a business's own customers with an AI agent. The Developer Platform is for teams who build their own product and need WhatsApp inside it.
Anything your software needs to say on WhatsApp — sent from the right business's number, followed to delivery.
Send sign-in and verification codes with an approved authentication template, then follow delivery on your webhook.
Order confirmations, shipping updates, booking reminders and receipts — triggered by events in your system.
Text, images, video, audio, documents and templates, to anyone who has written to the number in the last 24 hours or with an approved template.
Idempotent sends, cursor pagination, usage counts and signed events — built to run from jobs and queues.
Add WhatsApp to the product your customers already use, under your own interface.
Agencies and platforms connect each client's number once and send for all of them through one key.
You create the account and write the code; each business connects its own number through Meta.
Sign up and verify your email. Your account starts in setup mode: the API key, webhooks, customers, your two included numbers, templates and tests work straight away; real messages are sent once the first payment is confirmed.
One customer per business you serve — from the dashboard or POST /customers — with your own reference stored next to it.
Create an onboarding link and send it. It opens Scale's hosted page running Meta's official Embedded Signup: the business signs in to Facebook, picks or creates its WhatsApp Business Account and verifies the number.
Call POST /messages from the connected number_id. Replies and delivery statuses arrive on your webhook, signed.
One API key reaches every customer and number on your account — and nothing on anyone else's.
Issued, rotated and revoked in your dashboard. Scale stores only its SHA-256 and shows it once.
Scale's own ids never change and are never reused — store them next to your records.
Every customer, number, message and link belongs to exactly one Developer account. Another account's id answers 404, like one that does not exist.
A customer can connect more than one number, all on its own WhatsApp Business Account. Your subscription includes two numbers for the whole account; each one more is an additional-number subscription.
dev_…ws_…num_…msg_…onb_…evt_…One HTTPS endpoint receives the events of all your customers and numbers.
message.receivedSomeone wrote to one of your numbersmessage.sentWhatsApp accepted a messagemessage.deliveredDelivered to the phonemessage.readRead by the recipientmessage.failedCould not be delivered — with the reasonnumber.connectedA customer connected a numbernumber.disconnectedA number stopped routingonboarding.completedAn onboarding link finishedonboarding.failedAn onboarding link failedidJSON in, JSON out, one envelope for every answer and a stable code for every error.
Send your key in the Authorization header on every request. A key in the URL is refused.
Authorization: Bearer sk_live_…Every failure carries an HTTP status, a stable code, a readable message and a request_id to quote to support.
403 SUBSCRIPTION_INACTIVESetup mode: sending opens with your first payment422 OUTSIDE_MESSAGING_WINDOWSend an approved template instead429 RATE_LIMITEDWait Retry-After secondscurl -X POST https://getscale.me/wp-json/scale/v1/messages \
-H "Authorization: Bearer $SCALE_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-1001-shipped" \
-d '{"number_id":"num_XXXX","to":"201012345678","type":"text","text":{"body":"Your order 1001 has shipped."}}'{
"success": true,
"message": {
"id": "msg_…",
"wamid": "wamid.…",
"status": "accepted",
"type": "text",
"to": "201012345678",
"created_at": "2026-11-10T12:00:00Z",
"number_id": "num_XXXX",
"customer_id": "ws_…",
"phone_number_id": "1234567890"
},
"replayed": false
}{
"success": false,
"error": {
"code": "SUBSCRIPTION_INACTIVE",
"message": "Your account is in setup mode: keys, webhooks, numbers and templates can be configured and tested, but real messages are sent only once your Scale Developer subscription is active. Test with POST /test/messages and POST /test/webhook.",
"details": {
"status": "pending_payment",
"mode": "setup",
"grace_ends_at": null,
"migration": null
}
},
"request_id": "req_…"
}For the whole account — every customer, with two WhatsApp numbers included.
403 SUBSCRIPTION_INACTIVE (mode setup), and buying an additional number 402 PAYMENT_REQUIRED. You pay by InstaPay at checkout, and a person at Scale verifies each transfer before anything is activated; your dashboard shows each payment as awaiting review, approved or not verified.No. Scale AI is an AI agent and CRM a business uses for its own customers. The Developer Platform is an API for your software: Scale's AI never replies on, or acts on, a Developer customer's number.
No. You pay the flat subscription only; Scale counts your usage but charges nothing per message and deducts no credits. WhatsApp's own conversation charges are Meta's and follow each business's billing with Meta.
Your customer's. Each business connects its own number to its own WhatsApp Business Account through Meta's Embedded Signup on Scale's hosted page; you never handle its Meta password or token.
Yes — your account starts in setup mode. Create your API key and webhooks, add customers, connect your two included numbers, write templates and test with POST /test/webhook and POST /test/messages before paying. What waits for your first confirmed payment is sending real messages (403 SUBSCRIPTION_INACTIVE, mode setup, until then) and buying additional numbers (402 PAYMENT_REQUIRED).
By InstaPay, at checkout: transfer the exact amount shown, then upload the transfer receipt with the number you sent it from and the reference. A person at Scale verifies each transfer, and nothing is activated until then. Your dashboard (Billing → Payments) shows each payment as awaiting review, approved or not verified — with the reason and what to do next.
Sending keeps working for 3 calendar days after the paid period. After that every send answers 403 SUBSCRIPTION_INACTIVE, with the deadline in details.migration: for 14 days incoming messages keep reaching your webhook (time to renew or move your numbers); after that they are still stored but no longer forwarded. Read routes keep working, nothing is deleted, and renewing restores everything with the same ids.
You confirm the deletion from a link sent to your account's email. For the next 14 days the account is receive-only — incoming messages keep reaching your webhook, while sending, new customers and new onboarding links are refused (403 ACCOUNT_RECEIVE_ONLY) — so you can move your customers' numbers; Scale does not transfer them. You can cancel until then. After the 14 days your data is erased; billing records are kept as tax law requires.
Text, image, video, audio, document and approved templates. Free-form messages go to people who wrote to that number in the last 24 hours; outside that window, send an approved template.
Two are included in your subscription, across all your customers. Each further number is an additional-number subscription you add from your dashboard; Scale may also agree a maximum for your account. If an additional number's subscription ends, that number stays connected and keeps receiving, but cannot send until you renew.
Create your Developer account, read the docs in English or Arabic, and send your first message today.