PollarPollar
Core Concepts

Funding Modes

Every Stellar account requires a minimum XLM reserve to exist on-chain. Pollar gives you two modes to control exactly when that reserve is funded — so you only pay for users who matter to your app.

Configure the funding mode from Dashboard → Configuration → Funding Mode. No code changes required.


The two modes

ModeXLM costActivation triggerBest for
Immediate~2 XLM per registrationAutomatic on loginApps without compliance requirements
Deferred~2 XLM per activation onlyWebhook from your backendNeobanks, remittance apps, KYC-gated products

In both modes, any individual wallet can also be activated manually from Dashboard → Wallet Infrastructure → Wallets → Activate. This is useful as a fallback or for support workflows.

How the ~2 XLM is calculated: Every Stellar account requires a base reserve of 1 XLM. Each trustline (asset) you configure in the Dashboard adds 0.5 XLM:

1 XLM + (number of configured assets × 0.5 XLM)

Assets configuredReserve required
01 XLM
1 (e.g. USDC)1.5 XLM
2 (e.g. USDC + EURC)2 XLM
32.5 XLM

Pollar does not charge extra — the full amount is consumed from your funding wallet.

References: Minimum Balance · Trustlines


Immediate

The wallet is funded atomically at the moment the user logs in. Ready in under 3 seconds. No additional setup required.

Cost: ~2 XLM per registration, including users who abandon onboarding.

const { login, wallet } = usePollar();
await login({ provider: 'google' });
// wallet is funded and ready immediately

Deferred

The G-address is created on-chain at registration but without an XLM reserve. The wallet exists but cannot transact until it is activated.

Cost: ~2 XLM only for users who complete activation. Zero cost for users who abandon.

This mode solves a problem unique to Stellar: every account needs a minimum XLM reserve to exist on-chain. Without deferred funding, an app with 10,000 users who abandon onboarding burns 20,000 XLM for nothing.

Activating via webhook

Your backend calls POST /activate when a business event occurs — KYC approved, first deposit, email verified, or any trigger you define.

POST https://api.pollar.xyz/wallets/activate
Authorization: Bearer sec_testnet_xxxxxxxxxxxxxxxxxxxx
Content-Type: application/json

{
  "walletId": "wal_abc123"
}

The Pollar Server retries until it receives a 200 response.

Never call POST /activate from the client. It requires your secret key and must run on your backend.

Response codes:

CodeMeaning
200 OKWallet activated. XLM reserve funded on-chain.
400 Bad RequestMissing or malformed walletId.
402 Payment RequiredFunding wallet has insufficient XLM.
404 Not FoundwalletId does not exist in your app.
409 ConflictWallet is already active. Safe to ignore.
503 Service UnavailableStellar network issue. Pollar retries automatically.

Activating manually from the Dashboard

Any wallet in pending status can be activated from Dashboard → Wallet Infrastructure → Wallets → Activate. This works in both Immediate and Deferred mode and is useful for support workflows or one-off overrides.

Checking wallet status

const { wallet } = usePollar();

if (wallet?.status === 'pending') {
  // wallet exists but is not yet funded — show KYC flow
}

if (wallet?.status === 'active') {
  // wallet is funded and ready to transact
}

Switching modes

You can switch funding modes at any time from the Dashboard without changing any code. The new mode applies to all wallets created after the switch. Existing wallets are not affected.


Cost comparison

For an app with 10,000 registered users where 30% complete activation:

ModeXLM spentCost basis
Immediate~20,000 XLMEvery registration
Deferred~6,000 XLMOnly activated users
Savings~14,000 XLM

The Dashboard shows a real-time cost breakdown per mode so you can optimize as your app grows.

On this page

Was this helpful?