Auth. HMAC v1 or bearer token — see Authentication.
Status. Live · Idempotent: No.
contact object (or supply raw vcard_text). Include at least one identifying field inside contact — full_name, given_name, family_name, organization, or a non-empty phones / emails.
This is independent of the line’s own saved contact card — use share-contact-info to share the line’s “Me” card.
Addressing the recipient
Pick the form that matches your state:- By chat id —
POST /api/v1/chats/{id}/send-contactonce a chat exists. - By phone — pass
toin the request body. Use this on first-touch when no chat exists yet; Chert resolves or creates the chat in-line.
Request
POST /api/v1/chats/{id}/send-contact
Response
Path parameters
Chat identifier (
ch_…). Omit and use body.to for first-touch recipients with no chat yet.Body
Provide either acontact object (canonical) or a raw vcard_text string.
Recipient phone in E.164 format. Use instead of the
{id} path segment when no chat exists yet. Ignored when {id} is supplied.Canonical contact wrap. Must include at least one identifying field.
| Field | Type | Notes |
|---|---|---|
full_name | string | Formatted display name. |
given_name | string | First name. |
family_name | string | Last name. |
organization | string | Org / company name. |
phones | object[] | Each { value: <E.164>, label?: string }. |
emails | object[] | Each { value, label?: string }. |
Raw vCard payload (begins with
BEGIN:VCARD). Use this when you already produce vCards elsewhere.Response fields
The chat the card was sent into.
Always
"sent" on success.Errors
| Code | HTTP | When |
|---|---|---|
1001 | 400 | Missing contact and vcard_text (request body needs one of them). |
1002 | 400 | contact has no identifying field, or fields were supplied in an unsupported shape. |
1004 | 400 | Invalid JSON body. |
2002 | 404 | Chat not found. On first-touch with no existing chat, address the call with body.to instead of {id}. |
4001 | 502 | Delivery failed. |
4099 | 501 | No pinned line, or the line does not support contact bubbles. |

