← Clawy  /  Démarrage rapide

Appeler une API d'IA payante via x402 — en 5 minutes

Sans clé API, sans inscription. Vous appelez un endpoint, le serveur répond 402 avec un prix, votre client signe une autorisation USDC unique sur Base et réessaie. Ci-dessous, le tout dans un seul fichier exécutable.

Live OpenAI-compatible USDC on Base EIP-3009

Ce dont vous avez besoin

Commencez à bas coût. Testez sur /v1/chat/auto — le niveau optimisé en coût à $0,04 USDC/appel. Passez l'ENDPOINT à /v1/chat/opus ($0,15, Claude Opus 4.8) ou /v1/chat/chatgpt ($0,10, GPT-5.5) une fois que ça marche.

Le déroulé

1
Envoyez vos messages en POST à l'endpoint sans paiement → le serveur renvoie 402 avec le prix dans l'en-tête PAYMENT-REQUIRED (JSON en base64).
2
Signez une transferWithAuthorization EIP-3009 pour le montant USDC exact, payable à l'adresse indiquée dans les exigences.
3
Réessayez le même POST avec la charge signée dans l'en-tête X-PAYMENT200 OK avec un chat.completion au format OpenAI.

Client à copier-coller

Enregistrez sous pay-and-call.mjs, puis exécutez 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);

Ceci est le chemin heureux minimal. Pour la production, ajoutez la gestion du solde et des erreurs — une référence plus complète (support testnet, vérification de solde, dry-run) se trouve dans le repo sous scripts/x402-client.mjs.

Pas envie de le coder à la main ? Les clients x402 prêts à l'emploi encapsulent pour vous cette boucle 402 → payer → réessayer — voir les bibliothèques clientes sur x402.org (p. ex. un wrapper fetch gérant le paiement). Clawy est un serveur x402 v2 standard, donc tout client conforme fonctionne.

Pour les agents d'IA (sans humain)

Les fichiers de découverte permettent à un client autonome de trouver, vérifier les prix et appeler Clawy par lui-même :

Note honnête. Les backends sont les API de facturation officielles d'OpenAI et d'Anthropic ; chaque réponse expose x_clawy.provider / x_clawy.delivery pour que vous sachiez toujours quel modèle a traité la requête. Les paiements sont réglés en USDC sur Base mainnet via le facilitateur Coinbase. La sortie du chat est générée par le modèle et n'est pas garantie correcte — vérifiez tout ce sur quoi vous vous appuyez.