Offer Overview
Offers allow you to create price variations and payment method combinations for your products. Here are examples:
Product A (R$ 1,000.00)
- Offer 1: Price: R$ 1,000.00 (0% discount)
- Offer 2: Price: R$ 900.00 (10% discount)
Product B - Different Payment Methods
- Offer 1: Boleto, PIX, and Installment Boleto
- Offer 2: Installment Boleto and Smart Payment (financed credit card)
Each offer has its own payment options, determined by the payment_configurations associated with the offer. Certain fields in these configurations have restrictions, which can be found in the Payment Configurations section.
Offer Schema
| Field | Description | Type |
|---|---|---|
| id | Unique identifier (UUID) | String |
| name | The name of the offer | String |
| amount_cents | Offer price in cents | Integer |
| amount_currency | Currency code for the offer amount (e.g., BRL for Brazilian Real) | String |
| availability | Offer availability status. Can be enabled, disabled or expired | String |
| url | Direct URL to access this offer’s checkout page | String |
| smart_payment_enabled | Whether smart payment (automatic payment method selection) is enabled for this offer | Boolean |
| checkout_type | Type of checkout flow. Can be default (standard checkout) or without_address (no address collection) | String |
| expires_at | Date and time after which the offer stops selling, or null when it never expires | String |
| seats | Number of sales the offer accepts before it stops selling, or null when it is unlimited | Integer |
| exclude_from_campaign | Whether the offer is kept out of every campaign, selling at its own values. See campaigns | Boolean |
| created_at | Indicates when the record was created in ISO8601 format | String |
| updated_at | Indicates when the record was last updated in ISO8601 format | String |
| product | Product object containing product details | Object |
| payment_configurations | Array of payment configuration objects available for this offer | Array |
Automatic Expiration
An offer can close itself, so you do not have to disable it by hand. Both limits are optional and default to null, which means the offer keeps selling until you disable it.
| Field | Description | Type |
|---|---|---|
| expires_at | Date and time, in ISO8601, after which the offer stops selling. Must be in the future | String |
| seats | Number of sales the offer accepts before it stops selling. Must be greater than 0 | Integer |
Both are set when creating or updating an offer. Once either limit is reached:
- new orders for the offer are refused;
- a daily routine moves the offer’s
availabilitytoexpired, and disables the sales funnels that use it.
Seats count completed sales, so an abandoned checkout never consumes one.
Because the routine runs once a day, an offer may still read availability: enabled for a few hours after reaching a limit — it stops accepting orders straight away either way.
An offer whose availability is expired cannot be enabled again. Create a new offer instead.
Campaigns
A campaign is a sale: while it runs, it overrides values on the offers taking part — the amount, the take rate and the fees. Where the campaign is attached decides which offers take part:
- a campaign attached to the company applies to every offer of that company;
- a campaign attached to a product applies to every offer of that product.
Offers take part by default, the ones you create through the API included. exclude_from_campaign is what keeps an offer out: an offer created or updated with exclude_from_campaign: true never takes part in a campaign, whatever the campaign’s scope, and keeps selling at its own amount, take rate and fees for as long as the sale runs.
| Field | Description | Type |
|---|---|---|
| exclude_from_campaign | Keeps the offer out of every campaign. Defaults to false, so the offer takes part | Boolean |
Campaigns are still rolling out. exclude_from_campaign is documented ahead of the feature so you can plan your integration — until campaigns are released the field is ignored, so sending it changes nothing and fails nothing.
Checkout Type Values
| Value | Description |
|---|---|
| default | Standard checkout flow that collects customer address information |
| without_address | Simplified checkout flow that does not collect customer address information |