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

# Create a product

`POST /v1/sdk/products`

Creates a new product for the authenticated provider.

## Request body

- CreateProductRequest
  - `config` object, required
    - `deliveryMethod` string
    - `fulfillmentType` string
    - `validityPeriod` integer
  - `description` string
  - `imageUrl` string
  - `isMcpPay` boolean
  - `metadata` object, required
  - `name` string, required
  - `productType` string
  - `taxBehavior` 'auto' | 'inclusive' | 'exclusive'

## Response `201`

Product created successfully

- SdkProductResponse
  - `balance` number, required — Product balance in cents
  - `config` ProductConfigDto
    - `deliveryMethod` string — Delivery method
    - `fulfillmentType` string — Fulfillment type
    - `validityPeriod` number — Validity period in days
  - `createdAt` string, required — Creation timestamp
  - `description` string — Product description
  - `imageUrl` string — URL to the product image
  - `isMcpPay` boolean, required — Whether this product uses the no-code MCP integration (SolvaPay reverse proxy)
  - `mcp` object — MCP linkage details for MCP-enabled products
  - `metadata` object — Arbitrary key-value metadata
  - `name` string, required — Product name
  - `plans` SdkPlanResponse[] — Plans associated with this product
    - `billingCycle` string — Billing cycle
    - `billingModel` string — Billing model
    - `createdAt` string, required — Creation timestamp
    - `creditsPerUnit` number — Credits per usage unit (integer, >= 1)
    - `currency` string, required — Currency code (ISO 4217)
    - `currencySymbol` string — Currency symbol
    - `features` object — Plan features
    - `freeUnits` number — Included free units
    - `hidden` boolean, required — Whether the plan is hidden from the customer-facing catalog. Enterprise plans (true) do not appear in checkout or the SDK catalog and can only be granted via direct assignment.
    - `isActive` boolean, required — Whether the plan is active
    - `limit` number — Usage limit for the meter
    - `limits` object — Usage limits
    - `measures` string — What the plan measures for usage tracking
    - `meterRef` string — Meter reference for usage-based limits
    - `price` number, required — Plan price in cents
    - `reference` string, required — Plan reference
    - `requiresPayment` boolean, required — Whether payment is required
    - `rolloverUnusedUnits` boolean — Whether unused units roll over to next period
    - `setupFee` number — One-time setup fee
    - `status` string, required — Plan status
    - `trialDays` number — Free trial period in days
    - `updatedAt` string, required — Last update timestamp
  - `productType` string — Free-form product type
  - `reference` string, required — Product reference
  - `status` string, required — Product status
  - `totalTransactions` number, required — Total number of transactions
  - `updatedAt` string, required — Last update timestamp

## Other responses

- `400` — Missing required fields or validation error

---

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