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

# Credit-Based Billing

> Issue, manage, and track credit entitlements across subscriptions, one-time products, and usage-based billing with rollover, overage, and expiration controls.

<Frame>
  <iframe className="w-full aspect-video rounded-md" src="https://www.youtube.com/embed/4RR3Yj3Qeuw" title="Credit-Based Billing Tutorial" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowFullScreen />
</Frame>

<Info>
  Credit-Based Billing lets you grant customers a balance of credits - API calls, tokens, compute units, or any custom metric - and deduct from that balance as they consume your service. Credits work across all product types: subscriptions, one-time purchases, and usage-based billing.
</Info>

## What is Credit-Based Billing?

Credit-Based Billing gives you a flexible system to issue credit entitlements to customers as part of your products. Instead of charging per-use or limiting access through feature flags, you allocate a pool of credits that customers draw from as they use your service.

Credits are ideal for:

* **AI and LLM platforms**: Grant tokens or generation credits per plan tier
* **API services**: Allocate API call credits with overage pricing
* **Infrastructure platforms**: Issue compute hours or storage credits
* **Communication services**: Provide message or minute credits per subscription
* **SaaS with consumption tiers**: Bundle included usage into credit pools

<Frame caption="Credits appear as entitlements on your products and show in checkout, customer portal, and subscription details.">
  <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Checkout.png?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=21880df0e4b0b1a3cb8593dbeb8ae343" alt="Checkout showing included credits with the product purchase" style={{ maxHeight: '500px', width: 'auto' }} width="1440" height="960" data-path="images/CBB/Checkout.png" />
</Frame>

## Core Concepts

### Credit Types

When creating a credit, you choose between two types:

<Tabs>
  <Tab title="Custom Unit">
    Define credits in your own unit - tokens, API calls, compute hours, or any metric meaningful to your product. Custom units use the precision you set (0 to 3 decimal places).

    **Best for**: API calls, AI tokens, compute hours, storage units, messages
  </Tab>

  <Tab title="Fiat Credits">
    Credits represent actual currency value (e.g., USD, EUR). Customers receive a monetary credit balance that depletes as they use your service at your defined pricing.

    **Best for**: Prepaid balances, promotional credits, service compensation
  </Tab>
</Tabs>

### Credit Lifecycle

Credits follow a clear lifecycle from issuance through consumption:

<Steps>
  <Step title="Credits Issued">
    Credits are granted when a customer purchases a product (subscription or one-time) with attached credit entitlements. For subscriptions, credits are re-issued each billing cycle.
  </Step>

  <Step title="Credits Consumed">
    As customers use your service, credits are deducted. For usage-based products, meters automatically deduct credits based on real-time events. You can also deduct credits manually via the dashboard or API.
  </Step>

  <Step title="Credits Expire or Roll Over">
    At the end of the billing cycle (or after the configured expiry period), unused credits either expire or roll over to the next period based on your settings.
  </Step>

  <Step title="Overage Handling">
    If credits run out mid-cycle, you can allow overage (continued usage beyond the balance) and choose how overage is handled - forgive it, bill it, or carry the deficit forward.
  </Step>
</Steps>

### Grant Sources

Credits can be granted from multiple sources:

| Source           | Description                                                             |
| ---------------- | ----------------------------------------------------------------------- |
| **Subscription** | Credits issued with subscription purchase, re-issued each billing cycle |
| **One-Time**     | Credits issued with a one-time payment product                          |
| **API**          | Credits granted manually via API or dashboard                           |
| **Rollover**     | Credits carried over from a previous billing cycle                      |

***

## Creating Credits

Create credit entitlements in the **Products → Credits** section of your dashboard. Each credit defines the unit, precision, expiry rules, and lifecycle behavior.

<Frame caption="The Credits tab under Products shows all your credit entitlements.">
  <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Desktop%20-%20Entitlements%20%20-%20Credits.jpg?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=f9f30f473d342657d3f0f857e53b2e85" alt="Credits listing page showing created credit entitlements" style={{ maxHeight: '500px', width: 'auto' }} width="3354" height="2004" data-path="images/CBB/Desktop - Entitlements  - Credits.jpg" />
</Frame>

<Steps>
  <Step title="Navigate to Credits">
    Go to **Products** in your dashboard and select the **Credits** tab. Click **Create Credit** to start.
  </Step>

  <Step title="Configure Basic Information">
    Enter a **Credit Name** - this is your internal identifier for the credit.

    <Frame caption="The credit creation form with all configuration sections.">
      <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Desktop%20-%20Create%20Credit.jpg?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=0c59e6b6eb4cfd76a545b39fb1f5c19e" alt="Credit creation form showing basic info, general settings, and subscription settings" style={{ maxHeight: '500px', width: 'auto' }} width="1919" height="954" data-path="images/CBB/Desktop - Create Credit.jpg" />
    </Frame>
  </Step>

  <Step title="Set General Settings">
    Configure the credit type and display properties:

    <ParamField path="Credit Type" type="string" required>
      Choose **Custom Unit** or **Fiat Credits**.

      * **Custom Unit** - Define your own metric (tokens, API calls, compute hours). Requires a **Unit Name** (e.g., "Platform tokens") and a **Precision** setting.
      * **Fiat Credits** - Credits represent real currency value. Requires a **Unit Currency** selection (USD, EUR, GBP, INR, etc.).
    </ParamField>

    <ParamField path="Unit Name" type="string">
      Only for Custom Unit credits. The label customers see for this credit (e.g., "AI Tokens", "API Calls"). Shown in checkout and the customer portal.
    </ParamField>

    <ParamField path="Precision" type="number">
      Only for Custom Unit credits. Number of decimal places allowed:

      * `0` - Whole numbers (best for countable items like API calls)
      * `1` - One decimal (0.0)
      * `2` - Two decimals (0.00) - **default**
      * `3` - Three decimals (0.000)

      <Warning>
        Precision cannot be changed after the credit is created.
      </Warning>
    </ParamField>

    <ParamField path="Credit Expiry" type="string">
      How long credits remain valid after issuance:

      * **7 days**, **30 days** (default), **60 days**, **90 days**, **Custom**, or **Never**

      Select **Custom** to specify a custom number of days (minimum 1).
    </ParamField>
  </Step>

  <Step title="Configure Subscription Settings (Optional)">
    These settings control credit behavior within recurring subscriptions:

    <ParamField path="Rollover" type="boolean">
      Allow unused credits to carry forward to the next billing cycle. When enabled, configure:

      * **Max Rollover Percentage** (0–100%) - Limit how much carries over
      * **Rollover Timeframe** - How long rolled-over credits remain valid (e.g., 1 Month)
      * **Max Rollover Count** - Maximum consecutive rollovers before credits are forfeited
    </ParamField>

    **When Credits Run Out or Subscription Expires:**

    <ParamField path="Allow Overage" type="boolean">
      Let customers continue using your service after their credit balance reaches zero. When enabled, configure:

      * **Overage Limit** - Maximum credits customers can consume beyond their balance
      * **Price Per Unit** - Cost per additional credit when overage is enabled (with currency selector)
    </ParamField>

    <ParamField path="Overage Behavior" type="string" required>
      Controls how overage is handled at the end of the billing cycle:

      * **Forgive overage at reset** (default) - Usage beyond the credit limit is tracked but not billed. Balance resets each cycle.
      * **Bill overage at billing** - Usage beyond the credit limit is charged on the next invoice, then the balance resets.
      * **Carry over deficit** - Usage beyond the credit limit carries forward as a negative balance into the next cycle.
      * **Carry over deficit (auto-repay)** - Deficit carries forward and is automatically repaid from new credits in the next cycle.
    </ParamField>
  </Step>

  <Step title="Create Credit">
    Click **Create Credit** to save. The credit is now available to attach to any product.

    <Check>
      Your credit entitlement is ready. Attach it to products to start issuing credits to customers.
    </Check>
  </Step>
</Steps>

<Tip>
  Start with simple settings - no rollover, no overage - and add complexity as you learn how customers use credits. Most settings can be updated at any time without affecting existing grants. Note that **precision cannot be changed** after a credit is created.
</Tip>

***

## Attaching Credits to Products

Credits are attached to products as **entitlements** in the product creation or editing flow. You can attach up to **5 credits per product**. Credits work with all three pricing types.

### Subscription Products

For subscriptions, credits are issued **per billing cycle** and can be configured with proration, trial credits, and cycle-specific settings.

<Steps>
  <Step title="Create or Edit a Subscription Product">
    Go to **Products → Create Product** or edit an existing product. Select **Subscription** as the pricing type and configure your recurring price.
  </Step>

  <Step title="Open Entitlements Section">
    Expand the **Entitlements** section and click the **Attach** button next to **Credits**.

    <Frame caption="The Entitlements section in the product form with Credits, License Key, and Digital Product Delivery options.">
      <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Desktop%20-%20Attach%20Credit%20-%20Subscription.jpg?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=fb404b5c706ae200079742965a176605" alt="Product entitlements section showing Credits attach button" style={{ maxHeight: '500px', width: 'auto' }} width="2880" height="1920" data-path="images/CBB/Desktop - Attach Credit - Subscription.jpg" />
    </Frame>
  </Step>

  <Step title="Select Credits to Attach">
    An **Add Credits** panel opens. You can select an existing credit from the dropdown or click **Create new credit** to define one on the spot.

    <Frame caption="The Add Credits panel lets you select existing credits or create new ones.">
      <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Desktop%20-%20Attach%20Credit%20-%20Subscription-2.jpg?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=d67a2a18c7a550c8cf1e8378bd5514dc" alt="Add Credits panel with credit selection dropdown" style={{ maxHeight: '500px', width: 'auto' }} width="2880" height="1920" data-path="images/CBB/Desktop - Attach Credit - Subscription-2.jpg" />
    </Frame>

    <Info>
      You can attach up to 5 credits per product. Each credit can have its own configuration.
    </Info>
  </Step>

  <Step title="Configure Credit Settings">
    For each attached credit, configure:

    <ParamField path="Credits issued per billing cycle" type="number" required>
      The number of credits granted to the customer each billing period.
    </ParamField>

    <ParamField path="Low Balance Threshold" type="number">
      Notify when credits fall below this amount. Useful for alerting customers before they run out.
    </ParamField>

    <ParamField path="Credits During Free Trial" type="number">
      Set a different credit amount for trial periods. Enable **Expire trial credits after trial ends** to revoke unused trial credits when the trial converts to a paid subscription.
    </ParamField>

    <ParamField path="Allow Proration" type="boolean">
      Prorate remaining credits when a customer upgrades or downgrades their subscription plan.
    </ParamField>

    <ParamField path="Import Default Credit Settings" type="boolean">
      Use the default rollover, overage, and expiry settings from the credit entitlement. Turn this off to customize settings specifically for this product.
    </ParamField>

    <Frame caption="Credit configuration showing per-cycle amount, trial credits, proration, and custom settings.">
      <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Desktop%20-%20Attach%20Credit%20-%20Subscription-4.jpg?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=68e212dddbec73131cf9f75bf5b55408" alt="Credit configuration form with billing cycle, trial, and proration settings" style={{ maxHeight: '500px', width: 'auto' }} width="1800" height="1842" data-path="images/CBB/Desktop - Attach Credit - Subscription-4.jpg" />
    </Frame>
  </Step>

  <Step title="Review and Add">
    Review the attached credit showing name, amount, and expiration. Click **Add to Subscription** to confirm.

    <Frame caption="Review attached credits before adding them to the subscription.">
      <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Desktop%20-%20Attach%20Credit%20-%20Subscription-5.jpg?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=7d8a21560061c15cc8544831a59793e2" alt="Add Credits panel showing selected credit with details" style={{ maxHeight: '500px', width: 'auto' }} width="2880" height="1920" data-path="images/CBB/Desktop - Attach Credit - Subscription-5.jpg" />
    </Frame>
  </Step>
</Steps>

### One-Time Payment Products

For one-time payments, credits are issued **once** at the time of purchase.

<Steps>
  <Step title="Create a One-Time Product">
    Create a product with **Single Payment** pricing type.

    <Frame caption="Single Payment pricing selected for a one-time credit product.">
      <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Desktop%20-%20Attach%20Credit%20-%20OTP.jpg?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=1743cb3e515952f9d4b1b2782cebac8b" alt="Product pricing section with Single Payment selected" style={{ maxHeight: '500px', width: 'auto' }} width="2880" height="1920" data-path="images/CBB/Desktop - Attach Credit - OTP.jpg" />
    </Frame>
  </Step>

  <Step title="Attach Credits">
    Open the **Entitlements** section and attach credits. Configure the **number of credits issued** (total one-time grant) on purchase.
  </Step>
</Steps>

<Tip>
  One-time credit products are ideal for credit top-up packs, promotional bundles, or prepaid credit purchases.
</Tip>

### Usage-Based Billing Products

For usage-based products, credits are **linked to meters** and automatically deducted based on real-time consumption events.

<Steps>
  <Step title="Create a Usage-Based Product">
    Select **Usage Based Billing** as the pricing type. Configure the base price and billing frequency.

    <Frame caption="Usage Based Billing pricing type with meter configuration.">
      <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Desktop%20-%20Attach%20Credit%20-%20UBB.jpg?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=41b2862c12d126e7843098307e27e137" alt="Usage Based Billing pricing configuration" style={{ maxHeight: '500px', width: 'auto' }} width="2880" height="1920" data-path="images/CBB/Desktop - Attach Credit - UBB.jpg" />
    </Frame>
  </Step>

  <Step title="Add a Meter">
    Click the **+** button in the **Select meter** section to add a meter. A subscription can have up to **3 meters**.

    <Frame caption="The Select Meter panel with meter configuration and credit toggle.">
      <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Desktop%20-%20Attach%20Credit%20-%20UBB-3.jpg?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=3f677352783684107eaa7e568d9352e2" alt="Select Meter panel showing free threshold and credit toggle" style={{ maxHeight: '500px', width: 'auto' }} width="2880" height="1920" data-path="images/CBB/Desktop - Attach Credit - UBB-3.jpg" />
    </Frame>
  </Step>

  <Step title="Enable Credit Billing on the Meter">
    Toggle **Bill usage in Credits** to attach a credit to the meter. Select the credit entitlement from the dropdown.

    <ParamField path="Free Threshold" type="number" required>
      The number of units that are free before credit deduction begins.
    </ParamField>

    <ParamField path="Bill usage in Credits" type="boolean">
      When enabled, meter usage deducts from the customer's credit balance instead of charging per-unit.
    </ParamField>

    <ParamField path="Meter units per credit" type="number" required>
      The number of usage units required to deduct 1 credit. For example, if set to `1000`, then 1,000 API calls consume 1 credit.
    </ParamField>

    <Frame caption="Credit attached to a meter with per-unit conversion rate.">
      <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Desktop%20-%20Attach%20Credit%20-%20UBB-5.jpg?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=b4ef2fe5079cbf3bb39eb3814f101cbd" alt="Meter configuration with credit selection and meter units per credit" style={{ maxHeight: '500px', width: 'auto' }} width="2880" height="2282" data-path="images/CBB/Desktop - Attach Credit - UBB-5.jpg" />
    </Frame>
  </Step>

  <Step title="Configure Credit Issuance">
    Set the number of credits issued and optionally customize the credit settings for this product.

    <Frame caption="Configure how many credits to issue and whether to use default settings.">
      <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Desktop%20-%20Attach%20Credit%20-%20UBB-6.jpg?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=22e99c54f11305a24d63c77e09a4650c" alt="Credit configuration for UBB product" style={{ maxHeight: '500px', width: 'auto' }} width="2880" height="1920" data-path="images/CBB/Desktop - Attach Credit - UBB-6.jpg" />
    </Frame>
  </Step>

  <Step title="Verify Attachment">
    Once configured, the meter shows the attached credit name, unit price, and free threshold.

    <Frame caption="Meter with credit attached showing price, threshold, and credit name.">
      <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Desktop%20-%20Attach%20Credit%20-%20UBB-1.jpg?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=d1a68ef9f07872b1dc9d2b2a655df0a4" alt="Configured meter showing credit attachment details" style={{ maxHeight: '500px', width: 'auto' }} width="3220" height="1830" data-path="images/CBB/Desktop - Attach Credit - UBB-1.jpg" />
    </Frame>
  </Step>
</Steps>

<Info>
  When credits are linked to meters, the system automatically deducts credits based on ingested usage events. A background worker processes events every minute, aggregates them according to the meter's configuration, and applies FIFO (first-in, first-out) deduction from the customer's oldest non-expired grants.
</Info>

***

## Credit Settings

### Rollover

Rollover lets unused credits carry forward to the next billing cycle instead of expiring.

| Setting                     | Description                                                                                                         |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| **Rollover Enabled**        | Toggle to allow unused credits to carry forward                                                                     |
| **Max Rollover Percentage** | Limit how much carries over (0–100%). At 50%, only half of unused credits roll over                                 |
| **Rollover Timeframe**      | How long rolled-over credits remain valid (day, week, month, year)                                                  |
| **Max Rollover Count**      | Maximum number of times credits can be consecutively rolled over. After this limit, remaining credits are forfeited |

**Example**: A customer has 200 unused credits at cycle end. With 75% rollover, 150 credits carry forward and 50 are forfeited.

### Overage

Overage controls what happens when a customer's credit balance reaches zero mid-cycle.

| Setting              | Description                                                                    |
| -------------------- | ------------------------------------------------------------------------------ |
| **Allow Overage**    | Toggle to let customers continue using the service beyond their credit balance |
| **Overage Limit**    | Maximum credits customers can consume beyond their balance                     |
| **Price Per Unit**   | Cost per additional credit consumed as overage (with currency)                 |
| **Overage Behavior** | Controls what happens to overage at the end of the billing cycle (see below)   |

**Overage Behavior options:**

| Behavior                            | Description                                                                            |
| ----------------------------------- | -------------------------------------------------------------------------------------- |
| **Forgive overage at reset**        | Usage beyond the credit limit is tracked but not billed. Balance resets each cycle     |
| **Bill overage at billing**         | Usage beyond the credit limit is charged on the next invoice, then the balance resets  |
| **Carry over deficit**              | Overage carries forward as a negative balance into the next cycle                      |
| **Carry over deficit (auto-repay)** | Deficit carries forward and is automatically repaid from new credits in the next cycle |

<Info>
  When overage is disabled, customers cannot use the service once their credit balance reaches zero. Choose an overage behavior that matches your billing model - **Forgive at reset** is the default and simplest option.
</Info>

### Expiration

| Setting                              | Description                                                                          |
| ------------------------------------ | ------------------------------------------------------------------------------------ |
| **Credit Expiry**                    | Duration after issuance before credits expire (7, 30, 60, 90, custom days, or never) |
| **Trial Credits Expire After Trial** | Whether trial-specific credits expire when the trial period ends                     |

<Info>
  Expired credits create a `CreditExpired` ledger entry. If rollover is enabled, the rollover percentage is applied before expiration, and only the remainder expires.
</Info>

***

## Usage Billing with Credits

When credits are linked to usage meters, the system creates a powerful consumption-based billing model. Customers receive a credit allocation, and usage events automatically deduct from their balance.

<Frame caption="The Usage Billing dashboard shows meter events with units consumed, credits consumed, and customer details.">
  <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Desktop%20-%20Usage%20Billing.jpg?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=de8c5992d0ae59e74bbb8a840e07454f" alt="Usage Billing dashboard showing events table with credits consumed" style={{ maxHeight: '500px', width: 'auto' }} width="2880" height="1920" data-path="images/CBB/Desktop - Usage Billing.jpg" />
</Frame>

### How Meter-Based Credit Deduction Works

1. **Your application sends usage events** - Each event includes a customer ID, event name, and metadata
2. **Meters aggregate events** - Using Count, Sum, Max, Last, or Unique Count aggregation
3. **Credits are deducted automatically** - A background worker processes events every minute, converts meter units to credits using your configured rate, and deducts from the customer's balance using FIFO ordering (oldest grants first)
4. **Overage is tracked** - If the credit balance reaches zero and overage is enabled, the system tracks overage usage for end-of-cycle billing

### Meters Panel

The Usage Billing dashboard includes a **Meters** panel listing all defined meters with their aggregation type:

| Aggregation      | Description              | Example                 |
| ---------------- | ------------------------ | ----------------------- |
| **Count**        | Total number of events   | API calls               |
| **Sum**          | Sum of a value field     | Total bytes transferred |
| **Max**          | Highest value recorded   | Peak concurrent users   |
| **Last**         | Most recent value        | Current storage used    |
| **Unique Count** | Count of distinct values | Unique active users     |

***

## Customer Experience

### Checkout

When a customer purchases a product with attached credits, the checkout page displays the included credits as part of the product offering.

<Frame caption="Checkout shows included credits with the product, making the value proposition clear.">
  <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Checkout.png?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=21880df0e4b0b1a3cb8593dbeb8ae343" alt="Checkout page showing product with included API call credits" style={{ maxHeight: '500px', width: 'auto' }} width="1440" height="960" data-path="images/CBB/Checkout.png" />
</Frame>

Credits appear in an **Includes** section below the product description, showing the credit amount and type (e.g., "\$1000 API calls").

### Customer Portal

Customers can view and manage their credit balances in the Customer Portal under the **Credits** section.

<Frame caption="The Customer Portal shows available balance and full transaction history.">
  <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Customer%20Portal.jpg?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=b8afe1f89242f9e347b26b990dd00fe8" alt="Customer Portal credits view with balance and transaction history" style={{ maxHeight: '500px', width: 'auto' }} width="3016" height="2030" data-path="images/CBB/Customer Portal.jpg" />
</Frame>

The portal displays:

* **Available Balance** - Current credit balance displayed prominently
* **Credit Tabs** - Switch between different credit types (e.g., "OpenAI Credits", "Usage Tokens")
* **Recent Transactions** - Full history with date, transaction ID, type, amount, and running balance

Transaction types shown to customers include:

| Type                          | Description                                       | Amount    |
| ----------------------------- | ------------------------------------------------- | --------- |
| **Credits with Subscription** | Credits issued with subscription purchase/renewal | Green (+) |
| **One-Time Credits**          | Credits from one-time purchases or manual grants  | Green (+) |
| **Usage Deduction**           | Credits consumed through service usage            | Red (-)   |
| **Overage**                   | Usage beyond credit balance                       | Red (-)   |

### Subscription Details

The subscription detail page shows credit entitlements alongside other plan information.

<Frame caption="Subscription details show credit allocation, remaining balance, and renewal date.">
  <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Desktop%20-%20Subscription%20Details.jpg?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=059f57f8996c1f514b9d7eba1ef6e33a" alt="Subscription details page showing entitlements and usage history" style={{ maxHeight: '500px', width: 'auto' }} width="2880" height="1984" data-path="images/CBB/Desktop - Subscription Details.jpg" />
</Frame>

Key information displayed:

* **Credit allocation** per billing cycle (e.g., "1000 credits each cycle")
* **Remaining balance** (e.g., "7500 credits remaining")
* **Renewal date** for next credit issuance
* **Usage History** tab with meter-level breakdown showing units consumed, thresholds, unit prices, and total costs

### Transaction Details

Payment transaction pages include an **Entitlements** section showing all entitlements delivered with the payment, including credits.

<Frame caption="Transaction details show credits alongside other entitlements like license keys and digital downloads.">
  <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Desktop%20-%20Transactions%20-%20Payment%20Summary.jpg?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=dccb0ada7682ead4493baf71199a86fb" alt="Transaction details page showing credit entitlements" style={{ maxHeight: '500px', width: 'auto' }} width="2880" height="2752" data-path="images/CBB/Desktop - Transactions - Payment Summary.jpg" />
</Frame>

***

## Managing Credits

### Dashboard Views

#### Credit Entitlements List

View all your credit entitlements in **Products → Credits**. The table shows credit name, expiry settings, and provides quick actions for editing or archiving.

<Frame caption="Credits listing with total count, creation button, and management actions.">
  <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Desktop%20-%20Entitlements%20%20-%20Credits.jpg?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=f9f30f473d342657d3f0f857e53b2e85" alt="Credits listing page in the Products section" style={{ maxHeight: '500px', width: 'auto' }} width="3354" height="2004" data-path="images/CBB/Desktop - Entitlements  - Credits.jpg" />
</Frame>

#### Customer Credit Details

View a specific customer's credit balances and transaction history from **Customers → \[Customer Name] → Credits**.

<Frame caption="Customer detail page showing credit balance and full transaction ledger.">
  <img src="https://mintcdn.com/dodopayments/ibNfoFRyCIGyt3pO/images/CBB/Desktop%20-%20Customer%20Details.jpg?fit=max&auto=format&n=ibNfoFRyCIGyt3pO&q=85&s=a52e7e914338d698bf72498821f6a8b6" alt="Customer details page with Credits tab showing balance and transactions" style={{ maxHeight: '500px', width: 'auto' }} width="2880" height="1920" data-path="images/CBB/Desktop - Customer Details.jpg" />
</Frame>

The customer credit view includes:

* **Credit Selector** - Switch between different credit entitlements
* **Available Balance** - Current balance in large, prominent display
* **Apply Credit/Debit** - Button to manually adjust the customer's balance
* **Recent Transactions** - Full ledger with date, transaction ID, type, amount, and running balance

### Manual Adjustments

You can manually credit or debit a customer's balance directly from the dashboard:

<Steps>
  <Step title="Navigate to Customer">
    Go to **Customers** and select the customer.
  </Step>

  <Step title="Open Credits Tab">
    Click the **Credits** tab and select the appropriate credit entitlement from the wallet selector.
  </Step>

  <Step title="Apply Credit or Debit">
    Click **Apply Credit/Debit** to open the adjustment interface.

    <ParamField path="Transaction Type" type="string" required>
      Select **Credit** to add credits or **Debit** to remove credits from the customer's balance.
    </ParamField>

    <ParamField path="Amount" type="number" required>
      The number of credits to add or remove.
    </ParamField>

    <ParamField path="Reason" type="string">
      Optional explanation for the adjustment (e.g., "Service compensation", "Promotional bonus").
    </ParamField>
  </Step>

  <Step title="Confirm">
    Review and apply the adjustment. The change is reflected immediately in the customer's balance and recorded in the credit ledger.

    <Check>
      Manual adjustments create a `ManualAdjustment` ledger entry with full audit trail.
    </Check>
  </Step>
</Steps>

### Credit Ledger

Every credit operation is recorded in the credit ledger, providing a complete audit trail:

| Transaction Type       | Description                                               |
| ---------------------- | --------------------------------------------------------- |
| **Credit Added**       | Credits granted (subscription, one-time, or API)          |
| **Credit Deducted**    | Credits consumed through usage or manual debit            |
| **Credit Expired**     | Credits expired without rollover                          |
| **Credit Rolled Over** | Credits carried forward to the next period                |
| **Rollover Forfeited** | Rolled credits forfeited after max rollover count reached |
| **Overage Charged**    | Usage beyond credit balance with overage enabled          |
| **Auto Top-Up**        | Automatic credit replenishment at low balance             |
| **Manual Adjustment**  | Credit or debit applied manually by merchant              |
| **Refund**             | Credits refunded                                          |

Each ledger entry records the balance before and after the transaction, overage before and after, a description, and reference to the source (payment, subscription, etc.).

***

## Webhooks

Credit-Based Billing fires webhook events for every credit lifecycle change. Use these to keep your application in sync with credit balances, trigger notifications, or build custom billing workflows.

| Event                       | Description                                    |
| --------------------------- | ---------------------------------------------- |
| `credit.added`              | Credits granted to a customer                  |
| `credit.deducted`           | Credits consumed through usage or manual debit |
| `credit.expired`            | Unused credits expired                         |
| `credit.rolled_over`        | Credits carried forward to a new grant         |
| `credit.rollover_forfeited` | Credits forfeited at max rollover count        |
| `credit.overage_charged`    | Overage charges applied                        |
| `credit.manual_adjustment`  | Manual credit/debit adjustment made            |
| `credit.balance_low`        | Balance dropped below configured threshold     |

All ledger events (`credit.added` through `credit.manual_adjustment`) include the full `CreditLedgerEntry` payload with balance before/after, overage before/after, and source reference. The `credit.balance_low` event includes the threshold configuration and current balance.

<Card title="Credit Webhook Payloads" icon="bell" href="/developer-resources/webhooks/intents/credit">
  View full payload schemas, field descriptions, and integration examples for all credit webhook events.
</Card>

***

## API Management

<AccordionGroup>
  <Accordion title="Create Credit Entitlements">
    Use the API to create credit entitlements programmatically with full control over rollover, overage, and expiration settings.

    <CardGroup cols={2}>
      <Card title="Create Credit Entitlement" icon="plus" href="/api-reference/credit-entitlements/create-credit-entitlement">
        Create a new credit entitlement with rollover, overage, and expiry configuration.
      </Card>

      <Card title="List Credit Entitlements" icon="list" href="/api-reference/credit-entitlements/list-credit-entitlements">
        Retrieve all credit entitlements for your business.
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Manage Credit Entitlements">
    Retrieve, update, or delete credit entitlements. Deleted entitlements can be restored.

    <CardGroup cols={2}>
      <Card title="Get Credit Entitlement" icon="magnifying-glass" href="/api-reference/credit-entitlements/get-credit-entitlement">
        Retrieve a specific credit entitlement by ID.
      </Card>

      <Card title="Update Credit Entitlement" icon="pen" href="/api-reference/credit-entitlements/update-credit-entitlement">
        Update rollover, overage, expiry, or other settings.
      </Card>

      <Card title="Delete Credit Entitlement" icon="trash" href="/api-reference/credit-entitlements/delete-credit-entitlement">
        Soft-delete a credit entitlement.
      </Card>

      <Card title="Undelete Credit Entitlement" icon="rotate-left" href="/api-reference/credit-entitlements/undelete-credit-entitlement">
        Restore a previously deleted credit entitlement.
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Grant and Adjust Credits">
    Grant credits directly to a customer's balance without requiring a purchase, or create manual debit entries for billing adjustments.

    <Card title="Create Ledger Entry" icon="plus" href="/api-reference/credit-entitlements/create-ledger-entry">
      Credit or debit a customer's balance with full audit trail and idempotency support.
    </Card>
  </Accordion>

  <Accordion title="Query Balances and Ledger">
    Retrieve a customer's current credit balance, grant history, and full ledger of transactions for any credit entitlement.

    <CardGroup cols={2}>
      <Card title="List Balances" icon="wallet" href="/api-reference/credit-entitlements/list-balances">
        List all customer balances for a credit entitlement.
      </Card>

      <Card title="Get Customer Balance" icon="user" href="/api-reference/credit-entitlements/get-customer-balance">
        Get a specific customer's balance.
      </Card>

      <Card title="List Customer Grants" icon="gift" href="/api-reference/credit-entitlements/list-customer-grants">
        View all credit grants for a customer.
      </Card>

      <Card title="List Customer Ledger" icon="scroll" href="/api-reference/credit-entitlements/list-customer-ledger">
        Full transaction history for a customer.
      </Card>
    </CardGroup>
  </Accordion>
</AccordionGroup>

### Integration Example

Initialize the Dodo Payments client:

```typescript theme={null}
import DodoPayments from 'dodopayments';

const client = new DodoPayments({
  bearerToken: process.env['DODO_PAYMENTS_API_KEY'],
  environment: 'test_mode', // defaults to 'live_mode'
});
```

Attach credits to a subscription product during checkout:

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [
    {
      product_id: 'prod_ai_pro_plan',
      quantity: 1,
    }
  ],
  customer: { email: 'customer@example.com' },
  return_url: 'https://yourapp.com/success'
});
```

Send usage events that deduct credits automatically:

```typescript theme={null}
await client.usageEvents.ingest({
  events: [{
    event_id: `gen_${Date.now()}`,
    customer_id: 'cus_abc123',
    event_name: 'ai.generation',
    timestamp: new Date().toISOString(),
    metadata: { model: 'gpt-4', tokens: 1500 }
  }]
});
```

***

## Real-World Examples

<AccordionGroup>
  <Accordion title="AI SaaS Platform">
    **Pricing Structure:**

    | Plan       | Price    | Credits/Month    | Overage       |
    | ---------- | -------- | ---------------- | ------------- |
    | Starter    | \$29/mo  | 10,000 tokens    | \$0.003/token |
    | Pro        | \$99/mo  | 100,000 tokens   | \$0.002/token |
    | Enterprise | \$499/mo | 1,000,000 tokens | \$0.001/token |

    **Configuration:**

    * Credit Type: Custom Unit ("AI Tokens")
    * Precision: 0 (whole tokens)
    * Rollover: 25% max, 1-month timeframe
    * Overage: Enabled, bill overage at billing
    * Meter: `ai.generation` with Sum aggregation on `tokens` field
  </Accordion>

  <Accordion title="API Gateway">
    **Pricing Structure:**

    | Plan      | Price   | Credits/Month | Overage       |
    | --------- | ------- | ------------- | ------------- |
    | Free      | \$0/mo  | 1,000 calls   | Blocked       |
    | Developer | \$19/mo | 50,000 calls  | \$0.001/call  |
    | Business  | \$99/mo | 500,000 calls | \$0.0005/call |

    **Configuration:**

    * Credit Type: Custom Unit ("API Calls")
    * Precision: 0 (whole calls)
    * Rollover: Disabled
    * Overage: Developer+ plans allow overage (forgive at reset), Free plan disables overage
    * Meter: `api.request` with Count aggregation
  </Accordion>

  <Accordion title="Cloud Storage Service">
    **Pricing Structure:**

    | Plan     | Price   | Credits/Month  | Overage        |
    | -------- | ------- | -------------- | -------------- |
    | Personal | \$9/mo  | 100 GB-hours   | \$0.05/GB-hour |
    | Team     | \$49/mo | 1,000 GB-hours | \$0.03/GB-hour |

    **Configuration:**

    * Credit Type: Custom Unit ("GB-hours")
    * Precision: 2 (two decimal places)
    * Rollover: 50% max, carries over once
    * Overage: Enabled with 200% limit
    * Meter: `storage.usage` with Sum aggregation
  </Accordion>
</AccordionGroup>

***

## Best Practices

* **Start simple**: Begin with a single credit type and no rollover. Add complexity based on customer feedback and usage patterns.
* **Set clear expectations**: Display credit allocations, remaining balances, and overage pricing prominently in your product pages and customer portal.
* **Use meaningful units**: Name credits after what they represent (e.g., "API Calls", "AI Tokens") rather than generic terms. This helps customers understand value.
* **Configure expiry thoughtfully**: Short expiry windows (7 days) drive urgency but may frustrate customers. Longer windows (30–90 days) are more customer-friendly for most SaaS products.
* **Monitor low balances**: Set low balance thresholds to alert customers before they run out, reducing surprise overage charges.
* **Test in test mode**: Create credits, attach them to test products, and simulate the full purchase → usage → deduction → expiration cycle before going live.

<Info>
  Credit-Based Billing works seamlessly with all other Dodo Payments features - subscriptions with trials, plan changes with proration, and the customer portal. Start with a basic setup and expand as your pricing model evolves.
</Info>
