---
title: "Create a promotional entitlements"
method: POST
path: "/api/v1/customers/{id}/promotional-entitlements"
tags: ["Promotional Entitlements"]
---

# Create a promotional entitlements

`POST /api/v1/customers/{id}/promotional-entitlements`

## Request

- Base URL: `https://api.stigg.io`
- URL: `https://api.stigg.io/api/v1/customers/{id}/promotional-entitlements`
- Auth: API key in header `X-API-KEY`

Grants promotional entitlements to a customer, providing feature access outside their subscription. Entitlements can be time-limited or permanent.

## Path parameters

- `id` string, required

## Headers

- `X-ACCOUNT-ID` string
- `X-ENVIRONMENT-ID` string

## Request body

- GrantPromotionalEntitlementsRequestDto: Grant promotional entitlements to a customer for a specified period.
  - `promotionalEntitlements` object[], required: Promotional entitlements to grant
    - `featureId` string, required: The unique identifier of the entitlement feature
    - `usageLimit` integer, nullable, required: The usage limit of the entitlement
    - `hasSoftLimit` boolean, nullable, required: Whether the entitlement has a soft limit
    - `hasUnlimitedUsage` boolean, nullable, required: Whether the entitlement has an unlimited usage
    - `customEndDate` string, date-time, nullable, required: The custom end date of the promotional entitlement
    - `period` '1 week' | '1 month' | '6 month' | '1 year' | 'lifetime' | 'custom', required: The grant period of the promotional entitlement
    - `isVisible` boolean, nullable, required: Whether the entitlement is visible
    - `yearlyResetPeriodConfiguration` object, nullable, required: The yearly reset period configuration of the entitlement, defined when reset period is yearly
      - `accordingTo` 'SubscriptionStart', required: Reset anchor (SubscriptionStart)
    - `monthlyResetPeriodConfiguration` object, nullable, required: The monthly reset period configuration of the entitlement, defined when reset period is monthly
      - `accordingTo` 'SubscriptionStart' | 'StartOfTheMonth', required: Reset anchor (SubscriptionStart or StartOfTheMonth)
    - `weeklyResetPeriodConfiguration` object, nullable, required: The weekly reset period configuration of the entitlement, defined when reset period is weekly
      - `accordingTo` 'SubscriptionStart' | 'EverySunday' | 'EveryMonday' | 'EveryTuesday' | 'EveryWednesday' | 'EveryThursday' | 'EveryFriday' | 'EverySaturday', required: Reset anchor (SubscriptionStart or specific day)
    - `resetPeriod` 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR', nullable, required: The reset period of the entitlement
    - `enumValues` string[], nullable, required: The enum values of the entitlement

## Response `201`

The granted promotional entitlement objects.

- PromotionalEntitlementsResponseDto: Response object
  - `data` object[], required
    - `id` string, uuid, required: Unique identifier for the entity
    - `description` string, nullable, required: The description of the entitlement
    - `featureId` string, uuid, required: The unique identifier of the entitlement feature
    - `createdAt` string, date-time, required: Timestamp of when the record was created
    - `updatedAt` string, date-time, required: Timestamp of when the record was last updated
    - `startDate` string, date-time, required: The start date of the entitlement
    - `endDate` string, date-time, nullable, required: The end date of the promotional entitlement
    - `isVisible` boolean, required: Whether the entitlement is visible
    - `usageLimit` number, nullable, required: The usage limit of the entitlement
    - `hasSoftLimit` boolean, nullable, required: Whether the entitlement has a soft limit
    - `hasUnlimitedUsage` boolean, nullable, required: Whether the entitlement has an unlimited usage
    - `status` 'Active' | 'Expired' | 'Paused', required: The status of the entitlement
    - `period` '1 week' | '1 month' | '6 month' | '1 year' | 'lifetime' | 'custom', required: The grant period of the promotional entitlement
    - `resetPeriod` 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR', nullable, required: The reset period of the entitlement
    - `resetPeriodConfiguration` union, required: The reset period configuration of the entitlement
      - object: Yearly reset configuration
        - `accordingTo` 'SubscriptionStart', required: Reset anchor (SubscriptionStart)
      - object: Monthly reset configuration
        - `accordingTo` 'SubscriptionStart' | 'StartOfTheMonth', required: Reset anchor (SubscriptionStart or StartOfTheMonth)
      - object: Weekly reset configuration
        - `accordingTo` 'SubscriptionStart' | 'EverySunday' | 'EveryMonday' | 'EveryTuesday' | 'EveryWednesday' | 'EveryThursday' | 'EveryFriday' | 'EverySaturday', required: Reset anchor (SubscriptionStart or specific day)
    - `environmentId` string, uuid, required: The unique identifier for the environment
    - `enumValues` string[], nullable, required: The enum values of the entitlement
    - `featureGroupIds` string[], nullable, required: Feature group IDs associated with this entitlement

## Other responses

- `400`: bad request.
- `401`: User is not authenticated.
- `403`: User is not allowed to access this resource.
- `409`: Promotional Entitlements conflict error.
- `429`: Too many requests.

## Changes

- **2026-07-26** `b876edd1a4fc`: 5 warning, 1 info
  - added the new `CreditOveragePriceCurrencyNotFound` enum value to the `code` response property for the response status `400`
  - added the new `InvalidCreditOverageBillingModel` enum value to the `code` response property for the response status `400`
  - added the new `InvoicePreviewNotAvailableForDraftContract` enum value to the `code` response property for the response status `400`
  - added the new `OveragePriceNotSupportedOnAddon` enum value to the `code` response property for the response status `400`
  - …2 more
- **2026-07-11** `58bb216ff8ce`: 1 warning
  - added the new `GovernanceNotEnabled` enum value to the `code` response property for the response status `403`
- **2026-06-17** `7296f9e4b654`: 1 warning
  - added the new `InvoicePreviewNotAvailableForDraftContract` enum value to the `code` response property for the response status `409`
- **2026-06-08** `3acd63d6c861`: 2 info
  - added the new optional `header` request parameter `X-ACCOUNT-ID`
  - added the new optional `header` request parameter `X-ENVIRONMENT-ID`
- **2026-06-04** `4fa87d66426d`: 1 warning
  - added the new `PricingModelNotSupportedByBillingIntegration` enum value to the `code` response property for the response status `400`

[Operation history](https://skmtc.dev/stiggio/apis/stigg-api/changes/api/v1/customers/:id/promotional-entitlements/post.md)

---

[API](https://skmtc.dev/stiggio/apis/stigg-api.md) - [All operations](https://skmtc.dev/stiggio/apis/stigg-api/llms.txt) - [OpenAPI document](https://skmtc.dev/stiggio/apis/stigg-api/revisions/3e2c8cfcd035?raw)
