Skip to main content
Version: v4

Faucet API

Base path /v1. Bodies are JSON; amounts are base-denom integers as strings (1 VNA is 1 000 000 uvna). Source: Faucet v4 specification and the verana-faucet README.

MethodPathAuthPurpose
GET/v1/infononeChain id, faucet address and balance, limits, default amount, global remaining, availability, auth parameters
POST/v1/auth/challengenone{ account } returns { nonce, expiresAt }
POST/v1/auth/tokennone{ account, pubKey, signature, nonce } returns { token, expiresAt, account }; the signature is over verana-faucet-auth:<nonce> (ADR-036)
GET/v1/quotabearerHour, day and global windows for the token's account, nextAmount
POST/v1/faucetbearer{ amount? } sends to the token's account; 200 confirmed with txHash, height, amount, quota; 202 when inclusion is still pending
GET/health, /metricsnoneLiveness; Prometheus

Errors use one envelope { "error": { "code", "message", "details" } }:

CodeStatusMeaning
INVALID_REQUEST, INVALID_ACCOUNT400Malformed body or address
AUTH_FAILED, UNAUTHORIZED401Challenge verification failed; token missing or expired
RATE_LIMITED429Per-IP budget exceeded, Retry-After set
QUOTA_EXCEEDED429Per-account or global quota; details.window names the binding window
TX_FAILED, NODE_ERROR502Transaction failed on chain; node error
FAUCET_UNAVAILABLE503Low balance or node unreachable

The public testnet faucet is listed on Environments and endpoints.