Whatixo.Docs Français Open Whatixo
Docs / Whatixo API

Contacts

Read and feed your CRM from your tools: website forms, point-of-sale software, ERP… Contacts created here appear in Contacts.

List contacts

POSThttps://api.whatixo.com/api/whatsapp/contacts
FieldTypeDescription
tagoptionalstringOnly returns contacts whose tags contain this value.
searchoptionalstringSearch in the name or number.
limitoptionalintegerContacts per page (1 to 1,000). Without limit, all contacts are returned.
offsetoptionalintegerNumber of contacts to skip (pagination). Default: 0.
curl -X POST https://api.whatixo.com/api/whatsapp/contacts \
  -H "x-api-key: $WHATIXO_API_KEY" -H "Content-Type: application/json" \
  -d '{"tag":"vip","limit":100,"offset":0}'
Response 200JSON
{
  "success": true,
  "count": 2,
  "total": 214,
  "offset": 0,
  "hasMore": true,
  "contacts": [
    {
      "id": "c5f1…",
      "phone": "243812345601",
      "name": "Aline Mukendi",
      "tags": "customers,vip",
      "attributes": { "city": "Kinshasa" },
      "leadTemperature": "HOT",
      "messagesReceived": 12,
      "messagesRead": 10,
      "linksClicked": 3,
      "lastActivityAt": "2026-11-03T16:30:00.000Z",
      "createdAt": "2026-10-02T09:12:00.000Z"
    }
  ]
}

total, offset and hasMore are only present when you pass limit.

Read a contact

POSThttps://api.whatixo.com/api/whatsapp/contacts/info
FieldTypeDescription
phonerequiredstringThe contact’s international number.
curl -X POST https://api.whatixo.com/api/whatsapp/contacts/info \
  -H "x-api-key: $WHATIXO_API_KEY" -H "Content-Type: application/json" \
  -d '{"phone":"243812345601"}'

Response: {"success":true,"contact":{…}}, or 404 if the contact doesn’t exist.

Create or update a contact

POSThttps://api.whatixo.com/api/whatsapp/contacts/upsert

If a contact with this number exists, it is updated; otherwise it is created. Ideal for syncing a form or a store.

FieldTypeDescription
phonerequiredstringInternational number (6 to 20 digits).
nameoptionalstringDisplay name (120 characters max).
tagsoptionalstring | string[]"customers,vip" or ["customers","vip"]. Replaces existing tags. A tag can start a sequence; removing it stops it.
attributesoptionalobjectFree-form data: {"city":"Goma","order":"1042"}.
curl -X POST https://api.whatixo.com/api/whatsapp/contacts/upsert \
  -H "x-api-key: $WHATIXO_API_KEY" -H "Content-Type: application/json" \
  -d '{
    "phone": "243812345601",
    "name": "Aline Mukendi",
    "tags": ["customers", "newsletter"],
    "attributes": { "city": "Kinshasa", "source": "website" }
  }'

Response: {"success":true,"contact":{…}}. If your plan’s contact limit is reached: 402 {"code":"PLAN_LIMIT","feature":"crm"}.

Check numbers

POSThttps://api.whatixo.com/api/whatsapp/contacts/check

Tells you whether numbers have a WhatsApp account, before you send.

FieldTypeDescription
deviceIdrequiredstringConnected number used for the check.
phonesrequiredstring[]List of international numbers.
RequestJSON
{ "deviceId": "8f2c1a7e-4b9d-4e21-9a6f-3c5d7e1b2a90", "phones": ["243812345601", "243000000000"] }
Response 200JSON
{
  "success": true,
  "results": [
    { "phone": "243812345601", "exists": true, "jid": "243812345601@s.whatsapp.net" },
    { "phone": "243000000000", "exists": false }
  ]
}

Check in reasonable batches (a few dozen numbers per call): massive checks may look suspicious to WhatsApp.

Profile picture

POSThttps://api.whatixo.com/api/whatsapp/contacts/avatar
RequestJSON
{ "deviceId": "8f2c1a7e-4b9d-4e21-9a6f-3c5d7e1b2a90", "phone": "243812345601" }
Response 200JSON
{ "success": true, "pictureUrl": "https://pps.whatsapp.net/v/t61…" }

If the contact has no picture or hides it, the API returns 500 with an explicit message. The returned URL is temporary: download the image if you need to keep it.