Create a contact
package main
import ( "fmt" "strings" "net/http" "io")
func main() {
url := "https://api.kirimdev.com/v1/106540352242922/contacts"
payload := strings.NewReader("{ \"phone_number\": \"example\", \"bsuid\": \"example\", \"username\": \"example\", \"name\": \"example\", \"email\": \"hello@example.com\", \"metadata\": { \"additionalProperty\": \"example\" } }")
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/contacts';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"phone_number":"example","bsuid":"example","username":"example","name":"example","email":"hello@example.com","metadata":{"additionalProperty":"example"}}'};
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/contacts";
let payload = json!({ "phone_number": "example", "bsuid": "example", "username": "example", "name": "example", "email": "hello@example.com", "metadata": json!({"additionalProperty": "example"}) });
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/contacts \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "phone_number": "example", "bsuid": "example", "username": "example", "name": "example", "email": "hello@example.com", "metadata": { "additionalProperty": "example" } }'Create a contact attached to the WhatsApp account identified by phone_number_id in the URL path.
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
object
Example generated
{ "phone_number": "example", "bsuid": "example", "username": "example", "name": "example", "email": "hello@example.com", "metadata": { "additionalProperty": "example" }}Responses
Section titled “ Responses ”Contact created
object
object
Phone number in E.164. NULL when the contact was created via BSUID (username-adopted user with no shared phone number). See docs/meta-docs/bsuid.md.
Business-Scoped User ID. Populated by inbound webhooks or when the contact was created via BSUID. Format: {ISO alpha-2 country}.{alphanumeric ≤128}.
Parent BSUID (managed businesses only). Format: {ISO alpha-2 country}.ENT.{alphanumeric ≤128}.
WhatsApp username of the contact, if the user has adopted the username feature. Case-insensitive when comparing per Meta rules; . and _ are significant.
object
Meta business_phone_number_id — use as the {phone_number_id} path segment in /v1/{phone_number_id}/... endpoints.
End-customer (multi-tenant platform mode) that owns this account. NULL for direct-org accounts.
object
Example
{ "data": { "id": "ctc_01HXYZABCDEFGHJKMNPQRSTVWX", "object": "contact", "phone_number": "+628123456789", "bsuid": "US.13491208655302741918", "parent_bsuid": "US.ENT.11815799212886844830", "username": "pablomorales", "whatsapp_account": { "phone_number_id": "106540352242922", "customer": { "id": "cus_01HXYZABCDEFGHJKMNPQRSTVWX" } } }}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" }}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" }}