Baseten Anthropic-Compatible Messages API
Anthropic Messages-compatible inference for compatible Model APIs models.
Anthropic Messages-compatible inference for compatible Model APIs models.
{
"openapi": "3.1.0",
"info": {
"title": "Baseten Anthropic-Compatible Inference API",
"version": "1.0.0",
"description": "Anthropic Messages API-compatible endpoint for Baseten Model APIs. Point the Anthropic SDK or any Messages API client at this endpoint to call supported models."
},
"servers": [
{
"url": "https://inference.baseten.co",
"description": "Baseten Inference API."
}
],
"security": [
{
"ApiKeyAuth": []
}
],
"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 <BASETEN_API_KEY>` or `Authorization: Api-Key <BASETEN_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": {
"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."
}
}
}
}
},
"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."
}
}
},
"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."
}
}
},
"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`."
}
}
},
"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."
}
}
},
"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."
}
}
},
"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."
},
"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."
}
}
}
},
"securitySchemes": {
"ApiKeyAuth": {
"type": "apiKey",
"in": "header",
"name": "Authorization",
"description": "Pass your Baseten API key using either the `Api-Key` or `Bearer` scheme: `Authorization: Api-Key YOUR_API_KEY` or `Authorization: Bearer YOUR_API_KEY`. The Anthropic SDK's default `x-api-key` header is not accepted; override `default_headers` to send `Authorization` instead."
}
}
}
}