Referencia de la API
Messages
POSThttps://api.offmem.app/v1/messages
Genera la respuesta del modelo en el formato Messages de Anthropic. Funciona con los SDK oficiales de Anthropic y con Claude Code.
pip install anthropiccurl https://api.offmem.app/v1/messages \
-H "x-api-key: $OFFMEM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "offmem-glm-5.3-sem-censura",
"max_tokens": 1024,
"system": "Responde en español.",
"messages": [{"role": "user", "content": "Explica qué es una API en una frase."}]
}'Encabezados
x-api-keyom_...obligatorio- Clave de API.
Authorization: Bearertambién funciona. Content-Typeapplication/jsonobligatorio- Cuerpo en JSON.
anthropic-versionstring- Aceptado y no obligatorio.
Cuerpo
modelstringobligatorio- Id del modelo, o un nombre
claude-*(ver Ids aceptados). La respuesta repite el nombre enviado. max_tokensintegerobligatorio- Límite de tokens de salida, desde 1. La respuesta se detiene ahí. Hasta 32.768; un valor mayor se reduce a él. El mismo límite se reserva del saldo antes de la llamada.
messagesarrayobligatorio- Turnos con rol
useroassistant. Los mensajes con rolsystempasan asystem. systemstring | array- Instrucciones, como texto o bloques
text. temperaturenumber- Se reenvía al modelo.
top_pnumber- Se reenvía al modelo.
stop_sequencesstring[]- Hasta 4 secuencias; las excedentes se ignoran.
toolsarray- Herramientas propias (
name,description,input_schema). Las herramientas de servidor de Anthropic, como la búsqueda web, se ignoran. tool_choiceobjectauto,any,tool(conname) onone.streamboolean- Devuelve server-sent events de Anthropic. Otro tipo recibe
400.
Otros campos, como top_k, metadata y thinking, se ignoran.
Bloques de contenido
| Bloque | Soporte |
|---|---|
text | Aceptado. |
image | Base64 (source.type: base64) o URL https:// (source.type: url), solo en modelos con visión. |
tool_use | Aceptado, en los turnos del asistente. |
tool_result | Aceptado, con contenido en texto. is_error: true llega al modelo como error. |
thinking | Ignorado. |
document | No aceptado: 400. Envía el texto. |
Respuesta
{
"id": "msg_...",
"type": "message",
"role": "assistant",
"model": "offmem-glm-5.3-sem-censura",
"content": [{ "type": "text", "text": "..." }],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 24,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"output_tokens": 40
}
}| stop_reason | Cuándo |
|---|---|
end_turn | El modelo terminó la respuesta. |
max_tokens | Alcanzó max_tokens. |
tool_use | El modelo llamó a una herramienta. |
refusal | La respuesta fue bloqueada por un filtro de contenido. |
usage.input_tokens no incluye los tokens en caché, que llegan en cache_read_input_tokens. cache_creation_input_tokens siempre es 0. El identificador de la solicitud llega en el encabezado request-id.
Streaming
Con "stream": true, los eventos siguen el orden de Anthropic: message_start, content_block_start, content_block_delta (text_delta o input_json_delta), content_block_stop, message_delta y message_stop. Un fallo a mitad del flujo llega como evento error.
Contar tokens
POSThttps://api.offmem.app/v1/messages/count_tokens
Devuelve {"input_tokens": n}, una estimación de 3 caracteres por token sobre system, messages y tools. Sin costo; exige una clave válida.
curl https://api.offmem.app/v1/messages/count_tokens \
-H "x-api-key: $OFFMEM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "offmem-glm-5.3-sem-censura", "messages": [{"role": "user", "content": "ok"}]}'