Todo el mundo dice «la API de Claude»… ¿y eso qué es exactamente?
Imagina un restaurante. Estás en la mesa y quieres un plato, pero no entras en la cocina a cocinarlo: se lo pides al camarero, que lleva tu pedido a la cocina y te trae el resultado. Ni sabes ni te importa cómo cocinan ahí dentro; solo necesitas saber cómo pedir. Una API es ese camarero, pero entre programas: el intermediario que deja que tu programa le pida algo a otro servicio —aquí, a Claude— sin tener que saber cómo funciona por dentro.
La diferencia con lo que ya conoces: cuando abres la web de Claude, eres tú hablando con él. Cuando usas la API, es tu programa el que habla con Claude, solito y automáticamente. (Las siglas significan Application Programming Interface; tradúcelo como «la ventanilla por la que un programa le habla a otro».)
¿Y dónde está esa ventanilla? En una dirección de internet. A la dirección exacta donde mandas tu pedido se le llama endpoint («punto final»). El de Claude para conversar es:
https://api.anthropic.com/v1/messages
Las personas hablamos español (o inglés, o chino). Los programas, cuando se pasan datos, usan un formato ordenadito para no liarse. El más común se llama JSON, y es solo texto con unas reglas muy simples que pueden leer tanto las máquinas como tú.
{ } envuelven una «ficha» de datos (un objeto)."clave": valor — la clave (entre comillas) es el nombre del dato; el valor, su contenido.[ ], o incluso otra ficha.Un ejemplo de andar por casa, una ficha de contacto:
{
"nombre": "Ada",
"edad": 36,
"ciudad": "Madrid",
"aficiones": ["ajedrez", "senderismo"]
}Se lee solo: una ficha con cuatro datos — nombre es texto, edad es número, ciudad es texto y aficiones es una lista con dos cosas. Eso es JSON.
Antes de la llamada, conozcamos las cuatro piezas que la forman. Piensa en enviar un paquete por mensajería:
x-api-key), la versión de la API (anthropic-version) y en qué formato va el contenido (content-type: application/json).Esta es la llamada completa. No te asustes: debajo la partimos en trozos.
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"system": "Responde en español, claro y directo.",
"messages": [
{ "role": "user", "content": "Dame 3 ideas para un curso de IA." }
]
}'
curl — un programita que envía paquetes por internet desde la terminal. Es nuestro mensajero.-H son las cabeceras (la etiqueta): carné, versión y «esto es JSON».-d es el cuerpo (los datos): justo después viene el JSON que ya sabes leer.Dentro del cuerpo:
model — qué cerebro quieres (aquí Sonnet 4.6).max_tokens — el tope de lo que puede responder. Obligatorio. (Un token ≈ ¾ de palabra.)system — las instrucciones de fondo: cómo quieres que se comporte.messages — la conversación: lista de turnos, cada uno con quién habla (role) y qué dice (content).¿Y qué te devuelve? Otro JSON. Lo importante está en dos sitios:
{
"content": [ { "type": "text", "text": "1. ... 2. ... 3. ..." } ],
"usage": { "input_tokens": 22, "output_tokens": 130 }
}content es la respuesta de Claude (el texto está dentro del bloque "text"); usage es la cuenta: cuántos tokens entraron y salieron. Eso es lo que pagas.
¿Y cómo hace Claude para saber el tiempo de hoy o mirar mi base de datos?
Por defecto, no puede: solo habla. Con tool use le das herramientas —funciones que tú programas— para que pueda hacer cosas, no solo charlar. La imagen: Claude es un cerebro listísimo metido en una habitación sin ventanas. Sabe muchísimo, pero para saber el tiempo de tu ciudad necesita que alguien le pase ese dato. Tú le das un «botón» que puede pulsar cuando lo necesite. Y lo clave: no le das el código, solo la descripción de la herramienta.
El baile tiene cuatro pasos:
get_weather con ciudad = Manzanares» (no la ejecuta él).Así se describe una herramienta (un JSON dentro de la petición):
"tools": [
{
"name": "get_weather",
"description": "Devuelve el tiempo actual de una ciudad.",
"input_schema": {
"type": "object",
"properties": {
"ciudad": { "type": "string", "description": "Nombre de la ciudad" }
},
"required": ["ciudad"]
}
}
]Tradúcelo: «tienes una herramienta get_weather, sirve para el tiempo, y para usarla necesitas una ciudad (texto), que es obligatoria». El input_schema es solo la lista de ingredientes que la herramienta pide.
Cuando le pides algo a Claude, por defecto esperas a que termine y te llega todo de golpe. Con el streaming te llega palabra a palabra, según la va escribiendo — igual que ves el texto aparecer en la web del chat. Se activa añadiendo una línea al cuerpo: "stream": true.
¿Cuándo da igual? En una tarea automática que nadie mira en directo (un proceso de noche). Mismo endpoint, solo cambias ese interruptor. (Por debajo usa una técnica llamada SSE —el servidor te va mandando trocitos según los tiene—; no necesitas saber más para empezar.)
Dos trucos para que la factura no se dispare:
En la respuesta lo ves en usage, con dos contadores: cache_creation_input_tokens (lo que guardaste) y cache_read_input_tokens (lo que releíste barato).
Hasta ahora le mandábamos texto, pero el content de un mensaje admite bloques de distintos tipos. Puedes meterle una imagen o un PDF y preguntarle por ellos.
"content": [
{
"type": "image",
"source": { "type": "base64", "media_type": "image/jpeg", "data": "/9j/4AAQ..." }
},
{ "type": "text", "text": "¿Qué hay en esta imagen?" }
]Aquí el content ya no es una frase suelta, sino una lista con dos bloques: primero una imagen, luego la pregunta.
"image". El data es la foto convertida a texto (un formato llamado base64: «una imagen escrita como una ristra larguísima de caracteres»). Hay que indicar el tipo (media_type)."document" (Claude lee tanto el texto como lo visual del documento).Mezclas bloques en el mismo mensaje y le preguntas lo que quieras. max_tokens sigue siendo obligatorio, como siempre.
api.anthropic.com/v1/messages.content, como bloques "image" (base64 o URL) o "document", mezclados con texto.Marca una respuesta y te digo al instante si va bien, con el porqué. Al final, tu nota.
¿Te ha servido este módulo? El curso es gratis y abierto — si te apetece aportar tu granito, invítame a un café. Sin presión, todo suma. 🐾
☕ Invítame a un café