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

# Free plans

> Give every new customer a monthly allowance without Stripe, and move them to a paid plan when they're ready.

A free plan is a plan with `monthlyPriceCents: 0`. It never touches Stripe: attaching it starts it at once, without Checkout, and Ledger renews it every month at the same time of day it started.

```ts ledger.config.ts theme={"system"}
plan({ id: "free", name: "Free", monthlyCredits: 50, monthlyPriceCents: 0 }),
```

## Start it on signup

Attach it when the customer is created, as in [Setup](https://docs.integrateledger.com/getting-started/setup.md):

```typescript TypeScript theme={"system"}
await billing.createOrGetCustomer({ customerId: user.id });
await billing.attach({ customerId: user.id, planId: "free" });
```

```python Python theme={"system"}
billing.create_or_get_customer(customer_id=user.id)
billing.attach(customer_id=user.id, plan_id="free")
```

The response is `{ "subscriptionId": 1, "status": "active" }`, and the credits are available straight away. Free plans work in Live as soon as you have a Live key, before live billing is activated.

## Move to a paid plan

Attach the paid plan and send the customer to Checkout, as in [Display billing](https://docs.integrateledger.com/getting-started/display-billing.md#sell-through-checkout). They keep the free plan and its credits while Checkout is open. When Stripe confirms the payment, the free plan ends, its unspent credits expire, and the paid allowance begins. Pack credits stay. If they abandon Checkout, nothing changes.

When a paid plan ends, the customer has no plan until you attach one. Attach the free plan again to give them their allowance back.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.