사전 요구 사항
- 에이전트가 제어하는 Base의 EVM 지갑(환경 변수 또는 시크릿 매니저의 비공개 키).
- 가스를 위한 Base의 소량의 ETH (스테이킹은 두 개의 트랜잭션입니다:
approve후stake). - 스테이킹할 VVV의 0이 아닌 양. 발행 엔드포인트는 지갑에 0이 아닌 sVVV 잔액만 있으면 되므로, 1 VVV로도 키를 발행하기에 충분합니다. 실제로 유료 엔드포인트를 호출하는 데 필요한 것은 추론 비용 지불을 참조하세요.
단계
1
2
Venice에 VVV 스테이킹
0x321b7ff75154472B18EDb199033fF4D116F340Ff의 Venice Staking Smart Contract에서 VVV를 스테이킹합니다. 이는 두 개의 트랜잭션입니다:- VVV 토큰에서
approve(spender, amount), 여기서spender는 스테이킹 컨트랙트입니다. - 스테이킹 컨트랙트에서
stake(amount).

3
지갑용 챌린지 요청
단기 EIP-4361(Sign-In with Ethereum) 챌린지를 받으려면 응답에는 챌린지는 발급 후 15분이 지나면 만료되며 일회용입니다. 해당 챌린지로 키를 처음 발행할 때 소비되므로, 키마다 새 챌린지를 요청하세요.
GET /api/v1/api_keys/generate_web3_key?address=<wallet address>를 호출하세요. 엔드포인트는 인증되지 않지만, 챌린지는 전달한 주소에 바인딩되며 해당 지갑만 사용할 수 있습니다.message, nonce, expiresAt이 포함됩니다:4
스테이킹 지갑으로 챌린지 서명
스테이킹된 VVV를 보유한 지갑으로
message 문자열을 그대로 서명합니다. 표준 personal_sign입니다. ethers.Wallet.signMessage(message)와 viem의 account.signMessage({ message })는 모두 올바른 서명을 생성합니다.메시지를 다시 포맷하거나 줄바꿈을 바꾸거나 재생성하지 마세요. Venice는 발급한 정확한 바이트에 대해 서명을 검증하고, 그 안의 domain, URI, Chain ID, 설명 문구, 주소를 별도로 다시 확인합니다.5
API 키 발행
원하는 키 유형과 함께 주소, 서명, 메시지를 동일한 엔드포인트에 필수 필드:
POST합니다.address, signature, message, apiKeyType (INFERENCE 또는 ADMIN).선택적 필드: description, expiresAt, consumptionLimit (이 키의 총 지출을 usd, vcu 또는 diem으로 표시되는 단위로 제한).성공 시 응답에는 발행된 apiKey 문자열이 포함됩니다. 에이전트의 시크릿 저장소에 저장하고 일반 Bearer 토큰으로 사용하세요 (Authorization: Bearer <key>).종단 간 예제
아래 예제는 임의로 생성된 지갑이 아닌 환경 변수의 실제 지갑을 사용합니다. 임의 지갑에는 스테이킹된 VVV가 없으며 발행은Wallet has no staked VVV on Base 오류로 거부됩니다.
오류 참조
엔드포인트는 구체적이고 실행 가능한 오류 메시지를 반환합니다. 에이전트에서 이를 매핑하여 재시도, 새 챌린지 요청 또는 중지 여부를 결정할 수 있도록 하세요.챌린지가 지갑에 바인딩되고 일회용인 이유
챌린지는 불투명한 토큰이 아니라 사람이 읽을 수 있는 EIP-4361 메시지이며, 자신의 에이전트 외부에서 지갑에 서명이 요청되는 상황에 대비한 세 가지 보호 장치를 갖추고 있습니다.- 주소 바인딩. 챌린지에는 발급 대상 지갑이 명시됩니다. 한쪽이 획득한 챌린지를 다른 지갑이 서명해 사용할 수 없습니다.
- 일회용 nonce. Venice는 서버에서 nonce를 추적하고 첫 발행 성공 시 소비합니다. 서명 하나로 정확히 키 하나만 발행되므로, 탈취된 서명을 재사용해 추가 키를 만들 수 없습니다.
- 읽을 수 있는 설명 문구. 메시지에 서명이 Venice API 키 생성을 승인한다는 점이 명확히 적혀 있어, MetaMask 같은 지갑 UI가 서명자에게 바이너리 덩어리 대신 승인 내용을 보여줍니다.
추론 비용 지불
키를 발행하는 것과 그 키로 유료 엔드포인트를 호출할 수 있는 것은 별개의 두 가지 일입니다. 새로 발행된 키는 올바르게 인증되지만, 지갑의 계정에 사용 가능한 잔액이 있을 때까지 유료 엔드포인트(예:/chat/completions)를 호출할 수 없습니다.
발행된 키는 다음 우선순위 순서로 사용자 계정에서 지출할 수 있습니다: DIEM, 그 다음 번들 크레딧, 그 다음 USD.
에이전트가 완전히 크립토 네이티브하고 헤드리스한 자금 조달 경로가 필요한 경우, 가장 깔끔한 옵션은 다음과 같습니다:
- 더 많은 VVV를 스테이킹하여 일일 DIEM 할당이 에이전트의 지출을 충당하도록 합니다. 발행된 키는 이를 자동으로 가져옵니다.
- API 키 대신 x402 지갑 흐름을 사용하세요. x402를 사용하면 에이전트는 요청당 Sign-In-With-X 메시지에 서명하고,
POST /api/v1/x402/top-up을 통해 Base 또는 Solana의 USDC로 직접 충전하며, 요청당 지불합니다. x402 USDC 잔액은 사용자가 아닌 지갑에 바인딩되므로 발행된 Bearer 키에 대해 잔액으로 표시되지 않지만, 동일한 지갑이 프로그래밍 방식으로 추론 비용을 지불할 수 있도록 합니다.
관련 리소스
크립토와 에이전트
자율 에이전트를 위한 모델 제공자와 블록체인 RPC 계층 모두로 Venice를 사용하세요.
x402 지갑 인증
API 키 없이 Base 또는 Solana의 USDC로 요청당 지불하세요.
Web3 API 키 엔드포인트 생성
발행 엔드포인트에 대한 엔드포인트 참조.
표준 API 키 가이드
대시보드에서 키 발행을 선호하는 사용자를 위해.