# Revenue Recognition contracts Learn how to 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, you must 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 You can create and manage revenue contracts through an API integration. [Contact us](mailto:revrec-revenue-contracts-beta-submissions@stripe.com) to participate in the private preview. With [Revenue Contracts](https://docs.stripe.com/api/revenue-recognition/contract.md), you can create schemas to specify: - [Items](https://docs.stripe.com/api/revenue-recognition/contract/object.md#revenue_recognition_contract_object-items) associated with the contract - Period timeframe - [Billing models](https://docs.stripe.com/api/revenue-recognition/contract/create.md#create_revenue_recognition_contract-billing_models) linked to the contract that you can update and add when invoicing ### Examples Here’s an example of creating a contract for 365 USD to be collected over 1 year: ``` { customer: "cus_a1b2c3", signed_at: "2025-01-01", currency: "usd", items: [ { amount: 36500, // $365.00 price: "price_id1", period: { start: "2025-01-01", end: "2025-12-31" } } ], billing_models: [ { // Other possible types are "invoice”, and more coming type: "subscription_schedule", id: "sub_sched_1" } ] } ``` ## Customize revenue schedules Revenue contracts enables the creation of custom contract items that dictate how revenue is recognized instead of invoice line items. It allows you to attach billing models (for example, invoices, subscriptions, payments) to the contract used as payment collection containers. ### Example Given a 2-year B2B contract with monthly billing, you can create a contract item for the 2-year period: | Contract Item | | | ---------------------------------------------- | ------------------------- | | Amount | 10000 | | [Price](https://docs.stripe.com/api/prices.md) | price_1 | | Period | Jan 1, 2024 - Jan 1, 2026 | You can then attach a transaction/billing model to the contract to be used for payment allocation: | Billing Model | Type | | ------------- | ------------------------------------------------------------------------------ | | sub_sched_1 | [Subscription Schedule](https://docs.stripe.com/api/subscription_schedules.md) | Given this contract setup, Stripe Revenue Recognition can augment reports by incorporating non-GAAP accounts such as contract assets and deferred revenue. Here’s how to create this contract with a custom 2-year performance obligation using the [Revenue Contracts API](https://docs.stripe.com/api/revenue-recognition/contract.md): ``` curl https://api.stripe.com/v1/revenue_recognition/contracts \ -u "{{SECRET_KEY}}:" \ -d "customer"="cus_a1b2c3" \ -d "currency"="usd" \ -d "signed_at"="1711248358" \ -d "items[0][amount_subtotal]"="1000000" \ -d "items[0][price]"="price_1" \ -d "items[0][period][start]"="1711248358" \ -d "items[0][period][end]"="1774320358" \ -d "billing_models[0][type]"="subscription_schedule" \ -d "billing_models[0][subscription_schedule]"="sub_sched_1" ``` ## 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 two types of [journal entries](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. As revenue is recognized and invoices are issued over the contract term, ContractAsset decreases. - **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 as it’s recognized. Learn about all of the [account types](https://docs.stripe.com/revenue-recognition/methodology.md#chart-of-accounts) involved in journal entries. ### Example The following example shows the individual accounting bookings that Stripe generates for a 1-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, and these values are used in calculations across all Revenue Recognition reports. - 1 Year contract - Total Value: 365 USD - Starting 2025-01 - Monthly invoices - 1 contract item period from 2025-01-01 to 2026-01-01 The following table describes the expected outcome when only January is billed. When the contract is created, Stripe: - Debit `ContractAsset` - Credit `UnbilledDeferredRevenue` - Recognize revenue from `UnbilledAccountsReceivable` based on the amortization schedule As invoices are finalized, these are the generated journal entries: - `UnbilledAccountsReceivable` moves to `AccountsReceivable` - Revenue is deferred until recognized | 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 | | … | | | |