Cargando

Tu primera llamada a la API

Lección 25 min
Cargando

Tu primera llamada a la API

Saludar a Claude puede alegrarte el corazón, pero no es realmente útil. En esta lección le enviaremos a Claude algo real y obtendremos información estructurada de vuelta — en apenas 20 líneas de código.

Prepárate

Primero, consigue una clave de API en platform.claude.com. Antes de tu primera llamada a la API, verifica que tengas crédito en la página de facturación de la Claude Console. Si no tienes nada, agrega crédito ahí.

El diálogo de la Claude Console mostrando una clave de API recién creada con un botón para copiar la clave y una advertencia de que la clave no podrá verse de nuevo

Toma la clave de API y guárdala en un archivo .env.local para que quede fuera de tu control de versiones. Codificar claves directamente en los archivos fuente es la forma en que terminan filtradas en GitHub — guárdalas en archivos de entorno en su lugar.

A continuación, instala el SDK:

npm install @anthropic-ai/sdk

La anatomía de una solicitud

Cada llamada a la API pasa por la función messages.create. Especificas tres cosas:

  • Un modelo — qué modelo de Claude maneja la solicitud
  • Un límite de tokens máximos — un tope sobre cuánto puede durar la respuesta
  • Una lista de mensajes — objetos con roles user o assistant, estructurados de forma similar a cómo tendrías una conversación con Claude en otro lugar

Así es como se ve eso en su forma más básica:

typescript
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic();

const msg = await client.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 2048,
  messages: [{
    role: "user",
    content: "Hello, Claude",
  }],
});

Un ejemplo real: revisar código con errores

Démosle a Claude algo un poco más interesante que "hola". Lo apuntaremos hacia un código con errores y le pediremos una revisión. Esto es todo — un archivo, unas 20 líneas de código:

typescript
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic();

const buggyCode = `
function add(a, b) {
  return a - b;
}
`;

const response = await client.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 2048,
  system: "You are a terse senior code reviewer. Give feedback in one paragraph.",
  messages: [
    { role: "user", content: `Review this code:\n${buggyCode}` },
  ],
});

for (const block of response.content) {
  if (block.type === "text") {
    console.log(block.text);
  }
}

Dos cosas a notar aquí:

  1. La indicación system es donde defines la personalidad. Quiero un revisor senior conciso, no uno conversador — así que simplemente digo eso.
  2. El message.content en la respuesta es un array de bloques, no una cadena de texto. Para una respuesta de texto básica generalmente hay solo un bloque de tipo text, pero Claude puede devolver múltiples bloques — texto, llamadas a herramientas, pensamiento — así que siempre iteramos y verificamos el tipo.

Ejecútalo, y Claude detecta que add está restando y te lo dice en un párrafo. Eso es todo. Esa es toda la llamada a la API.

Salida de terminal al ejecutar el script: Claude responde que la función se llama add pero usa resta, y sugiere cambiar return a - b por return a + b

De script a producto

En un producto real, esta misma estructura de messages.create es el motor detrás de algo como un endpoint de resumen. Extraes una transcripción de reunión de la base de datos, se la entregas a Claude con una indicación del sistema que dice "extrae información clave y riesgos", guardas el resultado de vuelta en la fila, y lo devuelves a la interfaz de usuario. Es la misma llamada — solo envuelta en un manejador de ruta.

Un panel de reuniones en una aplicación web de demostración que lista reuniones de proyecto grabadas, cada una con una vista previa de la transcripción y un botón de Generar resumen impulsado por la misma llamada a la API

Resumen

  • Tu primera llamada a la API es una función messages.create con un modelo, un límite de tokens y mensajes.
  • Guarda tu clave de API en un archivo .env.local para mantenerla fuera del control de versiones.
  • Agrega una indicación del sistema para dar forma al comportamiento de Claude.
  • El content de la respuesta es un array de bloques — itera y verifica el type de cada bloque.
  • A partir de aquí, todo se construye sobre este patrón.