---
updatedAt: 2026-06-30T14:27:52.000Z
agentTools:
  projectIndex: https://developers.intandem.tech/llms.txt
---

# The Offering Object

An Offering represents a commercial agreement in the inTandem platform, describing the various attributes of the commercial terms, including pricing, type, and additional metadata.

## Properties

<br />

<Table align={["left","left","left","left"]}>
  <thead>
    <tr>
      <th style={{ textAlign: "left" }}>
        Name
      </th>

      <th style={{ textAlign: "left" }}>
        Description
      </th>

      <th style={{ textAlign: "left" }}>
        Type
      </th>

      <th style={{ textAlign: "left" }}>
        Required
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td style={{ textAlign: "left" }}>
        `uid`
      </td>

      <td style={{ textAlign: "left" }}>
        The entity unique identifier
      </td>

      <td style={{ textAlign: "left" }}>
        `string`
      </td>

      <td style={{ textAlign: "left" }}>
        No
      </td>
    </tr>

    <tr>
      <td style={{ textAlign: "left" }}>
        `created_at`
      </td>

      <td style={{ textAlign: "left" }}>
        Timestamp indicating when the entity was created
      </td>

      <td style={{ textAlign: "left" }}>
        `string`
      </td>

      <td style={{ textAlign: "left" }}>
        No
      </td>
    </tr>

    <tr>
      <td style={{ textAlign: "left" }}>
        `updated_at`
      </td>

      <td style={{ textAlign: "left" }}>
        Timestamp of the entity's most recent update
      </td>

      <td style={{ textAlign: "left" }}>
        `string`
      </td>

      <td style={{ textAlign: "left" }}>
        No
      </td>
    </tr>

    <tr>
      <td style={{ textAlign: "left" }}>
        `type`
      </td>

      <td style={{ textAlign: "left" }}>
        Type of the offering. Possible values include: **package** for the main business subscription; **app** for marketplace app subscriptions and **addon** for other SKUs like SMS and staff_seats. A user can have one subscription with package, one subscription per SKU of type apps and any number of subscriptions for any SKU
      </td>

      <td style={{ textAlign: "left" }}>
        `string` (enum: `package`, `app`, `addon`)
      </td>

      <td style={{ textAlign: "left" }}>
        Yes
      </td>
    </tr>

    <tr>
      <td style={{ textAlign: "left" }}>
        `SKU`
      </td>

      <td style={{ textAlign: "left" }}>
        The unique code of the single SKU this offering represents. Offerings support exactly one SKU; to combine multiple SKUs, use a bundledOffering or similar higher-level abstraction.
      </td>

      <td style={{ textAlign: "left" }}>
        `string`
      </td>

      <td style={{ textAlign: "left" }}>
        Yes
      </td>
    </tr>

    <tr>
      <td style={{ textAlign: "left" }}>
        `display_name`
      </td>

      <td style={{ textAlign: "left" }}>
        The SKU's display name
      </td>

      <td style={{ textAlign: "left" }}>
        `string`
      </td>

      <td style={{ textAlign: "left" }}>
        Yes
      </td>
    </tr>

    <tr>
      <td style={{ textAlign: "left" }}>
        `quantity`
      </td>

      <td style={{ textAlign: "left" }}>
        The number of items included in the offering. Use `-1` to indicate **unlimited** quantity (e.g., unlimited staff seats). When quantity is `-1`, the system treats the resource as uncapped — no usage limit is enforced. This is typically used for `staff_seat` add-on offerings distributed as part of a bundle.
      </td>

      <td style={{ textAlign: "left" }}>
        `number`
      </td>

      <td style={{ textAlign: "left" }}>
        Yes
      </td>
    </tr>

    <tr>
      <td style={{ textAlign: "left" }}>
        `payment_type`
      </td>

      <td style={{ textAlign: "left" }}>
        The payment type field defines the payment options available for an offering, **external**: Payment is not done by the platform (typically an API call from the partner), **external_single_charge**: A one-time externally-managed payment (typically an API call from the partner) that grants a single credit (e.g., SMS); behaves like external for billing but its quota is counted as purchased; not supported for package offerings, **free**: No payment is required; **single_charge**: A single, one-time payment is required to obtain the offering; **monthly**: A recurring payment made on a monthly basis; **annual**: A recurring payment made on a yearly basis; **bundle**: A subscription bundled with another subscription
      </td>

      <td style={{ textAlign: "left" }}>
        `string` (enum: `monthly`, `annualy`, `free`, `single_charge`, `external`, `external_single_charge`, `bundle`)
      </td>

      <td style={{ textAlign: "left" }}>
        Yes
      </td>
    </tr>

    <tr>
      <td style={{ textAlign: "left" }}>
        `is_active`
      </td>

      <td style={{ textAlign: "left" }}>
        Current status of the directory offering
      </td>

      <td style={{ textAlign: "left" }}>
        `boolean`
      </td>

      <td style={{ textAlign: "left" }}>
        No
      </td>
    </tr>

    <tr>
      <td style={{ textAlign: "left" }}>
        `is_listed`
      </td>

      <td style={{ textAlign: "left" }}>
        Listing visibility. Defaults to `true` for every offering; when `false` the offering is hidden from listings but remains reachable via a direct link to its info page.
      </td>

      <td style={{ textAlign: "left" }}>
        `boolean`
      </td>

      <td style={{ textAlign: "left" }}>
        No
      </td>
    </tr>

    <tr>
      <td style={{ textAlign: "left" }}>
        `vendor`
      </td>

      <td style={{ textAlign: "left" }}>
        The business entity or vendor that offers this SKU.
      </td>

      <td style={{ textAlign: "left" }}>
        `string` (enum: `partner`, `inTandem`)
      </td>

      <td style={{ textAlign: "left" }}>
        No
      </td>
    </tr>

    <tr>
      <td style={{ textAlign: "left" }}>
        `prices`
      </td>

      <td style={{ textAlign: "left" }}>
        List of price objects for the offering, one per supported currency.
      </td>

      <td style={{ textAlign: "left" }}>
        `array`
      </td>

      <td style={{ textAlign: "left" }}>
        Yes
      </td>
    </tr>

    <tr>
      <td style={{ textAlign: "left" }}>
        `trial_type`
      </td>

      <td style={{ textAlign: "left" }}>
        Specifies how the trial option is managed. expire: trial is enabled and subscription will expire after trial_period days. no_trial: no trial period. Future values may include: automatic_charge (auto-charge after trial), manually_charge (stay active without charging).
      </td>

      <td style={{ textAlign: "left" }}>
        `string` (enum: `expire`, `no_trial`)
      </td>

      <td style={{ textAlign: "left" }}>
        No
      </td>
    </tr>

    <tr>
      <td style={{ textAlign: "left" }}>
        `trial_period`
      </td>

      <td style={{ textAlign: "left" }}>
        Number of days for the trial period. If not specified or set to 0, it indicates no trial period is offered.
      </td>

      <td style={{ textAlign: "left" }}>
        `number`
      </td>

      <td style={{ textAlign: "left" }}>
        No
      </td>
    </tr>

    <tr>
      <td style={{ textAlign: "left" }}>
        `reporting_tags`
      </td>

      <td style={{ textAlign: "left" }}>
        A list of tags to be used for reporting purposes. Tags categorize offerings for analytics and billing reports. Common tags include: **base** for standard base offerings; **free** for free tier offerings; **trial** for trial-period offerings; **ghost** for internal/hidden offerings; **business_management** for business management related offerings; **sandbox** for test environment offerings; **core** for core platform offerings.
      </td>

      <td style={{ textAlign: "left" }}>
        `array`
      </td>

      <td style={{ textAlign: "left" }}>
        No
      </td>
    </tr>
  </tbody>
</Table>

<br />

## Example Entity

```json
{
  "uid": "bc33f12d-98ee-428f-9f65-18bba589cb95",
  "created_at": "2024-01-01T09:00:00Z",
  "updated_at": "2024-03-20T12:34:56Z",
  "type": "package",
  "SKU": "premium_10",
  "display_name": "Premium 10",
  "quantity": 1,
  "payment_type": "monthly",
  "is_active": true,
  "is_listed": true,
  "vendor": "inTandem",
  "prices": [
    {
      "price": "5.00",
      "currency": "USD"
    },
    {
      "price": "5.00",
      "currency": "EUR"
    }
  ],
  "trial_type": "no_trial",
  "trial_period": 0,
  "reporting_tags": [
    "base",
    "no_payments"
  ]
}
```