Conversations
Conversations API
Conversations and their messages.
List conversations
/v1/conversationsCursor-paginated conversations, newest first.
Required scope: conversations:read.
limitintegerPage size (1–100).
starting_afterstringCursor: the `id` of the last item from the previous page.
statusstringOne of: open, closed.
channelstringOne of: api, widget, whatsapp, facebook, instagram, telegram.
channel_idstringcustomer_idstringprioritystringOne of: low, normal, high, urgent.
curl "https://api.asks.app/v1/conversations" \
-H "Authorization: Bearer $ASKS_API_KEY"{
"object": "list",
"data": [
{
"object": "conversation",
"id": "string",
"status": "open",
"channel": "api",
"channel_id": {},
"customer_id": {},
"customer_name": {},
"customer_email": {},
"assignee": {},
"priority": "low",
"tags": [
"string"
],
"external_id": {},
"is_pinned": true,
"resolution_type": "confirmed",
"message_count": 1,
"custom_action_memory": {},
"resolved_at": {},
"created_at": {},
"updated_at": {}
}
],
"has_more": true,
"next_cursor": {}
}Create a conversation
/v1/conversationsCreates a conversation. If customer info is provided, the customer is created or matched (cross-channel dedup).
Required scope: conversations:write.
channelstringOne of: api, widget, whatsapp, facebook, instagram, telegram.
customerobjectIdentifying info used to create or match a customer.
metadataobjectcurl -X POST "https://api.asks.app/v1/conversations" \
-H "Authorization: Bearer $ASKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"channel": "api",
"customer": {
"email": "customer@example.com",
"phone": "string",
"name": "string",
"external_id": "string"
},
"metadata": {}
}'{
"object": "conversation",
"id": "string",
"status": "open",
"channel": "api",
"channel_id": {},
"customer_id": {},
"customer_name": {},
"customer_email": {},
"assignee": {},
"priority": "low",
"tags": [
"string"
],
"external_id": {},
"is_pinned": true,
"resolution_type": "confirmed",
"message_count": 1,
"custom_action_memory": {},
"resolved_at": {},
"created_at": {},
"updated_at": {}
}Retrieve a conversation
/v1/conversations/{id}Required scope: conversations:read.
curl "https://api.asks.app/v1/conversations/<id>" \
-H "Authorization: Bearer $ASKS_API_KEY"{
"object": "conversation",
"id": "string",
"status": "open",
"channel": "api",
"channel_id": {},
"customer_id": {},
"customer_name": {},
"customer_email": {},
"assignee": {},
"priority": "low",
"tags": [
"string"
],
"external_id": {},
"is_pinned": true,
"resolution_type": "confirmed",
"message_count": 1,
"custom_action_memory": {},
"resolved_at": {},
"created_at": {},
"updated_at": {}
}Update a conversation
/v1/conversations/{id}Update status, priority, tags, or assignment. assignee accepts "ai", a user id, or null.
Required scope: conversations:write.
statusstring`resolved` is accepted as a legacy alias for `closed`. One of: open, closed.
prioritystringOne of: low, normal, high, urgent.
tagsarray of stringassigneestringnull`"ai"`, a user id, or `null` to unassign.
curl -X PATCH "https://api.asks.app/v1/conversations/<id>" \
-H "Authorization: Bearer $ASKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "open",
"priority": "low",
"tags": [
"string"
],
"assignee": {}
}'{
"object": "conversation",
"id": "string",
"status": "open",
"channel": "api",
"channel_id": {},
"customer_id": {},
"customer_name": {},
"customer_email": {},
"assignee": {},
"priority": "low",
"tags": [
"string"
],
"external_id": {},
"is_pinned": true,
"resolution_type": "confirmed",
"message_count": 1,
"custom_action_memory": {},
"resolved_at": {},
"created_at": {},
"updated_at": {}
}List messages
/v1/conversations/{id}/messagesCursor-paginated messages, newest first.
Required scope: conversations:read.
limitintegerPage size (1–100).
starting_afterstringCursor: the `id` of the last item from the previous page.
curl "https://api.asks.app/v1/conversations/<id>/messages" \
-H "Authorization: Bearer $ASKS_API_KEY"{
"object": "list",
"data": [
{
"object": "message",
"id": "string",
"conversation_id": "string",
"ticket_id": {},
"sender_type": "customer",
"sender_id": {},
"content": "string",
"visibility": "public",
"channel": "string",
"external_id": {},
"attachments": {},
"is_read": true,
"created_at": {}
}
],
"has_more": true,
"next_cursor": {}
}Send a message
/v1/conversations/{id}/messagesPosts an agent message into the conversation. Emits a message.created webhook.
Required scope: messages:write.
contentstringrequiredattachmentsarray of objectchannel_metadataobjectclient_message_idstringYour own id for client-side dedup.
curl -X POST "https://api.asks.app/v1/conversations/<id>/messages" \
-H "Authorization: Bearer $ASKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "string",
"attachments": [
{}
],
"channel_metadata": {},
"client_message_id": "string"
}'{
"object": "message",
"id": "string",
"conversation_id": "string",
"ticket_id": {},
"sender_type": "customer",
"sender_id": {},
"content": "string",
"visibility": "public",
"channel": "string",
"external_id": {},
"attachments": {},
"is_read": true,
"created_at": {}
}