Docs
Everything PocketMoney does, in the order you will meet it. The short version: your family is a Squads v4 smart account, and the kid's allowance is a Squads spending limit.
Overview
Each family is a controlled Squads v4 multisig (program SQDS4ep65T869zMMBKyuUq6aD6EgTu8psMjkvj52pCf). The parent wallet is the config authority and a member with every permission, at threshold one. The kid key is a member with Initiate only: it can propose, never vote or execute.
The account has two vaults. Pot (vault 0) is funded by the parent and pays allowance. Savings (vault 1) is where the kid moves money they want to keep. There is no PocketMoney program and no PocketMoney key on the account.
Parent
Config authority. Funds, sets limits, approves.
Kid
Spends inside limits. Proposes anything else.
Keeper
Reads the chain every 10 minutes. Signs nothing.
Setting up
1. On the parent side, connect a wallet and sign a free sign-in message. 2. Name your kid and pick a weekly allowance. This makes a draft with a six-letter invite code. 3. Open the invite link on the kid's device, or paste a wallet address they already own. 4. Add friends to the allowlist and press Create the family account.
That one approval runs multisig_create_v2, creates USDC token accounts for both vaults, adds the spending limits with multisig_add_spending_limit, and sends 0.01 SOL to the kid key for fees. If it does not fit in one transaction the wallet asks once for all of them.
Kid keys
A kid key made in the browser is a normal Solana key from a 12-word phrase on the standard m/44'/501'/0'/0' path, so it imports into Phantom or Solflare later. The phrase stays in that browser's storage and is shown once for backup, as words or a QR code. Our servers never see it.
Kids who already have a wallet can use it instead. Either way the key pays its own network fees from the SOL the parent sends it; top it up from the dashboard when it runs low.
Limits and allowlist
Each limit is a Squads spending limit: a token (SOL or USDC), an amount, a period (day, week or month) and a list of destinations. Only the kid key can use it, through spending_limit_use. Squads checks the amount and destination on chain. Paying an address that is not listed fails with InvalidDestination; going over fails with SpendingLimitExceeded.
The Savings vault is always on the allowlist so saving works. Destinations cannot be edited on an existing limit, so Save to chain removes the old limits and adds new ones in the same approval. Rent from removed limits comes back to you.
Limits refill on a rolling period from when they were created, not on a calendar day. The dashboard shows the next refill.
Requests
When the kid wants more than the limit, a new friend, or money out of Savings, the app builds a transfer from the right vault and wraps it with vault_transaction_create plus proposal_create. You approve from the dashboard, which sends proposal_approve and vault_transaction_execute together, or reject with proposal_reject. A request costs the kid key about 0.0065 SOL of rent until it is closed.
Changing members marks older proposals stale in Squads, so pending requests expire when you replace a kid key or add a co-parent.
Chores
Post a chore with a bounty in USDC or SOL. The kid marks it done; you pay it one of two ways. Bonus limit adds a one-time spending limit for the bounty that the kid spends like allowance. Into Savings transfers the bounty from your wallet straight into the Savings vault. Chores themselves live in our database; payouts are on chain.
Savings and jars
Allowance the kid does not use stays in the Pot when the limit refills. Money moved into Savings rolls over. Jars are goals drawn on top of the Savings balance: the kid splits Savings across jars, and jars can never hold more than Savings has. The keeper counts a saving streak: weeks in a row with at least one move into Savings.
Freeze
Freeze removes every spending limit in one transaction and remembers them. The kid can still propose requests. Unfreeze adds them back. Because it happens on chain, a frozen pocket is frozen in every app, not just ours.
Members
Add a co-parent to share approvals; they get every permission as a member but cannot change limits or members, which stay with the config authority. Replace the kid key if a device is lost: the old key is removed, the limits are rebuilt for the new key, and 0.005 SOL is sent to it for fees.
The keeper
A small worker runs every ten minutes. For each family it reads vault balances and spending limits, marks allowance refills in the timeline, warns you when the Pot cannot cover the next allowance, updates streaks, sweeps new transactions into the activity feed, and reminds you about chores and requests waiting more than a day. It holds no keys.
Costs
| Family account rent | about 0.003 SOL | refundable only if the account is closed |
| Each spending limit | about 0.0024 SOL | refunded when the limit is removed |
| Vault USDC accounts | 2 x 0.00204 SOL | one each for Pot and Savings |
| Kid gas | 0.01 SOL | sent to the kid key, pays its fees |
| Network fees | fractions of a cent | per transaction |
| PocketMoney fee | none |
Safety
The worst case for a leaked kid key is what the limits allow until you freeze or replace it. The worst case for PocketMoney going away is nothing: the account, vaults and limits stay on Solana and open in the Squads app with your wallet.
Our database stores names, chores, jars, requests metadata and the activity feed. It is locked to our servers, and nothing in it can move money. Sign-in is a signed message, never a transaction.
FAQ
You do. Funds sit in two Squads vaults owned by your family account, and your wallet is its config authority. PocketMoney never holds a key that can move them, and the account opens in the Squads app too.