Skip to main content
Creates a 1:1 chat or group chat and sends the first message. Use this when your app wants an addressable chat.id for follow-ups, history, typing, media, and group operations.
Text parts use value. The request must include message.parts.
rich_link parts use the same public shape on every Chert sender line:
{ "type": "rich_link", "url": "https://example.com" }
Optional title, summary, image_url, and icon_url fields are accepted. When those fields are omitted, Chert fetches preview metadata when the sender line supports native rich-link previews.

Request

curl https://console.trychert.com/api/v1/chats \
  -H "Authorization: Bearer $CHERT_SIGNING_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "+15555550100",
    "to": ["+14155551234"],
    "message": {
      "parts": [
        { "type": "text", "value": "Hi Sam - got a minute?" },
        { "type": "rich_link", "url": "https://example.com/demo" }
      ],
      "idempotency_key": "chat-2026-05-01-001"
    }
  }'

Group chat

Use 2-31 recipients in to.
{
  "from": "+15555550100",
  "to": ["+14155551234", "+14155559876"],
  "message": {
    "subject": "Launch follow-up",
    "parts": [{ "type": "text", "value": "Starting this group here." }]
  }
}
Media attachments and rich links are not supported in the first group-create call. Create the group with text, then send attachments or rich links with POST /api/v1/chats/{id}/messages.

Response

{
  "chat": {
    "id": "0f2d3c1a-8b4e-4f6a-90d2-1a3b4c5d6e7f",
    "display_name": "Sam Chen",
    "handles": [{ "service": "imessage", "address": "+14155551234" }],
    "is_group": false,
    "service": "imessage",
    "health_score": 87,
    "created_at": "2026-05-01T12:00:00Z"
  },
  "message": {
    "id": "46eb1003c8b54b7ea8f1c2b03e9a7d12",
    "chat_id": "0f2d3c1a-8b4e-4f6a-90d2-1a3b4c5d6e7f",
    "parts": [{ "type": "text", "value": "Hi Sam - got a minute?" }],
    "status": "sent",
    "direction": "outbound",
    "created_at": "2026-05-01T12:00:00Z",
    "delivered_at": null,
    "read_at": null,
    "service": "imessage"
  }
}

Fields

FieldRequiredNotes
fromYesSender phone number from Phone numbers.
toYesOne E.164 recipient for a DM, 2-31 for a group.
message.partsYesArray of text, media, rich_link, or legacy link parts. rich_link uses { "type": "rich_link", "url": "https://..." }.
message.idempotency_keyNoReuse the same key and body to safely retry.
message.subjectNoUsed as the group display name for multi-recipient chat creation.

Ids

FieldUse it with
chat.idChat-scoped routes such as POST /api/v1/chats/{id}/messages and GET /api/v1/chats/{id}/messages.
message.idMessage-scoped routes such as POST /api/v1/messages/{id}/react and POST /api/v1/messages/{id}/edit.

Errors

CodeWhen
1001Missing from, to, or message.parts.
1003Invalid phone number.
1005URL in a first-message text part, or a legacy link part in a first message. Use rich_link for previewed URLs.
2006from is not assigned to this tenant.
4001Downstream delivery failed.

See also