---
title: "Create product"
method: POST
path: "/api/v1/products"
tags: ["Products"]
---

# Create product

`POST /api/v1/products`

Creates a new product.

## Headers

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

## Request body

- CreateProductRequestDto — Create a product with a unique identifier, optional display name, description, and metadata.
  - `id` string, required — The unique identifier for the entity
  - `displayName` string, required — Display name of the product
  - `description` string, nullable — Description of the product
  - `multipleSubscriptions` boolean — Indicates if multiple subscriptions to this product are allowed
  - `metadata` object, nullable — Additional metadata for the product

## Response `201`

The newly created product object.

- ProductResponseDto — Response object
  - `data` object, required — Product configuration object
    - `id` string, required — The unique identifier for the entity
    - `displayName` string, required — Display name of the product
    - `description` string, nullable, required — Description of the product
    - `status` 'PUBLISHED' | 'ARCHIVED', required — The status of the product
    - `multipleSubscriptions` boolean, required — Indicates if multiple subscriptions to this product are allowed
    - `metadata` object, required — Metadata associated with the entity
    - `productSettings` object — Product behavior settings for subscription lifecycle management.
      - `subscriptionEndSetup` 'DOWNGRADE_TO_FREE' | 'CANCEL_SUBSCRIPTION', required — Setup for the end of the subscription
      - `subscriptionCancellationTime` 'END_OF_BILLING_PERIOD' | 'IMMEDIATE' | 'SPECIFIC_DATE', required — Time when the subscription will be cancelled
      - `downgradePlanId` string, nullable — ID of the plan to downgrade to at the end of the billing period
      - `subscriptionStartSetup` 'PLAN_SELECTION' | 'TRIAL_PERIOD' | 'FREE_PLAN', required — Setup for the start of the subscription
      - `subscriptionStartPlanId` string, nullable — ID of the plan to start the subscription with
      - `prorateAtEndOfBillingPeriod` boolean, nullable — Indicates if the subscription should be prorated at the end of the billing period
    - `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

## Other responses

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

---

[API](https://skmtc.net/stiggio/apis/stigg-api.md) · [All operations](https://skmtc.net/stiggio/apis/stigg-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/stiggio/stigg-api/versions/ffc977f1c07e/schema)
