---
title: "Message the Assistant"
method: POST
path: "/v1/assistant/sessions/{session_id}/messages"
tags: ["Assistant"]
---

# Message the Assistant

`POST /v1/assistant/sessions/{session_id}/messages`

## Request

- Base URL: `https://api.naturali.ai`
- URL: `https://api.naturali.ai/v1/assistant/sessions/{session_id}/messages`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://api.naturali.ai/authorize`, token URL `https://api.naturali.ai/token`, scopes: `mcp:access`)

Runs one turn as your account and answers with the messages it added: yours, then the Assistant's reply. The turn is paid from your credit and refused before it runs when the balance is below zero.

## Request body

- AssistantMessageCreate
  - `content` string, required

## Response `201`

The messages this turn added, oldest first.

- AssistantTurnMessages: The messages one turn added — yours, then the Assistant's reply.
  - `data` AssistantMessage[], required
    - `id` string, required
    - `role` 'user' | 'assistant', required
    - `content` string, required

## Other responses

- `400`: `content` is missing or blank.
- `401`: Missing or invalid credentials.
- `402`: Your credit balance is below zero (`insufficient_credit`). Top up to message the Assistant again.
- `403`: The credential cannot hold the account's conversation (`access_denied`): it is confined to one project, or it is the Assistant's own turn credential.
- `404`: The resource does not exist (existence is not leaked).
- `409`: The session is closed or expired (`session_closed`). Start a new conversation to continue.
- `502`: The turn could not be run or read (`upstream_unavailable`).
- `503`: This deployment serves no Assistant conversation (`assistant_unavailable`).

---

[API](https://skmtc.dev/naturali/apis/naturali-ai-api.md) · [All operations](https://skmtc.dev/naturali/apis/naturali-ai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/naturali/apis/naturali-ai-api/revisions/e4905b78f422?raw)
