/v1/modelsListar modelos
IDs de modelo públicos con capacidades, longitud de contexto y precios.
TokenAPI habla los formatos Chat Completions y Responses de OpenAI y el formato Messages de Anthropic. Usa los SDK oficiales sin cambios y elige un ID de la lista de modelos.
https://tokenapi.biz/v1
Todos los endpoints:
/v1/modelsIDs de modelo públicos con capacidades, longitud de contexto y precios.
/v1/models/{id}Un único objeto de modelo.
/v1/chat/completionsFormato Chat Completions de OpenAI, con y sin streaming.
/v1/responsesFormato Responses de OpenAI (sin estado), con y sin streaming.
/v1/messagesFormato Messages de Anthropic, para el SDK de Anthropic.
curl https://tokenapi.biz/v1/chat/completions \
-H "Authorization: Bearer $TOKENAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tokenapi-pro",
"messages": [{ "role": "user", "content": "Hello!" }]
}'import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://tokenapi.biz/v1",
apiKey: process.env.TOKENAPI_KEY,
});
const res = await client.chat.completions.create({
model: "tokenapi-pro",
messages: [{ role: "user", content: "Hello!" }],
});
console.log(res.choices[0].message.content);import os
from openai import OpenAI
client = OpenAI(base_url="https://tokenapi.biz/v1", api_key=os.environ["TOKENAPI_KEY"])
res = client.chat.completions.create(
model="tokenapi-pro",
messages=[{"role": "user", "content": "Hello!"}],
)
print(res.choices[0].message.content)Authorization: Bearer sk-tk-…
También se acepta la cabecera x-api-key al estilo Anthropic. Las keys empiezan por sk-tk-, se muestran una sola vez al crearlas y pueden limitarse individualmente (solicitudes por minuto, tope de gasto, modelos permitidos, caducidad). Guarda las keys en el servidor; nunca las incluyas en código de navegador o móvil. Para obtener una key, escribe a hello@tokenapi.biz.
Usa el id de GET /v1/models como parámetro model. Un ID de modelo es un producto estable: podemos mejorar o cambiar el backend que lo sirve para mantener la calidad y la disponibilidad, sin ningún cambio por tu parte. Las respuestas siempre indican el ID que llamaste.
{
"object": "list",
"data": [
{
"id": "tokenapi-pro",
"object": "model",
"owned_by": "tokenapi",
"display_name": "TokenAPI Pro",
"capabilities": ["streaming", "tools", "json_output"],
"context_length": 131072,
"pricing": {
"currency": "USD",
"prompt": "0.0000015",
"completion": "0.000006",
"input_per_million": 1.5,
"output_per_million": 6
}
}
]
}pricing.prompt / pricing.completion son USD por token (cadenas); input_per_million / output_per_million son USD por millón de tokens.
La solicitud y la respuesta siguen el formato de OpenAI: messages con texto e imágenes, tools / tool_choice, response_format, temperature, top_p, stop, max_tokens o max_completion_tokens. Cada respuesta incluye la cabecera x-request-id; indícala al contactar con soporte.
Si omites max_tokens, se aplica la longitud máxima de salida del modelo.
Indica stream: true. Los fragmentos llegan como líneas data: y el stream termina con data: [DONE]. Añade stream_options.include_usage para recibir el uso de tokens en un último fragmento.
const stream = await client.chat.completions.create({
model: "tokenapi-pro",
messages: [{ role: "user", content: "Write a haiku." }],
stream: true,
stream_options: { include_usage: true }, // final chunk carries usage
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}Admite input como cadena o array, instructions, herramientas de función, text.format (JSON Schema) y la secuencia completa de eventos de streaming (response.output_text.delta, response.completed, …).
const res = await client.responses.create({
model: "tokenapi-pro",
instructions: "Answer in one sentence.",
input: "What is a token?",
});
console.log(res.output_text);Para código escrito con el SDK de Anthropic. Admite system, bloques de texto e imagen, tools con tool_use / tool_result y eventos de streaming. Los errores usan el formato de Anthropic.
import Anthropic from "@anthropic-ai/sdk";
const anthropic = new Anthropic({
baseURL: "https://tokenapi.biz", // SDK appends /v1/messages
apiKey: process.env.TOKENAPI_KEY,
});
const msg = await anthropic.messages.create({
model: "tokenapi-pro",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello!" }],
});{
"error": {
"message": "The model 'nope' does not exist or is disabled.",
"type": "invalid_request_error",
"code": "model_not_found",
"param": null
}
}invalid_request_errorJSON mal formado, falta model/messages o un parámetro no soportado.
invalid_api_keyAPI key ausente, incorrecta, desactivada o caducada.
insufficient_quotaEl saldo no cubre el coste máximo de esta solicitud o se alcanzó el tope de gasto de la key. Recarga o reduce max_tokens.
model_not_allowedEsta key está restringida a otros modelos.
model_not_foundID de modelo desconocido o desactivado. Consulta los IDs válidos con GET /v1/models.
rate_limit_exceededSe superó el límite de solicitudes por minuto de la key. Reintenta tras el tiempo de la cabecera Retry-After.
upstream_unavailableFallaron todas las rutas de backend de este modelo. Puedes reintentar con seguridad.
Los fallos del proveedor se reintentan automáticamente en otra ruta antes de devolverte un error. Un 502 significa que fallaron todas las rutas y no se te cobró.
max_tokens). Si el saldo no alcanza, recibes un 402 y no se envía nada al proveedor.Retry-After./v1/responses: previous_response_id (envía la conversación completa), herramientas integradas como web_search y entradas file_id./v1/messages: se ignoran el thinking extendido y cache_control.n > 1 en Chat Completions.