Surface Map
The Monaco testnet faucet is different from the Sei gas faucet. Users still need testnet SEI in their wallet for deposit and withdrawal transactions.
Flow
1
Connect and authenticate
Create a Monaco session for the connected wallet. The faucet endpoint requires Monaco request signing.
2
Request faucet assets
Call the faucet once the user has access to the testnet environment.
mint() requires a turnstileToken — a Cloudflare Turnstile captcha token proving the request came from a real client. Requests without a valid token are rejected.3
Handle success or a thrown error
mint() resolves only when every token confirms on-chain — read minted for the confirmed tokens. If the mint is rate-limited, fails, partially confirms, or the faucet is unavailable, mint() throws instead of resolving; handle it in a try/catch.4
Refresh balances
Refresh wallet balances and Monaco balances before prompting the user to deposit or trade.
TypeScript SDK
REST
POST /api/v1/faucet/mint requires Monaco authentication headers. The request body carries a single required turnstileToken field (Cloudflare Turnstile captcha); requests without a valid token are rejected with HTTP 400.
200 is returned only when every token confirms on-chain — the failed array is empty and remainingRequests24h reports the remaining quota in the current 24 hour window. A 429 means the daily quota is exhausted, 502 means one or more mints failed or only partially confirmed (the error body carries the minted/failed breakdown, and delivered legs still consume the quota), and 503 means the faucet is temporarily unavailable and is safe to retry.
Check quota
Callsdk.faucet.getInfo() (GET /api/v1/faucet/info, session-authenticated) to read the wallet’s quota before minting — so you can show remaining requests and the next-available time instead of provoking a 429. Quota is per wallet and app — the same wallet has its own quota on each app — and uses the same rolling-window accounting as mint() enforcement.
remainingRequests24h, dailyLimit, an optional nextAvailableAt (ISO 8601 — when the next request frees under the current daily limit; omitted when the rolling 24h window is empty or the limit is 0), and up to five recentRequests from the calling application (each with requestedAt and a minted array). Each minted entry is a single on-chain deposit: a faucet mint credits spot and margin separately, so one request yields a spot USDC entry and a margin USDC (margin) entry, each with its own amount. Each entry also carries its own txHash, which is optional — it is absent when that leg’s transaction was submitted but never confirmed, so handle a missing hash. nextAvailableAt is not a fixed calendar-day reset.
Rate Limits
The testnet faucet is rate-limited per authenticated wallet and app: the same wallet signed in to another app has its own quota there. Every mint call counts against the limit within a rolling 24 hour window (the default limit is one request). A429 means the wallet has used its quota on this app for the current window; getInfo()’s nextAvailableAt tells you when the next request frees.
Builder UI should treat rate limits as recoverable:
- Show the user that assets may already exist in their wallet.
- Refresh wallet and Monaco balances before showing an error.
- Explain that the faucet can be tried again after the current window resets.
- Do not block the user from depositing existing testnet assets.
Builder Checklist
- Check
window.ethereumexists before starting wallet-authenticated faucet flows. - Switch the wallet to Sei testnet before asking the user to sign.
- Handle
401as an expired or missing Monaco session. - Handle
429as rate-limited, not as a broken wallet. - Call
getInfo()beforemint()to show remaining quota and the next-available time. - Wrap
mint()in atry/catch: a resolve means every token confirmed on-chain; a throw is429(quota),502(failed/partial), or503(unavailable, retry). - After faucet completion, guide the user to Vault if they need to deposit assets into Monaco.

