AI Rate Card

Documentação

Tudo em um só lugar: o que é o AI Rate Card, os dados abertos, a API e o servidor MCP, como citá-lo e como um provedor entra.

Conteúdo

O que é o AI Rate Card

O AI Rate Card lista os preços de modelos de IA – de linguagem, imagem, voz e outros – como seus provedores os publicam. Os preços vêm das páginas públicas de preços e APIs dos provedores – ou, quando os termos não permitem coleta automática, do conjunto de dados aberto models.dev – e são verificados diariamente.

Quando duas fontes divergem sobre um preço, o site não escolhe uma em silêncio: a oferta fica marcada como conflito até a diferença ser resolvida.

Os preços aqui são apenas informativos. Vale a página do provedor: confira o preço lá antes de comprar.

Perguntas, correções e pedidos: hello@airatecard.com.

Como os preços são coletados →

API e MCP: como começar

Duas formas de obter os preços por máquina em vez de a olho. Pode experimentar as duas já, sem registo nem pagamento.

Perguntar ao seu assistente de IA (MCP)

Para quem usa o Claude, o ChatGPT ou o Cursor. Liga o site uma vez e o assistente consulta ele próprio os preços atuais quando pergunta por palavras suas. Sem programar.

  1. Copie o endereço do servidor: https://airatecard.com/mcp
  2. Adicione-o ao seu assistente como conector – onde clicar em cada aplicação está indicado abaixo, na secção Servidor MCP.
  3. Pergunte por palavras suas, por exemplo:
    • Qual é o modelo mais barato com um contexto de pelo menos 128K tokens?
    • Compara os preços do Llama 3.1 8B em diferentes fornecedores.
    • Quanto custarão por mês 10 M de tokens de entrada e 2 M de saída com o GPT OSS 120B?

Obter os dados num programa (API)

Para desenvolvedores: requisições HTTP simples, resposta em JSON. Dá para começar já sem chave; uma chave pessoal gratuita amplia a janela por minuto (tabela abaixo).

  1. Experimente um pedido sem chave – copie-o para um terminal: as 5 ofertas mais baratas de modelos de texto.
    curl -s 'https://airatecard.com/v1/offers?category=llm&pricing=usage&limit=5'
  2. Precisa de mais linhas? Inicie sessão, crie uma chave na sua conta, em Chaves API, e envie-a no cabeçalho X-API-Key.
  3. Todos os pedidos com os seus parâmetros: /openapi.json (o Postman e os geradores de clientes leem-no).

Os principais pedidos

GET /v1/offers?category=llm&pricing=usage&limit=5ofertas com preços; os mesmos filtros da página Modelos
GET /v1/models?category=llmmodelos e o seu melhor preço
GET /v1/models/{model_id}um modelo com todas as suas ofertas
GET /v1/cost?model={model_id}&input_tokens=10000000&output_tokens=2000000quanto custa o seu volume em cada fornecedor de um modelo
GET /v1/compare?models={a},{b}dois a quatro modelos lado a lado
GET /v1/analytics/cheapest?task=text&n=5os mais baratos para uma tarefa (texto, imagem, voz...)
GET /v1/models/{model_id}/historyo histórico de preços de um modelo (90 dias)
GET /v1/articlesos artigos do site
GET /v1/metasobre o catálogo: quando foi atualizado, quantas ofertas

Como os preços são coletados

Cada preço no AI Rate Card vem da página pública de preços ou da API do provedor, quando os termos permitem coleta automática, e caso contrário do models.dev – um conjunto de dados aberto de preços de modelos publicado sob a licença MIT (Copyright (c) 2025 models.dev; texto da licença em /static/licenses/models.dev.txt). Nunca uma estimativa; verificado diariamente.

«Sem dados» significa que ainda não foi encontrada uma oferta com preço para esse modelo nesse provedor. «Grátis» significa que a página do provedor informa que a oferta não custa nada. «Retirada» significa que a oferta estava na página do provedor mas não aparece mais; ela continua no site com o último preço conhecido, marcada como retirada, para que o histórico não se perca.

Cada mudança de preço é guardada: o histórico completo de uma oferta, e do mercado inteiro dia a dia, está na página dela e em /market.

Dados

O AI Rate Card serve para consultar e escolher, não para copiar em massa: não há arquivo do catálogo inteiro nem do histórico de preços. Abra o cartão de um modelo ou oferta para citá-lo, ou consulte /v1 ou o servidor MCP para preços atuais, página por página.

Como citar

API REST

A API JSON pública para agentes e scripts: não é preciso chave para ler, uma chave pessoal apenas aumenta o limite.

  • /v1
  • /openapi.json
curl -s 'https://airatecard.com/v1/offers?max_price_input=1&cur=USD'

Paginação

/v1/offers e /v1/models devolvem no máximo 50 linhas por página (25 por padrão); pagine com offset e limit ou refine com filtros; o catálogo inteiro está num só arquivo em /export.

Análises

Preços atuais por tarefa, não por tipo de modelo – o que um comprador realmente quer fazer: mais barato, mais caro e mediana para embedding, image, moderation, rerank, stt, text, tts, video, vision. scope restringe à categoria própria de uma tarefa (specialized) ou aos modelos multimodais que se qualificam (universal); component escolhe input_tokens, output_tokens ou a unidade própria da tarefa.

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'

Níveis de acesso

As páginas são abertas a todos, a qualquer buscador e assistente de IA. Máquinas podem começar sem chave; uma chave pessoal gratuita (cadastro com login e senha, sem e-mail, depois conta → chaves de API; enviada no cabeçalho X-API-Key) amplia a janela por minuto.

Sem entrarFree
Páginas, artigos, filtros, comparação, calculadorastudotudo
Descarregar uma tabela: linhas por ficheiro, ficheiros por hora100000 linhas, 20 por hora100000 linhas, 60 por hora
API para programadores: pedidos por minuto (sem limite diário)60/min120/min
Histórico de preços pela APIaté 90 dias, um modelo por pedidoaté 90 dias, um modelo por pedido

Limites e licença

Não há limites diários: só janelas por minuto contra abuso (tabela acima), mais amplas com uma chave pessoal gratuita (conta → chaves de API, cabeçalho X-API-Key). Toda resposta traz X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset e X-Daily-Rows-Remaining; acima do limite, resposta 429 com Retry-After. Licença: CC BY 4.0: o catálogo, as transferências, as respostas da API e o histórico de preços de 90 dias podem ser usados, citados e redistribuídos livremente, inclusive comercialmente, com atribuição a AI Rate Card (airatecard.com) e uma ligação para a ficha ou página de onde vêm os números.

Como citar

Cada resposta da API e do MCP traz uma linha «cite» e cada download termina com uma: indique o AI Rate Card, ligue para o cartão ou a página do modelo que usou e dê a data em que o preço foi verificado - «Source: AI Rate Card, https://airatecard.com/c/offer:<id>, prices checked AAAA-MM-DD».

Exportar por filtro

GET /export devolve as ofertas de um filtro em JSON, CSV, YAML ou Excel: só preços atuais, em USD. Dados abertos (CC BY), sem login: todo o catálogo num ficheiro, até 20 descargas por hora por endereço (mais com conta). Os parâmetros são os da página «Modelos»: defina um filtro, abra «Descarregar» e copie o endereço. Cada ficheiro termina com a linha «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'

Experimentar

format: json | csv | yaml; intervalos como um único valor «de-até» (r_in, r_out, r_ctx, r_mo, r_params …; 128k e 1m permitidos); repita provider, region, input_modality … para vários valores; sort e desc como na página.

Servidor MCP

Um servidor MCP remoto (Streamable HTTP), só de leitura. Responde a perguntas de preços com as ferramentas cheapest_for_workload (o mais barato para uma tarefa inteira, com cenários prontos: chatbot, coding_agent, rag, summarization, long_context, vision, embedding_index, trial), search_offers, get_model_prices, cheapest, compare_models, estimate_cost e get_card – cada resultado traz o URL do cartão para citar. Funciona sem chave; com uma chave pessoal (cabeçalho X-API-Key) devolve mais linhas, como a API. Prompts prontos para o usuário: cheapest_for_my_job, where_is_model_cheapest, compare_models.

https://airatecard.com/mcp

Claude.ai / Claude Desktop

Settings → Connectors → Add custom connector e cole esta URL:

https://airatecard.com/mcp

Claude Code

claude mcp add --transport http ai-rate-card https://airatecard.com/mcp

ChatGPT

Settings → Connectors (modo desenvolvedor), adicione um conector personalizado com esta URL:

https://airatecard.com/mcp

Cursor / VS Code

Adicione isto ao seu mcp.json:

{
  "mcpServers": {
    "ai-rate-card": {
      "url": "https://airatecard.com/mcp"
    }
  }
}

Qualquer cliente MCP

Uma mensagem JSON-RPC 2.0 via HTTP, sem sessão:

curl -s https://airatecard.com/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"cheapest_offers","arguments":{"category":"llm"}}}'

Ligar o seu próprio agente

Qualquer agente que fale MCP – em qualquer framework ou API – liga-se ao mesmo servidor. Escolha conforme os limites de que precisa:

  • Sem chave: https://airatecard.com/mcp – limites de convidado, nada a configurar.
  • O seu agente com os seus limites: https://airatecard.com/mcp e uma chave pessoal da sua conta (Chaves API), enviada como Authorization: Bearer ou X-API-Key: .
  • Um agente para muitas pessoas, cada uma com a sua conta: https://airatecard.com/mcp/account com OAuth – ver a secção acima.

Os exemplos leem a chave da variável de ambiente AIRATECARD_KEY – nunca ponha uma chave no código ou num URL. Sem chave, retire a linha 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_offers", {"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_offers", 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}}}'

Bom saber

Uma chave por agente: assim pode revogar uma sem parar as outras. Acima de um limite o servidor responde 429 com Retry-After – espere esses segundos, não troque de chave. Cada resultado de ferramenta traz uma linha cite e um card_url: o agente deve citá-los. As ferramentas: search_offers, get_model_prices, cheapest, compare_models, estimate_cost, get_card, cheapest_models, dearest_models, median_models, list_articles.

A sua conta em assistentes e agentes de IA (OAuth)

O servidor MCP tem dois endereços. https://airatecard.com/mcp funciona para todos sem iniciar sessão, com os limites de convidado. https://airatecard.com/mcp/account funciona com a sua conta AI Rate Card: os seus limites (Free ou Pro), e vê e revoga o acesso na sua conta. Inicia sessão uma vez, neste site – o assistente nunca vê a sua palavra-passe.

Claude.ai / Claude Desktop

Settings → Connectors → Add custom connector, cole o endereço abaixo. Deixe o cliente OAuth em “Register automatically”. O Claude abre a página de entrada deste site: inicie sessão e carregue em Permitir.

https://airatecard.com/mcp/account

ChatGPT

Settings → Connectors (modo de programador) → crie um conector com o endereço abaixo e autenticação OAuth. O ChatGPT abre a página de entrada deste site: inicie sessão e carregue em Permitir.

https://airatecard.com/mcp/account

Claude Code

Adicione o servidor, depois escreva /mcp no Claude Code e escolha Authenticate: o navegador abre a página de entrada deste site.

claude mcp add --transport http ai-rate-card-account https://airatecard.com/mcp/account

Cursor / VS Code

Cursor, VS Code e outros clientes MCP com OAuth: ponha o endereço no mcp.json; na primeira chamada o cliente abre a página de entrada deste site.

{
  "mcpServers": {
    "ai-rate-card-account": {
      "url": "https://airatecard.com/mcp/account"
    }
  }
}

Scripts e agentes de terminal: um código em vez do navegador

Um programa sem navegador usa o device flow (RFC 8628): pede um código, abre o endereço mostrado em qualquer dispositivo, inicia sessão, confirma o código e carrega em Permitir, e o programa recebe o token. Os quatro pedidos:

# 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, limites e revogação

Envie o token no cabeçalho Authorization: Bearer <token> para /v1 e /mcp/account. Dura uma hora; renove-o com grant_type=refresh_token (o token de atualização dura 30 dias, até o revogar). Conta com os limites da sua conta, como uma chave pessoal. Cada aplicação autorizada aparece na sua conta em Aplicações ligadas, onde um clique a revoga com os seus tokens.

Para agentes: /auth.md. Metadados padrão: /.well-known/oauth-authorization-server e /.well-known/oauth-protected-resource/mcp/account. Prefere uma chave fixa? Crie-a na sua conta em Chaves API e envie-a como X-API-Key.

llms.txt

Um guia em texto simples para agentes de IA, na convenção llmstxt.org: o que é o site, a API e o servidor MCP, e como citá-lo – em /llms.txt (também /.well-known/llms.txt). A oferta atual mais barata dos modelos mais oferecidos, uma linha cada, está em /llms-full.txt.

Como citar

CC BY 4.0: o catálogo, as transferências, as respostas da API e o histórico de preços de 90 dias podem ser usados, citados e redistribuídos livremente, inclusive comercialmente, com atribuição a AI Rate Card (airatecard.com) e uma ligação para a ficha ou página de onde vêm os números.

Para agentes de IA há /llms.txt e a API pública em /v1 – consultar, comparar e citar, nunca uma cópia em massa do catálogo ou do seu histórico de preços.

Source: AI Rate Card, https://airatecard.com/pt/c/offer:<id>

Para provedores

Cadastro gratuito, feito por você na conta. A ordem de todas as listas é só por preço – dinheiro não sobe ninguém.

Como entrar: seis passos, cerca de 15 minutos

O cadastro é grátis e feito por você, na sua conta, em cerca de 15 minutos – sem e-mails nem espera:

  1. Crie uma conta – login e senha, sem e-mail.
  2. Aperte "Adicionar um novo provedor" e digite o nome e o site da empresa.
  3. Comprove o domínio: um arquivo de uma linha em /.well-known/, um registro DNS TXT ou uma meta tag – e aperte "Verificar agora".
  4. Digite modelos e preços no formulário; ele gera seu models.yaml.
  5. Coloque o arquivo em /.well-known/airatecard-models.yaml e aperte "Verificar o arquivo".
  6. Aperte "Publicar": o coletor ativa você automaticamente, normalmente em até 10 minutos.

Depois o arquivo é lido uma vez por dia: mude um preço e o catálogo acompanha no dia seguinte. Seus modelos aparecem no site, na API (/v1) e no servidor MCP para assistentes de IA, com links para suas páginas.

Adicionar um novo provedor Passo a passo, com exemplos

De onde vêm seus preços

Os seus preços vêm de um só lugar – o seu próprio site, para nunca haver duas versões da verdade:

  • a sua página pública de preços (ou API de preços) – o nosso robô lê-a todos os dias;
  • ou dois ficheiros no seu próprio domínio – então lemos só esses: seller.yaml, models.yaml (models.min.yaml)

Na conta, um fornecedor confirmado só muda o visual dos seus cartões, vê a sua análise e pede uma nova verificação da sua página; os preços nunca são escritos à mão nem enviados por API.

Já está no catálogo?

Muitos provedores já estão listados: lemos suas páginas públicas de preços. Abra seu cartão em "Provedores" e aperte "Esta é a minha empresa" – comprove o domínio e você gerencia o cartão: aparência, análises, nova verificação de preços. Prefere um arquivo à página de preços? Publique models.yaml como acima.

Para agentes de IA: todo o caminho pela API e MCP

Cada passo do assistente existe também como chamada: um agente do fornecedor pode iniciar a listagem, verificar o domínio, verificar os ficheiros, publicar e depois ler as suas ofertas e pedir nova verificação - com as mesmas verificações e textos. Os preços nunca passam pela API: o fornecedor publica models.yaml no seu site. Cada resposta traz next_action e, havendo problema, problems[] (ficheiro, linha, modelo, campo, valor, código, mensagem, dica).

Como o agente assina as chamadas

As chamadas públicas (check-domain, validate) não precisam de nada. As restantes agem pela conta da pessoa: uma chave pessoal criada na conta (chaves API), enviada como X-API-Key ou Bearer, ou OAuth com o scope `provider` (a página de consentimento diz o que o agente poderá fazer; um token só com `api` recebe 403).

As chamadas, por ordem

RESTMCP (/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 publishprovider_start tells the same
POST /v1/provider/validatepublic: body = models.yaml text, or JSON {"models": ..., "seller": ..., "domain": ...} -> ok, problems[], previewvalidate_provider_files
GET /v1/methe account: organizations, verified sellers, applications and their next_actionprovider_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 domainprovider_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_actionprovider_status
POST /v1/provider/applications/{id}/verify-domain[{verification}] -> result verified | not_found, looked_at, expectedprovider_verify_domain
POST /v1/provider/applications/{id}/check-files[{models_url}] -> ok, fetched, problems[], preview[]provider_check_files
POST /v1/provider/applications/{id}/publishreads the file again, queues the provider -> 202 {status: queued, eta_s, poll}; 409 with why when not verified or the file has problemsprovider_publish
GET /v1/provider/sellers/{key}a verified seller as the cabinet shows it: the file and its last read, policy, services, last recheckprovider_seller
GET /v1/provider/sellers/{key}/offersits offers: prices, context, max output, status (active | pending | rejected | problem), card urlprovider_offers
POST /v1/provider/sellers/{key}/recheckread the source now, once a day (429 + Retry-After before that)provider_recheck
GET /v1/provider/sellers/{key}/analytics?days=&format=json|csvthe premium analytics-

O mesmo via MCP

O servidor de conta https://airatecard.com/mcp/account (OAuth ou chave pessoal como Bearer) oferece os mesmos passos como ferramentas; o servidor aberto https://airatecard.com/mcp tem validate_provider_files. Chame primeiro provider_whoami e siga next_action.

Um exemplo completo com um domínio fictício

# 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_...'

Um fornecedor já listado

check-domain responde in_catalog: true com claim_url - uma pessoa da empresa prova aí o domínio; depois o agente lê o vendedor, as suas ofertas e pede novas verificações com /v1/provider/sellers/{key}...

OpenAPI: /openapi.json (tag provider) · /auth.md · /llms.txt

Patrocínio

A listagem e cada preço são grátis e iguais para todos. O patrocínio é uma doação: acrescenta um selo e nunca muda a ordem.

Patrocínio

Qualquer visitante pode apoiar o site: o botão «Apoiar o site» na conta. Cada US$ 5 é um mês do selo dourado SPONSOR ao lado do seu login no cabeçalho e do seu apelido nas discussões, e um lugar na página de patrocinadores (se você concordar). US$ 15 são três meses, US$ 60 um ano; uma nova contribuição estende o período.

Um provedor: um SPONSOR dourado ao lado do nome e uma borda esquerda dourada nas linhas de todos os seus modelos nas abas «Modelos» e «Provedores», um lugar na página de patrocinadores. US$ 29 por mês é o preço de lançamento; os primeiros patrocinadores o mantêm depois do aumento.

Regras

  • O patrocínio nunca muda a ordem dos cartões, a ordenação, os preços nem os resultados das comparações – só o selo.
  • Os dados do site são abertos e gratuitos para todos; os patrocinadores ajudam a mantê-los assim.

Como participar

  1. Cadastre-se (login e senha, sem e-mail).
  2. Uma pessoa: conta, «Apoiar o site», um período. Um provedor: crie uma organização, verifique o domínio, «Serviços» -> «Patrocínio».

O pagamento online ainda não está conectado: escrevemos para você como enviar a contribuição e ativamos o selo manualmente. Dúvidas: hello@airatecard.com.

Nosso rastreador

Última atualização: 2026-10-10

AIRateCardBot é o rastreador do AI Rate Card (https://airatecard.com). Ele mantém atualizado o catálogo de preços de modelos de IA.

O que ele faz

  • Lê páginas públicas e endpoints públicos que listam modelos e preços, cerca de uma vez por dia por provedor.
  • Identifica-se com o User-Agent AIRateCardBot/1.0 (+https://airatecard.com/bot).
  • Segue o robots.txt: as regras para AIRateCardBot ou para todos os rastreadores (*) são verificadas antes de cada requisição.
  • Mantém baixa a sua taxa de requisições.
  • Lê apenas o que é público sem login; não lê conteúdo privado.

O que mostramos

No cartão de um provedor, mostramos os preços e um link para o site ou a página do modelo do próprio provedor. Não publicamos os endereços das páginas ou endpoints que o bot lê.

Provedores: como controlá-lo

Como funciona a ordenação

Última atualização: 2026-10-10

Esta é uma tradução. Em caso de divergência, prevalece a versão em inglês.

Esta página explica como o AI Rate Card ordena modelos, ofertas e provedores, e como os posicionamentos pagos são exibidos. Ela segue as regras de transparência do Regulamento europeu sobre plataformas e empresas (2019/1150) e do Regulamento dos Serviços Digitais.

1. De onde vêm os preços

Coletamos preços apenas nos próprios sites dos provedores: suas páginas públicas de preços e APIs públicas, ou os arquivos seller.yaml/models.yaml que um provedor publica no próprio domínio. Cada preço mostra sua fonte e a data em que foi verificado. Os preços são verificados todos os dias. Quando duas fontes do mesmo provedor divergem, a oferta é marcada como conflito até a diferença ser resolvida.

2. A ordem padrão

As listas são ordenadas por preço, do menor para o maior, pelo preço de entrada (para modelos de linguagem, o preço por 1 milhão de tokens de entrada). Ofertas com o mesmo preço mantêm uma ordem fixa por provedor e id do modelo, para que a ordem não mude entre visitas. A lista de provedores é ordenada pelo número de modelos que cada provedor oferece.

Algumas ofertas vão para o fim da lista, seja qual for o preço:

  • ofertas cujo preço não conseguimos encontrar («sem dados»);
  • preços que parecem errados — por exemplo, muito distantes de todos os outros provedores do mesmo modelo —, marcados com ⚠ até serem verificados;

Uma oferta só aparece com preço 0 quando o provedor realmente a oferece de graça; um zero que o provedor não marcou como gratuito é tratado como «sem dados».

Você pode mudar a ordem a qualquer momento clicando no cabeçalho de uma coluna: preço, janela de contexto, provedor, data da verificação e outras. Um segundo clique inverte a ordem. Os filtros se aplicam à lista inteira, não só à página que você vê.

3. «Melhor preço»

O melhor preço de um modelo é o menor preço entre suas ofertas atuais, não marcadas como duvidosas e que não sejam planos de teste gratuitos. Ele é calculado da mesma forma para todos os provedores.

4. O que o pagamento pode e não pode mudar

O pagamento nunca muda a ordem de nenhuma lista, o melhor preço, os filtros ou os resultados de busca.

O que os provedores podem obter:

  • Verificado (gratuito): o provedor confirmou que controla seu registro, por exemplo pelo seu domínio. O registro recebe um selo «Verificado» e o provedor pode gerenciar a aparência de seus cartões e pedir uma nova verificação da sua página de preços. O selo diz quem gerencia o registro, não que o preço é melhor.
  • Publicidade (paga, quando oferecida): a oferta do provedor pode aparecer com imagem, cores próprias e uma descrição mais longa, e em espaços publicitários marcados. Esse conteúdo é sempre marcado como «Anúncio» e identifica o anunciante. Ele nunca é colocado em uma posição da lista que não conquistou pelo preço.

Posicionamentos pagos ainda não são oferecidos.

Os links para provedores passam pelo nosso endereço /go/… para que possamos contar o interesse em cada oferta. Não recebemos comissão por esses cliques. Se isso mudar algum dia, diremos nesta página e ao lado dos links.

6. Dúvidas e reclamações

Se você acha que uma oferta está no lugar errado ou que um preço está errado, use a página «Informar um problema» ou escreva para hello@airatecard.com. Os provedores também podem corrigir seus próprios dados pela conta de provedor.

Perguntas frequentes

Quão atualizados são os preços?

Verificados diariamente, direto da página de preços ou da API do provedor.

O que significa um preço com aviso?

Ele parece errado em relação ao que essa página costuma mostrar, mas é exibido mesmo assim, marcado como duvidoso – confira a página do provedor antes de confiar.

O que significa «via X»?

A oferta é servida pela infraestrutura de outra empresa (um roteador), não vendida diretamente pelo criador do modelo; X é por meio de quem é vendida.

O que são regiões?

Onde o provedor atende essa oferta (residência de dados) – UE, EUA, Global… Outra região é outra oferta com preço próprio.

Por que falta um provedor?

Ainda não o coletamos – conte-nos em /join e vamos adicioná-lo.