Skip to content
Beta — the Waasl API is in private beta. Endpoints marked Coming soon are designed but not live yet. Request early access

Conversations

Threads between a contact and your team on one channel — routing, assignment, lifecycle stage and closing.

GET/v1/conversationsAvailable

Most recent activity first.

Query parameters

Field Type Description
status “open” | “closed”
assignee_id string Only conversations assigned to this user. Use none for unassigned.
channel_type “whatsapp” | “instagram” | “messenger” | “sms” | “email” | “webchat”
stage_id string
tag string
contact_id string
q string Search contact name
limit integer
cursor string The next_cursor from the previous page.
Terminal window
curl "https://api.waasl.io/v1/conversations" \
-H "Authorization: Bearer $WAASL_API_KEY"
Response 200 — A page of conversations
{
"data": [
{
"id": "cv_3PzA91",
"contact_id": "string",
"channel_id": "string",
"channel_type": "whatsapp",
"status": "open",
"stage_id": "string",
"assignee_id": "string",
"team_id": "string",
"controller": "human",
"unread_count": 0,
"tags": [
"string"
],
"last_customer_at": "2026-10-01T08:15:00Z",
"last_message_at": "2026-10-01T08:15:00Z",
"window_expires_at": "2026-10-01T08:15:00Z",
"contact_name": "string",
"contact_handle": "string"
}
],
"next_cursor": "MjAyNi0xMC0wMVQwODoxNTowMC4wMDBafGN2XzNQekE5MQ",
"has_more": true
}
GET/v1/conversations/{conversation_id}Available

Path parameters

Field Type Description
conversation_id required string
Terminal window
curl "https://api.waasl.io/v1/conversations/cv_3PzA91" \
-H "Authorization: Bearer $WAASL_API_KEY"
Response 200 — The conversation
{
"id": "cv_3PzA91",
"contact_id": "string",
"channel_id": "string",
"channel_type": "whatsapp",
"status": "open",
"stage_id": "string",
"assignee_id": "string",
"team_id": "string",
"controller": "human",
"unread_count": 0,
"tags": [
"string"
],
"last_customer_at": "2026-10-01T08:15:00Z",
"last_message_at": "2026-10-01T08:15:00Z",
"window_expires_at": "2026-10-01T08:15:00Z",
"contact_name": "string",
"contact_handle": "string"
}

Errors: 404 Not found in this workspace

POST/v1/conversations/{conversation_id}/assignAvailable

Assign to a user, or pass null to unassign. Assigning to a team is coming soon.

Path parameters

Field Type Description
conversation_id required string

Request body

Field Type Description
assignee_id string | null
team_id string | null Coming soon.
Terminal window
curl -X POST "https://api.waasl.io/v1/conversations/cv_3PzA91/assign" \
-H "Authorization: Bearer $WAASL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"assignee_id": "usr_4hT9qP",
"team_id": "string"
}'
Response 200 — Updated conversation
{
"id": "cv_3PzA91",
"contact_id": "string",
"channel_id": "string",
"channel_type": "whatsapp",
"status": "open",
"stage_id": "string",
"assignee_id": "string",
"team_id": "string",
"controller": "human",
"unread_count": 0,
"tags": [
"string"
],
"last_customer_at": "2026-10-01T08:15:00Z",
"last_message_at": "2026-10-01T08:15:00Z",
"window_expires_at": "2026-10-01T08:15:00Z",
"contact_name": "string",
"contact_handle": "string"
}
POST/v1/conversations/{conversation_id}/closeAvailable

Path parameters

Field Type Description
conversation_id required string

Request body

Field Type Description
category_id string Closing reason.
summary string
send_csat boolean Send a satisfaction survey (coming soon).
Terminal window
curl -X POST "https://api.waasl.io/v1/conversations/cv_3PzA91/close" \
-H "Authorization: Bearer $WAASL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"category_id": "resolved",
"summary": "Plan renewed for 30 days"
}'
Response 200 — Closed conversation
{
"id": "cv_3PzA91",
"contact_id": "string",
"channel_id": "string",
"channel_type": "whatsapp",
"status": "open",
"stage_id": "string",
"assignee_id": "string",
"team_id": "string",
"controller": "human",
"unread_count": 0,
"tags": [
"string"
],
"last_customer_at": "2026-10-01T08:15:00Z",
"last_message_at": "2026-10-01T08:15:00Z",
"window_expires_at": "2026-10-01T08:15:00Z",
"contact_name": "string",
"contact_handle": "string"
}
POST/v1/conversations/{conversation_id}/reopenAvailable

Path parameters

Field Type Description
conversation_id required string
Terminal window
curl -X POST "https://api.waasl.io/v1/conversations/cv_3PzA91/reopen" \
-H "Authorization: Bearer $WAASL_API_KEY"
Response 200 — Reopened conversation
{
"id": "cv_3PzA91",
"contact_id": "string",
"channel_id": "string",
"channel_type": "whatsapp",
"status": "open",
"stage_id": "string",
"assignee_id": "string",
"team_id": "string",
"controller": "human",
"unread_count": 0,
"tags": [
"string"
],
"last_customer_at": "2026-10-01T08:15:00Z",
"last_message_at": "2026-10-01T08:15:00Z",
"window_expires_at": "2026-10-01T08:15:00Z",
"contact_name": "string",
"contact_handle": "string"
}
PUT/v1/conversations/{conversation_id}/stageAvailable

Path parameters

Field Type Description
conversation_id required string

Request body

Field Type Description
stage_id string | null
Terminal window
curl -X PUT "https://api.waasl.io/v1/conversations/cv_3PzA91/stage" \
-H "Authorization: Bearer $WAASL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"stage_id": "payment"
}'
Response 200 — Updated conversation
{
"id": "cv_3PzA91",
"contact_id": "string",
"channel_id": "string",
"channel_type": "whatsapp",
"status": "open",
"stage_id": "string",
"assignee_id": "string",
"team_id": "string",
"controller": "human",
"unread_count": 0,
"tags": [
"string"
],
"last_customer_at": "2026-10-01T08:15:00Z",
"last_message_at": "2026-10-01T08:15:00Z",
"window_expires_at": "2026-10-01T08:15:00Z",
"contact_name": "string",
"contact_handle": "string"
}
POST/v1/conversations/{conversation_id}/handoverBeta

to: human takes the conversation away from an AI agent or workflow so agents can reply; to: bot gives it back. While a bot controls a conversation, sending as a user fails with bot_in_control.

Path parameters

Field Type Description
conversation_id required string

Request body

Field Type Description
to required “human” | “bot”
ai_agent_id string Which AI agent, when to is bot.
Terminal window
curl -X POST "https://api.waasl.io/v1/conversations/cv_3PzA91/handover" \
-H "Authorization: Bearer $WAASL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "human",
"ai_agent_id": "string"
}'
Response 200 — Updated conversation
{
"id": "cv_3PzA91",
"contact_id": "string",
"channel_id": "string",
"channel_type": "whatsapp",
"status": "open",
"stage_id": "string",
"assignee_id": "string",
"team_id": "string",
"controller": "human",
"unread_count": 0,
"tags": [
"string"
],
"last_customer_at": "2026-10-01T08:15:00Z",
"last_message_at": "2026-10-01T08:15:00Z",
"window_expires_at": "2026-10-01T08:15:00Z",
"contact_name": "string",
"contact_handle": "string"
}
POST/v1/conversations/{conversation_id}/snoozeComing soon

Hides the conversation until until, or until the contact writes again.

Path parameters

Field Type Description
conversation_id required string

Request body

Field Type Description
until required string (date-time)
Terminal window
curl -X POST "https://api.waasl.io/v1/conversations/cv_3PzA91/snooze" \
-H "Authorization: Bearer $WAASL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"until": "2026-10-01T08:15:00Z"
}'
Response 200 — Snoozed conversation
{
"id": "cv_3PzA91",
"contact_id": "string",
"channel_id": "string",
"channel_type": "whatsapp",
"status": "open",
"stage_id": "string",
"assignee_id": "string",
"team_id": "string",
"controller": "human",
"unread_count": 0,
"tags": [
"string"
],
"last_customer_at": "2026-10-01T08:15:00Z",
"last_message_at": "2026-10-01T08:15:00Z",
"window_expires_at": "2026-10-01T08:15:00Z",
"contact_name": "string",
"contact_handle": "string"
}
POST/v1/conversations/{conversation_id}/notesAvailable

Notes are visible to your team only and never reach the contact. @FirstName mentions notify that teammate.

Path parameters

Field Type Description
conversation_id required string

Request body

Field Type Description
body required string
Terminal window
curl -X POST "https://api.waasl.io/v1/conversations/cv_3PzA91/notes" \
-H "Authorization: Bearer $WAASL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"body": "Order #4821 refunded in Shopify — @Omar please confirm with the customer."
}'
Response 201 — The note (a message with kind: note)
{
"id": "msg_Vb3kQ9xP",
"conversation_id": "string",
"direction": "in",
"kind": "text",
"body": "string",
"caption": "string",
"media_id": "string",
"filename": "string",
"mime": "string",
"size_bytes": 0,
"reply_to_id": "string",
"actor_kind": "contact",
"actor_id": "string",
"status": "queued",
"error": "Re-engagement message (131047)",
"created_at": "2026-10-01T08:15:00Z"
}