Serie de texto
API de Mensajes Claude
- Totalmente compatible con el protocolo nativo Anthropic Claude Messages (
POST /v1/messages) - Admite conversaciones de múltiples turnos, streaming SSE, llamadas a herramientas y extended thinking
- Admite contenido multimodal con texto e imágenes
- Respuesta retransmitida tal cual desde el upstream, sin envoltorio
{code, data}
POST
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-01Body
string
predeterminado:"claude-sonnet-4-6"
requerido
Model name
claude-opus-4-8- Claude Opus 4.8 flagship modelclaude-opus-4-7- Claude Opus 4.7 flagship modelclaude-opus-4-6- Claude Opus 4.6 flagship modelclaude-sonnet-4-6- Claude Sonnet 4.6 balanced versionclaude-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 Conversación de múltiples turnos:Respuesta del asistente con prefijado:
role y content.💡 Relleno rápido (área Try it):- Haga clic en ”+ Add an item” para agregar un mensaje
- Entrada de
role:user(mensaje del usuario) oassistant(respuesta de la IA, para conversaciones de múltiples turnos) - Entrada de
content: el texto de su mensaje
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
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.0integer
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: falsearray
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 contenidoBloque tool_use:Bloque thinking (aparece cuando el cuerpo de la solicitud incluye el parámetro
content distingue los tipos de bloque mediante type. Una sola respuesta puede contener varios bloques (por ejemplo thinking + text cuando thinking está activado).Bloque text:caller es un campo nuevo del upstream, aún no recogido en la documentación oficial; ignórelo al analizar.thinking):string
Modelo que procesó la solicitudEjemplo:
"claude-sonnet-4-6"string
Motivo de paradaValores posibles:
end_turn: Finalización naturalmax_tokens: Se alcanzó el máximo de tokensstop_sequence: Se encontró una secuencia de paradatool_use: Invocó una herramienta
string | null
Secuencia de parada activadaLa secuencia de parada que se generó, si la hay; en caso contrario,
nullobject | null
Campo más reciente de Anthropic;
null en solicitudes habitualesobject
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: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)
"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_start → content_block_start → ping → content_block_delta (varias veces) → content_block_stop → message_delta → message_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
-
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
-
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)
-
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_tokensya incluye el thinking; no facture por duplicado
- Monitoree el uso de tokens (lea
-
Selección del modelo:
- Opus: Tareas complejas que requieren razonamiento profundo
- Sonnet: Rendimiento y costo equilibrados
- Haiku: Respuesta rápida, tareas sencillas
-
Análisis del contenido:
- Recorra
contentbuscando bloquestype == "text"; no fijecontent[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)
- Recorra
-
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):
- Usar tools para forzar salida estructurada — el más fiable; el campo
inputya es un objeto parseado:
- Prefill el mensaje del assistant, para que el modelo continúe desde
{:
- Exigir en el system prompt: «emita solo JSON, sin bloque de código Markdown».