Saltar al contenido

Inicio rápido

Inferray habla tres formatos de texto —OpenAI Chat Completions, OpenAI Responses y Anthropic Messages— y todos los modelos de texto responden en los tres. Los modelos de imagen tienen su propio endpoint. Conserva tu SDK, conserva tus prompts y cambia solo dos cosas: la Base URL y la clave.

  • Base URL — https://api.inferray.com/v1
  • Autenticación — Authorization: Bearer inferray_..., o x-api-key si tu SDK envía ese encabezado

Crea una clave

Regístrate y crea una clave en la consola. Las claves pertenecen a un proyecto, así que puedes separar el gasto de staging y de producción desde la primera solicitud.

export INFERRAY_API_KEY="inferray_..."

El secreto completo se muestra una sola vez, al crear la clave. Guárdalo en ese momento.

Chat Completions

El endpoint compatible con OpenAI, en /v1/chat/completions. Tu clave de Inferray va donde antes iba la clave de tu proveedor; todo lo demás en la llamada sigue igual.

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.inferray.com/v1",
  apiKey: process.env.INFERRAY_API_KEY,
});

const resp = await client.chat.completions.create({
  model: "gpt-5.5",
  messages: [{ role: "user", content: "ship it" }],
});

console.log(resp.choices[0].message.content);
import os

from openai import OpenAI

client = OpenAI(
    base_url="https://api.inferray.com/v1",
    api_key=os.environ["INFERRAY_API_KEY"],
)

resp = client.chat.completions.create(
    model="gpt-5.5",
    messages=[{"role": "user", "content": "ship it"}],
)

print(resp.choices[0].message.content)
curl https://api.inferray.com/v1/chat/completions \
  -H "Authorization: Bearer $INFERRAY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.5",
    "messages": [{"role": "user", "content": "ship it"}]
  }'

Messages

El endpoint compatible con Anthropic, en /v1/messages. Todos los modelos de texto del catálogo responden en él, también los de OpenAI y Google, no solo los de Claude. El encabezado x-api-key del Anthropic SDK funciona exactamente igual que el bearer token.

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

const client = new Anthropic({
  baseURL: "https://api.inferray.com",
  apiKey: process.env.INFERRAY_API_KEY,
});

const msg = await client.messages.create({
  model: "claude-opus-4-8",
  max_tokens: 1024,
  messages: [{ role: "user", content: "ship it" }],
});

Responses

El otro endpoint compatible con OpenAI, en /v1/responses. Es el que usan Codex y los métodos más recientes del OpenAI SDK, y todos los modelos de texto del catálogo responden en él, incluidos los de Claude y Gemini.

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.inferray.com/v1",
  apiKey: process.env.INFERRAY_API_KEY,
});

const response = await client.responses.create({
  model: "gpt-5.5",
  input: "ship it",
});

console.log(response.output_text);
curl https://api.inferray.com/v1/responses \
  -H "Authorization: Bearer $INFERRAY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.5",
    "input": "ship it"
  }'

store se transmite tal como lo envías. Si defines store: false, la respuesta no se conserva en el proveedor; si no lo defines, se aplica el valor predeterminado del proveedor. Ten en cuenta que Inferray solo ofrece POST /v1/responses: las rutas para obtener, cancelar y eliminar respuestas almacenadas no están expuestas, así que considera una respuesta almacenada como algo que guarda el proveedor y no como algo que puedas recuperar a través de Inferray.

Lista los modelos

GET /v1/models devuelve el catálogo con el formato que esperan los clientes de OpenAI, así que una herramienta que llena su selector de modelos desde la API encuentra uno.

curl https://api.inferray.com/v1/models \
  -H "Authorization: Bearer $INFERRAY_API_KEY"
{
  "object": "list",
  "data": [
    {
      "id": "claude-opus-4-8",
      "object": "model",
      "created": 1700000000,
      "owned_by": "anthropic",
      "name": "Claude Opus 4.8",
      "context_length": 1000000,
      "max_output_tokens": 128000,
      "input_modalities": ["text", "image"],
      "output_modalities": ["text"],
      "capabilities": { "vision": true, "tools": true, "reasoning": true, "streaming": true, "json_mode": false },
      "endpoints": ["/v1/chat/completions", "/v1/messages", "/v1/responses"],
      "pricing": { "input": 5, "output": 25, "cached_input": 0.5 }
    }
  ]
}

Además de los campos de OpenAI, cada entrada incluye lo que un cliente necesita para usar bien el modelo: su tamaño de contexto y su límite de salida, qué acepta y qué produce, y las rutas en las que responde. pricing es el precio de lista en USD por millón de tokens, antes de cualquier descuento de tu cuenta. Las entradas también incluyen un description.

La lista es el propio catálogo, así que cada id que devuelve es uno que puedes llamar: un modelo de texto en cualquiera de los tres endpoints de texto, un modelo de imagen en /v1/images/generations. El endpoints de cada entrada indica cuál. No cuesta nada y nunca se cobra, pero sí requiere una clave válida, lo que lo convierte en una forma rápida de comprobar que una clave funciona.

Streaming

Define stream: true y los tokens llegan a medida que se generan. El uso se sigue contabilizando, así que las solicitudes con streaming aparecen en tus logs como cualquier otra.

const stream = await client.chat.completions.create({
  model: "gpt-5.5",
  messages: [{ role: "user", content: "ship it" }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

Agentes de programación

La mayoría de los agentes solo necesitan una Base URL y una clave. Claude Code usa dos variables de entorno; los demás piden un bloque de proveedor o un formulario de configuración. Cada uno tiene su propia página en agentes de programación.

Errores

Los errores llegan con el formato que tu SDK ya espera, con un mensaje que indica qué hacer al respecto.

EstadoQué significa
401Falta la clave, tiene un formato incorrecto o ya no está activa.
402Tu saldo no alcanza para cubrir la solicitud. Haz una recarga o activa la recarga automática.
403El workspace de la clave no puede usar ese modelo o endpoint; por ejemplo, una clave de Token Plan que llama a un modelo que el plan no cubre. Usa una clave de un workspace que sí pueda.
404Ese modelo no está en este endpoint. La respuesta lista los que sí están.
429Demasiadas solicitudes en poco tiempo. Espera el tiempo indicado en el encabezado Retry-After y vuelve a intentarlo.
503No pudimos confirmar tu saldo, así que no se envió ni se cobró nada. Vuelve a intentarlo.

Siguientes pasos