# Ejemplos de cURL para APIs de IA

> **Qué es:** Referencia rápida de llamadas cURL a APIs de IA, listas para copiar, pegar y adaptar desde la terminal.
> **Cuándo usarlo:** Cuando quieras probar un prompt o automatizar una consulta sin abrir el playground ni escribir código.
> **Requisitos:** `curl` y `jq` instalados, y tu API key en una variable de entorno (ej. `export OPENAI_API_KEY="sk-..."`).

## OpenAI — Chat Completion

```bash
# Consulta básica
curl -s https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {"role": "user", "content": "Escribe una user story para un login biométrico"}
    ]
  }' | jq '.choices[0].message.content'
```

```bash
# Con system prompt
curl -s https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {"role": "system", "content": "Eres un PM experto en salud. Responde con formato PR/FAQ."},
      {"role": "user", "content": "Diseña una función de agenda inteligente para pacientes crónicos"}
    ]
  }' | jq '.choices[0].message.content'
```

```bash
# Con temperatura controlada (0.0 = determinista, 1.0 = creativo)
curl -s https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4o",
    "temperature": 0.2,
    "messages": [
      {"role": "user", "content": "Genera 3 criterios de aceptación para: como operador quiero recibir una alerta cuando un insumo crítico baje del stock mínimo"}
    ]
  }' | jq '.choices[0].message.content'
```

## Anthropic — Claude

```bash
# Consulta básica
curl -s https://api.anthropic.com/v1/messages \
  -H "Content-Type: application/json" \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "claude-sonnet-4-20250514",
    "max_tokens": 1024,
    "messages": [
      {"role": "user", "content": "Analiza este spec y encuentra edge cases no cubiertos: [pega tu spec aquí]"}
    ]
  }' | jq '.content[0].text'
```

```bash
# Con mucho contexto (spec completo)
curl -s https://api.anthropic.com/v1/messages \
  -H "Content-Type: application/json" \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "claude-sonnet-4-20250514",
    "max_tokens": 2048,
    "messages": [
      {"role": "user", "content": "Contexto:\n'"$(cat spec.md)"'\n\nPregunta: ¿Qué riesgos de implementación ves?"}
    ]
  }' | jq '.content[0].text'
```

## Respuestas estructuradas (modo JSON)

```bash
curl -s https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4o",
    "response_format": { "type": "json_object" },
    "messages": [
      {"role": "user", "content": "Genera un backlog JSON con 5 tareas priorizadas para: implementar un módulo de trazabilidad de lotes"}
    ]
  }' | jq '.choices[0].message.content | fromjson'
```

## Tips

| Problema | Solución |
|----------|----------|
| `curl: command not found` | Instalar curl: `sudo apt install curl` / `brew install curl` |
| `jq: command not found` | Instalar jq: `sudo apt install jq` / `brew install jq` |
| `API key not set` | Exportar variable: `export OPENAI_API_KEY="sk-..."` |
| Error 401 | La API key es inválida o expiró |
| Error 429 | Rate limit excedido — esperar o reducir frecuencia |
| Respuesta truncada | Aumentar `max_tokens` en el request |
