← Clawy  /  Inicio rápido

Llama a una API de IA de pago vía x402 — en 5 minutos

Sin clave API, sin registro. Golpeas un endpoint, el servidor responde 402 con un precio, tu cliente firma una autorización USDC única en Base y reintenta. Abajo está todo en un único archivo ejecutable.

Live OpenAI-compatible USDC on Base EIP-3009

Qué necesitas

Empieza barato. Prueba contra /v1/chat/auto — el nivel optimizado en coste a $0,04 USDC/llamada. Cambia el ENDPOINT a /v1/chat/opus ($0,15, Claude Opus 4.8) o /v1/chat/chatgpt ($0,10, GPT-5.5) cuando funcione.

El flujo

1
Envía tus mensajes por POST al endpoint sin pago → el servidor devuelve 402 con el precio en la cabecera PAYMENT-REQUIRED (JSON en base64).
2
Firma una transferWithAuthorization EIP-3009 por el importe exacto de USDC, pagadero a la dirección de los requisitos.
3
Reintenta el mismo POST con la carga firmada en la cabecera X-PAYMENT200 OK con un chat.completion con formato OpenAI.

Cliente para copiar y pegar

Guárdalo como pay-and-call.mjs y luego ejecuta X402_PRIVATE_KEY=0x... node pay-and-call.mjs:

// pay-and-call.mjs — pay Clawy in USDC over x402 and read the answer.
// Setup:  npm i viem
import { privateKeyToAccount } from "viem/accounts";
import { randomBytes } from "crypto";

const GATEWAY  = "https://clawy.uk";
const ENDPOINT = "/v1/chat/auto";  // cheapest tier: $0.04 USDC/call
const MESSAGE  = "Reply with exactly: HELLO";
const USDC     = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"; // USDC on Base
const CHAIN_ID = 8453;                                          // Base mainnet

const account = privateKeyToAccount(process.env.X402_PRIVATE_KEY);
const body = JSON.stringify({ messages: [{ role: "user", content: MESSAGE }] });
const headers = { "Content-Type": "application/json" };

// 1) Unpaid request -> 402 with the price in the PAYMENT-REQUIRED header
const r1 = await fetch(GATEWAY + ENDPOINT, { method: "POST", headers, body });
if (r1.status !== 402) throw new Error("expected 402, got " + r1.status);
const reqs = JSON.parse(Buffer.from(r1.headers.get("payment-required"), "base64").toString());
const a = reqs.accepts[0];   // { scheme:"exact", network, amount, payTo, ... }
console.log("price:", a.amount, "(6-dp USDC) ->", a.payTo);

// 2) Sign an EIP-3009 transferWithAuthorization for the exact amount
const nonce = "0x" + randomBytes(32).toString("hex");
const validBefore = BigInt(Math.floor(Date.now() / 1000) + 300); // valid 5 min
const signature = await account.signTypedData({
  domain: { name: "USD Coin", version: "2", chainId: CHAIN_ID, verifyingContract: USDC },
  types: { TransferWithAuthorization: [
    { name: "from", type: "address" }, { name: "to", type: "address" },
    { name: "value", type: "uint256" }, { name: "validAfter", type: "uint256" },
    { name: "validBefore", type: "uint256" }, { name: "nonce", type: "bytes32" },
  ] },
  primaryType: "TransferWithAuthorization",
  message: { from: account.address, to: a.payTo, value: BigInt(a.amount),
             validAfter: 0n, validBefore, nonce },
});

// 3) Build the X-PAYMENT header and retry -> 200 + OpenAI-shape response
const xPayment = Buffer.from(JSON.stringify({
  x402Version: 2, scheme: "exact", network: a.network,
  payload: { signature, authorization: {
    from: account.address, to: a.payTo, value: a.amount,
    validAfter: "0", validBefore: validBefore.toString(), nonce } },
})).toString("base64");

const r2 = await fetch(GATEWAY + ENDPOINT, {
  method: "POST", headers: { ...headers, "X-PAYMENT": xPayment }, body,
});
const out = await r2.json();
console.log(out.choices[0].message.content);  // -> HELLO
console.log("served by:", out.x_clawy?.provider);

Este es el camino feliz mínimo. Para producción añade gestión de saldo y de errores — una referencia más completa (soporte de testnet, comprobación de saldo, dry-run) está en el repo como scripts/x402-client.mjs.

¿No quieres hacerlo a mano? Los clientes x402 ya hechos envuelven por ti este mismo bucle 402 → pagar → reintentar — mira las librerías cliente en x402.org (p. ej. un wrapper de fetch con pagos). Clawy es un servidor x402 v2 estándar, así que cualquier cliente conforme funciona.

Para agentes de IA (sin humano)

Los archivos de descubrimiento permiten a un cliente autónomo encontrar, consultar precios y llamar a Clawy por sí mismo:

Nota honesta. Los backends son las API de facturación oficiales de OpenAI y Anthropic; cada respuesta expone x_clawy.provider / x_clawy.delivery para que siempre sepas qué modelo atendió la petición. Los pagos se liquidan en USDC en Base mainnet mediante el facilitador de Coinbase. La salida del chat es generada por el modelo y no se garantiza su corrección — verifica todo aquello en lo que confíes.