---
title: "Create Product"
method: POST
path: "/api/products"
tags: ["products"]
---

# Create Product

`POST /api/products`

## Request

- Base URL: `https://demo.usesecuro.com` (the document declares no server; this is the origin it was published from)
- URL: `https://demo.usesecuro.com/api/products`
- Auth: OAuth 2
  - Password
  - Token URL: `/api/auth/login`
- TypeScript: <https://skmtc.dev/usesecuro/apis/securo/docs/api/products/post.ts> (a function with typed inputs; its response is checked against the schema)

## Headers

- `X-Workspace-Id` string, nullable

## Request body

- ProductCreate
  - `name` string, required
  - `description` string, nullable
  - `kind` 'service' | 'product'
  - `unit` string, nullable
  - `custom_fields` object, nullable
  - `fiscal_refs` object, nullable
  - `prices` PriceInput[]
    - `currency` string, required
    - `unit_price` union, required
      - number
      - string
    - `tax_rate` union
      - number
      - string
    - `billing` 'one_time' | 'recurring'
    - `interval` 'weekly' | 'biweekly' | 'monthly' | 'quarterly' | 'semiannual' | 'yearly', nullable
    - `nickname` string, nullable
    - `lookup_key` string, nullable
    - `external_source` string, nullable
    - `external_id` string, nullable
  - `origin` 'local' | 'imported', nullable
  - `external_source` string, nullable
  - `external_id` string, nullable

## Response `201`

Successful Response

- ProductRead
  - `id` string, uuid, required
  - `name` string, required
  - `description` string, nullable
  - `kind` 'service' | 'product', required
  - `unit` string, nullable
  - `active` boolean, required
  - `origin` string, required
  - `external_source` string, nullable
  - `external_id` string, nullable
  - `custom_fields` object, nullable
  - `fiscal_refs` object, nullable
  - `prices` PriceRead[]
    - `id` string, uuid, required
    - `product_id` string, uuid, required
    - `currency` string, required
    - `unit_price` string, required
    - `tax_rate` string, nullable
    - `billing` 'one_time' | 'recurring', required
    - `interval` 'weekly' | 'biweekly' | 'monthly' | 'quarterly' | 'semiannual' | 'yearly', nullable
    - `nickname` string, nullable
    - `lookup_key` string, nullable
    - `active` boolean, required
    - `external_source` string, nullable
    - `external_id` string, nullable
    - `created_at` string, date-time, required
  - `created_at` string, date-time, required
  - `invoice_count` integer

## Other responses

- `422`: Validation Error

## Changes

- **2026-11-05** `416a7752fec4`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/usesecuro/apis/securo/changes/api/products/post.md)

---

[API](https://skmtc.dev/usesecuro/apis/securo.md) - [All operations](https://skmtc.dev/usesecuro/apis/securo/llms.txt) - [OpenAPI document](https://skmtc.dev/usesecuro/apis/securo/revisions/416a7752fec4?raw)
