---
title: "Manually send a message in a conversation"
method: POST
path: "/api/conversations/{id}/send"
tags: ["Conversations"]
---

# Manually send a message in a conversation

`POST /api/conversations/{id}/send`

## Request

- Base URL: `https://api.setluca.com`
- URL: `https://api.setluca.com/api/conversations/{id}/send`
- Auth: one of:
  - API key in cookie `luca.session_token`
  - API key in header `x-api-key`
  - HTTP bearer

Queues a coach-approved message for delivery on the lead's channel. Every send uses the durable outbound-content outbox and an Idempotency-Key.

**API key scopes:** `conversations:write`. You also need an `Idempotency-Key` header.

## Path parameters

- `id` string, uuid, required

## Headers

- `idempotency-key` string, required
- `Luca-API-Version` '1'

## Request body

- ConversationSendBody
  - `body` string
  - `outboundContent` object
    - `version` 1, required
    - `parts` union[], required
      - union
        - object
          - `id` string, uuid, required
          - `type` 'text', required
          - `text` string, required
          - `textGroupId` string, uuid
        - object
          - `id` string, uuid, required
          - `type` 'media', required
          - `uploadId` string, uuid, required
          - `mediaKind` 'image' | 'video' | 'audio' | 'voice' | 'document', required
          - `fileName` string
          - `caption` string
          - `altText` string
        - object
          - `id` string, uuid, required
          - `type` 'interactive', required
          - `interactionKind` 'buttons' | 'list' | 'quick_replies' | 'inline_buttons', required
          - `prompt` string, required
          - `options` object[], required
            - `id` string, required
            - `title` string, required
            - `description` string
            - `action` union
              - …
          - `expiresAt` string, date-time
        - object
          - `id` string, uuid, required
          - `type` 'template', required
          - `templateId` string, required
          - `name` string, required
          - `language` string, required
          - `versionHash` string, required
          - `parameters` union[], required
            - union
              - …
          - `renderedPreview` string, required
          - `providerMetadata` object
  - `replacesReplyFailureId` string, uuid

## Response `200`

ok

- ConversationSendResponse
  - `ok` true, required
  - `status` 'sent' | 'queued'
  - `providerMessageId` string
  - `outboundContentId` string, uuid
  - `deduped` boolean

## Other responses

- `400`: bad request
- `401`: unauthorized
- `404`: not found
- `409`: conflict
- `429`: rate limited
- `500`: internal error
- `503`: service unavailable

---

[API](https://skmtc.dev/setluca/apis/luca-api.md) · [All operations](https://skmtc.dev/setluca/apis/luca-api/llms.txt) · [OpenAPI document](https://skmtc.dev/setluca/apis/luca-api/revisions/90a200e4100b?raw)
