Pague por requisição (x402)
Um agente com uma carteira de criptomoedas pode usar o UberLLM sem conta e sem API key. Ele paga por cada requisição em USDC na Base, usando o padrão de pagamento aberto x402 (versão 2).
Isso funciona para chat: POST /v1/chat/completions e POST /v1/messages. Imagens, vídeo, música e fala ainda precisam de uma key.
Para verificar se o pagamento por requisição está ativado, abra api.uberllm.dev/x402. Ele mostra a rede, o contrato USDC e a carteira que recebe o pagamento. Se a resposta for "404 not found", o pagamento por requisição está desativado. Use uma key em vez disso (Quickstart).
Como funciona
- Envie a requisição sem chave. A resposta é HTTP 402 Payment Required. O cabeçalho
PAYMENT-REQUIRED(JSON base64, também no corpo) informa o custo máximo da requisição e quais formas de pagamento são aceitas. - Sua carteira assina uma dessas opções. Envie a mesma requisição novamente com a assinatura no cabeçalho
PAYMENT-SIGNATURE. - UberLLM verifica o pagamento, responde e então coleta o pagamento. Uma resposta normal (não-streaming) vem com o recibo no cabeçalho
PAYMENT-RESPONSE, que inclui a transação on-chain.
Cada assinatura paga por uma requisição. Para fazer outra requisição, assine novamente.
O que você paga
O 402 orça o valor máximo que a requisição pode custar. Isso é o seu prompt mais max_tokens de saída, pela rota mais cara que a requisição pode seguir. Defina max_tokens para manter o orçamento baixo.
Existem duas formas de pagar:
upto(oferecido primeiro). Você assina o orçamento como um teto. Após a resposta, apenas o custo real é cobrado, arredondado para o próximo milionésimo de dólar. O primeiro pagamento precisa de uma aprovação única de USDC. Onde o serviço de pagamento suporta, essa aprovação não precisa de gas.exact. O valor total orçado é cobrado, mesmo que a requisição tenha usado menos. Nada é reembolsado. Escolhaexactapenas se sua carteira não puder fazerupto.
Você nunca é cobrado mais do que o valor que assinou. Se nada for servido (nenhum modelo disponível, um erro antes do início da resposta), nada é cobrado.
Experimente com curl
curl -i https://api.uberllm.dev/v1/chat/completions \
-H 'content-type: application/json' \
-d '{"model":"deepseek/deepseek-v4-flash","max_tokens":200,"messages":[{"role":"user","content":"Hello"}]}'
# HTTP/1.1 402 Payment Required
# PAYMENT-REQUIRED: eyJ4NDAyVmVyc2lvbiI6Mi…
#
# {"x402Version":2,"error":"PAYMENT-SIGNATURE header is required",
# "accepts":[{"scheme":"upto","network":"eip155:8453","amount":"…","asset":"0x8335…2913","payTo":"0x…",…},
# {"scheme":"exact",…}]}
amount está em unidades base USDC: 1,000,000 é $1. Assine uma entrada de accepts com sua carteira. Em seguida, envie a mesma requisição novamente com -H 'PAYMENT-SIGNATURE: <base64 payment>'.
Do código
Uma biblioteca cliente x402 faz a assinatura 402, e a retentativa para você. Em JavaScript:
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount(process.env.WALLET_PRIVATE_KEY as `0x${string}`);
const pay = wrapFetchWithPaymentFromConfig(fetch, {
schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],
});
const res = await pay("https://api.uberllm.dev/v1/chat/completions", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
model: "deepseek/deepseek-v4-flash",
max_tokens: 200,
messages: [{ role: "user", content: "Hello" }],
}),
});
console.log(await res.json());
Para pagar apenas o custo real, registre também UptoEvmScheme de @x402/evm/upto/client. Bibliotecas para Go e Python estão listadas em x402.org.
Bom saber
- Streaming funciona. Com
"stream": true, a resposta é transmitida (streamed) normalmente. O pagamento é coletado quando o streaming termina. Não há headerPAYMENT-RESPONSE, porque os headers já foram enviados. Sua carteira mostra a transferência. - Uma carteira, no máximo 4 requisições pagas por vez.
- Se um pagamento não puder ser coletado após a resposta (por exemplo, a carteira foi esvaziada nesse meio tempo), uma resposta normal é retida e você recebe
402 payment_failed. Essa carteira então não poderá pagar por 24 horas. - A versão 1 x402 (header
X-PAYMENT) não é aceita. Use um cliente de versão 2. - Muitas requisições? Uma conta com crédito pré-pago é mais simples e não tem etapa on-chain: cadastre-se.
Erros
| HTTP | significado | faça |
|---|---|---|
402 + PAYMENT-REQUIRED |
sem pagamento, ou o pagamento foi recusado (o campo error explica o motivo) |
assine um de accepts e tente novamente |
402 payment_failed |
a resposta estava pronta, mas o pagamento não pôde ser coletado | adicione fundos à carteira; essa carteira pode pagar novamente em 24 horas |
400 invalid_payment |
PAYMENT-SIGNATURE não é um pagamento base64 x402 v2 |
corrija o cliente |
429 rate_limited |
4 requisições pagas já em execução desta carteira | espere uma terminar |
503 service_unavailable |
o serviço de pagamento está temporariamente fora do ar | tente novamente em um minuto |