Send Message

Send a message into a conversation. It is attributed to the API key's owner and runs the same side effects as the in-app composer — outbound delivery on the inbox's channel, first-reply timing, and AI auto-takeover. Set private: true for an internal note, which is never delivered to the contact. Either content or at least one attachment is required. Every operation is scoped by the required workspaceId. A workspace-scoped API key that names any other workspace is refused with 403 before any query runs, so a workspace key can only ever reach its own workspace.

POST/api/v1/chat/conversations/{conversationId}/messages
X-API-Key<token>

Your Studio API key, personal or workspace-scoped. Generate one under Settings, then API Keys. Operations that reject workspace keys say so in their own description.

In: header

Path Parameters

conversationId*string

Conversation to send into.

Length1 <= length

Request Body

application/json

The message text, kind, visibility, and any attachments.

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://agent-studio.seeyu.ai/api/v1/chat/conversations/string/messages" \  -H "X-API-Key: YOUR_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "workspaceId": "string"  }'
{
  "message": {
    "id": "msg_01J9M4Q0X6RA",
    "conversationId": "conv_01J9M4Q0X6R7",
    "content": "Thanks, that fixed it!",
    "messageType": "outgoing",
    "private": false,
    "contentType": "text",
    "senderType": "User",
    "senderId": "cnt_01J8F2K3N5P9",
    "attachments": [],
    "inReplyToId": null,
    "contentAttributes": null,
    "status": null,
    "createdAt": "2026-08-28T14:22:05.000Z"
  }
}
{
  "error": "Invalid input: expected string, received undefined",
  "details": [
    {
      "code": "invalid_type",
      "expected": "string",
      "path": [
        "phone"
      ],
      "message": "Invalid input: expected string, received undefined"
    }
  ]
}
{
  "error": "Unauthorized"
}
{
  "error": "API key is not authorized for this workspace"
}
{
  "error": "Conversation not found"
}
{
  "error": "Rate limit exceeded",
  "message": "API rate limit exceeded. Please retry after 2026-09-13T12:00:00.000Z",
  "retryAfter": 1789286400000
}
{
  "error": "Internal server error",
  "requestId": "req_01J9Z2K3M4N5P6Q7R8S9T0"
}