---
title: "Create a product"
method: POST
path: "/v3/products"
tags: ["Products"]
---

# Create a product

`POST /v3/products`

Creates a new product.

## Request body

- ProductCreateRequestModel
  - `name` string, required — Name of the product.
  - `displayName` string, required — Display name of the product, shown in the customer portal.
  - `description` string, required — Description for the product.
  - `iconUrl` string, uri, nullable — URL of the product icon.
  - `licenseTemplateId` string, required — Unique identifier for the license template.
  - `licensePolicyId` string, nullable — Use 'licenseTemplateId' instead.
  - `trialPolicyId` string, nullable — Unique identifier for the trial policy.
  - `metadata` ProductMetadataRequestModel[], nullable — List of metdata key/value pairs.
    - `key` string, required — Name of the key.
    - `value` string, required — Value of the key.
    - `viewPermissions` ViewPermission[], nullable — Array of view permissions associated with the metadata.
    - `visible` boolean, nullable — Set true to access the metadata on activation.

## Response `201`

Created

- ProductDto
  - `id` string, required
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required
  - `name` string, required
  - `displayName` string, required
  - `description` string, required
  - `iconUrl` string, nullable
  - `publicKey` string, required
  - `totalLicenses` integer, required
  - `totalTrialActivations` integer, required
  - `totalReleases` integer, required
  - `totalProductVersions` integer, required
  - `totalFeatureFlags` integer, required
  - `automatedEmails` string[], required
  - `licenseTemplateId` string, required
  - `trialPolicyId` string, required
  - `metadata` AdminMetadataDto[], required
    - `id` string, required
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
    - `key` string, required
    - `value` string, nullable
    - `viewPermissions` ViewPermission[], required
    - `visible` boolean, required

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `409` — Conflict
- `429` — Too Many Requests
- `500` — Server Error

---

[API](https://skmtc.net/cryptlex/apis/cryptlex-web-api.md) · [All operations](https://skmtc.net/cryptlex/apis/cryptlex-web-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/cryptlex/cryptlex-web-api/revisions/ec1259c12475/schema)
