---
title: "Update Product"
method: PATCH
path: "/v1/products/{id}"
tags: ["products", "public"]
---

# Update Product

`PATCH /v1/products/{id}`

Update a product.

**Scopes**: `products:write`

## Path parameters

- `id` string, uuid4, required — The product ID.

## Request body

- ProductUpdate — Schema to update a product.
  - `metadata` object — Key-value object allowing you to store additional information. The key must be a string with a maximum length of **40 characters**. The value must be either: * A string with a maximum length of **500 characters** * An integer * A floating-point number * A boolean You can store up to **50 key-value pairs**.
  - `trial_interval` 'day' | 'week' | 'month' | 'year'
  - `trial_interval_count` integer, nullable — The number of interval units for the trial period.
  - `name` string, nullable — The name of the product.
  - `description` string, nullable — The description of the product.
  - `recurring_interval` 'day' | 'week' | 'month' | 'year'
  - `recurring_interval_count` integer, nullable — Number of interval units of the subscription. If this is set to 1 the charge will happen every interval (e.g. every month), if set to 2 it will be every other month, and so on. Once set, it can't be changed.**
  - `is_archived` boolean, nullable — Whether the product is archived. If `true`, the product won't be available for purchase anymore. Existing customers will still have access to their benefits, and subscriptions will continue normally.
  - `visibility` 'draft' | 'private' | 'public'
  - `prices` union[], nullable — List of available prices for this product. If you want to keep existing prices, include them in the list as an `ExistingProductPrice` object.
    - union
      - ExistingProductPrice — A price that already exists for this product. Useful when updating a product if you want to keep an existing price.
        - `id` string, uuid4, required
      - union
        - ProductPriceFixedCreate — Schema to create a fixed price.
          - `amount_type` 'fixed', required
          - `price_currency` 'aed' | 'all' | 'amd' | 'aoa' | 'ars' | 'aud' | 'awg' | 'azn' | 'bam' | 'bbd' | 'bdt' | 'bif' | 'bmd' | 'bnd' | 'bob' | 'brl' | 'bsd' | 'bwp' | 'bzd' | 'cad' | 'cdf' | 'chf' | 'clp' | 'cny' | 'cop' | 'crc' | 'cve' | 'czk' | 'djf' | 'dkk' | 'dop' | 'dzd' | 'egp' | 'etb' | 'eur' | 'fjd' | 'fkp' | 'gbp' | 'gel' | 'gip' | 'gmd' | 'gnf' | 'gtq' | 'gyd' | 'hkd' | 'hnl' | 'htg' | 'huf' | 'idr' | 'ils' | 'inr' | 'isk' | 'jmd' | 'jpy' | 'kes' | 'kgs' | 'khr' | 'kmf' | 'krw' | 'kyd' | 'kzt' | 'lak' | 'lkr' | 'lrd' | 'lsl' | 'mad' | 'mdl' | 'mga' | 'mkd' | 'mnt' | 'mop' | 'mur' | 'mvr' | 'mwk' | 'mxn' | 'myr' | 'mzn' | 'nad' | 'ngn' | 'nio' | 'nok' | 'npr' | 'nzd' | 'pab' | 'pen' | 'pgk' | 'php' | 'pkr' | 'pln' | 'pyg' | 'qar' | 'ron' | 'rsd' | 'rwf' | 'sar' | 'sbd' | 'scr' | 'sek' | 'sgd' | 'shp' | 'sos' | 'srd' | 'szl' | 'thb' | 'tjs' | 'top' | 'try' | 'ttd' | 'twd' | 'tzs' | 'uah' | 'ugx' | 'usd' | 'uyu' | 'uzs' | 'vnd' | 'vuv' | 'wst' | 'xaf' | 'xcd' | 'xcg' | 'xof' | 'xpf' | 'yer' | 'zar' | 'zmw'
          - `tax_behavior` 'location' | 'inclusive' | 'exclusive'
          - `price_amount` integer, required — The price in cents. Set to `0` for a free price. Minimum amounts per currency: - USD: 0.5 - AED: 2 - ALL: 50 - AMD: 200 - AOA: 500 - ARS: 750 - AUD: 0.7 - AWG: 1 - AZN: 1 - BAM: 1 - BBD: 2 - BDT: 70 - BIF: 2,000 - BMD: 1 - BND: 1 - BOB: 5 - BRL: 2.5 - BSD: 1 - BWP: 10 - BZD: 2 - CAD: 0.7 - CDF: 2,000 - CHF: 0.5 - CLP: 500 - CNY: 5 - COP: 2,000 - CRC: 300 - CVE: 50 - CZK: 15 - DJF: 100 - DKK: 3.2 - DOP: 40 - DZD: 70 - EGP: 30 - ETB: 80 - EUR: 0.5 - FJD: 2 - FKP: 1 - GBP: 0.4 - GEL: 2 - GNF: 5,000 - GIP: 1 - GMD: 40 - GTQ: 5 - GYD: 200 - HKD: 4 - HNL: 20 - HTG: 70 - HUF: 175 - IDR: 9,000 - ILS: 1.5 - INR: 60 - ISK: 70 - JMD: 80 - JPY: 80 - KES: 70 - KGS: 50 - KHR: 3,000 - KMF: 500 - KRW: 800 - KYD: 1 - KZT: 300 - LAK: 20,000 - LKR: 200 - LRD: 100 - LSL: 10 - MAD: 5 - MDL: 10 - MGA: 3,000 - MKD: 50 - MNT: 2,000 - MOP: 5 - MUR: 50 - MVR: 8 - MXN: 9 - MWK: 1,000 - MYR: 2 - MZN: 50 - NAD: 10 - NGN: 700 - NIO: 20 - NOK: 5 - NPR: 80 - NZD: 0.9 - PAB: 1 - PEN: 2 - PGK: 3 - PHP: 35 - PKR: 200 - PLN: 2 - PYG: 4,000 - QAR: 2 - RON: 2.5 - RSD: 60 - RWF: 1,000 - SAR: 2 - SBD: 4 - SCR: 8 - SEK: 5 - SGD: 0.7 - SHP: 1 - SOS: 500 - SRD: 20 - SZL: 10 - THB: 20 - TJS: 5 - TOP: 2 - TRY: 30 - TTD: 4 - TWD: 20 - TZS: 2,000 - UAH: 30 - UGX: 2,000 - UYU: 20 - UZS: 7,000 - VND: 20,000 - VUV: 100 - WST: 2 - XAF: 500 - XCD: 2 - XCG: 1 - XOF: 500 - XPF: 100 - YER: 200 - ZAR: 9 - ZMW: 10 - Other currencies: 50 minor units
        - ProductPriceCustomCreate — Schema to create a pay-what-you-want price.
          - `amount_type` 'custom', required
          - `price_currency` 'aed' | 'all' | 'amd' | 'aoa' | 'ars' | 'aud' | 'awg' | 'azn' | 'bam' | 'bbd' | 'bdt' | 'bif' | 'bmd' | 'bnd' | 'bob' | 'brl' | 'bsd' | 'bwp' | 'bzd' | 'cad' | 'cdf' | 'chf' | 'clp' | 'cny' | 'cop' | 'crc' | 'cve' | 'czk' | 'djf' | 'dkk' | 'dop' | 'dzd' | 'egp' | 'etb' | 'eur' | 'fjd' | 'fkp' | 'gbp' | 'gel' | 'gip' | 'gmd' | 'gnf' | 'gtq' | 'gyd' | 'hkd' | 'hnl' | 'htg' | 'huf' | 'idr' | 'ils' | 'inr' | 'isk' | 'jmd' | 'jpy' | 'kes' | 'kgs' | 'khr' | 'kmf' | 'krw' | 'kyd' | 'kzt' | 'lak' | 'lkr' | 'lrd' | 'lsl' | 'mad' | 'mdl' | 'mga' | 'mkd' | 'mnt' | 'mop' | 'mur' | 'mvr' | 'mwk' | 'mxn' | 'myr' | 'mzn' | 'nad' | 'ngn' | 'nio' | 'nok' | 'npr' | 'nzd' | 'pab' | 'pen' | 'pgk' | 'php' | 'pkr' | 'pln' | 'pyg' | 'qar' | 'ron' | 'rsd' | 'rwf' | 'sar' | 'sbd' | 'scr' | 'sek' | 'sgd' | 'shp' | 'sos' | 'srd' | 'szl' | 'thb' | 'tjs' | 'top' | 'try' | 'ttd' | 'twd' | 'tzs' | 'uah' | 'ugx' | 'usd' | 'uyu' | 'uzs' | 'vnd' | 'vuv' | 'wst' | 'xaf' | 'xcd' | 'xcg' | 'xof' | 'xpf' | 'yer' | 'zar' | 'zmw'
          - `tax_behavior` 'location' | 'inclusive' | 'exclusive'
          - `minimum_amount` integer — The minimum amount the customer can pay. If set to 0, the price is 'free or pay what you want' and $0 is accepted. If set to a value below the minimum price amount for the currency, it will be rejected. Defaults to the minimum price amount for the currency. Minimum per currency: - USD: 0.5 - AED: 2 - ALL: 50 - AMD: 200 - AOA: 500 - ARS: 750 - AUD: 0.7 - AWG: 1 - AZN: 1 - BAM: 1 - BBD: 2 - BDT: 70 - BIF: 2,000 - BMD: 1 - BND: 1 - BOB: 5 - BRL: 2.5 - BSD: 1 - BWP: 10 - BZD: 2 - CAD: 0.7 - CDF: 2,000 - CHF: 0.5 - CLP: 500 - CNY: 5 - COP: 2,000 - CRC: 300 - CVE: 50 - CZK: 15 - DJF: 100 - DKK: 3.2 - DOP: 40 - DZD: 70 - EGP: 30 - ETB: 80 - EUR: 0.5 - FJD: 2 - FKP: 1 - GBP: 0.4 - GEL: 2 - GNF: 5,000 - GIP: 1 - GMD: 40 - GTQ: 5 - GYD: 200 - HKD: 4 - HNL: 20 - HTG: 70 - HUF: 175 - IDR: 9,000 - ILS: 1.5 - INR: 60 - ISK: 70 - JMD: 80 - JPY: 80 - KES: 70 - KGS: 50 - KHR: 3,000 - KMF: 500 - KRW: 800 - KYD: 1 - KZT: 300 - LAK: 20,000 - LKR: 200 - LRD: 100 - LSL: 10 - MAD: 5 - MDL: 10 - MGA: 3,000 - MKD: 50 - MNT: 2,000 - MOP: 5 - MUR: 50 - MVR: 8 - MXN: 9 - MWK: 1,000 - MYR: 2 - MZN: 50 - NAD: 10 - NGN: 700 - NIO: 20 - NOK: 5 - NPR: 80 - NZD: 0.9 - PAB: 1 - PEN: 2 - PGK: 3 - PHP: 35 - PKR: 200 - PLN: 2 - PYG: 4,000 - QAR: 2 - RON: 2.5 - RSD: 60 - RWF: 1,000 - SAR: 2 - SBD: 4 - SCR: 8 - SEK: 5 - SGD: 0.7 - SHP: 1 - SOS: 500 - SRD: 20 - SZL: 10 - THB: 20 - TJS: 5 - TOP: 2 - TRY: 30 - TTD: 4 - TWD: 20 - TZS: 2,000 - UAH: 30 - UGX: 2,000 - UYU: 20 - UZS: 7,000 - VND: 20,000 - VUV: 100 - WST: 2 - XAF: 500 - XCD: 2 - XCG: 1 - XOF: 500 - XPF: 100 - YER: 200 - ZAR: 9 - ZMW: 10 - Other currencies: 50 minor units
          - `maximum_amount` integer, nullable — The price in cents. Minimum amounts per currency: - USD: 0.5 - AED: 2 - ALL: 50 - AMD: 200 - AOA: 500 - ARS: 750 - AUD: 0.7 - AWG: 1 - AZN: 1 - BAM: 1 - BBD: 2 - BDT: 70 - BIF: 2,000 - BMD: 1 - BND: 1 - BOB: 5 - BRL: 2.5 - BSD: 1 - BWP: 10 - BZD: 2 - CAD: 0.7 - CDF: 2,000 - CHF: 0.5 - CLP: 500 - CNY: 5 - COP: 2,000 - CRC: 300 - CVE: 50 - CZK: 15 - DJF: 100 - DKK: 3.2 - DOP: 40 - DZD: 70 - EGP: 30 - ETB: 80 - EUR: 0.5 - FJD: 2 - FKP: 1 - GBP: 0.4 - GEL: 2 - GNF: 5,000 - GIP: 1 - GMD: 40 - GTQ: 5 - GYD: 200 - HKD: 4 - HNL: 20 - HTG: 70 - HUF: 175 - IDR: 9,000 - ILS: 1.5 - INR: 60 - ISK: 70 - JMD: 80 - JPY: 80 - KES: 70 - KGS: 50 - KHR: 3,000 - KMF: 500 - KRW: 800 - KYD: 1 - KZT: 300 - LAK: 20,000 - LKR: 200 - LRD: 100 - LSL: 10 - MAD: 5 - MDL: 10 - MGA: 3,000 - MKD: 50 - MNT: 2,000 - MOP: 5 - MUR: 50 - MVR: 8 - MXN: 9 - MWK: 1,000 - MYR: 2 - MZN: 50 - NAD: 10 - NGN: 700 - NIO: 20 - NOK: 5 - NPR: 80 - NZD: 0.9 - PAB: 1 - PEN: 2 - PGK: 3 - PHP: 35 - PKR: 200 - PLN: 2 - PYG: 4,000 - QAR: 2 - RON: 2.5 - RSD: 60 - RWF: 1,000 - SAR: 2 - SBD: 4 - SCR: 8 - SEK: 5 - SGD: 0.7 - SHP: 1 - SOS: 500 - SRD: 20 - SZL: 10 - THB: 20 - TJS: 5 - TOP: 2 - TRY: 30 - TTD: 4 - TWD: 20 - TZS: 2,000 - UAH: 30 - UGX: 2,000 - UYU: 20 - UZS: 7,000 - VND: 20,000 - VUV: 100 - WST: 2 - XAF: 500 - XCD: 2 - XCG: 1 - XOF: 500 - XPF: 100 - YER: 200 - ZAR: 9 - ZMW: 10 - Other currencies: 50 minor units
          - `preset_amount` integer, nullable — The price in cents. Minimum amounts per currency: - USD: 0.5 - AED: 2 - ALL: 50 - AMD: 200 - AOA: 500 - ARS: 750 - AUD: 0.7 - AWG: 1 - AZN: 1 - BAM: 1 - BBD: 2 - BDT: 70 - BIF: 2,000 - BMD: 1 - BND: 1 - BOB: 5 - BRL: 2.5 - BSD: 1 - BWP: 10 - BZD: 2 - CAD: 0.7 - CDF: 2,000 - CHF: 0.5 - CLP: 500 - CNY: 5 - COP: 2,000 - CRC: 300 - CVE: 50 - CZK: 15 - DJF: 100 - DKK: 3.2 - DOP: 40 - DZD: 70 - EGP: 30 - ETB: 80 - EUR: 0.5 - FJD: 2 - FKP: 1 - GBP: 0.4 - GEL: 2 - GNF: 5,000 - GIP: 1 - GMD: 40 - GTQ: 5 - GYD: 200 - HKD: 4 - HNL: 20 - HTG: 70 - HUF: 175 - IDR: 9,000 - ILS: 1.5 - INR: 60 - ISK: 70 - JMD: 80 - JPY: 80 - KES: 70 - KGS: 50 - KHR: 3,000 - KMF: 500 - KRW: 800 - KYD: 1 - KZT: 300 - LAK: 20,000 - LKR: 200 - LRD: 100 - LSL: 10 - MAD: 5 - MDL: 10 - MGA: 3,000 - MKD: 50 - MNT: 2,000 - MOP: 5 - MUR: 50 - MVR: 8 - MXN: 9 - MWK: 1,000 - MYR: 2 - MZN: 50 - NAD: 10 - NGN: 700 - NIO: 20 - NOK: 5 - NPR: 80 - NZD: 0.9 - PAB: 1 - PEN: 2 - PGK: 3 - PHP: 35 - PKR: 200 - PLN: 2 - PYG: 4,000 - QAR: 2 - RON: 2.5 - RSD: 60 - RWF: 1,000 - SAR: 2 - SBD: 4 - SCR: 8 - SEK: 5 - SGD: 0.7 - SHP: 1 - SOS: 500 - SRD: 20 - SZL: 10 - THB: 20 - TJS: 5 - TOP: 2 - TRY: 30 - TTD: 4 - TWD: 20 - TZS: 2,000 - UAH: 30 - UGX: 2,000 - UYU: 20 - UZS: 7,000 - VND: 20,000 - VUV: 100 - WST: 2 - XAF: 500 - XCD: 2 - XCG: 1 - XOF: 500 - XPF: 100 - YER: 200 - ZAR: 9 - ZMW: 10 - Other currencies: 50 minor units
        - ProductPriceSeatBasedCreate — Schema to create a seat-based price with volume-based tiers.
          - `amount_type` 'seat_based', required
          - `price_currency` 'aed' | 'all' | 'amd' | 'aoa' | 'ars' | 'aud' | 'awg' | 'azn' | 'bam' | 'bbd' | 'bdt' | 'bif' | 'bmd' | 'bnd' | 'bob' | 'brl' | 'bsd' | 'bwp' | 'bzd' | 'cad' | 'cdf' | 'chf' | 'clp' | 'cny' | 'cop' | 'crc' | 'cve' | 'czk' | 'djf' | 'dkk' | 'dop' | 'dzd' | 'egp' | 'etb' | 'eur' | 'fjd' | 'fkp' | 'gbp' | 'gel' | 'gip' | 'gmd' | 'gnf' | 'gtq' | 'gyd' | 'hkd' | 'hnl' | 'htg' | 'huf' | 'idr' | 'ils' | 'inr' | 'isk' | 'jmd' | 'jpy' | 'kes' | 'kgs' | 'khr' | 'kmf' | 'krw' | 'kyd' | 'kzt' | 'lak' | 'lkr' | 'lrd' | 'lsl' | 'mad' | 'mdl' | 'mga' | 'mkd' | 'mnt' | 'mop' | 'mur' | 'mvr' | 'mwk' | 'mxn' | 'myr' | 'mzn' | 'nad' | 'ngn' | 'nio' | 'nok' | 'npr' | 'nzd' | 'pab' | 'pen' | 'pgk' | 'php' | 'pkr' | 'pln' | 'pyg' | 'qar' | 'ron' | 'rsd' | 'rwf' | 'sar' | 'sbd' | 'scr' | 'sek' | 'sgd' | 'shp' | 'sos' | 'srd' | 'szl' | 'thb' | 'tjs' | 'top' | 'try' | 'ttd' | 'twd' | 'tzs' | 'uah' | 'ugx' | 'usd' | 'uyu' | 'uzs' | 'vnd' | 'vuv' | 'wst' | 'xaf' | 'xcd' | 'xcg' | 'xof' | 'xpf' | 'yer' | 'zar' | 'zmw'
          - `tax_behavior` 'location' | 'inclusive' | 'exclusive'
          - `seat_tiers` ProductPriceSeatTiersInput, required — List of pricing tiers for seat-based pricing. The minimum and maximum seat limits are derived from the tiers: - minimum_seats = first tier's min_seats - maximum_seats = last tier's max_seats (None for unlimited)
            - `seat_tier_type` 'volume' | 'graduated'
            - `tiers` ProductPriceSeatTier[], required — List of pricing tiers
              - …
        - ProductPriceMeteredUnitCreate — Schema to create a metered price with a fixed unit price.
          - `amount_type` 'metered_unit', required
          - `price_currency` 'aed' | 'all' | 'amd' | 'aoa' | 'ars' | 'aud' | 'awg' | 'azn' | 'bam' | 'bbd' | 'bdt' | 'bif' | 'bmd' | 'bnd' | 'bob' | 'brl' | 'bsd' | 'bwp' | 'bzd' | 'cad' | 'cdf' | 'chf' | 'clp' | 'cny' | 'cop' | 'crc' | 'cve' | 'czk' | 'djf' | 'dkk' | 'dop' | 'dzd' | 'egp' | 'etb' | 'eur' | 'fjd' | 'fkp' | 'gbp' | 'gel' | 'gip' | 'gmd' | 'gnf' | 'gtq' | 'gyd' | 'hkd' | 'hnl' | 'htg' | 'huf' | 'idr' | 'ils' | 'inr' | 'isk' | 'jmd' | 'jpy' | 'kes' | 'kgs' | 'khr' | 'kmf' | 'krw' | 'kyd' | 'kzt' | 'lak' | 'lkr' | 'lrd' | 'lsl' | 'mad' | 'mdl' | 'mga' | 'mkd' | 'mnt' | 'mop' | 'mur' | 'mvr' | 'mwk' | 'mxn' | 'myr' | 'mzn' | 'nad' | 'ngn' | 'nio' | 'nok' | 'npr' | 'nzd' | 'pab' | 'pen' | 'pgk' | 'php' | 'pkr' | 'pln' | 'pyg' | 'qar' | 'ron' | 'rsd' | 'rwf' | 'sar' | 'sbd' | 'scr' | 'sek' | 'sgd' | 'shp' | 'sos' | 'srd' | 'szl' | 'thb' | 'tjs' | 'top' | 'try' | 'ttd' | 'twd' | 'tzs' | 'uah' | 'ugx' | 'usd' | 'uyu' | 'uzs' | 'vnd' | 'vuv' | 'wst' | 'xaf' | 'xcd' | 'xcg' | 'xof' | 'xpf' | 'yer' | 'zar' | 'zmw'
          - `tax_behavior` 'location' | 'inclusive' | 'exclusive'
          - `meter_id` string, uuid4, required — The ID of the meter associated to the price.
          - `unit_amount` union, required — The price per unit in cents. Supports up to 12 decimal places.
            - number
            - string
          - `cap_amount` integer, nullable — Optional maximum amount in cents that can be charged, regardless of the number of units consumed.
  - `medias` string[], nullable — List of file IDs. Each one must be on the same organization as the product, of type `product_media` and correctly uploaded.
  - `attached_custom_fields` AttachedCustomFieldCreate[], nullable — List of custom fields to attach.
    - `custom_field_id` string, uuid4, required — ID of the custom field to attach.
    - `required` boolean, required — Whether the value is required for this custom field.

## Response `200`

Product updated.

- Product — A product.
  - `id` string, uuid4, required — The ID of the object.
  - `created_at` string, date-time, required — Creation timestamp of the object.
  - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
  - `trial_interval` 'day' | 'week' | 'month' | 'year', required
  - `trial_interval_count` integer, nullable, required — The number of interval units for the trial period.
  - `name` string, required — The name of the product.
  - `description` string, nullable, required — The description of the product.
  - `visibility` 'draft' | 'private' | 'public', required
  - `recurring_interval` 'day' | 'week' | 'month' | 'year', required
  - `recurring_interval_count` integer, nullable, required — Number of interval units of the subscription. If this is set to 1 the charge will happen every interval (e.g. every month), if set to 2 it will be every other month, and so on. None for one-time products.
  - `meter_interval` 'day' | 'week' | 'month' | 'year', required
  - `meter_interval_count` integer, nullable, required — Number of meter interval units. None when no meter cycle is set.
  - `is_recurring` boolean, required — Whether the product is a subscription.
  - `is_archived` boolean, required — Whether the product is archived and no longer available.
  - `organization_id` string, uuid4, required — The ID of the organization owning the product.
  - `metadata` MetadataOutputType, required
  - `prices` union[], required — List of prices for this product.
    - union
      - union
        - LegacyRecurringProductPriceFixed — A recurring price for a product, i.e. a subscription. **Deprecated**: The recurring interval should be set on the product itself.
          - `created_at` string, date-time, required — Creation timestamp of the object.
          - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
          - `id` string, uuid4, required — The ID of the price.
          - `source` 'catalog' | 'ad_hoc', required
          - `amount_type` 'fixed', required
          - `price_currency` string, required — The currency in which the customer will be charged.
          - `tax_behavior` 'location' | 'inclusive' | 'exclusive', required
          - `is_archived` boolean, required — Whether the price is archived and no longer available.
          - `product_id` string, uuid4, required — The ID of the product owning the price.
          - `type` 'recurring', required — The type of the price.
          - `recurring_interval` 'day' | 'week' | 'month' | 'year', required
          - `price_amount` integer, required — The price in cents.
          - `legacy` true, required
        - LegacyRecurringProductPriceCustom — A pay-what-you-want recurring price for a product, i.e. a subscription. **Deprecated**: The recurring interval should be set on the product itself.
          - `created_at` string, date-time, required — Creation timestamp of the object.
          - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
          - `id` string, uuid4, required — The ID of the price.
          - `source` 'catalog' | 'ad_hoc', required
          - `amount_type` 'custom', required
          - `price_currency` string, required — The currency in which the customer will be charged.
          - `tax_behavior` 'location' | 'inclusive' | 'exclusive', required
          - `is_archived` boolean, required — Whether the price is archived and no longer available.
          - `product_id` string, uuid4, required — The ID of the product owning the price.
          - `type` 'recurring', required — The type of the price.
          - `recurring_interval` 'day' | 'week' | 'month' | 'year', required
          - `minimum_amount` integer, required — The minimum amount the customer can pay. If 0, the price is 'free or pay what you want'.
          - `maximum_amount` integer, nullable, required — The maximum amount the customer can pay.
          - `preset_amount` integer, nullable, required — The initial amount shown to the customer.
          - `legacy` true, required
      - union
        - ProductPriceFixed — A fixed price for a product.
          - `created_at` string, date-time, required — Creation timestamp of the object.
          - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
          - `id` string, uuid4, required — The ID of the price.
          - `source` 'catalog' | 'ad_hoc', required
          - `amount_type` 'fixed', required
          - `price_currency` string, required — The currency in which the customer will be charged.
          - `tax_behavior` 'location' | 'inclusive' | 'exclusive', required
          - `is_archived` boolean, required — Whether the price is archived and no longer available.
          - `product_id` string, uuid4, required — The ID of the product owning the price.
          - `price_amount` integer, required — The price in cents.
        - ProductPriceCustom — A pay-what-you-want price for a product.
          - `created_at` string, date-time, required — Creation timestamp of the object.
          - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
          - `id` string, uuid4, required — The ID of the price.
          - `source` 'catalog' | 'ad_hoc', required
          - `amount_type` 'custom', required
          - `price_currency` string, required — The currency in which the customer will be charged.
          - `tax_behavior` 'location' | 'inclusive' | 'exclusive', required
          - `is_archived` boolean, required — Whether the price is archived and no longer available.
          - `product_id` string, uuid4, required — The ID of the product owning the price.
          - `minimum_amount` integer, required — The minimum amount the customer can pay. If 0, the price is 'free or pay what you want'.
          - `maximum_amount` integer, nullable, required — The maximum amount the customer can pay.
          - `preset_amount` integer, nullable, required — The initial amount shown to the customer.
        - ProductPriceSeatBased — A seat-based price for a product.
          - `created_at` string, date-time, required — Creation timestamp of the object.
          - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
          - `id` string, uuid4, required — The ID of the price.
          - `source` 'catalog' | 'ad_hoc', required
          - `amount_type` 'seat_based', required
          - `price_currency` string, required — The currency in which the customer will be charged.
          - `tax_behavior` 'location' | 'inclusive' | 'exclusive', required
          - `is_archived` boolean, required — Whether the price is archived and no longer available.
          - `product_id` string, uuid4, required — The ID of the product owning the price.
          - `seat_tiers` ProductPriceSeatTiersOutput, required — List of pricing tiers for seat-based pricing. The minimum and maximum seat limits are derived from the tiers: - minimum_seats = first tier's min_seats - maximum_seats = last tier's max_seats (None for unlimited)
            - `seat_tier_type` 'volume' | 'graduated'
            - `tiers` ProductPriceSeatTier[], required — List of pricing tiers
              - …
            - `minimum_seats` integer, required — Minimum number of seats required for purchase, derived from first tier.
            - `maximum_seats` integer, nullable, required — Maximum number of seats allowed for purchase, derived from last tier. None for unlimited.
        - ProductPriceMeteredUnit — A metered, usage-based, price for a product, with a fixed unit price.
          - `created_at` string, date-time, required — Creation timestamp of the object.
          - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
          - `id` string, uuid4, required — The ID of the price.
          - `source` 'catalog' | 'ad_hoc', required
          - `amount_type` 'metered_unit', required
          - `price_currency` string, required — The currency in which the customer will be charged.
          - `tax_behavior` 'location' | 'inclusive' | 'exclusive', required
          - `is_archived` boolean, required — Whether the price is archived and no longer available.
          - `product_id` string, uuid4, required — The ID of the product owning the price.
          - `unit_amount` string, required — The price per unit in cents.
          - `cap_amount` integer, nullable, required — The maximum amount in cents that can be charged, regardless of the number of units consumed.
          - `meter_id` string, uuid4, required — The ID of the meter associated to the price.
          - `meter` ProductPriceMeter, required — A meter associated to a metered price.
            - `id` string, uuid4, required — The ID of the object.
            - `name` string, required — The name of the meter.
            - `unit` 'scalar' | 'token' | 'custom', required
            - `custom_label` string, nullable, required — The label for the custom unit.
            - `custom_multiplier` integer, nullable, required — The multiplier to convert from base unit to display scale.
  - `benefits` Benefit[], required — List of benefits granted by the product.
    - union
      - BenefitCustom — A benefit of type `custom`. Use it to grant any kind of benefit that doesn't fit in the other types.
        - `id` string, uuid4, required — The ID of the benefit.
        - `created_at` string, date-time, required — Creation timestamp of the object.
        - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
        - `type` 'custom', required
        - `description` string, required — The description of the benefit.
        - `selectable` boolean, required — Whether the benefit is selectable when creating a product.
        - `deletable` boolean, required — Whether the benefit is deletable.
        - `is_deleted` boolean, required — Whether the benefit is deleted.
        - `organization_id` string, uuid4, required — The ID of the organization owning the benefit.
        - `metadata` MetadataOutputType, required
        - `visibility` 'draft' | 'private' | 'public', required
        - `properties` BenefitCustomProperties, required — Properties for a benefit of type `custom`.
          - `note` string, nullable, required
        - `visibility_configurable` boolean, required
      - BenefitDiscord — A benefit of type `discord`. Use it to automatically invite your backers to a Discord server.
        - `id` string, uuid4, required — The ID of the benefit.
        - `created_at` string, date-time, required — Creation timestamp of the object.
        - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
        - `type` 'discord', required
        - `description` string, required — The description of the benefit.
        - `selectable` boolean, required — Whether the benefit is selectable when creating a product.
        - `deletable` boolean, required — Whether the benefit is deletable.
        - `is_deleted` boolean, required — Whether the benefit is deleted.
        - `organization_id` string, uuid4, required — The ID of the organization owning the benefit.
        - `metadata` MetadataOutputType, required
        - `visibility` 'draft' | 'private' | 'public', required
        - `properties` BenefitDiscordProperties, required — Properties for a benefit of type `discord`.
          - `guild_id` string, required — The ID of the Discord server.
          - `role_id` string, required — The ID of the Discord role to grant.
          - `kick_member` boolean, required — Whether to kick the member from the Discord server on revocation.
          - `guild_token` string, required
        - `visibility_configurable` boolean, required
      - BenefitGitHubRepository — A benefit of type `github_repository`. Use it to automatically invite your backers to a private GitHub repository.
        - `id` string, uuid4, required — The ID of the benefit.
        - `created_at` string, date-time, required — Creation timestamp of the object.
        - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
        - `type` 'github_repository', required
        - `description` string, required — The description of the benefit.
        - `selectable` boolean, required — Whether the benefit is selectable when creating a product.
        - `deletable` boolean, required — Whether the benefit is deletable.
        - `is_deleted` boolean, required — Whether the benefit is deleted.
        - `organization_id` string, uuid4, required — The ID of the organization owning the benefit.
        - `metadata` MetadataOutputType, required
        - `visibility` 'draft' | 'private' | 'public', required
        - `properties` BenefitGitHubRepositoryProperties, required — Properties for a benefit of type `github_repository`.
          - `repository_owner` string, required — The owner of the repository.
          - `repository_name` string, required — The name of the repository.
          - `permission` 'pull' | 'triage' | 'push' | 'maintain' | 'admin', required — The permission level to grant. Read more about roles and their permissions on [GitHub documentation](https://docs.github.com/en/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/repository-roles-for-an-organization#permissions-for-each-role).
        - `visibility_configurable` boolean, required
      - BenefitDownloadables
        - `id` string, uuid4, required — The ID of the benefit.
        - `created_at` string, date-time, required — Creation timestamp of the object.
        - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
        - `type` 'downloadables', required
        - `description` string, required — The description of the benefit.
        - `selectable` boolean, required — Whether the benefit is selectable when creating a product.
        - `deletable` boolean, required — Whether the benefit is deletable.
        - `is_deleted` boolean, required — Whether the benefit is deleted.
        - `organization_id` string, uuid4, required — The ID of the organization owning the benefit.
        - `metadata` MetadataOutputType, required
        - `visibility` 'draft' | 'private' | 'public', required
        - `properties` BenefitDownloadablesProperties, required
          - `archived` object, required
          - `files` string[], required
        - `visibility_configurable` boolean, required
      - BenefitLicenseKeys
        - `id` string, uuid4, required — The ID of the benefit.
        - `created_at` string, date-time, required — Creation timestamp of the object.
        - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
        - `type` 'license_keys', required
        - `description` string, required — The description of the benefit.
        - `selectable` boolean, required — Whether the benefit is selectable when creating a product.
        - `deletable` boolean, required — Whether the benefit is deletable.
        - `is_deleted` boolean, required — Whether the benefit is deleted.
        - `organization_id` string, uuid4, required — The ID of the organization owning the benefit.
        - `metadata` MetadataOutputType, required
        - `visibility` 'draft' | 'private' | 'public', required
        - `properties` BenefitLicenseKeysProperties, required
          - `prefix` string, nullable, required
          - `expires` BenefitLicenseKeyExpirationProperties, required
            - `ttl` integer, required
            - `timeframe` 'year' | 'month' | 'day', required
          - `activations` BenefitLicenseKeyActivationProperties, required
            - `limit` integer, required
            - `enable_customer_admin` boolean, required
          - `limit_usage` integer, nullable, required
        - `visibility_configurable` boolean, required
      - BenefitMeterCredit — A benefit of type `meter_unit`. Use it to grant a number of units on a specific meter.
        - `id` string, uuid4, required — The ID of the benefit.
        - `created_at` string, date-time, required — Creation timestamp of the object.
        - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
        - `type` 'meter_credit', required
        - `description` string, required — The description of the benefit.
        - `selectable` boolean, required — Whether the benefit is selectable when creating a product.
        - `deletable` boolean, required — Whether the benefit is deletable.
        - `is_deleted` boolean, required — Whether the benefit is deleted.
        - `organization_id` string, uuid4, required — The ID of the organization owning the benefit.
        - `metadata` MetadataOutputType, required
        - `visibility` 'draft' | 'private' | 'public', required
        - `properties` BenefitMeterCreditProperties, required — Properties for a benefit of type `meter_unit`.
          - `units` integer, required
          - `rollover` boolean, required
          - `meter_id` string, uuid4, required
        - `visibility_configurable` boolean, required
      - BenefitFeatureFlag — A benefit of type `feature_flag`. Use it to grant feature flags with key-value metadata that can be queried via the API and webhooks.
        - `id` string, uuid4, required — The ID of the benefit.
        - `created_at` string, date-time, required — Creation timestamp of the object.
        - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
        - `type` 'feature_flag', required
        - `description` string, required — The description of the benefit.
        - `selectable` boolean, required — Whether the benefit is selectable when creating a product.
        - `deletable` boolean, required — Whether the benefit is deletable.
        - `is_deleted` boolean, required — Whether the benefit is deleted.
        - `organization_id` string, uuid4, required — The ID of the organization owning the benefit.
        - `metadata` MetadataOutputType, required
        - `visibility` 'draft' | 'private' | 'public', required
        - `properties` BenefitFeatureFlagProperties, required — Properties for a benefit of type `feature_flag`.
        - `visibility_configurable` boolean, required
      - BenefitSlackSharedChannel
        - `id` string, uuid4, required — The ID of the benefit.
        - `created_at` string, date-time, required — Creation timestamp of the object.
        - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
        - `type` 'slack_shared_channel', required
        - `description` string, required — The description of the benefit.
        - `selectable` boolean, required — Whether the benefit is selectable when creating a product.
        - `deletable` boolean, required — Whether the benefit is deletable.
        - `is_deleted` boolean, required — Whether the benefit is deleted.
        - `organization_id` string, uuid4, required — The ID of the organization owning the benefit.
        - `metadata` MetadataOutputType, required
        - `visibility` 'draft' | 'private' | 'public', required
        - `properties` BenefitSlackSharedChannelProperties, required
          - `slack_integration_id` string, uuid4, required — Polar Slack integration linked to this benefit.
          - `channel_name_template` string, required — Template for the channel name. Supports placeholders: {customer_name}, {customer_email_local}, and {metadata.<key>} for any value stored in customer user metadata.
          - `private` boolean — Create the channel as private (recommended).
          - `welcome_message` string, nullable — Optional message posted to the channel right after creation.
          - `archive_on_revoke` boolean — Archive the channel when the benefit is revoked.
          - `team_invitees` string[] — Slack user IDs from the merchant workspace to invite to every channel created for this benefit.
        - `visibility_configurable` boolean, required
  - `medias` ProductMediaFileRead[], required — List of medias associated to the product.
    - `id` string, uuid4, required — The ID of the object.
    - `organization_id` string, uuid4, required
    - `name` string, required
    - `path` string, required
    - `mime_type` string, required
    - `size` integer, required
    - `storage_version` string, nullable, required
    - `checksum_etag` string, nullable, required
    - `checksum_sha256_base64` string, nullable, required
    - `checksum_sha256_hex` string, nullable, required
    - `last_modified_at` string, date-time, nullable, required
    - `version` string, nullable, required
    - `service` 'product_media', required
    - `is_uploaded` boolean, required
    - `created_at` string, date-time, required
    - `size_readable` string, required
    - `public_url` string, required
  - `attached_custom_fields` AttachedCustomField[], required — List of custom fields attached to the product.
    - `custom_field_id` string, uuid4, required — ID of the custom field.
    - `custom_field` union, required
      - CustomFieldText — Schema for a custom field of type text.
        - `created_at` string, date-time, required — Creation timestamp of the object.
        - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
        - `id` string, uuid4, required — The ID of the object.
        - `metadata` MetadataOutputType, required
        - `type` 'text', required
        - `slug` string, required — Identifier of the custom field. It'll be used as key when storing the value.
        - `name` string, required — Name of the custom field.
        - `organization_id` string, uuid4, required — The ID of the organization owning the custom field.
        - `properties` CustomFieldTextProperties, required
          - `form_label` string
          - `form_help_text` string
          - `form_placeholder` string
          - `textarea` boolean
          - `min_length` integer
          - `max_length` integer
      - CustomFieldNumber — Schema for a custom field of type number.
        - `created_at` string, date-time, required — Creation timestamp of the object.
        - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
        - `id` string, uuid4, required — The ID of the object.
        - `metadata` MetadataOutputType, required
        - `type` 'number', required
        - `slug` string, required — Identifier of the custom field. It'll be used as key when storing the value.
        - `name` string, required — Name of the custom field.
        - `organization_id` string, uuid4, required — The ID of the organization owning the custom field.
        - `properties` CustomFieldNumberProperties, required
          - `form_label` string
          - `form_help_text` string
          - `form_placeholder` string
          - `ge` integer
          - `le` integer
      - CustomFieldDate — Schema for a custom field of type date.
        - `created_at` string, date-time, required — Creation timestamp of the object.
        - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
        - `id` string, uuid4, required — The ID of the object.
        - `metadata` MetadataOutputType, required
        - `type` 'date', required
        - `slug` string, required — Identifier of the custom field. It'll be used as key when storing the value.
        - `name` string, required — Name of the custom field.
        - `organization_id` string, uuid4, required — The ID of the organization owning the custom field.
        - `properties` CustomFieldDateProperties, required
          - `form_label` string
          - `form_help_text` string
          - `form_placeholder` string
          - `ge` integer
          - `le` integer
      - CustomFieldCheckbox — Schema for a custom field of type checkbox.
        - `created_at` string, date-time, required — Creation timestamp of the object.
        - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
        - `id` string, uuid4, required — The ID of the object.
        - `metadata` MetadataOutputType, required
        - `type` 'checkbox', required
        - `slug` string, required — Identifier of the custom field. It'll be used as key when storing the value.
        - `name` string, required — Name of the custom field.
        - `organization_id` string, uuid4, required — The ID of the organization owning the custom field.
        - `properties` CustomFieldCheckboxProperties, required
          - `form_label` string
          - `form_help_text` string
          - `form_placeholder` string
      - CustomFieldSelect — Schema for a custom field of type select.
        - `created_at` string, date-time, required — Creation timestamp of the object.
        - `modified_at` string, date-time, nullable, required — Last modification timestamp of the object.
        - `id` string, uuid4, required — The ID of the object.
        - `metadata` MetadataOutputType, required
        - `type` 'select', required
        - `slug` string, required — Identifier of the custom field. It'll be used as key when storing the value.
        - `name` string, required — Name of the custom field.
        - `organization_id` string, uuid4, required — The ID of the organization owning the custom field.
        - `properties` CustomFieldSelectProperties, required
          - `form_label` string
          - `form_help_text` string
          - `form_placeholder` string
          - `options` CustomFieldSelectOption[], required
            - `value` string, required
            - `label` string, required
    - `order` integer, required — Order of the custom field in the resource.
    - `required` boolean, required — Whether the value is required for this custom field.

## Other responses

- `403` — You don't have the permission to update this product.
- `404` — Product not found.
- `422` — Validation Error

---

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