---
title: "Create contact"
method: POST
path: "/v1/contacts"
---

# Create contact

`POST /v1/contacts`

Create a new contact with one or more communication channels.

## Request body

- ContactCreateRequest — Request body to create a contact with channels.
  - `displayName` string — Display name for the contact.
  - `channels` ContactChannelInput[], required — Communication channels for the contact.
    - `channel` 'sms' | 'whatsapp' | 'email' | 'telegram' | 'instagram' | 'messenger' | 'voice', required — Channel type.
    - `identifier` string, required — Channel identifier (phone number in E.164 format or email address).
    - `countryCode` string — ISO country code for phone numbers.
    - `label` string — Optional label for the channel.
    - `isPrimary` boolean — Whether this should be the primary channel for its type.
  - `metadata` object — Arbitrary metadata to associate with the contact.

## Response `201`

Contact created.

- Contact
  - `id` string, required
  - `displayName` string — Display name for the contact.
  - `phoneNumber` string — DEPRECATED: Use primaryPhone instead. Primary phone number in E.164 format.
  - `primaryPhone` string — Primary phone number in E.164 format.
  - `primaryEmail` string, email — Primary email address.
  - `countryCode` string
  - `profileName` string, nullable — Contact's WhatsApp profile name. Only available for WhatsApp contacts.
  - `availableChannels` string[], required — List of available messaging channels for this contact.
  - `defaultChannel` 'sms' | 'whatsapp' | 'telegram' | 'email' | 'instagram' | 'messenger' | 'voice' — Preferred channel for this contact.
  - `verified` boolean, required — Whether this contact has been verified.
  - `channels` ContactChannel[] — All communication channels for this contact.
    - `id` string, required
    - `channel` 'sms' | 'whatsapp' | 'email' | 'telegram' | 'instagram' | 'messenger' | 'voice', required — Channel type.
    - `identifier` string, required — Channel identifier (phone number or email address).
    - `countryCode` string — ISO country code for phone numbers.
    - `label` string — Optional label for the channel.
    - `isPrimary` boolean, required — Whether this is the primary channel for its type.
    - `verified` boolean, required — Whether this channel has been verified.
    - `metrics` object — Delivery metrics for this channel.
      - `successCount` integer
      - `failureCount` integer
      - `totalAttempts` integer
      - `avgDeliveryTimeMs` number
      - `lastSuccessAt` string, date-time
    - `lastInboundAt` string, date-time — Last time a message was received on this channel.
    - `metadata` object
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time
  - `suggestedMergeWith` string — ID of a contact suggested for merging.
  - `metadata` object, required
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time

## Other responses

- `400` — Invalid request.
- `401` — Unauthorized.

---

[API](https://skmtc.net/zavudev/apis/zavu-unified-messaging-layer-api.md) · [All operations](https://skmtc.net/zavudev/apis/zavu-unified-messaging-layer-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zavudev/zavu-unified-messaging-layer-api/revisions/4dacdff2adf8/schema)
