Skip to content

Register a WhatsApp number via API and SDK

Released: July 21, 2026

You can now register a WhatsApp number for Cloud API sending directly from the Public API — the same “Register” action that was previously dashboard-only. Use it to finish onboarding a number that Meta reports as not yet CONNECTED, or to recover a number that a send degraded with a “number not registered” error.

The account must already exist (onboard it through a setup link first). Then find its phone_number_id and register it with the number’s 6-digit two-step-verification PIN.

Terminal window
curl -X POST https://api.kirimdev.com/v1/106540352242922/register \
-H "Authorization: Bearer $KIRIM_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "pin": "123456" }'

PIN semantics mirror Meta. If the number already has two-step verification, the PIN must match the existing one; if it does not, the PIN you send becomes the number’s permanent PIN. A wrong PIN, cooldown, or other Meta rejection returns 422 whatsapp_registration_failed with a descriptive message; an unknown or cross-org phone_number_id returns 404 resource_not_found.

Since a 6-digit PIN is guessable, the endpoint is throttled per number: 5 failed attempts within ~15 minutes lock the number out with 429 too_many_registration_attempts (before Meta is contacted), and a concurrent second call returns 409 registration_in_progress.

Unlike the other /v1/{phone_number_id}/* endpoints, register deliberately accepts numbers that are not yet connected — that is the whole point of the call.

const result = await kirim.phoneNumbers('106540352242922').register('123456')
console.log(result.status, result.meta_status) // "connected" "CONNECTED"

Accounts now expose meta_status Added

Section titled “Accounts now expose meta_status ”

GET /v1/accounts rows gain a meta_status field — Meta’s own phone-number status (CONNECTED, PENDING, UNVERIFIED, …), or null if never fetched. It sits alongside the existing status (Kirimdev’s lifecycle state) so you can tell which numbers need registration:

A number likely needs register when status is not connected or meta_status is not CONNECTED.

Pass ?status=all to include numbers still finishing onboarding.