Register a phone number
package main
import ( "fmt" "strings" "net/http" "io")
func main() {
url := "https://api.kirimdev.com/v1/106540352242922/register"
payload := strings.NewReader("{ \"pin\": \"123456\" }")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>") req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close() body, _ := io.ReadAll(res.Body)
fmt.Println(res) fmt.Println(string(body))
}const url = 'https://api.kirimdev.com/v1/106540352242922/register';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"pin":"123456"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}use serde_json::json;use reqwest;
#[tokio::main]pub async fn main() { let url = "https://api.kirimdev.com/v1/106540352242922/register";
let payload = json!({"pin": "123456"});
let mut headers = reqwest::header::HeaderMap::new(); headers.insert("Authorization", "Bearer <token>".parse().unwrap()); headers.insert("Content-Type", "application/json".parse().unwrap());
let client = reqwest::Client::new(); let response = client.post(url) .headers(headers) .json(&payload) .send() .await;
let results = response.unwrap() .json::<serde_json::Value>() .await .unwrap();
dbg!(results);}curl --request POST \ --url https://api.kirimdev.com/v1/106540352242922/register \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "pin": "123456" }'Register a WhatsApp Business number for Cloud API sending using its 6-digit two-step-verification PIN. This is the API equivalent of the dashboard’s “Register” action — use it to finish onboarding a number that Meta reports as not yet CONNECTED, or to recover a number degraded with a “not registered” error. The account row must already exist: connect the number first via a customer setup link / embedded signup, then find its phone_number_id from GET /v1/accounts (rows whose status isn’t connected or whose meta_status isn’t CONNECTED are the ones that need this call). PIN semantics mirror Meta: if the number already has two-step verification the PIN must match the existing one; if it doesn’t, the PIN you send becomes the number’s permanent PIN. A wrong PIN, cooldown, or other Meta business error returns 422 whatsapp_registration_failed with a descriptive message. Unlike the other per-account endpoints, this one accepts numbers in any (non-connected) state — that’s the whole point.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”Meta WhatsApp Business phone_number_id of the connected account that should send / own this resource. Discoverable via GET /v1/accounts (returned as phone_number_id on each row).
Example
106540352242922Meta WhatsApp Business phone_number_id of the connected account that should send / own this resource. Discoverable via GET /v1/accounts (returned as phone_number_id on each row).
Request Body
Section titled “Request Body ”object
The WhatsApp number’s 6-digit two-step-verification PIN. Must match the existing PIN if one is set; otherwise it becomes the number’s permanent PIN.
Example
123456Responses
Section titled “ Responses ”Number registered — it can send now.
object
object
Kirim lifecycle status after registration (typically connected).
Meta’s phone-number status after registration.
Example
{ "data": { "object": "phone_number_registration", "phone_number_id": "106540352242922", "registered": true, "status": "connected", "meta_status": "CONNECTED" }}Validation failure
object
object
Example
{ "error": { "type": "invalid_request_error", "code": "invalid_phone_number", "request_id": "req_01HXYZABCDEFGHJKMNPQRSTVWX" }}Authentication failure
object
object
Example
{ "error": { "type": "invalid_request_error", "code": "invalid_phone_number", "request_id": "req_01HXYZABCDEFGHJKMNPQRSTVWX" }}Resource not found
object
object
Example
{ "error": { "type": "invalid_request_error", "code": "invalid_phone_number", "request_id": "req_01HXYZABCDEFGHJKMNPQRSTVWX" }}Conflict (e.g. template already exists, webhook subscription disabled, setup link inactive)
object
object
Example
{ "error": { "type": "invalid_request_error", "code": "invalid_phone_number", "request_id": "req_01HXYZABCDEFGHJKMNPQRSTVWX" }}Semantic failure (e.g. idempotency key reuse, pre-send compliance guard, media not found)
object
object
Example
{ "error": { "type": "invalid_request_error", "code": "invalid_phone_number", "request_id": "req_01HXYZABCDEFGHJKMNPQRSTVWX" }}Rate limit exceeded
object
object
Example
{ "error": { "type": "invalid_request_error", "code": "invalid_phone_number", "request_id": "req_01HXYZABCDEFGHJKMNPQRSTVWX" }}Internal server error
object
object
Example
{ "error": { "type": "invalid_request_error", "code": "invalid_phone_number", "request_id": "req_01HXYZABCDEFGHJKMNPQRSTVWX" }}Upstream WhatsApp error
object
object
Example
{ "error": { "type": "invalid_request_error", "code": "invalid_phone_number", "request_id": "req_01HXYZABCDEFGHJKMNPQRSTVWX" }}