Contacts API
Create, update, look up and delete Dialstitch contacts through the API, and match a phone number to a contact.
Keep Dialstitch contacts in step with your CRM or database. Reading needs contacts:read. Creating, updating and deleting need contacts:write.
The contact object
{
"id": "7a9b0c1d-2e3f-4a5b-6c7d-8e9f0a1b2c3d",
"name": "Dana Ruiz",
"company": "Ruiz Plumbing",
"notes": "Prefers texts after 5pm.",
"favorite": false,
"owner_user_id": null,
"phones": [
{ "e164": "+14155550123", "label": "mobile" }
],
"created_at": "2026-10-28T18:20:00.000Z",
"updated_at": "2026-11-01T09:12:44.000Z"
}owner_user_id is set on a person's own private contact and null on a team contact. Contacts created through the API are always team contacts.
List contacts
GET /contactslimit,cursor: pagination.phone: only contacts with this phone number.
Look up a contact by phone number
GET /contacts/lookup?phone=+14155550123Returns the contact for a number the same way the app matches callers: the oldest contact with that number. Returns 404 if no contact has it. phone is required.
Get a contact
GET /contacts/{id}Create a contact
POST /contactsname(required): up to 255 characters.company: up to 255 characters.notes: up to 10,000 characters.favorite:trueorfalse.phones: up to 20 numbers. Each is a string, or an object withe164andlabel. The label defaults tomobile.
curl -X POST https://dialstitch.com/api/v1/contacts \
-H "Authorization: Bearer dpk_..." \
-H "Content-Type: application/json" \
-d '{"name": "Dana Ruiz", "company": "Ruiz Plumbing", "phones": [{"e164": "+14155550123", "label": "mobile"}]}'Returns 201 with { "data": <contact> }. Creating a contact sends the contact.created webhook.
Update a contact
PATCH /contacts/{id}Send only the fields you want to change. If you send phones, it replaces every number on the contact. Returns the updated contact and sends the contact.updated webhook.
Delete a contact
DELETE /contacts/{id}Returns 204. Past calls keep their history but lose the link to the contact.