> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bango.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create an offer

> Learn the building blocks of an Offer within the DVM

Offers allow you to create subscription bundles to sell to your consumers. They describe what is being sold, what products are included, and define how the offer lifecycle is structured.

<Tip>
  Before you can build an Offer, you must be integrated with at least one Content Provider via the DVM™.
</Tip>

***

## Products

Choose which products to include in your Offer.

When building your Offer you must specify the **Product** (e.g. Netflix) and the **ProductTier** (e.g. Standard with Ads). Both values are required.

| Product | Tier |
| - | - |
| Netflix | Standard with Ads |
| Netflix | Premium |
| Music | Premium |

An Offer can combine multiple products (e.g. Netflix Standard + Music Premium). Read more about [multi-party bundles here](/offer-management/multi-party-bundles) if if you're looking to launch these sorts of offers.

Use the [Retrieve all products](/api-reference/product-catalog/retrieve-all-products) endpoint to fetch available products and their tiers:

```json theme={null}
[
  {
    "productId": "5f721731-2946-45f9-9f0e-03df00cf11ed",
    "name": "Music",
    "productTiers": [
      { "productTierId": "4020dd8a-99fd-441e-b14b-575166c9b43b", "name": "Premium" },
      { "productTierId": "a1b2c3d4-5678-90ab-cdef-1234567890ab", "name": "Standard with Ads" }
    ],
    "contentProvider": { "contentProviderId": "fc5c87fb-469c-4623-8277-cfa9c13d63bc", "name": "Bango" }
  }
]
```

***

## Name

Define the name of your Offer. A good name is specific and descriptive. It helps consumers understand what they're purchasing and supports discoverability.

<Tabs>
  <Tab title="Clear example">
    `"Premium Streaming Bundle: Netflix Standard + Music Unlimited"`
  </Tab>

  <Tab title="Vague example">
    `"Streaming Bundle"`
  </Tab>
</Tabs>

***

## Availability

The date range when the Offer is available to consumers.

* **availableFromTs** — The date from which this Offer is available (ISO 8601 date-time)
* **availableToTs** — The date after which this Offer is no longer available (ISO 8601 date-time)

<Tabs>
  <Tab title="Example">
    `"availableFromTs": "2024-06-22T00:00:00Z"` `"availableToTs": "2025-06-22T23:59:59Z"`
  </Tab>
</Tabs>

***

## Plan

The Plan determines the lifecycle of your Offer. It controls when billing starts, how the consumer is charged, and how the subscription progresses over time.

A plan consists of:

* **Start trigger** — When the subscription lifecycle begins (required)
* **Currency** — The currency the consumer will be billed in (required)
* **Initial fee** — Optional one-time fee charged at the start, before any recurring billing
* **Phases** — One or more phases that define pricing and duration (required)

### Start trigger

The start trigger defines when the plan's lifecycle begins. You must specify when billing and phase progression start.

| Trigger | When it fires | Use case |
| - | - | - |
| `CONSUMER_OFFER_FULLY_CREATED` | As soon as the offer has been provisioned | Billing starts immediately after purchase, before the consumer activates their entitlements |
| `CONSUMER_OFFER_FULLY_ACTIVATED` | When the consumer has activated all entitlements | Billing starts only after the consumer has set up access to all products in the bundle |

### Currency

The currency the consumer will be billed in. Use ISO 4217 3-letter codes (e.g. USD, EUR, GBP). Required for every plan.

### Initial fee

(Optional) One-time fee charged at the start of the plan, before any recurring billing.

### Phases

Every Offer must have at least one phase. Use multiple phases to support subscriptions with introductory pricing or free trials.

<AccordionGroup>
  <Accordion title="Price type">
    Used for analytics. Options:

    | Value | Description |
    | - | - |
    | `FREE` | No charge for this phase |
    | `DISCOUNT` | Discounted price for this phase |
    | `FULL_PRICE` | Full price for this phase |
  </Accordion>

  <Accordion title="Duration">
    The length of time the consumer is in this phase. Use ISO 8601 duration format. Omit duration for evergreen phases (no end date).

    | Code | Duration |
    | - | - |
    | `P7D` | 7 days |
    | `P1M` | 1 month |
    | `P3M` | 3 months |
    | `P6M` | 6 months |
    | `P1Y` | 1 year |

    Duration must be evenly divisible by the renewal frequency. For example, if duration is P1Y, renewal frequency could be P1M, P2M, P3M, P4M, or P6M.
  </Accordion>

  <Accordion title="Renewal">
    How often the consumer is billed during this phase. Use ISO 8601 duration format. If the consumer is not billed during this phase (e.g. a free trial), set this to match the phase's duration.

    | Code | Billing frequency |
    | - | - |
    | `P7D` | Every 7 days (weekly) |
    | `P1M` | Every month |
    | `P2M` | Every 2 months |
    | `P3M` | Every 3 months |
    | `P4M` | Every 4 months |
    | `P6M` | Every 6 months |
    | `P1Y` | Every year |
  </Accordion>

  <Accordion title="Amount">
    The amount charged to the consumer for each renewal in this phase. Amounts are always integers — e.g. \$10.99 is `1099`. Use `0` for free phases.
  </Accordion>

  <Accordion title="Description">
    The billing description for this phase. For resellers using the optional Billing & Charging module, this is the `billingDescription` that would appear on the consumer's bill.
  </Accordion>
</AccordionGroup>
