---
title: "Send a message to an assistant"
method: POST
path: "/v0/messages"
tags: ["Messages", "Messages"]
---

# Send a message to an assistant

`POST /v0/messages`

Send a programmatic message to an assistant. Returns a message_id that can be polled via GET /messages/{message_id} for the response.

## Request body

- MessageSend
  - `assistant_id` integer, required — The ID of the assistant to send the message to.
  - `message` string, required — The message content.
  - `tags` string[] — Optional tags for routing and context (e.g. ['source:slack', 'channel:#general']).
  - `attachments` AttachmentRef[] — File attachments previously uploaded via POST /messages/attachments.
    - `id` string, required — Unique identifier returned by the upload endpoint.
    - `filename` string, required — Original filename of the attachment.
    - `gs_url` string, required — Google Cloud Storage URI (gs://bucket/path).
    - `signed_url` string, nullable — Pre-signed download URL. Returned by the server; omit when sending.
    - `content_type` string, nullable — MIME type of the file.
    - `size_bytes` integer, nullable — File size in bytes.

## Response `201`

Successful Response

- InfoResponseMessageStatus
  - `info` MessageStatus, required
    - `message_id` string, required — Unique identifier for this message. Use this to poll for the assistant's response.
    - `assistant_id` integer, required — The ID of the assistant this message was sent to.
    - `message` string, required — The original message that was sent.
    - `status` string, required — Current status: 'processing' or 'completed'.
    - `response` string, nullable — The assistant's response, if any. Null while processing or if the assistant chose not to respond on this channel.
    - `tags` string[] — Tags supplied with the original message.
    - `attachments` AttachmentRef[] — File attachments supplied with the original message.
      - `id` string, required — Unique identifier returned by the upload endpoint.
      - `filename` string, required — Original filename of the attachment.
      - `gs_url` string, required — Google Cloud Storage URI (gs://bucket/path).
      - `signed_url` string, nullable — Pre-signed download URL. Returned by the server; omit when sending.
      - `content_type` string, nullable — MIME type of the file.
      - `size_bytes` integer, nullable — File size in bytes.
    - `response_tags` string[], nullable — Tags attached to the assistant's response. Null while processing.
    - `response_attachments` AttachmentRef[], nullable — File attachments in the assistant's response. Null while processing.
      - `id` string, required — Unique identifier returned by the upload endpoint.
      - `filename` string, required — Original filename of the attachment.
      - `gs_url` string, required — Google Cloud Storage URI (gs://bucket/path).
      - `signed_url` string, nullable — Pre-signed download URL. Returned by the server; omit when sending.
      - `content_type` string, nullable — MIME type of the file.
      - `size_bytes` integer, nullable — File size in bytes.
    - `created_at` string, date-time, required — When the message was sent.
    - `completed_at` string, date-time, nullable — When the assistant finished processing. Null while still processing.

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/unify/apis/unifyai-http-api-reference.md) · [All operations](https://skmtc.net/unify/apis/unifyai-http-api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/unify/unifyai-http-api-reference/revisions/900377f918b6/schema)
