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

# Offer

> The Offer object represents a purchasable pricing option for a product.

An Offer object represents a specific pricing configuration for a [Product](/core-resources/product) that customers can purchase. Offers define the price, currency, region availability, and subscription terms (if applicable).

A single [Product](/core-resources/product) can have multiple offers to support different regions, currencies, or pricing tiers. Offers can include product keys for digital goods that are automatically delivered upon purchase. [Discounts](/core-resources/discount) can be applied to offers to reduce the price.

## Endpoints

| Method   | Endpoint                            | Description            |
| -------- | ----------------------------------- | ---------------------- |
| `GET`    | `/v0/offers/list`                   | List and filter offers |
| `POST`   | `/v0/offers/create`                 | Create a new offer     |
| `GET`    | `/v0/offers/{offerId}`              | Retrieve an offer      |
| `PATCH`  | `/v0/offers/{offerId}/update`       | Update an offer        |
| `PATCH`  | `/v0/offers/{offerId}/archive`      | Archive an offer       |
| `POST`   | `/v0/offers/{offerId}/keys/add`     | Add product keys       |
| `POST`   | `/v0/offers/{offerId}/keys/remove`  | Remove unsold keys     |
| `DELETE` | `/v0/offers/{offerId}/keys/{keyId}` | Remove a specific key  |

## The Offer object

<ResponseField name="object" type="string">
  Object type identifier. Always `"offer"` for Offer objects.
</ResponseField>

<ResponseField name="id" type="string" required>
  Unique identifier (UUID) for this offer.
</ResponseField>

<ResponseField name="internalId" type="string | null">
  Your custom identifier for this offer. Use to link to your own SKU system.
</ResponseField>

<ResponseField name="name" type="string | null">
  Display name of the offer (e.g., "Standard Edition", "Premium Bundle").
</ResponseField>

<ResponseField name="description" type="string | null">
  Description of what's included in this offer.
</ResponseField>

<ResponseField name="price" type="number" required>
  Price in the specified currency. For [Subscriptions](/core-resources/subscription), this is the recurring price.
</ResponseField>

<ResponseField name="originalPrice" type="number | null">
  Original price before any discount. Used to show strikethrough pricing.
</ResponseField>

<ResponseField name="currency" type="string" required>
  Three-letter ISO 4217 currency code (e.g., `"USD"`, `"EUR"`, `"GBP"`).
</ResponseField>

<ResponseField name="region" type="string | null">
  Geographic region where this offer is available. Common values: `Global`, `Europe`, `United States`, `United Kingdom`, `North America`, `Latin America`, `Asia`, `EMEA`, `Rest of the World`
</ResponseField>

<ResponseField name="platform" type="string | null">
  Platform for digital product activation. Common values: `Steam`, `Xbox Live`, `PSN`, `Nintendo`, `Epic Games`, `GOG.com`, `Origin`, `Battle.net`, `Ubisoft Connect`
</ResponseField>

<ResponseField name="gtin" type="string | null">
  Global Trade Item Number (barcode) for the product.
</ResponseField>

<ResponseField name="warningMessage" type="string | null">
  Warning or disclaimer message to display to customers.
</ResponseField>

<ResponseField name="recurringInterval" type="string | null">
  Billing interval for [Subscriptions](/core-resources/subscription). Possible values: `day`, `week`, `month`, `year`
</ResponseField>

<ResponseField name="recurringIntervalCount" type="integer | null">
  Number of intervals between billings. For example, `3` with `month` interval means billing every 3 months.
</ResponseField>

<ResponseField name="trialInterval" type="string | null">
  Trial period interval type. Possible values: `day`, `week`, `month`, `year`
</ResponseField>

<ResponseField name="trialIntervalCount" type="integer | null">
  Number of intervals for the trial period. For example, `14` with `day` interval means a 14-day trial.
</ResponseField>

***

## Example response

```json theme={null}
{
  "status": "success",
  "data": {
    "offer": {
      "object": "offer",
      "id": "990e8400-e29b-41d4-a716-446655440004",
      "internalId": "sku_standard_us",
      "name": "Standard Edition",
      "description": "Base game with all launch content",
      "price": 59.99,
      "originalPrice": 69.99,
      "currency": "USD",
      "region": "United States",
      "platform": "Steam",
      "gtin": "1234567890123",
      "warningMessage": null,
      "recurringInterval": null,
      "recurringIntervalCount": null,
      "trialInterval": null,
      "trialIntervalCount": null
    }
  }
}
```

***

## Subscription offer example

```json theme={null}
{
  "status": "success",
  "data": {
    "offer": {
      "object": "offer",
      "id": "aa0e8400-e29b-41d4-a716-446655440005",
      "internalId": "plan_pro_monthly",
      "name": "Pro Plan - Monthly",
      "description": "Full access to all features",
      "price": 29.99,
      "originalPrice": null,
      "currency": "USD",
      "region": "Global",
      "platform": null,
      "gtin": null,
      "warningMessage": null,
      "recurringInterval": "month",
      "recurringIntervalCount": 1,
      "trialInterval": "day",
      "trialIntervalCount": 14
    }
  }
}
```

***

## Related resources

<CardGroup cols={2}>
  <Card title="Products" icon="box" href="/core-resources/product">
    Products that offers belong to
  </Card>

  <Card title="Discounts" icon="percent" href="/core-resources/discount">
    Discounts that apply to offers
  </Card>

  <Card title="Subscriptions" icon="rotate" href="/core-resources/subscription">
    Subscription offers
  </Card>

  <Card title="Orders" icon="receipt" href="/core-resources/order">
    Orders containing offers
  </Card>
</CardGroup>
