Buscar documentação...

Comece a digitar para buscar documentação

Guia da plataforma

API da plataforma

Leia o catálogo, os preços, seu saldo e seu consumo a partir do código.

Aqui está tudo, menos o envio de um prompt: quais modelos existem, quanto cada provedor cobra, quanto você já gastou e quais chaves você possui. Tudo responde em JSON no mesmo host api para o qual você envia as completions.

Os endpoints de catálogo e de preços são públicos e não exigem nenhuma credencial. Tudo que diz respeito à sua própria conta exige uma, e existem dois tipos.

Elas não são intercambiáveis. Uma chave de API não consegue ler seu saldo, e um token de acesso não consegue enviar uma completion.

CredencialAparênciaDá acesso a
Chave de APIsk-...A inferência, a lista de modelos e o contador de uso daquela chave específica.
Token de acessoDe 29 a 32 caracteres, sem prefixoSua conta: saldo, gerenciamento de chaves, registros de uso.

As duas trafegam no mesmo cabeçalho, Authorization: Bearer seguido do valor. Nada mais é lido. Exemplos mais antigos acrescentam um cabeçalho New-Api-User, que é ignorado, e não existe alternativa por cookie.

Envie esse cabeçalho mesmo onde o endpoint responderia sem ele. Uma requisição a uma rota de conta sem credencial pode passar por uma verificação antes de chegar até nós, e essa verificação responde HTML em vez de JSON.

Abra Configurações, encontre Acesso à API em Segurança e gere um. Ele é exibido apenas uma vez. Só pode ser criado enquanto você está conectado, portanto um script não consegue gerar o seu próprio.

Você tem apenas um token de acesso por vez. Gerar um novo invalida o antigo silenciosamente, e tudo que ainda o estiver usando para de funcionar.

Trate-o como uma senha. Ele pode gastar dinheiro, criar chaves e ler seu histórico. Revogue-o na mesma tela assim que um script não precisar mais dele.

Uma única requisição pública retorna todos os modelos, com os preços já convertidos para dólares por milhão de tokens. Sem chave, sem cadastro.

bash
curl https://api.unorouter.com/api/pricing/catalog
json
{
  "counts": { "models": 239, "free": 134, "paid": 105, "vendors": 50 },
  "first_free_model": "glm-5.3:free",
  "vendors": [{ "vendor_id": 4, "vendor_name": "Zhipu", "icon": "Zhipu.Color" }],
  "models": [
    {
      "model_name": "glm-5.3",
      "vendor": "Zhipu",
      "type": "text",
      "is_free": false,
      "online": true,
      "input_price": 0.05103,
      "output_price": 0.160382187,
      "original_input_price": 1.26,
      "original_output_price": 3.960054,
      "tags": "Text,Reasoning,Tools,Cache",
      "supported_endpoint_types": ["openai", "anthropic"],
      "uptime_24h": 99.965,
      "success_rate": 95,
      "avg_latency_ms": 11062
    }
  ]
}

input_price e output_price são o que você realmente pagaria hoje, no provedor mais barato que atende esse modelo no momento. original_input_price e original_output_price são o preço de tabela do próprio fabricante, então a diferença entre os dois é o desconto. is_free marca os modelos que nunca cobram, e online marca aqueles que têm um provedor ativo agora.

Dois parentes menores: /api/pricing/counts retorna apenas os totais e é leve o bastante para ser consultado com frequência, e /api/pricing/vendors retorna a lista de fabricantes. O endpoint mais antigo /api/pricing retorna proporções brutas em vez de dólares e é várias vezes maior.

A maioria dos modelos é atendida por vários provedores com tarifas diferentes. Consulte um único modelo para ver todos eles.

bash
curl "https://api.unorouter.com/api/pricing/catalog/model?model=glm-5.3"
json
{
  "model_name": "glm-5.3",
  "model_ratio": 0.63,
  "completion_ratio": 3.1429,
  "cache_ratio": 0.1857,
  "input_price": 0.05103,
  "output_price": 0.160382187,
  "grid_min_ratio": 0.0405,
  "auto_chain": ["a7-bbgt-2846-glm-5.3", "a7-kkl-3731-glm-5.3", "a7-4069-glm-5.3"],
  "group_ratio": {
    "a7-bbgt-2846-glm-5.3": 0.0405,
    "a7-kkl-3731-glm-5.3": 0.0911,
    "a7-4069-glm-5.3": 0.1214
  },
  "enable_groups": ["a7-bbgt-2846-glm-5.3", "a7-kkl-3731-glm-5.3"]
}

auto_chain é a ordem em que o roteamento os tenta, do mais barato para o mais caro. group_ratio informa o multiplicador de cada provedor, e o preço decorre dele:

text
input  $/1M = model_ratio * 2 * group_ratio
output $/1M = input * completion_ratio
cached $/1M = input * cache_ratio

glm-5.3 on a7-bbgt-2846: 0.63 * 2 * 0.0405 = $0.05103 / 1M in
                          0.05103 * 3.1429  = $0.16038 / 1M out

Esses nomes de grupo são os mesmos aos quais você vincula uma chave, veja Fixação de grupos

A lista compatível com OpenAI é o que a maioria dos clientes chama quando você clica em conectar. Ela exige uma chave de API.

bash
curl https://api.unorouter.com/v1/models \
  -H "Authorization: Bearer $UNOROUTER_API_KEY"

Ela retorna apenas o que aquela chave pode de fato usar, então uma chave do plano gratuito vê menos modelos do que uma com saldo. Cada entrada traz também context_length e max_output_tokens, que a OpenAI pura não fornece.

O caminho é /v1/models. Se tirar o /v1, você chega a uma página web em vez da API, o que os clientes relatam como erro de parsing de JSON por causa de um doctype inesperado.

Uma única chamada retorna sua conta, incluindo o que ainda resta para gastar.

bash
curl https://api.unorouter.com/api/user/self \
  -H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"
json
{
  "success": true,
  "message": "",
  "data": {
    "id": 12345,
    "username": "you",
    "group": "default",
    "quota": 265000,
    "used_quota": 4231900,
    "request_count": 1884,
    "aff_code": "ABC123"
  }
}

Os valores estão em unidades de cota, não em dólares. 500.000 unidades equivalem a um dólar americano, portanto o saldo acima é de US$ 0,53. Divida por 500.000 para exibir dinheiro.

quota é o que você ainda pode gastar. used_quota e request_count são totais acumulados desde sempre, que só aumentam, portanto used_quota não é a diferença entre coisa alguma e o seu saldo.

Liste suas chaves e depois revele uma delas pelo id.

bash
curl "https://api.unorouter.com/api/token/?p=1&page_size=20" \
  -H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"

curl -X POST https://api.unorouter.com/api/token/42/key \
  -H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"

A listagem mascara o valor de todas as chaves, por isso revelar é uma chamada separada. Essa chamada tem limite de taxa e fica registrada no seu log de auditoria.

Criar uma chave retorna success, mas não a chave em si. Crie, liste para encontrar o id dela e depois revele. Atualizar uma chave retorna o objeto atualizado, mas envie o objeto inteiro: apenas cross_group_retry, group_mapping e auto_groups sobrevivem a uma omissão, e qualquer outro campo omitido é regravado vazio.

Seu próprio histórico de requisições é paginado e pode ser filtrado.

bash
curl -G https://api.unorouter.com/api/log/self \
  -H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN" \
  -d p=1 \
  -d page_size=100 \
  -d type=2 \
  -d start_timestamp=1789344000 \
  -d model_name=glm-5.3
ParâmetroSignificado
type1 recarga, 2 consumo, 3 gerenciamento, 5 erro, 6 estorno, 7 login. Omita para obter tudo.
start_timestamp, end_timestampSegundos Unix. Os dois não podem abranger mais de dez anos.
model_name, token_name, groupRestringir a um modelo, uma chave ou um grupo de provedores.
request_id, upstream_request_idEncontrar uma requisição específica, pelo nosso id ou pelo do provedor.

Adicione p e page_size para paginar, com o tamanho de página limitado a 100. Um endpoint irmão, /api/log/self/stat, retorna apenas os totais para os mesmos filtros: gasto, requisições por minuto e tokens por minuto.

Para ler o saldo restante de uma chave sem um token de acesso, autentique-se com a própria chave:

bash
curl https://api.unorouter.com/api/usage/token/ \
  -H "Authorization: Bearer $UNOROUTER_API_KEY"
json
{
  "object": "token_usage",
  "name": "SillyTavern",
  "total_granted": 500000,
  "total_used": 231900,
  "total_available": 268100,
  "unlimited_quota": false,
  "model_limits_enabled": false,
  "expires_at": 0
}

Os endpoints de conta encapsulam o payload. Os paginados encapsulam duas vezes.

json
{ "success": true, "message": "", "data": { ... } }

{ "success": true, "message": "", "data": {
    "page": 1, "page_size": 20, "total": 137, "items": [ ... ]
} }

Os endpoints públicos do catálogo são a exceção e retornam o objeto diretamente, sem invólucro.

A maioria das falhas ainda responde HTTP 200 com success igual a false e uma mensagem explicando o motivo. Verifique esse campo em vez do código de status.

A autenticação é a exceção e responde com um status real: 401 com AUTH_UNAUTHORIZED para uma credencial inválida, AUTH_TOKEN_EXPIRED para uma vencida, AUTH_SESSION_REVOKED depois de um logout, e 403 AUTH_INSUFFICIENT_PRIVILEGE quando a conta não pode chamar aquela rota.