Why Gas Station exists
A newly generated machine has zero balance. Before it can activate (which bonds PEAQ on a subscription tier under Economics 2.0, or 1 PEAQ under Tokenomics 1.0), it needs native tokens for . Gas Station solves this bootstrap problem: the enrolls in 2FA once, then funds each machine wallet with a single call. Gas Station funds peaq wallets only. The Solana owner wallet of a machine homed on Solana needs SOL for fees and rent, which you fund yourself (Solana onboarding).2FA setup flow
1
Initiate 2FA enrollment
Call
setupFaucet2FA with the owner’s address. The faucet returns an otpauthUri for manual entry and a qrImageUrl for scanning.2
Scan QR code with authenticator app
Open any TOTP-compatible authenticator (Google Authenticator, Authy, 1Password). Scan the QR code or manually enter the
otpauthUri. The QR image expires after approximately 2 minutes.3
Confirm 2FA activation
Submit the current TOTP code from the authenticator app to activate 2FA for this owner address.
Funding a machine wallet
After 2FA is active, fund any machine wallet withfundFromGasStation. The response is a discriminated union: either success (transfer landed) or skipped (wallet already funded).
Success response
Skipped response
The Python SDK does not return the idempotency key. If you need it for retry recovery, pass
request_id in explicitly and hold the value yourself.
Rate limits and caps
Gas Station enforces three independent throttles to prevent abuse, plus a per-chain minimum balance threshold that decides whether a funding request transfers anything at all. The cap values, rate-limit windows, and minimum gas balance are configured server-side, so branch on the error codes and theskipped status rather than hard-coding numbers.
Error codes
Gas Station defines 20 error codes. Not every endpoint can raise every code; the subset depends on what the endpoint actually does. The three endpoints arePOST /2fa/setup (setupFaucet2FA / setup_faucet_2fa), POST /2fa/confirm (confirmFaucet2FA / confirm_faucet_2fa), and POST /faucet/fund (fundFromGasStation / fund_from_gas_station).
For SDK-owned message strings and HTTP status codes per code, see errors.
Cross-links
- JS SDK faucet methods documents
setupFaucet2FA,confirmFaucet2FA, andfundFromGasStation - Python SDK faucet methods documents the Python equivalents
- Self-managed onboarding guide shows Gas Station in the full registration flow

