---
title: "Create an Anthropic-compatible message"
method: POST
path: "/messages"
---

# Create an Anthropic-compatible message

`POST /messages`

## Request

- Base URL: `https://www.ninjachat.ai/api/v1`
- URL: `https://www.ninjachat.ai/api/v1/messages`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`

Messages compatibility for text, image inputs, JSON output schemas, function tools and SSE. Accepts Authorization bearer or x-api-key. Uses the same metered gateway, routing and idempotency as Chat Completions. Native server tools, file IDs and signed thinking history are not supported; unsupported parameters return explicit errors.

## Headers

- `Idempotency-Key` string

## Request body

- AnthropicMessagesRequest
  - `model` string, required
  - `max_tokens` integer, required
  - `messages` object[], required
    - `role` 'user' | 'assistant', required
    - `content` union, required
      - string
      - union[]
        - union
          - object
            - `type` 'text', required
            - `text` string, required
          - object
            - `type` 'image', required
            - `source` union, required
              - …
          - object
            - `type` 'document', required
            - `source` union, required
              - …
          - object
            - `type` 'tool_use', required
            - `id` string, required
            - `name` string, required
            - `input` object, required
          - object
            - `type` 'tool_result', required
            - `tool_use_id` string, required
            - `content` union
              - …
            - `is_error` boolean
  - `system` union
    - string
    - object[]
      - `type` 'text', required
      - `text` string, required
  - `stream` boolean
  - `temperature` number
  - `top_p` number
  - `stop_sequences` string[]
  - `tools` object[]
    - `name` string, required
    - `description` string
    - `input_schema` object, required
    - `strict` boolean
  - `tool_choice` union
    - object
      - `type` 'auto' | 'any' | 'none', required
      - `disable_parallel_tool_use` boolean
    - object
      - `type` 'tool', required
      - `name` string, required
      - `disable_parallel_tool_use` boolean
  - `metadata` object
    - `user_id` string
  - `output_config` object
    - `format` object, required
      - `type` 'json_schema', required
      - `schema` object, required
  - `routing` RoutingPolicy
    - `strategy` 'balanced' | 'cost' | 'latency' | 'quality'
    - `providers` object
      - `only` string[]
      - `exclude` string[]
      - `order` string[]
    - `allow_fallbacks` boolean
    - `require_parameters` boolean
    - `data_policy` 'default' | 'no_training' | 'zero_retention'
    - `caching` 'auto'
    - `max_cost_usd` number

## Response `200`

Anthropic Message object or Messages SSE lifecycle.

- object

## Other responses

- `400`: Invalid or unsupported request parameter.
- `401`: Missing or invalid API key.
- `402`: Insufficient balance or project spend limit reached.
- `429`: Rate limit exceeded.
- `500`: Gateway error.

---

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