openapi: 3.1.0 info: title: Baseten LLM Inference Chat Completions Messages API version: 1.0.0 description: OpenAI-compatible API for Baseten Model APIs. Use this endpoint to interact with hosted LLMs. servers: - url: https://inference.baseten.co description: Baseten Inference API. security: - ApiKeyAuth: [] tags: - name: Messages paths: /v1/messages: post: operationId: createMessage summary: Create a message description: Creates a response message for the provided conversation. Compatible with the Anthropic Messages API, so the Anthropic SDK works against this endpoint by changing `base_url` and overriding the default `x-api-key` header with `Authorization`. tags: - Messages requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MessagesRequest' responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/MessagesResponse' '400': description: 'Bad request: invalid parameters.' '401': description: 'Unauthorized: invalid or missing API key. The Anthropic SDK''s default `x-api-key` header is not accepted — pass `Authorization: Bearer ` or `Authorization: Api-Key `.' '404': description: Model not found or does not support the Messages API. '429': description: Rate limit exceeded. '500': description: Internal server error. x-codeSamples: - lang: python label: Python source: "import anthropic\nimport os\n\nAPI_KEY = os.environ[\"BASETEN_API_KEY\"]\n\nclient = anthropic.Anthropic(\n base_url=\"https://inference.baseten.co\",\n api_key=API_KEY,\n default_headers={\"Authorization\": f\"Bearer {API_KEY}\"},\n)\n\nresponse = client.messages.create(\n model=\"deepseek-ai/DeepSeek-V4-Pro\",\n max_tokens=1024,\n messages=[\n {\"role\": \"user\", \"content\": \"Hello!\"}\n ],\n)\n\nprint(response.content[0].text)" - lang: bash label: cURL source: "curl https://inference.baseten.co/v1/messages \\\n -H \"Content-Type: application/json\" \\\n -H \"Authorization: Api-Key $BASETEN_API_KEY\" \\\n -d '{\n \"model\": \"deepseek-ai/DeepSeek-V4-Pro\",\n \"max_tokens\": 1024,\n \"messages\": [\n {\"role\": \"user\", \"content\": \"Hello!\"}\n ]\n }'" components: schemas: InputMessage: additionalProperties: false type: object required: - role - content title: InputMessage description: A message in the conversation. properties: role: type: string enum: - user - assistant description: The role of the message author. System prompts are passed via the top-level `system` field, not as a message. content: anyOf: - type: string - type: array items: anyOf: - $ref: '#/components/schemas/TextBlock' - $ref: '#/components/schemas/ToolUseBlock' - $ref: '#/components/schemas/ToolResultBlock' description: The message content. Pass a string for text-only messages or an array of content blocks for messages that include tool calls or tool results. ToolDefinition: additionalProperties: false type: object required: - name - input_schema title: ToolDefinition description: A tool the model can call. properties: name: type: string description: A unique name for the tool. description: type: string description: A description of what the tool does. The model uses this to decide when to call it. input_schema: type: object additionalProperties: true description: A JSON Schema object describing the tool's expected input. ToolUseBlock: additionalProperties: false type: object required: - type - id - name - input title: ToolUseBlock description: A tool use content block generated by the model. properties: type: const: tool_use type: string description: The block type, always `tool_use`. id: type: string description: A unique identifier for this tool call. Use this as `tool_use_id` in the matching tool result. name: type: string description: The name of the tool being called. input: type: object additionalProperties: true description: The arguments passed to the tool, matching the tool's `input_schema`. TextBlock: additionalProperties: false type: object required: - type - text title: TextBlock description: A text content block. properties: type: const: text type: string description: The block type, always `text`. text: type: string description: The text content. MessagesResponse: additionalProperties: false type: object required: - id - type - role - content - model - stop_reason - usage title: MessagesResponse description: The message response returned by the model. properties: id: type: string description: A unique identifier for this message, such as `msg_abc123`. type: const: message type: string description: The object type, always `message`. role: const: assistant type: string description: The role of the generated message, always `assistant`. content: type: array items: anyOf: - $ref: '#/components/schemas/TextBlock' - $ref: '#/components/schemas/ToolUseBlock' description: An array of content blocks generated by the model. Text responses contain a single `text` block; responses that invoke tools contain `tool_use` blocks. model: type: string description: The model slug that produced the response. stop_reason: type: string enum: - end_turn - max_tokens - stop_sequence - tool_use description: 'Why the model stopped generating: `end_turn` (natural stop), `max_tokens` (hit the `max_tokens` limit), `stop_sequence` (matched a `stop_sequences` entry), or `tool_use` (model invoked a tool).' stop_sequence: type: string nullable: true description: The stop sequence that was matched, if `stop_reason` is `stop_sequence`. Otherwise `null`. usage: $ref: '#/components/schemas/Usage' description: Token usage statistics for the request. Usage: additionalProperties: true type: object title: Usage description: Token usage statistics. properties: input_tokens: type: integer description: The number of input tokens processed. output_tokens: type: integer description: The number of output tokens generated. ToolResultBlock: additionalProperties: false type: object required: - type - tool_use_id - content title: ToolResultBlock description: A tool result content block supplied by the user in response to a tool call. properties: type: const: tool_result type: string description: The block type, always `tool_result`. tool_use_id: type: string description: The `id` of the `tool_use` block this result responds to. content: anyOf: - type: string - type: array items: $ref: '#/components/schemas/TextBlock' description: The tool's output. Pass a string for simple results or an array of text blocks for structured output. is_error: type: boolean default: false description: Set to `true` if the tool call raised an error. MessagesRequest: additionalProperties: false type: object required: - model - messages - max_tokens title: MessagesRequest description: Request body for creating a message. properties: model: type: string title: Model description: The model slug to use. Find available models at [Model APIs](https://app.baseten.co/model-apis/create). messages: type: array title: Messages description: The conversation history as an ordered list of input messages. Alternating `user` and `assistant` roles are expected; the final message must be from the `user`. items: $ref: '#/components/schemas/InputMessage' max_tokens: type: integer minimum: 1 title: Max Tokens description: The maximum number of tokens to generate in the response. Required by the Messages API. The response may be shorter if it finishes naturally or hits a stop sequence. system: anyOf: - type: string - type: array items: $ref: '#/components/schemas/TextBlock' title: System description: A system prompt that sets the model's behavior. Pass either a single string or an array of text content blocks. temperature: type: number minimum: 0 maximum: 1 default: 1 title: Temperature description: 'Controls randomness. Lower values are more deterministic. Range: 0 to 1.' top_p: type: number exclusiveMinimum: 0 maximum: 1 title: Top P description: 'Nucleus sampling: only consider tokens with cumulative probability up to this value.' top_k: type: integer minimum: 0 title: Top K description: Limits token selection to the top K most probable tokens at each step. stop_sequences: type: array items: type: string title: Stop Sequences description: Custom text sequences that will stop generation. When a stop sequence is hit, `stop_reason` is `stop_sequence` and `stop_sequence` contains the matched string. stream: type: boolean default: false title: Stream description: If `true`, the response is streamed as server-sent events. Each event has a `type` such as `message_start`, `content_block_delta`, or `message_stop`. tools: type: array items: $ref: '#/components/schemas/ToolDefinition' title: Tools description: A list of tools the model may call. Each tool has a `name`, `description`, and `input_schema` (a JSON Schema object). tool_choice: $ref: '#/components/schemas/ToolChoice' description: Controls which tool (if any) the model must call. metadata: type: object title: Metadata description: An object describing metadata about the request. Supports `user_id` for abuse detection. properties: user_id: type: string description: An external identifier for the end user. ToolChoice: oneOf: - type: object required: - type properties: type: const: auto type: string description: The model decides whether to call a tool. disable_parallel_tool_use: type: boolean default: false description: If `true`, restricts the model to calling at most one tool per response. - type: object required: - type properties: type: const: any type: string description: The model must call a tool but may pick which one. - type: object required: - type - name properties: type: const: tool type: string description: The model must call the named tool. name: type: string description: The exact name of the tool to call. - type: object required: - type properties: type: const: none type: string description: The model must not call any tool. title: ToolChoice description: Controls which tool (if any) the model calls. securitySchemes: ApiKeyAuth: type: apiKey in: header name: Authorization description: 'Use `Api-Key` as the scheme in the Authorization header: `Authorization: Api-Key YOUR_API_KEY`.'