> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chipipay.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Gasless Wallets

> Give your users a Starknet wallet they sign with Touch ID / Face ID / Windows Hello. They never type a password, never see a seed phrase, and never pay gas.

A Chipi Gasless Wallet is a real Starknet account your user fully controls. Your app calls one method to create it; the user signs with biometrics; Chipi's paymaster pays the gas. You don't custody anything.

## What you actually build

* **A "Sign up with Touch ID" button.** The user taps once, you get back a wallet address tied to their device's passkey.
* **A "Send" button that just works.** No gas modal. No funding step. No PIN prompt.
* **A recoverable account.** If the user loses their phone, they get back in — either from a second device they registered or from a recovery contact you set up at onboarding.

## What you do NOT build

* A custody system. The user's signing key lives in their device's secure enclave; you can't move it, sign for it, or recover it without them.
* A gas station. Chipi's paymaster spends from your service balance; users never see gas at all.
* A seed-phrase backup flow. The user authenticates with biometrics every time — there's no phrase to copy down.

## Pick your starting point

<CardGroup cols={2}>
  <Card title="Node.js / TypeScript" icon="node-js" href="/services/gasless/node">
    `@chipi-stack/backend` — the headline path. Server creates the wallet, browser passkey signs every transfer.
  </Card>

  <Card title="Python" icon="python" href="/services/gasless/python">
    `chipi-stack` on PyPI — same flow from a Python backend.
  </Card>

  <Card title="React + passkey" icon="react" href="/sdk/passkeys/quickstart">
    Browser side. Register the passkey, sign the transaction. End-to-end example.
  </Card>

  <Card title="Add session keys" icon="key" href="/services/gasless/sessions">
    Skip the biometric prompt for routine actions. The user signs once; subsequent transfers run automatically until the session expires.
  </Card>
</CardGroup>

## After onboarding

| Need                                     | Page                                                    |
| ---------------------------------------- | ------------------------------------------------------- |
| Read balances                            | [balance](/services/gasless/balance)                    |
| List or query transactions               | [transactions](/services/gasless/transactions)          |
| Help a user who lost access              | [recover access](/services/gasless/recovery)            |
| Add a second device or co-signer         | [add a second device](/services/gasless/threshold)      |
| Upgrade existing wallets to add recovery | [upgrade existing wallets](/services/gasless/migration) |
| Handle errors gracefully                 | [errors](/services/gasless/errors)                      |

## A note on PINs

The SDK accepts a PIN as the wallet's encryption key. **Don't lead with that flow** — a user-typed PIN is short, low-entropy, and trivially compromised by shoulder-surfing or phishing. The recommended default is the platform passkey (Touch ID / Face ID / Windows Hello / Android biometrics), where the signing key stays inside the device and never derives from anything the user types.

PIN is supported as a fallback for users on devices that don't support WebAuthn, and as a recovery surface if the passkey ever fails. Both flows are documented in [recover access](/services/gasless/recovery).

## Operating from the dashboard

<Card title="Open the Gasless service" icon="bolt" href="https://dashboard.chipipay.com">
  Dashboard → Services → Gasless Wallets
</Card>

Once you've completed the 5 onboarding milestones (API keys → auth → first wallet → first transfer → webhook), the dashboard surfaces recent wallets, recent activity, and the upgrade-existing-wallets affordance.
