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 → Treasury → 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 → Users → Wallets (Fund 2 XLM). 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, isAuthenticated } = usePollar();
await login({ provider: 'google' });
// once isAuthenticated is true, the 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 /v1/wallets/activate when a business event occurs — KYC approved, first deposit, email verified, or any trigger you define.

POST https://api.pollar.xyz/v1/wallets/activate
x-pollar-api-key: sec_testnet_xxxxxxxxxxxxxxxxxxxx
Content-Type: application/json

{
  "publicKey": "GXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

Never call this endpoint from the client. It requires your secret key and must run on your backend. See the Server API reference.

Response codes:

CodeMeaning
200 OKWallet activated. XLM reserve funded on-chain.
400 Bad RequestMissing or malformed publicKey.
402 Payment RequiredFunding wallet has insufficient XLM.
404 Not FoundpublicKey is not a wallet owned by your app.
409 ConflictWallet is already funded. Safe to ignore.
503 Service UnavailableStellar network issue.

Funding manually from the Dashboard

Any not-yet-funded wallet can be funded from Dashboard → Users → Wallets with the Fund 2 XLM action. This works in both Immediate and Deferred mode and is useful for support workflows or one-off overrides.

Checking whether a wallet is funded

The funded state is reflected on-chain. From an authenticated session you can read the wallet's balances — an unfunded wallet has no XLM reserve yet:

const { walletBalance, refreshWalletBalance } = usePollar();

await refreshWalletBalance();
if (walletBalance.step === 'loaded') {
  // inspect walletBalance.data.balances to see if the reserve / assets are present
}

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?