Skip to main content
POST
No mezcle las dos API: /v1/* es la API de inferencia (este documento — retransmisión del upstream sin envoltorio); /api/* es la API de gestión (saldo/registros, etc., respuesta {success, message, data}). Si ve en algún lugar que /v1/messages devuelve {code, data}, prevalece este documento.

Autorizaciones

La autenticación admite dos métodos; elija uno:
string
Encabezado de autenticación al estilo AnthropicVisite la página de gestión de API Keys para obtener su API Key
string
Autenticación Bearer Token (alternativa a x-api-key)
string
Número de versión de la API (opcional; la solicitud funciona también sin él)Para facilitar la migración futura a los endpoints oficiales de Anthropic, se recomienda incluirlo:Ejemplo: 2025-10-01

Body

string
predeterminado:"claude-sonnet-4-6"
requerido
Model name
  • claude-opus-4-8 - Claude Opus 4.8 flagship model
  • claude-opus-4-7 - Claude Opus 4.7 flagship model
  • claude-opus-4-6 - Claude Opus 4.6 flagship model
  • claude-sonnet-4-6 - Claude Sonnet 4.6 balanced version
  • claude-opus-4-5-20251101 - Claude Opus 4.5 model
array
requerido
Lista de mensajesArray de mensajes para que el modelo genere la siguiente respuesta. Cada mensaje contiene los campos role y content.💡 Relleno rápido (área Try it):
  1. Haga clic en ”+ Add an item” para agregar un mensaje
  2. Entrada de role: user (mensaje del usuario) o assistant (respuesta de la IA, para conversaciones de múltiples turnos)
  3. Entrada de content: el texto de su mensaje
Mensaje único del usuario:
Conversación de múltiples turnos:
Respuesta del asistente con prefijado:
integer
requerido
Tokens máximos a generar (obligatorio, alineado con la API oficial de Anthropic)Número máximo de tokens a generar antes de detenerse. El modelo puede detenerse antes de alcanzar este límite.Los distintos modelos tienen valores máximos diferentes; consulte la documentación del modelo. Mínimo: 1
object
Configuración de extended thinkingAl activarlo, la respuesta content puede incluir bloques thinking. Recomendado: usar el nombre de modelo estándar + este parámetro, en lugar de los alias de modelo -thinking del lado de la plataforma, para migrar a los endpoints oficiales sin cambiar el código.En conversaciones multi-turno que deban reenviar bloques thinking, debe devolver tal cual el signature; de lo contrario, el upstream rechazará la solicitud.
string | array
Prompt del sistemaLos prompts del sistema definen el rol, la personalidad, los objetivos y las instrucciones de Claude.Formato cadena:
Formato estructurado:
number
Parámetro de temperatura, rango 0-1Controla la aleatoriedad de la salida:
  • Valores bajos (por ejemplo, 0.2): Más determinístico, conservador
  • Valores altos (por ejemplo, 0.8): Más aleatorio, creativo
Valor por defecto: 1.0
number
Parámetro de muestreo por núcleo (nucleus sampling), rango 0-1Utiliza muestreo por núcleo. Se recomienda usar temperature o top_p, no ambos.Valor por defecto: 1.0
integer
Muestreo Top-KMuestrea solo a partir de las K opciones más probables; elimina las respuestas de “cola larga” con baja probabilidad.Recomendado solo para casos de uso avanzados.
boolean
Habilitar streamingCuando es true, utiliza Server-Sent Events (SSE) para transmitir las respuestas en streaming.Valor por defecto: false
array
Secuencias de paradaSecuencias de texto personalizadas que hacen que el modelo deje de generar.Máximo 4 secuencias.Ejemplo: ["\n\nHuman:", "\n\nAssistant:"]
object
MetadatosObjeto de metadatos para la solicitud.Incluye:
  • user_id: Identificador del usuario
array
Definiciones de herramientasLista de herramientas que el modelo puede usar para completar tareas.Ejemplo de herramienta de función:
Tipos de herramientas admitidas:
  • Herramientas de función personalizadas
  • Herramienta de uso del ordenador (computer_20241022)
  • Herramienta de editor de texto (text_editor_20241022)
  • Herramienta Bash (bash_20241022)
object
Estrategia de elección de herramientaControla cómo el modelo utiliza las herramientas:
  • {"type": "auto"}: Decisión automática (por defecto)
  • {"type": "any"}: Debe usar una herramienta
  • {"type": "tool", "name": "tool_name"}: Usar una herramienta específica

Respuesta

string
Identificador único del mensajeEjemplo: "msg_013Zva2CMHLNnXjNJJKqJ2EF"
string
Tipo de objetoSiempre "message"
string
RolSiempre "assistant"
array
Array de bloques de contenidocontent distingue los tipos de bloque mediante type. Una sola respuesta puede contener varios bloques (por ejemplo thinking + text cuando thinking está activado).Bloque text:
Bloque tool_use:
caller es un campo nuevo del upstream, aún no recogido en la documentación oficial; ignórelo al analizar.
Bloque thinking (aparece cuando el cuerpo de la solicitud incluye el parámetro thinking):
En conversaciones multi-turno, al reenviar bloques thinking debe devolver tal cual el signature; de lo contrario, el upstream rechazará la solicitud.
No asuma que content[0] es texto. Con thinking activado, content[0] puede ser un bloque thinking. Recorra y filtre:
string
Modelo que procesó la solicitudEjemplo: "claude-sonnet-4-6"
string
Motivo de paradaValores posibles:
  • end_turn: Finalización natural
  • max_tokens: Se alcanzó el máximo de tokens
  • stop_sequence: Se encontró una secuencia de parada
  • tool_use: Invocó una herramienta
string | null
Secuencia de parada activadaLa secuencia de parada que se generó, si la hay; en caso contrario, null
object | null
Campo más reciente de Anthropic; null en solicitudes habituales
object
Estadísticas de uso de tokens (estructura completa no stream)

Ejemplos de uso

Conversación básica

Conversación de múltiples turnos

Uso de prompts del sistema

Respuesta en streaming

Uso de herramientas

Comprensión visual

Imagen en Base64

Buenas prácticas

1. Ingeniería de prompts

Definición clara del rol:
Salida estructurada:

2. Manejo de errores

3. Optimización de tokens

4. Prefijado de respuestas

Manejo de respuestas en streaming

Streaming con Python

Streaming con JavaScript

Diferencias de la plataforma y puntos de integración

Respuesta sin envoltorio

En caso de éxito, POST /v1/messages devuelve directamente el objeto message de Anthropic, sin envoltorio {code, data}. Así, los SDK oficiales, Claude Code, Cline, etc. siguen siendo compatibles 1:1.

Formato de error (única diferencia sustancial respecto al oficial)

Respecto a la API oficial de Anthropic: el nivel raíz no tiene "type": "error"; error.type es fijo en apimart_error, y no tipos semánticos como invalid_request_error. Recomendación de integración: no base la lógica de reintento en error.type; use el código de estado HTTP + error.code: Para soporte, proporcione: el request id al final de error.message, y el encabezado de respuesta x-oneapi-request-id.

Streaming SSE

Añada "stream": true a la solicitud. La secuencia de eventos es idéntica a la oficial: message_startcontent_block_startpingcontent_block_delta (varias veces) → content_block_stopmessage_deltamessage_stop ⚠️ La estructura de usage difiere entre stream y no stream: message_delta.usage suele tener solo 4 campos de tokens, sin cache_creation, service_tier, inference_geo. Analícelos por separado o trate todos los campos como opcionales.

Endpoint no implementado

POST /v1/messages/count_tokens no está implementado y devuelve 404. La llamada client.messages.count_tokens() del SDK oficial fallará. Para estimar tokens, hágalo en local o lea usage.input_tokens en la respuesta.

Ignorar campos desconocidos

Esta API retransmite el upstream tal cual; Anthropic puede añadir campos en cualquier momento (p. ej. stop_details, inference_geo, caller, output_tokens_details). No active un esquema estricto:
  • Go: no use DisallowUnknownFields()
  • Pydantic: no use extra="forbid"
  • TypeScript / Zod: use .passthrough() en lugar de .strict()

Recomendación de nombres de modelo

Los modelos homónimos con el sufijo -thinking son alias de extensión de la plataforma. Recomendado: usar el nombre de modelo estándar sin sufijo + el parámetro thinking en el cuerpo de la solicitud, para facilitar la migración a los endpoints oficiales. Los demás campos del cuerpo de la solicitud están alineados con el oficial: model, messages, max_tokens (obligatorio), system, temperature, top_p, top_k, stop_sequences, stream, tools, tool_choice, thinking, metadata. La semántica sigue la Messages API de Anthropic.

Notas importantes

  1. Seguridad de la API Key:
    • Almacene las API keys en variables de entorno
    • Nunca codifique las claves directamente en el código fuente
    • Rote las claves periódicamente
  2. Límites de tasa:
    • Tenga en cuenta los límites de tasa de la API
    • Implemente mecanismos de reintento (según el código de estado HTTP)
    • Use retroceso exponencial (exponential backoff)
  3. Gestión de tokens:
    • Monitoree el uso de tokens (lea usage)
    • Optimice la longitud de los prompts
    • Use valores adecuados de max_tokens
    • Con thinking activado, output_tokens ya incluye el thinking; no facture por duplicado
  4. Selección del modelo:
    • Opus: Tareas complejas que requieren razonamiento profundo
    • Sonnet: Rendimiento y costo equilibrados
    • Haiku: Respuesta rápida, tareas sencillas
  5. Análisis del contenido:
    • Recorra content buscando bloques type == "text"; no fije content[0].text
    • Si el modelo devuelve JSON envuelto en un bloque de código Markdown, es salida del modelo y no un envoltorio de la API (vea la FAQ más abajo)
  6. Filtrado de contenido:
    • Valide la entrada del usuario
    • Filtre información sensible
    • Implemente moderación de contenido

FAQ

El text de content es un bloque de código ```json ... ``` — ¿cómo quitarlo?

No es un problema de estructura de la API. El campo text contiene el contenido bruto generado por el modelo: si el modelo deduce que quiere JSON, a menudo lo envuelve en un bloque de código Markdown. La API no reescribe (ni debe reescribir) la salida del modelo. Para obtener datos estructurados limpios, hay tres enfoques correctos (del más fiable al menos):
  1. Usar tools para forzar salida estructurada — el más fiable; el campo input ya es un objeto parseado:
  1. Prefill el mensaje del assistant, para que el modelo continúe desde {:
  1. Exigir en el system prompt: «emita solo JSON, sin bloque de código Markdown».
No se recomienda quitar el code fence con regex: si el modelo a veces omite la valla, el parsing fallará.