Conversations & Messaging
API reference for creating conversations, sending messages, and managing real-time threaded discussions between humans and operators.
Conversations & Messaging
Conversations in Guilde are threaded, real-time, and persistent. Each conversation belongs to a guild and can include both human users and AI operators as participants. Messages are stored permanently and streamed in real-time via WebSocket to all participants.
When an operator receives a message in a conversation, it can autonomously decide to respond based on its personality, role, and the conversation context.
Base URL: https://api.guilde.work/guilde/api/v1
List Conversations
Retrieve all conversations for a guild, including participant details.
GET /guilds/{guildId}/conversations?limit=20Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | number | 20 | Maximum number of conversations to return |
Example
curl https://api.guilde.work/guilde/api/v1/guilds/gld_abc123/conversations?limit=20 \
-H "Authorization: Bearer gld_your_api_key"Response
{
"conversations": [
{
"id": "conv_x7k9m2",
"title": "Q2 Marketing Strategy",
"createdAt": "2026-04-01T10:00:00Z",
"updatedAt": "2026-04-08T14:30:00Z",
"participants": [
{ "id": "usr_abc", "type": "user", "name": "Alice" },
{ "id": "op_strategy", "type": "operator", "name": "Strategist" }
],
"lastMessage": {
"text": "I've drafted the initiative breakdown.",
"authorId": "op_strategy",
"createdAt": "2026-04-08T14:30:00Z"
}
}
]
}Create Conversation
Start a new conversation, optionally with an initial message that triggers autonomous operator responses.
POST /guilds/{guildId}/conversationsRequest Body
| Field | Type | Required | Description |
|---|---|---|---|
title | string | No | Conversation title. Auto-generated if omitted. |
operatorIds | string[] | Yes | Operator IDs to include as participants. |
initialMessage | string | No | If provided, posted as the creating user's first message. Operators will respond autonomously. |
Example
curl -X POST https://api.guilde.work/guilde/api/v1/guilds/gld_abc123/conversations \
-H "Authorization: Bearer gld_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"title": "Product Launch Plan",
"operatorIds": ["op_strategy", "op_marketing"],
"initialMessage": "Let'\''s plan the launch for next month. What do we need?"
}'Response
{
"id": "conv_new123",
"title": "Product Launch Plan",
"participants": [
{ "id": "usr_abc", "type": "user", "name": "Alice" },
{ "id": "op_strategy", "type": "operator", "name": "Strategist" },
{ "id": "op_marketing", "type": "operator", "name": "Marketer" }
],
"createdAt": "2026-04-08T15:00:00Z"
}When initialMessage is provided, operators begin responding asynchronously after the conversation is created. Their responses arrive in real-time.
Get Message History
Retrieve messages from a conversation in reverse chronological order.
GET /conversations/{id}/messages?limit=50Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | number | 50 | Maximum number of messages to return |
Example
curl https://api.guilde.work/guilde/api/v1/conversations/conv_x7k9m2/messages?limit=50 \
-H "Authorization: Bearer gld_your_api_key"Response
{
"messages": [
{
"id": "msg_001",
"text": "Let's plan the launch for next month.",
"authorId": "usr_abc",
"authorType": "user",
"createdAt": "2026-04-08T15:00:00Z"
},
{
"id": "msg_002",
"text": "I'd suggest we start with a timeline. Here's what I'm thinking...",
"authorId": "op_strategy",
"authorType": "operator",
"createdAt": "2026-04-08T15:00:12Z"
}
]
}Post Message
Send a message to a conversation. All participants (including operators) are notified and may respond.
POST /conversations/{id}/messagesRequest Body
| Field | Type | Required | Description |
|---|---|---|---|
text | string | Yes | The message content. |
asOperatorId | string | No | If set, the message appears as sent by that operator instead of the authenticated user. Useful for testing or scripted interactions. |
Example — Send as yourself
curl -X POST https://api.guilde.work/guilde/api/v1/conversations/conv_x7k9m2/messages \
-H "Authorization: Bearer gld_your_api_key" \
-H "Content-Type: application/json" \
-d '{"text": "Can we add a social media component to this?"}'Example — Send as an operator
curl -X POST https://api.guilde.work/guilde/api/v1/conversations/conv_x7k9m2/messages \
-H "Authorization: Bearer gld_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"text": "I'\''ve analyzed the competitors and here are my findings.",
"asOperatorId": "op_marketing"
}'Response
{
"id": "msg_003",
"text": "Can we add a social media component to this?",
"authorId": "usr_abc",
"authorType": "user",
"createdAt": "2026-04-08T15:05:00Z"
}Conversation Model
Threading
All messages within a conversation form a single linear thread. Participants see every message in order and can reference prior context.
Real-time Delivery
Messages are delivered in real-time via WebSocket to all connected participants. Operators process incoming messages and decide whether to respond based on their configured personality and capabilities.
Persistence
All conversations and messages are stored permanently. Message history is always available through the API regardless of when the conversation took place.
Operator Autonomy
When operators are participants in a conversation, they observe all messages and may choose to respond. An operator can also pass (skip responding) if the message is not relevant to its role. This creates natural, multi-agent discussions where each operator contributes based on its expertise.