Skip to main content
POST
/
api
/
v1
/
conversations
Create a conversation
curl --request POST \
  --url https://app.vorel.ai/api/v1/conversations \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "channel": "whatsapp",
  "customer_identifier": "<string>",
  "customer_name": "<string>",
  "customer_language": "<string>"
}
'
{
  "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "channel": "<string>",
  "customer_identifier": "<string>",
  "status": "<string>",
  "created_at": "2023-11-07T05:31:56Z",
  "customer_name": "<string>",
  "customer_language": "<string>",
  "first_message_at": "2023-11-07T05:31:56Z",
  "last_message_at": "2023-11-07T05:31:56Z"
}

Documentation Index

Fetch the complete documentation index at: https://docs.vorel.ai/llms.txt

Use this file to discover all available pages before exploring further.

Authorizations

Authorization
string
header
required

Tenant-issued API key. Format: vapk_live_<48 hex chars> (60 chars total). Issue + manage at /settings/integrations/api-keys in the Vorel dashboard. Each key has a scope set (read, leads:write, appointments:write, offerings:write); endpoints requiring a write scope reject keys without it with a 403 envelope.

Body

application/json

Pre-create a conversation from a CRM / webform handler before the customer messages. Closes the chicken-and-egg with POST /api/v1/leads (which requires an existing conversation_id). Strict-create: returns 409 if a conversation already exists for the (channel, customer_identifier) pair under this tenant.

channel
enum<string>
required

Inbound channel slug. whatsapp / voice / webform are live; instagram / email are reserved slots for channels whose ingest paths land in a future phase.

Available options:
whatsapp,
voice,
webform,
instagram,
email
customer_identifier
string
required

Channel-native identifier — phone for WhatsApp/voice (E.164 strongly recommended; not enforced), email for webform, etc.

Required string length: 1 - 255
customer_name
string | null
Maximum string length: 200
customer_language
string | null

ISO 639-1 (en, ar) or BCP 47 short tag (en-US). Other formats are rejected at the validation layer.

Pattern: ^[a-z]{2}(-[A-Z]{2})?$

Response

Conversation created. Emits conversation.created.

id
string<uuid>
required
channel
string
required

Inbound channel slug — e.g. whatsapp, voice, webform.

customer_identifier
string
required

Channel-native identifier — phone for WhatsApp/voice (E.164), email for webform, etc.

status
string
required

Conversation lifecycle state — active, closed, …

created_at
string<date-time>
required
customer_name
string | null
customer_language
string | null

ISO 639-1 (en, ar, …) when known.

first_message_at
string<date-time> | null
last_message_at
string<date-time> | null