> ## 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.

# Localize an offer

> Localize offers and pricing for different markets.

## Overview

The DVM™ Offer model supports localized content through a `localizedData` object on the Offer. This allows you to provide market-specific descriptions, promotional copy, pricing text, assets, and terms for each locale you want to support — all within a single Offer configuration.

When a consumer views an Offer, your frontend retrieves the Offer from the catalog and uses the `localizedData` fields to render the correct content for their locale.

<Info>
  Localized data is optional. If no `localizedData` is provided for a locale, your frontend should fall back to the Offer's default `name` field or your own fallback logic.
</Info>

***

## Localized fields

Localized content is nested under `localizedData` keyed by BCP 47 language tag (e.g. `en-GB`, `en-US`, `fr-FR`). Each locale object supports the following fields:

| Field | Description |
| - | - |
| `description` | Localized description of the Offer |
| `promotionTitle` | Marketing title displayed to the consumer — e.g. a tier or plan label |
| `promotionBody` | Marketing body copy shown in the promotion — e.g. a product description |
| `priceDescription` | Human-readable price string — e.g. "\$17.99 /mo" |
| `termsAndConditionsUrl` | URL linking to the Offer's terms and conditions for this locale |
| `assets` | Array of locale-specific media assets (images, logos) with `id`, `title`, and `fileUrl` |

Localized content also exists at the **product** and **product tier** level within the Offer, via a `localizedData.description` field on each product, tier, and content provider object.

***

## Example — Offer with localized data

```json theme={null}
{
  "offerId": "39062d82-433c-4f54-8985-93d6c0950071",
  "name": "Netflix Standard - 6 months free",
  "availableFromTs": "2025-01-01T00:00:00.000Z",
  "availableToTs": "2030-01-01T00:00:00.000Z",
  "localizedData": {
    "en-GB": {
      "description": "Netflix Standard",
      "promotionTitle": "STANDARD",
      "promotionBody": "Netflix Standard is a streaming service where you can watch unlimited movies, TV series, and Originals, ad-free.",
      "priceDescription": "$17.99 /mo",
      "termsAndConditionsUrl": "https://example.com/offers/netflix-standard/tc-en-gb",
      "assets": [
        {
          "id": "4425e270-0fd8-443b-8e56-8f2d9d2cc215",
          "title": "Netflix logo",
          "fileUrl": "https://example.com/assets/netflix-logo-en-gb.png"
        }
      ]
    },
    "fr-FR": {
      "description": "Netflix Standard",
      "promotionTitle": "STANDARD",
      "promotionBody": "Netflix Standard est un service de streaming où vous pouvez regarder des films et séries en illimité.",
      "priceDescription": "17,99 € /mois",
      "termsAndConditionsUrl": "https://example.com/offers/netflix-standard/tc-fr-fr",
      "assets": [
        {
          "id": "7b82f310-1ac2-4d89-b3c7-9e4d5f6a7b8c",
          "title": "Netflix logo FR",
          "fileUrl": "https://example.com/assets/netflix-logo-fr-fr.png"
        }
      ]
    }
  }
}
```

***

## How localized data drives the consumer experience

The `localizedData` fields map directly to the components your frontend uses to display Offers to consumers. The DVM™ CX uses three primary display contexts — the Offer card, the Checkout window, and the Subscription card — each of which draws from the same `localizedData` fields.

<AccordionGroup>
  <Accordion title="Offer card">
    The Offer card is the primary discovery surface — it shows the consumer what is available before they subscribe.

    | UI element | Field | Source |
    | - | - | - |
    | Offer image | `assets[].fileUrl` | `localizedData` |
    | Promotion title (e.g. "STANDARD") | `promotionTitle` | `localizedData` |
    | Offer description (e.g. "Netflix") | `description` | `localizedData` |
    | Price (e.g. "\$17.99 /mo") | `priceDescription` | `localizedData` |
    | Promotion body (e.g. product description) | `promotionBody` | `localizedData` |
  </Accordion>

  <Accordion title="Checkout window">
    The Checkout window is shown when the consumer confirms their subscription. It uses the same core `localizedData` fields as the Offer card, with the addition of `termsAndConditionsUrl` for the T\&Cs acceptance step.

    | UI element | Field | Source |
    | - | - | - |
    | Offer image | `assets[].fileUrl` | `localizedData` |
    | Offer description | `description` | `localizedData` |
    | Promotion body | `promotionBody` | `localizedData` |
    | Promotion title | `promotionTitle` | `localizedData` |
    | Price description | `priceDescription` | `localizedData` |
    | Terms & Conditions link | `termsAndConditionsUrl` | `localizedData` |
  </Accordion>

  <Accordion title="Subscription card">
    The Subscription card is the consumer's active subscription management view — shown post-purchase. It combines data from the Offer's `localizedData` with the product and product tier names.

    | UI element | Field | Source |
    | - | - | - |
    | Offer image | `assets[].fileUrl` | `localizedData` |
    | Offer description | `description` | `localizedData` |
    | Product name + tier (e.g. "Netflix Premium") | Product `name` + tier `name` | Offer API |
    | Price description | `priceDescription` | `localizedData` |
    | Promotion body | `promotionBody` | `localizedData` |
    | Terms & Conditions | `termsAndConditionsUrl` | `localizedData` |
  </Accordion>

  <Accordion title="Product tier selector">
    When an Offer includes multiple available product tiers (for upgrade/downgrade), each tier is displayed with its own localized content. Tier-level display data is sourced from a combination of the Offer API and the Localization Service.

    | UI element | Field | Source |
    | - | - | - |
    | Tier image | `assets[].fileUrl` | Offer `localizedData` |
    | Tier name (e.g. "Standard with Ads") | `name` | Localization Service |
    | Tier price (e.g. "\$7.99/mo") | `price` | Localization Service |
    | Tier features | `description` | Localization Service |
    | Extended description | `extended_description` | Localization Service |

    <Note>
      Tier-level `name`, `price`, `description`, and `extended_description` are provided by the Localization Service rather than the Offer API directly. Contact your Bango integration team for details on configuring this service for your account.
    </Note>
  </Accordion>
</AccordionGroup>

***

## Full `localizedData` field reference

The table below covers all `localizedData` fields available across the Offer object and its nested resources.

### Offer-level

| Field | Type | Description |
| - | - | - |
| `description` | string | Localized description of the Offer |
| `promotionTitle` | string | Marketing title displayed to consumers |
| `promotionBody` | string | Marketing body copy for the promotion |
| `priceDescription` | string | Human-readable price string for display |
| `termsAndConditionsUrl` | string | URL to the locale-specific terms and conditions |
| `assets` | array | Locale-specific media assets — each with `id`, `title`, and `fileUrl` |

### Product, product tier, and content provider level

| Field | Type | Description |
| - | - | - |
| `description` | string | Localized description of the specific resource (product, tier, or content provider) |

***

## What's next?

<Card title="Build an Offer" icon="pen-to-square" href="/offer-catalog/create-an-offer" cta="Build an offer" arrow="true">
  Learn how to create an Offer, including how to structure products, availability, and plan configuration.
</Card>

<Card title="Offer Model" icon="sitemap" href="/offer-catalog/offer-model" cta="Understand the Offer Model" arrow="true">
  Understand how the plan, products, and localized data combine to define a complete Offer.
</Card>
