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

Tín dụng được gắn vào sản phẩm như **các quyền lợi** trong quá trình tạo hoặc chỉnh sửa sản phẩm. Bạn có thể gắn tối đa **5 tín dụng cho mỗi sản phẩm**. Tín dụng hoạt động với cả ba loại giá.

### 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>
      Bạn có thể gắn tối đa 5 tín dụng cho mỗi sản phẩm. Mỗi tín dụng có thể có cấu hình riêng.
    </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. **Ứng dụng của bạn gửi các sự kiện sử dụng** - Mỗi sự kiện bao gồm ID khách hàng, tên sự kiện và metadata
2. **Các bộ đếm tổng hợp sự kiện** - Sử dụng Count, Sum, Max hoặc Last aggregation
3. **Tín dụng được khấu trừ tự động** - Một công việc nền xử lý các sự kiện mỗi phút, chuyển đổi đơn vị bộ đếm thành tín dụng theo tỷ lệ bạn đã cấu hình, và khấu trừ từ số dư khách hàng theo thứ tự FIFO (ưu tiên các khoản cấp phát cũ nhất trước)
4. **Theo dõi chi tiêu vượt mức** - Nếu số dư tín dụng bằng không và chi tiêu vượt mức được kích hoạt, hệ thống sẽ theo dõi việc sử dụng vượt mức cho việc lập hóa đơn cuối kỳ

### Meters Panel

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

| Tổng hợp  | Mô tả                    | Ví dụ                            |
| --------- | ------------------------ | -------------------------------- |
| **Count** | Tổng số sự kiện          | Cuộc gọi API                     |
| **Sum**   | Tổng của trường giá trị  | Tổng số bytes được truyền tải    |
| **Max**   | Giá trị cao nhất ghi lại | Số người dùng đồng thời cao nhất |
| **Last**  | Giá trị mới nhất         | Dung lượng lưu trữ hiện tại      |

***

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

Tất cả các sự kiện sổ cái (`credit.added` đến `credit.manual_adjustment`) bao gồm đầy đủ tải trọng `CreditLedgerEntry` với số dư trước/sau, số dư phụ trội trước/sau, tham chiếu nguồn, và `metadata` của nguồn cấp vốn hoặc thanh toán của gói đăng ký (trống đối với các cấp vốn được tạo trực tiếp thông qua API). Sự kiện `credit.balance_low` bao gồm cấu hình ngưỡng và số dư hiện tại.

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