> ## 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.

# Catalog

> Features, plans and credit packs describe what you sell and what each action costs.

Your catalog is what you sell, described in credits. Each environment has its own, and you keep it in your repo with the [CLI](https://docs.integrateledger.com/cli.md).

| Item | What it is | Example |
| - | - | - |
| [**Feature**](https://docs.integrateledger.com/configure-pricing/features-and-credits.md) | An action in your app and what one use costs | `chat_message` costs 1 credit |
| [**Plan**](https://docs.integrateledger.com/configure-pricing/plans.md) | A monthly allowance, [free](https://docs.integrateledger.com/configure-pricing/free-plans.md) or paid | `pro` grants 1,000 credits for \$20 a month |
| [**Credit pack**](https://docs.integrateledger.com/configure-pricing/credit-packs.md) | A one-time purchase of credits that never expire | `credits_500` sells 500 credits for \$10 |

Credit packs are called *add-ons* in the API (`/v1/add-ons`, `addOnId`), with `type: "credit_pack"`.

## Plan versions

Plans are versioned. When a plan's credits, price or overage terms change, customers already on it keep the old version and customers who start it afterwards get the new one. Publishing the same values again changes nothing (`"changed": false`). Features and packs change in place.

## IDs and limits

| Field | Rules |
| - | - |
| `id` | 1–100 characters: letters, numbers, `_` and `-`. Can't be changed. |
| `name` | 1–120 characters, shown to customers on Stripe Checkout. |
| `creditCost`, `monthlyCredits`, `creditAmount` | Whole numbers above 0. |
| `monthlyPriceCents` | Whole number, 0 or more, in US cents. |
| `priceCents` | Whole number above 0, in US cents. |

All prices are in USD, and all plans are monthly.

## Archiving

Removing an item from your catalog file archives it, which hides it from new checks, tracks and purchases and keeps its history:

* An archived **feature** returns `404 feature_not_found` from `check` and `track`. Its recorded usage stays.
* An archived **plan** can't be attached. Customers already on it keep their subscription and credits; nothing is cancelled in Stripe.
* An archived **credit pack** can't be bought. A Checkout already open can still complete.

Publishing an archived item's ID again brings it back.

## Stripe sync

Paid plans sync to Stripe after each change. A plan's `stripeSyncStatus` is `pending` while the sync runs, `synced` once Stripe has the Product and Price, or `failed`; a free plan's is `null`. Packs don't sync ahead of time: Ledger prices each pack's Checkout when it opens. If a paid plan hasn't synced when you attach it, attach syncs it first, and returns `502 stripe_checkout_failed` if Stripe refuses.


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