Skip to content

Contact detail

Returns the full payload of a contact, including the phone and the profile picture metadata.

Endpoint

GET /v1/contacts/{contact_id}

For extra numbers: GET /v1/numbers/{ref}/contacts/{contact_id}

Required scope: contacts:read.

Path parameter

ParameterTypeFormat
contact_idstringct_{hex32}: regex ^ct_[0-9a-f]{32}$

Example

Terminal window
curl "https://api.turbonotify.com/v1/contacts/ct_a1b2c3d4e5f6789012345678901234ab" \
-H "Authorization: Bearer YOUR_KEY"

Response (200)

HTTP status: 200
{
  "id": "ct_a1b2c3d4e5f6789012345678901234ab",
  "number_alias": "main",
  "phone_number": "+5511988887777",
  "name": "João Silva",
  "is_self": false,
  "first_messaged_at": "2026-05-10T13:25:00Z",
  "last_interaction_at": "2026-05-10T13:42:00Z",
  "verified_on_whatsapp_at": "2026-05-10T13:25:00Z",
  "picture": {
    "kind": "available",
    "url": "https://cdn.example.com/contacts/ct_a1b2.jpg",
    "url_expires_at": "2026-05-10T14:25:00Z",
    "hash": "a3f1c9...",
    "fetched_at": "2026-05-10T13:25:00Z"
  },
  "refresh": {
    "requested_at": "2026-05-10T13:40:00Z",
    "completed_at": "2026-05-10T13:40:06Z",
    "outcome": "updated"
  },
  "created_at": "2026-05-10T13:25:00Z",
  "updated_at": "2026-05-10T13:42:00Z"
}

The number_alias identifies the Turbo Notify number the contact belongs to: main or the alias of an extra number. The same phone reached by two numbers produces two contacts. The phone_number is the full E.164, unmasked, the same as in message.from and message.to. The name is the name the contact set in their WhatsApp profile (the same {id, name, number} trio used by the contact.* events). The shape of picture depends on kind (available or unavailable), as in the events’ media block, and carries fetched_at when kind is available. The pending value only appears in webhooks: this endpoint never returns it.

Interaction and refresh dates

FieldMeaning
first_messaged_atWhen the first message sent by this number through Turbo Notify reached the contact on WhatsApp. null while none has arrived. A send that failed before reaching WhatsApp does not fill in this field.
last_interaction_atThe last message actually exchanged with the contact, in either direction: received, sent from the phone, or sent through Turbo Notify and delivered to WhatsApp. A send that did not reach WhatsApp does not change this field.
refreshThe last refresh request you made for this contact. null if you never made one. Carries requested_at, completed_at and outcome; the last two stay null while the refresh is in progress.

Errors

  • 404 contact_not_found: the contact does not exist, or belongs to another organization or to another number. A contact_id outside the ct_{hex32} format returns 400 invalid_contact_id.

See the error reference.