Documentación
Todo en un lugar: qué es AI Rate Card, los datos abiertos, la API y el servidor MCP, cómo citarlo y cómo se une un proveedor.
Contenido
Qué es AI Rate Card
AI Rate Card recoge los precios de modelos de IA – de lenguaje, imagen, voz y otros – tal como los publican sus proveedores. Los precios se toman de las páginas públicas de precios y las API de los proveedores – o, cuando sus condiciones no permiten la recogida automática, del conjunto de datos abierto models.dev – y se comprueban a diario.
Cuando dos fuentes discrepan sobre un precio, el sitio no elige una en silencio: la oferta se marca como conflicto hasta resolver la diferencia.
Los precios son solo informativos. Manda la página del proveedor: comprueba el precio allí antes de comprar.
Preguntas, correcciones y solicitudes: hello@airatecard.com.
API y MCP: cómo empezar
Dos formas de obtener los precios con una máquina en lugar de a ojo. Puede probar las dos ahora mismo, sin registrarse ni pagar.
Preguntar a su asistente de IA (MCP)
Para quien usa Claude, ChatGPT o Cursor. Conecta el sitio una vez y el asistente consulta él mismo los precios actuales cuando pregunta con sus palabras. Sin programar.
- Copie la dirección del servidor:
https://airatecard.com/mcp - Añádala a su asistente como conector: dónde hacer clic en cada aplicación se indica más abajo, en la sección Servidor MCP.
- Pregunte con sus palabras, por ejemplo:
- ¿Cuál es el modelo más barato con un contexto de al menos 128K tokens?
- Compara los precios de Llama 3.1 8B en distintos proveedores.
- ¿Cuánto costarán al mes 10 M de tokens de entrada y 2 M de salida con GPT OSS 120B?
Obtener los datos en un programa (API)
Para desarrolladores: peticiones HTTP normales, respuesta en JSON. Puedes empezar ya sin clave; una clave personal gratuita amplía la ventana por minuto (tabla de abajo).
- Pruebe una solicitud sin clave, cópiela en un terminal: las 5 ofertas más baratas de modelos de texto.
curl -s 'https://airatecard.com/v1/offers?category=llm&pricing=usage&limit=5' - ¿Necesita más filas? Inicie sesión, cree una clave en su cuenta, apartado Claves API, y envíela en la cabecera X-API-Key.
- Todas las solicitudes con sus parámetros: /openapi.json (lo leen Postman y los generadores de clientes).
Las solicitudes principales
GET /v1/offers?category=llm&pricing=usage&limit=5 | ofertas con precios; los mismos filtros que la página Modelos |
GET /v1/models?category=llm | modelos y su mejor precio |
GET /v1/models/{model_id} | un modelo con todas sus ofertas |
GET /v1/cost?model={model_id}&input_tokens=10000000&output_tokens=2000000 | lo que cuesta su volumen en cada proveedor de un modelo |
GET /v1/compare?models={a},{b} | de dos a cuatro modelos lado a lado |
GET /v1/analytics/cheapest?task=text&n=5 | los más baratos para una tarea (texto, imagen, voz...) |
GET /v1/models/{model_id}/history | el historial de precios de un modelo (90 días) |
GET /v1/articles | los artículos del sitio |
GET /v1/meta | sobre el catálogo: cuándo se actualizó, cuántas ofertas |
Cómo se recogen los precios
Cada precio de AI Rate Card viene de la página pública de precios o la API del proveedor, cuando sus condiciones permiten la recogida automática, y si no de models.dev – un conjunto de datos abierto de precios de modelos publicado bajo licencia MIT (Copyright (c) 2025 models.dev; texto de la licencia en /static/licenses/models.dev.txt). Nunca una estimación; comprobado a diario.
«Sin datos» significa que aún no se ha encontrado una oferta con precio para ese modelo en ese proveedor. «Gratis» significa que la página del proveedor indica que la oferta no cuesta nada. «Retirada» significa que la oferta estaba en la página del proveedor pero ya no aparece; sigue en el sitio con su último precio conocido, marcada como retirada, para no perder su historial.
Se guarda cada cambio de precio: el historial completo de una oferta, y del mercado entero día a día, está en su página y en /market.
Datos
AI Rate Card sirve para mirar y elegir, no para copiar en masa: no hay un archivo con todo el catálogo ni su historial de precios. Abre la ficha de un modelo u oferta para citarla, o pide a /v1 o al servidor MCP los precios actuales, página a página.
API REST
La API JSON pública para agentes y scripts: no hace falta clave para leer; una clave personal solo sube el límite.
/v1/openapi.json
curl -s 'https://airatecard.com/v1/offers?max_price_input=1&cur=USD'Paginación
/v1/offers y /v1/models devuelven como máximo 50 filas por página (25 por defecto); pagina con offset y limit o acota con filtros; el catálogo completo está en un solo archivo en /export.
Analítica
Precios actuales por tarea, no por tipo de modelo – lo que un comprador quiere hacer: el más barato, el más caro y la mediana para embedding, image, moderation, rerank, stt, text, tts, video, vision. scope limita a la categoría propia de una tarea (specialized) o a los modelos multimodales que sirven (universal); component elige input_tokens, output_tokens o la unidad propia de la tarea.
curl -s 'https://airatecard.com/v1/analytics/cheapest?task=text&n=5'curl -s 'https://airatecard.com/v1/analytics/dearest?task=image&n=5'curl -s 'https://airatecard.com/v1/analytics/median?task=vision&n=5'Niveles de acceso
Las páginas están abiertas a todos, a cualquier buscador y asistente de IA. Las máquinas pueden empezar sin clave; una clave personal gratuita (registro con usuario y contraseña, sin correo, luego cuenta → claves API; se envía en el encabezado X-API-Key) amplía la ventana por minuto.
| Sin iniciar sesión | Free | |
|---|---|---|
| Páginas, artículos, filtros, comparación, calculadoras | todo | todo |
| Descargar una tabla: filas por archivo, archivos por hora | 100000 filas, 20 por hora | 100000 filas, 60 por hora |
| API para desarrolladores: solicitudes por minuto (sin límite diario) | 60/min | 120/min |
| Historial de precios por la API | hasta 90 días, un modelo por solicitud | hasta 90 días, un modelo por solicitud |
Límites y licencia
No hay límites diarios: solo ventanas por minuto contra el abuso (tabla de arriba), más amplias con una clave personal gratuita (cuenta → claves API, encabezado X-API-Key). Cada respuesta trae X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset y X-Daily-Rows-Remaining; al superarlo, respuesta 429 con Retry-After. Licencia: CC BY 4.0: el catálogo, las descargas, las respuestas de la API y el historial de precios de 90 días pueden usarse, citarse y redistribuirse libremente, también con fines comerciales, con atribución a AI Rate Card (airatecard.com) y un enlace a la ficha o página de la que proceden las cifras.
Cómo citar
Cada respuesta de la API y del MCP lleva una línea «cite» y cada descarga termina con una: nombra AI Rate Card, enlaza la ficha o la página del modelo que usaste y da la fecha en que se comprobó el precio: «Source: AI Rate Card, https://airatecard.com/c/offer:<id>, prices checked AAAA-MM-DD».
Exportar por filtro
GET /export devuelve las ofertas de un filtro como JSON, CSV, YAML o Excel: solo precios actuales, en USD. Datos abiertos (CC BY), sin iniciar sesión: todo el catálogo en un archivo, hasta 20 descargas por hora y dirección (más con una cuenta). Los parámetros son los de la página «Modelos»: cree un filtro allí, abra «Descargar» y copie la dirección. Cada archivo termina con la línea «Source: AI Rate Card, ...» para citar.
curl -s 'https://airatecard.com/export?format=json&category=llm&r_in=0-1&r_ctx=128k-&limit=100'curl -s 'https://airatecard.com/export?format=csv&provider=deepinfra&provider=together&sort=price_input'curl -s 'https://airatecard.com/export?format=yaml&name_q=qwen&input_modality=image'Probar
format: json | csv | yaml; rangos como un solo valor «desde-hasta» (r_in, r_out, r_ctx, r_mo, r_params …; se admiten 128k y 1m); repite provider, region, input_modality … para varios valores; sort y desc como en la página.
Servidor MCP
Un servidor MCP remoto (Streamable HTTP), solo lectura. Responde preguntas de precios con las herramientas cheapest_for_workload (lo más barato para una tarea completa, con escenarios listos: chatbot, coding_agent, rag, summarization, long_context, vision, embedding_index, trial), search_offers, get_model_prices, cheapest, compare_models, estimate_cost y get_card: cada resultado lleva la URL de la ficha para citar. Funciona sin clave; con una clave personal (cabecera X-API-Key) devuelve más filas, como la API. Prompts listos para el usuario: cheapest_for_my_job, where_is_model_cheapest, compare_models.
https://airatecard.com/mcp
Claude.ai / Claude Desktop
Settings → Connectors → Add custom connector y pega esta URL:
https://airatecard.com/mcp
Claude Code
claude mcp add --transport http ai-rate-card https://airatecard.com/mcpChatGPT
Settings → Connectors (modo desarrollador), añade un conector personalizado con esta URL:
https://airatecard.com/mcp
Cursor / VS Code
Añade esto a tu mcp.json:
{
"mcpServers": {
"ai-rate-card": {
"url": "https://airatecard.com/mcp"
}
}
}Cualquier cliente MCP
Un mensaje JSON-RPC 2.0 por HTTP, sin sesión:
curl -s https://airatecard.com/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"cheapest","arguments":{"category":"llm"}}}'Conectar tu propio agente
Cualquier agente que hable MCP, con cualquier framework o API, se conecta al mismo servidor. Elige según los límites que necesites:
- Sin clave:
https://airatecard.com/mcp, límites de invitado, nada que configurar. - Tu agente con tus límites:
https://airatecard.com/mcpy una clave personal de tu cuenta (Claves API), enviada como Authorization: Bearero X-API-Key: . - Un agente para muchas personas, cada una con su cuenta: https://airatecard.com/mcp/account con OAuth, ver la sección anterior.
Los ejemplos leen la clave de la variable de entorno AIRATECARD_KEY: nunca pongas una clave en el código ni en una URL. Sin clave, quita la línea Authorization.
Anthropic API (Messages, MCP connector)
import os, anthropic
client = anthropic.Anthropic()
resp = client.beta.messages.create(
model="claude-opus-5-5", max_tokens=1000,
messages=[{"role": "user", "content": "Cheapest model with 128K context?"}],
mcp_servers=[{"type": "url", "url": "https://airatecard.com/mcp", "name": "airatecard",
"authorization_token": os.environ["AIRATECARD_KEY"]}],
tools=[{"type": "mcp_toolset", "mcp_server_name": "airatecard"}],
betas=["mcp-client-2025-11-20"],
)
print(resp.content)OpenAI API (Responses, remote MCP)
import os
from openai import OpenAI
resp = OpenAI().responses.create(
model="YOUR_MODEL",
input="Cheapest model with 128K context?",
tools=[{"type": "mcp", "server_label": "airatecard", "server_url": "https://airatecard.com/mcp",
"authorization": os.environ["AIRATECARD_KEY"], "require_approval": "never"}],
)
print(resp.output_text)Claude Agent SDK (Python)
import asyncio, os
from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage
options = ClaudeAgentOptions(
mcp_servers={"airatecard": {"type": "http", "url": "https://airatecard.com/mcp",
"headers": {"Authorization": "Bearer " + os.environ["AIRATECARD_KEY"]}}},
allowed_tools=["mcp__airatecard__*"],
)
async def main():
async for m in query(prompt="Cheapest model with 128K context?", options=options):
if isinstance(m, ResultMessage):
print(m.result)
asyncio.run(main())OpenAI Agents SDK (Python)
import asyncio, os
from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp
async def main():
async with MCPServerStreamableHttp(name="airatecard", params={"url": "https://airatecard.com/mcp",
"headers": {"Authorization": "Bearer " + os.environ["AIRATECARD_KEY"]}}) as prices:
agent = Agent(name="buyer", instructions="Answer with AI Rate Card prices and cite them.",
mcp_servers=[prices])
print((await Runner.run(agent, "Cheapest model with 128K context?")).final_output)
asyncio.run(main())LangChain / LangGraph (langchain-mcp-adapters)
import asyncio, os
from langchain_mcp_adapters.client import MultiServerMCPClient
async def main():
client = MultiServerMCPClient({"airatecard": {
"url": "https://airatecard.com/mcp", "transport": "streamable_http",
"headers": {"Authorization": "Bearer " + os.environ["AIRATECARD_KEY"]}}})
tools = await client.get_tools() # give them to your agent, e.g. create_react_agent(model, tools)
print([t.name for t in tools])
asyncio.run(main())MCP SDK (Python, official)
import asyncio, os
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async def main():
headers = {"Authorization": "Bearer " + os.environ["AIRATECARD_KEY"]}
async with streamablehttp_client("https://airatecard.com/mcp", headers=headers) as (read, write, _):
async with ClientSession(read, write) as s:
await s.initialize()
res = await s.call_tool("cheapest", {"category": "llm", "limit": 3})
print(res.content[0].text)
asyncio.run(main())MCP SDK (TypeScript, official)
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const transport = new StreamableHTTPClientTransport(new URL("https://airatecard.com/mcp"), {
requestInit: { headers: { Authorization: `Bearer ${process.env.AIRATECARD_KEY}` } },
});
const client = new Client({ name: "my-agent", version: "1.0.0" });
await client.connect(transport);
console.log(await client.callTool({ name: "cheapest", arguments: { category: "llm", limit: 3 } }));HTTP (curl, JSON-RPC)
curl -s https://airatecard.com/mcp \
-H "Authorization: Bearer $AIRATECARD_KEY" -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"cheapest","arguments":{"category":"llm","limit":3}}}'Conviene saber
Una clave por agente: así puedes revocar una sin detener las demás. Por encima de un límite el servidor responde 429 con Retry-After: espera esos segundos, no cambies de clave. Cada resultado de herramienta lleva una línea cite y un card_url: que el agente los cite. Las herramientas: search_offers, get_model_prices, cheapest, compare_models, estimate_cost, get_card, cheapest_models, dearest_models, median_models, list_articles.
Tu cuenta en asistentes y agentes de IA (OAuth)
El servidor MCP tiene dos direcciones. https://airatecard.com/mcp funciona para todos sin iniciar sesión, con los límites de invitado. https://airatecard.com/mcp/account funciona con tu cuenta de AI Rate Card: tus límites (Free o Pro), y ves y revocas el acceso en tu cuenta. Inicias sesión una vez, en este sitio: el asistente nunca ve tu contraseña.
Claude.ai / Claude Desktop
Settings → Connectors → Add custom connector, pega la dirección de abajo. Deja el cliente OAuth en “Register automatically”. Claude abre la página de acceso de este sitio: inicia sesión y pulsa Permitir.
https://airatecard.com/mcp/accountChatGPT
Settings → Connectors (modo desarrollador) → crea un conector con la dirección de abajo y autenticación OAuth. ChatGPT abre la página de acceso de este sitio: inicia sesión y pulsa Permitir.
https://airatecard.com/mcp/accountClaude Code
Añade el servidor, luego escribe /mcp en Claude Code y elige Authenticate: el navegador abre la página de acceso de este sitio.
claude mcp add --transport http ai-rate-card-account https://airatecard.com/mcp/accountCursor / VS Code
Cursor, VS Code y otros clientes MCP con OAuth: pon la dirección en mcp.json; en la primera llamada el cliente abre la página de acceso de este sitio.
{
"mcpServers": {
"ai-rate-card-account": {
"url": "https://airatecard.com/mcp/account"
}
}
}Scripts y agentes de terminal: un código en lugar del navegador
Un programa sin navegador usa el device flow (RFC 8628): pide un código, abres la dirección que muestra en cualquier dispositivo, inicias sesión, compruebas el código y pulsas Permitir, y el programa obtiene su token. Las cuatro peticiones:
# 1. register your program once - keep the client_id
curl -s -X POST https://airatecard.com/oauth2/register -H 'Content-Type: application/json' \
-d '{"client_name":"my script","token_endpoint_auth_method":"none","scope":"api offline_access",
"grant_types":["urn:ietf:params:oauth:grant-type:device_code","refresh_token"]}'
# 2. ask for a code; open verification_uri_complete, sign in, press Allow
curl -s -X POST https://airatecard.com/oauth2/device/auth -d 'client_id=<client_id>&scope=api%20offline_access'
# 3. every few seconds until access_token comes
curl -s -X POST https://airatecard.com/oauth2/token -d 'grant_type=urn:ietf:params:oauth:grant-type:device_code' \
-d 'device_code=<device_code>&client_id=<client_id>'
# 4. use it
curl -s https://airatecard.com/v1/meta -H 'Authorization: Bearer <access_token>'Tokens, límites y revocación
Envía el token en la cabecera Authorization: Bearer <token> a /v1 y /mcp/account. Dura una hora; renuévalo con grant_type=refresh_token (el token de actualización dura 30 días, hasta que lo revoques). Cuenta con los límites de tu cuenta, como una clave personal. Cada aplicación autorizada aparece en tu cuenta en Aplicaciones conectadas, donde un clic la revoca junto con sus tokens.
Para agentes: /auth.md. Metadatos estándar: /.well-known/oauth-authorization-server y /.well-known/oauth-protected-resource/mcp/account. ¿Prefieres una clave fija? Créala en tu cuenta en Claves API y envíala como X-API-Key.
llms.txt
Una guía en texto plano para agentes de IA, según la convención de llmstxt.org: qué es el sitio, la API y el servidor MCP, y cómo citarlo – en /llms.txt (también /.well-known/llms.txt). La oferta actual más barata de los modelos más ofrecidos, una línea cada uno, está en /llms-full.txt.
Cómo citar
CC BY 4.0: el catálogo, las descargas, las respuestas de la API y el historial de precios de 90 días pueden usarse, citarse y redistribuirse libremente, también con fines comerciales, con atribución a AI Rate Card (airatecard.com) y un enlace a la ficha o página de la que proceden las cifras.
Para los agentes de IA están /llms.txt y la API pública en /v1: mirar, comparar y citar, nunca una copia masiva del catálogo ni de su historial de precios.
Source: AI Rate Card, https://airatecard.com/es/c/offer:<id>
Para proveedores
Inclusión gratuita, hecha por usted en su cuenta. El orden de todas las listas es solo por precio: el dinero no sube a nadie.
Cómo unirse: seis pasos, unos 15 minutos
La inclusión es gratuita y la hace usted mismo, en su cuenta, en unos 15 minutos, sin cartas ni esperas:
- Cree una cuenta: usuario y contraseña, sin correo.
- Pulse «Añadir un proveedor nuevo» y escriba el nombre y el sitio de la empresa.
- Demuestre el dominio: un archivo de una línea en /.well-known/, un registro DNS TXT o una etiqueta meta, y pulse «Comprobar ahora».
- Escriba modelos y precios en el formulario; genera su models.yaml.
- Coloque ese archivo en /.well-known/airatecard-models.yaml y pulse «Comprobar el archivo».
- Pulse «Publicar»: el recolector le activa automáticamente, normalmente en menos de 10 minutos.
Después el archivo se lee una vez al día: cambie un precio y el catálogo lo sigue al día siguiente. Sus modelos aparecen en el sitio, en la API (/v1) y en el servidor MCP para asistentes de IA, con enlaces a sus páginas.
Añadir un proveedor nuevo Paso a paso, con ejemplos
De dónde salen sus precios
Sus precios salen de un solo lugar, su propio sitio web, para que nunca haya dos versiones de la verdad:
- su página pública de precios (o API de precios): nuestro robot la lee cada día;
- o dos archivos en su propio dominio: entonces leemos solo esos: seller.yaml, models.yaml (models.min.yaml)
En la cuenta, un proveedor confirmado solo cambia el aspecto de sus fichas, ve su analítica y pide una nueva comprobación de su página; los precios nunca se escriben a mano ni se envían por API.
¿Ya está en el catálogo?
Muchos proveedores ya están: leemos sus páginas públicas de precios. Abra su ficha en «Proveedores» y pulse «Esta es mi empresa»: demuestre el dominio y gestiona la ficha: aspecto, analítica, nueva comprobación de precios. ¿Prefiere un archivo a su página de precios? Publique models.yaml como arriba.
Para agentes de IA: todo el camino por la API y MCP
Cada paso del asistente existe también como llamada: un agente del proveedor puede iniciar el listado, verificar el dominio, comprobar los archivos, publicar y luego leer sus ofertas y pedir una recomprobación, con las mismas comprobaciones y textos. Los precios nunca pasan por la API: el proveedor publica models.yaml en su sitio. Cada respuesta lleva next_action y, si hay problema, problems[] (archivo, línea, modelo, campo, valor, código, mensaje, pista).
Cómo firma el agente sus llamadas
Las llamadas públicas (check-domain, validate) no necesitan nada. Las demás actúan por la cuenta de la persona: una clave personal creada en la cuenta (claves API), enviada como X-API-Key o Bearer, u OAuth con el alcance `provider` (la página de consentimiento dice qué podrá hacer el agente; un token solo con `api` recibe 403).
Las llamadas, en orden
| REST | MCP (/mcp/account) | |
|---|---|---|
GET /v1/provider/check-domain?domain= | public: the key, whether the catalog lists a seller on the domain (then claim_url), what to publish | provider_start tells the same |
POST /v1/provider/validate | public: body = models.yaml text, or JSON {"models": ..., "seller": ..., "domain": ...} -> ok, problems[], preview | validate_provider_files |
GET /v1/me | the account: organizations, verified sellers, applications and their next_action | provider_whoami |
POST /v1/provider/applications | {name, domain, org_id?, verification: file|dns|meta} -> 201 the application (200 when the domain was started before); 409 with the claim link for a listed domain | provider_start |
GET /v1/provider/applications/{id} | steps (company, domain, files, publish) with status and problems, verification (token and where it goes), files.models_url, urls, next_action | provider_status |
POST /v1/provider/applications/{id}/verify-domain | [{verification}] -> result verified | not_found, looked_at, expected | provider_verify_domain |
POST /v1/provider/applications/{id}/check-files | [{models_url}] -> ok, fetched, problems[], preview[] | provider_check_files |
POST /v1/provider/applications/{id}/publish | reads the file again, queues the provider -> 202 {status: queued, eta_s, poll}; 409 with why when not verified or the file has problems | provider_publish |
GET /v1/provider/sellers/{key} | a verified seller as the cabinet shows it: the file and its last read, policy, services, last recheck | provider_seller |
GET /v1/provider/sellers/{key}/offers | its offers: prices, context, max output, status (active | pending | rejected | problem), card url | provider_offers |
POST /v1/provider/sellers/{key}/recheck | read the source now, once a day (429 + Retry-After before that) | provider_recheck |
GET /v1/provider/sellers/{key}/analytics?days=&format=json|csv | the premium analytics | - |
Lo mismo por MCP
El servidor de cuenta https://airatecard.com/mcp/account (OAuth o clave personal como Bearer) ofrece los mismos pasos como herramientas; el servidor abierto https://airatecard.com/mcp tiene validate_provider_files. Llama primero a provider_whoami y sigue next_action.
Un ejemplo completo con un dominio inventado
# 0. before anything: does the catalog know the domain, and is the file right?
curl -s 'https://airatecard.com/v1/provider/check-domain?domain=newco.example'
curl -s -X POST https://airatecard.com/v1/provider/validate?domain=newco.example --data-binary @models.yaml
# 1. start (the person's key K; the same domain again returns the same application)
curl -s -X POST https://airatecard.com/v1/provider/applications -H 'X-API-Key: am_...' -H 'Content-Type: application/json' \
-d '{"name": "NewCo", "domain": "newco.example", "verification": "file"}'
# -> data.id = 42, data.verification = {file_url: https://newco.example/.well-known/airatecard-verify.txt,
# file_body: airatecard-verify=...}, data.files.models_url = https://newco.example/.well-known/airatecard-models.yaml,
# data.next_action = {action: verify_domain, how: 'put a text file at ... with the line ...'}
# 2. the provider publishes the file with that line; then:
curl -s -X POST https://airatecard.com/v1/provider/applications/42/verify-domain -H 'X-API-Key: am_...'
# -> data.result = verified (or not_found with looked_at and expected)
# 3. the provider publishes models.yaml at files.models_url; then:
curl -s -X POST https://airatecard.com/v1/provider/applications/42/check-files -H 'X-API-Key: am_...'
# -> data.ok = false, data.problems = [{file: models.yaml, line: 11, model: t1, path: prices[0].amount,
# value: abc, code: number, message: "amount 'abc' - a number, without a currency sign", hint: 0.59}]
# fix the file, call again -> data.ok = true, data.preview = the models as the catalog will show them
# 4. publish, then poll
curl -s -X POST https://airatecard.com/v1/provider/applications/42/publish -H 'X-API-Key: am_...'
# -> 202 {status: queued, eta_s: 300, poll: .../applications/42}
curl -s https://airatecard.com/v1/provider/applications/42 -H 'X-API-Key: am_...'
# -> data.status = published, data.urls.card = https://airatecard.com/en/providers/newco
# 5. from then on: the daily run reads the file. The agent reads what the site has, or asks for a read now
curl -s https://airatecard.com/v1/provider/sellers/newco/offers -H 'X-API-Key: am_...'
curl -s -X POST https://airatecard.com/v1/provider/sellers/newco/recheck -H 'X-API-Key: am_...'Un proveedor ya listado
check-domain responde in_catalog: true con claim_url: una persona de la empresa prueba allí el dominio; después el agente lee el vendedor, sus ofertas y pide recomprobaciones con /v1/provider/sellers/{key}...
OpenAPI: /openapi.json (tag provider) · /auth.md · /llms.txt
Patrocinio
La presencia en el catálogo y cada precio son gratis e iguales para todos. El patrocinio es una donación: añade una insignia y nunca cambia el orden.
Patrocinio
Cualquier visitante puede apoyar el sitio: el botón «Apoyar el sitio» en la cuenta. Cada 5 $ es un mes de la insignia dorada SPONSOR junto a tu usuario en la cabecera y a tu apodo en los debates, y un lugar en la página de patrocinadores (si lo aceptas). 15 $ son tres meses, 60 $ un año; una nueva aportación amplía el periodo.
Un proveedor: un SPONSOR dorado junto a su nombre y un borde izquierdo dorado en las filas de todos sus modelos en las pestañas «Modelos» y «Proveedores», un lugar en la página de patrocinadores. 29 $ al mes es el precio de lanzamiento; los primeros patrocinadores lo conservan cuando suba.
Reglas
- El patrocinio nunca cambia el orden de las tarjetas, la ordenación, los precios ni los resultados de las comparaciones: solo la insignia.
- Los datos del sitio son abiertos y gratuitos para todos; los patrocinadores ayudan a que sigan así.
Cómo unirse
- Regístrate (usuario y contraseña, sin e-mail).
- Una persona: cuenta, «Apoyar el sitio», un periodo. Un proveedor: crea una organización, verifica el dominio, «Servicios» -> «Patrocinio».
El pago en línea aún no está conectado: te escribimos cómo enviar la aportación y activamos la insignia a mano. Preguntas: hello@airatecard.com.
Nuestro rastreador
Última actualización: 2026-10-10
AIRateCardBot es el rastreador de AI Rate Card (https://airatecard.com). Mantiene actualizado el catálogo de precios de modelos de IA.
Qué hace
- Lee páginas públicas y puntos de acceso públicos que listan modelos y precios, aproximadamente una vez al día por proveedor.
- Se identifica con el User-Agent
AIRateCardBot/1.0 (+https://airatecard.com/bot). - Respeta robots.txt: las reglas para
AIRateCardBoto para todos los rastreadores (*) se comprueban antes de cada solicitud. - Mantiene bajo su ritmo de solicitudes.
- Solo lee lo que es público sin iniciar sesión; no lee contenido privado.
Qué mostramos
En la ficha de un proveedor mostramos los precios y un enlace al sitio o a la página del modelo del propio proveedor. No publicamos las direcciones de las páginas o puntos de acceso que lee el bot.
Proveedores: cómo controlarlo
- Detenerlo: añade a tu robots.txt
User-agent: AIRateCardBotDisallow: /El bot se detiene en su siguiente visita. Tu ficha permanece con un enlace a tu sitio, sin precios recogidos. - Enviar tú los precios: publica tus precios en nuestro formato y leeremos solo ese archivo. Consulta cómo añadir o actualizar un proveedor.
- Preguntas o correcciones: escribe a providers@airatecard.com o hello@airatecard.com.
Cómo funciona el orden
Última actualización: 2026-10-10
Esta es una traducción. En caso de discrepancia, prevalece la versión en inglés.
Esta página explica cómo AI Rate Card ordena los modelos, las ofertas y los proveedores, y cómo se muestran las ubicaciones de pago. Sigue las normas de transparencia del Reglamento europeo sobre plataformas y empresas (2019/1150) y del Reglamento de Servicios Digitales.
1. De dónde vienen los precios
Tomamos los precios solo de los propios sitios de los proveedores: sus páginas públicas de precios y API públicas, o los archivos seller.yaml/models.yaml que un proveedor publica en su propio dominio. Cada precio muestra su fuente y la fecha de comprobación. Los precios se comprueban cada día. Cuando dos fuentes del mismo proveedor no coinciden, la oferta se marca como conflicto hasta que se resuelve la diferencia.
2. El orden por defecto
Las listas se ordenan por precio, del más bajo al más alto, según el precio de entrada (para modelos de lenguaje, el precio por 1 millón de tokens de entrada). Las ofertas con el mismo precio mantienen un orden fijo por proveedor e identificador de modelo, de modo que el orden no cambia entre visitas. La lista de proveedores se ordena por el número de modelos que ofrece cada proveedor.
Algunas ofertas se mueven al final de la lista, sea cual sea su precio:
- las ofertas cuyo precio no pudimos encontrar («sin datos»);
- los precios que parecen erróneos — por ejemplo, muy alejados de todos los demás proveedores del mismo modelo —, marcados con ⚠ hasta comprobarse;
Una oferta solo se muestra con precio 0 cuando el proveedor realmente la ofrece gratis; un cero que el proveedor no marcó como gratuito se trata como «sin datos».
Puedes cambiar el orden en cualquier momento haciendo clic en el encabezado de una columna: precio, ventana de contexto, proveedor, fecha de comprobación y otros. Un segundo clic invierte el orden. Los filtros se aplican a toda la lista, no solo a la página que ves.
3. «Mejor precio»
El mejor precio de un modelo es el precio más bajo entre sus ofertas que están vigentes, no marcadas como dudosas y que no son planes de prueba gratuitos. Se calcula igual para todos los proveedores.
4. Lo que el pago puede y no puede cambiar
El pago nunca cambia el orden de ninguna lista, el mejor precio, los filtros ni los resultados de búsqueda.
Lo que pueden obtener los proveedores:
- Verificado (gratis): el proveedor ha confirmado que controla su ficha, por ejemplo mediante su dominio. La ficha recibe una insignia «Verificado» y el proveedor puede gestionar el aspecto de sus fichas y pedir una nueva comprobación de su página de precios. La insignia indica quién gestiona la ficha, no que el precio sea mejor.
- Publicidad (de pago, cuando se ofrezca): la oferta del proveedor puede mostrarse con su propia imagen, colores y una descripción más larga, y aparecer en espacios publicitarios marcados. Ese contenido siempre lleva la etiqueta «Anuncio» y nombra al anunciante. Nunca se coloca en una posición de la lista que no haya ganado por precio.
Las ubicaciones de pago aún no se ofrecen.
5. Enlaces a proveedores
Los enlaces a proveedores pasan por nuestra dirección /go/… para que podamos contar el interés en cada oferta. No recibimos ninguna comisión por estos clics. Si eso cambia algún día, lo diremos en esta página y junto a los enlaces.
6. Preguntas y reclamaciones
Si crees que una oferta aparece en el lugar equivocado o que un precio es erróneo, usa la página «Informar de un problema» o escribe a hello@airatecard.com. Los proveedores también pueden corregir sus propios datos desde la cuenta de proveedor.
Preguntas frecuentes
¿Qué tan actuales son los precios?
Comprobados a diario, directamente de la página de precios o la API del proveedor.
¿Qué significa un precio con aviso?
Parece erróneo frente a cómo se lee normalmente esa página, pero se muestra igualmente marcado como dudoso: comprueba la página del proveedor antes de fiarte.
¿Qué significa «vía X»?
La oferta se sirve a través de la infraestructura de otra empresa (un enrutador), no la vende directamente el creador del modelo; X es a través de quién se vende.
¿Qué son las regiones?
Dónde sirve el proveedor esa oferta (residencia de datos): UE, EE. UU., Global… Otra región es otra oferta con su propio precio.
¿Por qué falta un proveedor?
Aún no lo hemos recogido: cuéntanoslo en /join y lo añadiremos.