# Revenue Recognition contracts Configure revenue contracts and model enterprise B2B sales contracts in Stripe Revenue Recognition. > Revenue recognition contracts is a feature in private preview. To access the API, request to [join the preview](https://docs.stripe.com/revenue-recognition/revenue-contracts.md#sign-up). Revenue contracts is a feature that lets you represent enterprise sales-led contracts in [Stripe Revenue Recognition](https://dashboard.stripe.com/revenue-recognition). With revenue contracts, you can: - Create contracts - Customize revenue schedules using custom performance obligations independent of billing periods - Track key metrics at the contract level Use revenue contracts when your billing schedule doesn’t align with your service delivery timeline. For example, if you bill monthly for a multi-year enterprise deal, revenue contracts let you define the full contract period and recognize revenue accurately, regardless of when invoices are issued. ## Sign up ## Create and manage revenue contracts Use the [Revenue Contracts](https://docs.stripe.com/api/revenue-recognition/contract.md) API to create and manage revenue contracts. To access the Revenue Contracts API, [join the private preview](https://docs.stripe.com/revenue-recognition/revenue-contracts.md#sign-up). When you create a contract, you can specify: - [Items](https://docs.stripe.com/api/revenue-recognition/contract/object.md#revenue_recognition_contract_object-items) associated with the contract - [Billing models](https://docs.stripe.com/api/revenue-recognition/contract/create.md#create_revenue_recognition_contract-billing_models) linked to the contract, which you can update and add when invoicing - [Contract period timeframe](https://docs.stripe.com/api/revenue-recognition/contract/create.md#create_revenue_recognition_contract-items-period) ### Example The following example creates a contract for 365 USD collected over one year: ```curl curl https://api.stripe.com/v1/revenue_recognition/contracts \ -u "<>:" \ -d currency=usd \ -d "customer={{CUSTOMER_ID}}" \ -d "items[0][amount_subtotal]=36500" \ -d "items[0][period][start]=1735718400" \ -d "items[0][period][end]=1767168000" \ -d "items[0][price]={{PRICE_ID}}" \ -d signed_at=1735718400 \ -d "billing_models[0][type]=subscription_schedule" \ -d "billing_models[0][id]={{SUBSCRIPTIONSCHEDULE_ID}}" ``` ## Customize revenue schedules By default, Stripe recognizes revenue based on invoice line items. Revenue contracts let you override this by defining custom contract items that control how and when revenue is recognized. You can also directly attach billing models (such as invoices, subscriptions, or payments) to a contract. They behave as payment collection containers, keeping your billing activity linked to the contract without affecting your revenue schedule. ### Example Consider a two year B2B contract with monthly billing. You can create a single contract item spanning the full two year period: | | | | | Amount | 10000 | | [Price](https://docs.stripe.com/api/prices.md) | `price_1` | | Period | Jan 1, 2024 - Jan 1, 2026 | Next, attach a transaction or billing model to the contract to determine payment allocation: | | | | | Billing Model | `sub_sched_1` | | Type | [Subscription Schedule](https://docs.stripe.com/api/subscription_schedules.md) | With this contract setup, Stripe Revenue Recognition can populate reports with non-GAAP accounts such as contract assets and deferred revenue. The following example shows how to create this contract with a custom two year performance obligation using the Revenue Contracts API: ```curl curl https://api.stripe.com/v1/revenue_recognition/contracts \ -u "<>:" \ -d currency=usd \ -d "customer={{CUSTOMER_ID}}" \ -d signed_at=1715040000 \ -d "items[0][amount_subtotal]=1000000" \ -d "items[0][price]={{PRICE_ID}}" \ -d "items[0][period][start]=1715040000" \ -d "items[0][period][end]=1778112000" \ -d "billing_models[0][type]=subscription_schedule" \ -d "billing_models[0][id]={{SUBSCRIPTIONSCHEDULE_ID}}" ``` ## Track contract-level metrics When you open up a revenue contract in Stripe Revenue Recognition, you can track high-level metrics across a group of contract items and transactions such as: - Total contract value - Annual contract value - Billing to date - Revenue to date - Future schedule billings - Unbilled deferred revenue - Long-term deferred revenue (revenue deferred beyond 12 periods from the current period) ## Contract journal entries A journal entry represents a financial transaction record consisting of debits and credits to different accounts. After you create a contract, Stripe automatically generates the following [journal entry types](https://docs.stripe.com/revenue-recognition/methodology.md#journal-entries): - **ContractAsset**: Represents the total value of the contract that has been committed but not yet billed or recognized. When a contract is created, the full contract value is debited to ContractAsset. This balance decreases when revenue is recognized and invoices are issued over the contract term. - **UnbilledDeferredRevenue**: Represents the portion of the contract value that has been committed but not yet billed to the customer. When a contract is created, the full contract value is credited to UnbilledDeferredRevenue. As invoices are finalized each billing period, the billed amount moves from UnbilledDeferredRevenue into DeferredRevenue, and subsequently into Revenue when it’s recognized. To learn about all the account types for journal entries, see [Chart of accounts](https://docs.stripe.com/revenue-recognition/methodology.md#chart-of-accounts). ### Example The following example shows the individual accounting bookings that Stripe generates for a one year contract with monthly billing. You can view these entries in the debits and credits of your [Revenue Recognition reports](https://dashboard.stripe.com/revenue-recognition) in the Dashboard. Stripe uses these values in calculations across all Revenue Recognition reports. - One year contract - Total Value: 365 USD - Starting 2025-01 - Monthly invoices - One contract item period from 2025-01-01 to 2026-01-01 #### How Stripe records the contract When you create a contract, Stripe generates the following journal entries: - Debit `ContractAsset` and credit `UnbilledDeferredRevenue` for the full contract value - Recognize revenue from `UnbilledAccountsReceivable` based on the amortization schedule When an invoice is finalized each billing period: - `UnbilledAccountsReceivable` moves to `AccountsReceivable` - Revenue is deferred until recognized #### Expected journal entries The following table shows the expected entries when only January is billed: | Date | Debit | Credit | Amount | Action | | -------------------------- | -------------------------- | ----------------------- | ------------------------- | ---------------- | | 2025-01 | ContractAsset | UnbilledDeferredRevenue | 365 USD | Contract created | | UnbilledDeferredRevenue | ContractAsset | 31 USD | | UnbilledAccountsReceivable | Revenue | 31 USD | | Revenue | UnbilledAccountsReceivable | 31 USD | 2025-01 Invoice finalized | | AccountsReceivable | DeferredRevenue | 31 USD | | DeferredRevenue | Revenue | 31 USD | | 2025-02 | UnbilledDeferredRevenue | ContractAsset | 28 USD | Contract created | | UnbilledAccountsReceivable | Revenue | 28 USD | | 2025-03 | UnbilledDeferredRevenue | ContractAsset | 31 USD | | UnbilledAccountsReceivable | Revenue | 31 USD | | … | | | |