Passer au contenu principal
Un agent IA qui contrôle un portefeuille sur Base peut générer sa propre clé API Venice sans intervention humaine. L’agent acquiert du VVV, le stake, signe un token de validation à courte durée de vie émis par Venice, et renvoie le token signé pour recevoir une nouvelle clé API liée au portefeuille de staking. Ce guide parcourt l’ensemble du flux de bout en bout et couvre les options de financement pour effectivement payer l’inférence une fois la clé créée.

Prérequis

  • Un portefeuille EVM sur Base contrôlé par l’agent (clé privée dans une variable d’environnement ou un gestionnaire de secrets).
  • Une petite quantité d’ETH sur Base pour les frais de gas (le staking est constitué de deux transactions : approve puis stake).
  • Une quantité non nulle de VVV à staker. L’endpoint de création requiert seulement que le portefeuille ait un solde sVVV non nul, donc 1 VVV suffit pour générer une clé. Voir Payer pour l’inférence pour ce dont vous avez réellement besoin pour appeler les endpoints payants.
Utilisez un portefeuille agent dédié plutôt qu’un portefeuille de trésorerie. La clé privée du portefeuille signe chaque demande de token Venice, son rayon d’impact doit donc être limité.

Étapes

1

Acquérir du VVV

Envoyez du VVV au portefeuille de l’agent, ou faites en sorte que l’agent le swap sur un DEX comme Aerodrome ou Uniswap.Contrat du token VVV sur Base : 0xacfE6019Ed1A7Dc6f7B508C02d1b04ec88cC21bf
2

Staker du VVV avec Venice

Stakez le VVV dans le Smart Contract de Staking Venice à l’adresse 0x321b7ff75154472B18EDb199033fF4D116F340Ff. Il s’agit de deux transactions :
  1. approve(spender, amount) sur le token VVV, où spender est le contrat de staking.
  2. stake(amount) sur le contrat de staking.
Smart Contract Staking
Lorsque la deuxième transaction est confirmée, le solde VVV du portefeuille diminue et son solde sVVV augmente du même montant. L’endpoint de création lit le solde sVVV pour confirmer que le portefeuille est staké.
3

Demander un token de validation

Appelez GET /api/v1/api_keys/generate_web3_key pour obtenir un token à courte durée de vie signé par Venice. L’endpoint n’est pas authentifié.
curl --request GET \
  --url https://api.venice.ai/api/v1/api_keys/generate_web3_key
La réponse contient un champ token. Le token expire 15 minutes après son émission, signez-le donc et soumettez-le bien avant.
4

Signer le token avec le portefeuille de staking

Signez la chaîne brute du token avec le portefeuille qui détient le VVV staké. Il s’agit d’un personal_sign standard sur les octets du token. À la fois ethers.Wallet.signMessage(token) et account.signMessage({ message: token }) de viem produisent la signature correcte.
5

Créer la clé API

Faites un POST de l’adresse, de la signature et du token au même endpoint, avec le type de clé que vous souhaitez.
curl --request POST \
  --url https://api.venice.ai/api/v1/api_keys/generate_web3_key \
  --header 'Content-Type: application/json' \
  --data '{
    "address": "<wallet address>",
    "signature": "<signed token>",
    "token": "<unsigned token>",
    "apiKeyType": "INFERENCE",
    "description": "Agent key minted on <date>"
  }'
Champs requis : address, signature, token, apiKeyType (INFERENCE ou ADMIN).Champs optionnels : description, expiresAt, consumptionLimit (plafonne la dépense totale sur cette clé, libellée en usd, vcu ou diem).En cas de succès, la réponse contient la chaîne apiKey créée. Stockez-la dans le secret store de l’agent et utilisez-la comme un token Bearer normal (Authorization: Bearer <key>).

Exemple de bout en bout

L’exemple ci-dessous utilise un vrai portefeuille depuis une variable d’environnement plutôt qu’un portefeuille généré aléatoirement. Un portefeuille aléatoire n’a pas de VVV staké et la création sera rejetée avec l’erreur Wallet has no staked VVV on Base.
import { ethers } from "ethers"

const wallet = new ethers.Wallet(process.env.WALLET_PRIVATE_KEY!)
const address = wallet.address

const tokenResponse = await fetch("https://api.venice.ai/api/v1/api_keys/generate_web3_key")
const { data: { token } } = await tokenResponse.json()

const signature = await wallet.signMessage(token)

const mintResponse = await fetch("https://api.venice.ai/api/v1/api_keys/generate_web3_key", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    address,
    signature,
    token,
    apiKeyType: "INFERENCE",
    description: "Agent key",
  }),
})

const result = await mintResponse.json()
if (!mintResponse.ok) {
  throw new Error(`Mint failed: ${result.error}`)
}

console.log("Minted key:", result.data.apiKey)

Référence des erreurs

L’endpoint renvoie des messages d’erreur spécifiques et exploitables. Mappez-les dans l’agent pour qu’il puisse décider de réessayer, demander un nouveau token ou s’arrêter.
StatutLe message d’erreur contientCe que cela signifieQue faire
400Invalid wallet addressLe champ address n’est pas une adresse EVM valide.Corrigez l’adresse et resoumettez.
400JWT has expiredLe token de validation a expiré avant que vous ne le signiez et le soumettiez.Demandez un nouveau token, signez-le et soumettez-le immédiatement.
400JWT signature is invalidLe token n’a pas été signé par Venice (probablement modifié ou fabriqué).Utilisez toujours un nouveau token de l’endpoint GET.
400JWT claims are invalidL’émetteur ou l’audience du token ne correspond pas à ce que Venice attend.Utilisez le token non modifié renvoyé par l’endpoint GET.
400JWT is malformedLe token soumis n’est pas un JWT.Assurez-vous d’envoyer exactement la chaîne token renvoyée par l’endpoint GET.
400Wallet signature does not matchLa signature ne correspond pas à l’address pour le token donné.Signez les octets bruts du token avec le portefeuille qui possède address.
400Could not verify wallet signatureL’appel RPC pour vérifier la signature a échoué (transitoire).Réessayez avec backoff.
400Wallet has no staked VVV on BaseLe portefeuille a un solde sVVV nul.Stakez d’abord du VVV, puis réessayez.

Payer pour l’inférence

Générer une clé et pouvoir appeler des endpoints payants avec elle sont deux choses distinctes. Une clé fraîchement créée s’authentifie correctement mais ne peut pas appeler les endpoints payants (comme /chat/completions) tant que le compte du portefeuille n’a pas un solde dépensable. La clé créée peut dépenser depuis le compte utilisateur dans cet ordre de priorité : DIEM, puis crédits groupés, puis USD.
Source de financementAutonome ?Comment
DIEM depuis le staking VVVOuiL’allocation quotidienne de DIEM du portefeuille est proportionnelle à sa part dans le pool de staking. Le compte a besoin d’au moins 0,1 DIEM staké pour que tout DIEM soit dépensable. Les enjeux plus importants rapportent proportionnellement plus de DIEM quotidiens, rafraîchis à chaque epoch (00:00 UTC).
USD via StripeNon (navigateur)Connectez-vous à venice.ai avec le même portefeuille (Sign-In-With-Ethereum). Le tableau de bord trouve l’enregistrement utilisateur existant. Ajoutez des crédits dans Settings, API.
Abonnement crypto CoinbaseNon (navigateur)Même connexion par portefeuille, puis abonnez-vous via le tableau de bord. Le flux redirige vers Coinbase Commerce pour le paiement effectif, il ne peut donc pas être piloté depuis un script.
Onramp CoinbaseNon (navigateur)Même connexion par portefeuille, puis utilisez le widget onramp dans le tableau de bord. Hébergé sur l’UI de Coinbase.
Si l’agent a besoin d’un chemin de financement entièrement crypto-natif et headless, les options les plus propres sont :
  1. Staker plus de VVV pour que l’allocation quotidienne de DIEM couvre la dépense de l’agent. La clé créée le récupère automatiquement.
  2. Utiliser le flux portefeuille x402 au lieu de la clé API. Avec x402, l’agent signe un message Sign-In-With-X par requête, recharge directement avec de l’USDC sur Base ou Solana via POST /api/v1/x402/top-up, et paie par requête. Le solde USDC x402 est lié au portefeuille, pas à l’utilisateur, donc il n’apparaît pas comme solde pour la clé Bearer créée, mais cela permet au même portefeuille de payer l’inférence de manière programmatique.

Ressources connexes

Crypto et agents

Utilisez Venice à la fois comme fournisseur de modèle et comme couche RPC blockchain pour les agents autonomes.

Authentification par portefeuille x402

Payez par requête avec de l’USDC sur Base ou Solana, sans clé API requise.

Endpoint de génération de clé API Web3

Référence de l’endpoint pour l’endpoint de création.

Guide de clé API standard

Pour les utilisateurs qui préfèrent générer une clé depuis le tableau de bord.