# Contracts Learn how to model negotiated sales agreements with dedicated contract billing. A contract captures what the customer is buying, how it’s priced, and the payment terms. Use contracts to model negotiated sales agreements that require custom pricing, defined service periods, and mid-deal seat changes while keeping your product catalog clean and avoiding complex [subscription schedules](https://docs.stripe.com/api/subscription_schedules.md). > This feature is in private preview. You can request early access by filling in the form below. ### Interested in getting early access to billing contracts? Enter your email to request access. ```bash curl https://docs.stripe.com/preview/register \ -X POST \ -H "Content-Type: application/json" \ -H "Referer: https://docs.stripe.com/billing/contracts" \ -d '{"email": "EMAIL", "preview": "billing_contracts"}' ``` ## Compare contracts and subscriptions Contracts and [subscriptions](https://docs.stripe.com/api/subscriptions.md) support different billing models and can coexist on the same platform. | | Contracts | Subscriptions | | --- | --- | --- | | Optimized for | Flexibility, with different terms for each customer | Scale, with the same terms across many customers | | Pricing | Negotiated rates through overrides on top of catalog pricing | Standard catalog pricing | | Lifecycle | Defined start and end dates | Recurring with no end date unless canceled | | Driven by | Sales-led negotiations | Customer self-service | Contracts and subscriptions use the same [products](https://docs.stripe.com/api/products.md) and [prices](https://docs.stripe.com/api/prices.md). For example, a product priced at 50 USD per seat per month can be referenced by both a subscription and a contract, with the contract applying negotiated pricing through overrides. ## Understand how contracts work A contract includes these building blocks for modeling a negotiated deal: - **Pricing lines**: Products from your existing catalog included in the agreement, with quantities and service periods. - **Pricing overrides**: Negotiated rates that differ from your standard catalog pricing (price override or percentage multiplier). - **License quantity**: Seat or unit counts that you can change mid-contract. - **Billing settings**: Invoicing cycle and payment terms specific to the deal. ### Contract lifecycle A contract moves through four statuses: | Status | Description | | --- | --- | | `draft` | The contract is being configured. No billing occurs. | | `active` | The contract is in effect and generating invoices. | | `ended` | The contract reached its end date and completed its term. | | `canceled` | The contract was canceled before its end date. | ### Create a contract Create a contract in `draft` status, then activate it when you’re ready to begin billing. This example creates a contract with a pricing line that references an existing product in your catalog: ```curl curl -X POST https://api.stripe.com/v2/billing/contracts \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-06-24.preview" \ --json '{ "currency": "usd", "contract_number": "C-2026-0001", "pricing_lines": [ { "starts_at": { "type": "timestamp", "timestamp": "2026-07-01T00:00:00Z" }, "ends_at": { "type": "timestamp", "timestamp": "2027-07-01T00:00:00Z" }, "pricing": { "type": "price", "price_details": { "price": "price_1MoBy5LkdIwHu7ixZhnattbh", "quantity_changes": [ { "effective_at": { "type": "timestamp", "timestamp": "2026-07-01T00:00:00Z" }, "set": "12" } ], "pricing_overrides": [ { "type": "overwrite_price", "priority": 20, "overwrite_price": { "unit_amount": "100" } } ] } } } ], "pricing_overrides": [], "metadata": {}, "billing_settings": { "billing_profile_details": { "customer": "cus_61SIqALsEreXk4vb616S0Sp34rSQ5rdi" }, "collection_settings_details": { "collection_method": "send_invoice" }, "bill_settings_details": { "invoice": { "time_until_due": { "interval": "month", "interval_count": 1 } } } } }' ``` ### Activate a contract Activate a contract to finalize the draft and create the first invoice when applicable. After activation, the contract `status` changes to `active`. ```curl curl -X POST https://api.stripe.com/v2/billing/contracts/{{BILLINGCONTRACTID_ID}}/activate \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-06-24.preview" ``` ### Cancel a contract Cancel a contract to end it before the scheduled end date. You can specify whether to generate credit prorations for unused time. ```curl curl -X POST https://api.stripe.com/v2/billing/contracts/{{BILLINGCONTRACTID_ID}}/cancel \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-06-24.preview" \ --json '{ "proration_behavior": "none" }' ``` ### List invoices for a contract After activating a contract, Stripe generates [invoices](https://docs.stripe.com/api/invoices.md). Use the [`contract` parameter](https://docs.stripe.com/api/invoices/list.md#list_invoices-contract) to [retrieve all invoices](https://docs.stripe.com/api/invoices/list.md) associated with a specific contract. ```curl curl -G https://api.stripe.com/v1/invoices \ -u "<>:" \ -H "Stripe-Version: 2026-06-24.preview" \ -d "contract={{BILLINGCONTRACTID_ID}}" ``` ## Testing Use [test clocks](https://docs.stripe.com/billing/testing/test-clocks.md) to test your contract setup and simulate the advancement of time. Inspect the invoices and event notifications that Stripe generates as time advances. ## Dashboard View all your contracts in the Stripe Dashboard list view and on the contract detail page. You can’t create contracts in the Dashboard. ### Limitations Contracts don’t support all subscription features. Notable exceptions include the following. - **Trials**: Contracts don’t have a trial status. To model a trial period, use pricing overrides to reduce pricing. - **Discounts**: Contracts don’t support coupons and discounts yet. To reduce pricing, use pricing overrides. - **Charge automatically**: Contracts support only `collection_method=send_invoice`. Support for `collection_method=charge_automatically` isn’t available. - **Metered prices**: Contracts only support licensed prices today.