---
title: "Update Checkout Session"
method: PATCH
path: "/v1/checkouts/{id}"
tags: ["checkouts", "public"]
---

# Update Checkout Session

`PATCH /v1/checkouts/{id}`

Update a checkout session.

**Scopes**: `checkouts:write`

## Path parameters

- `id` string, uuid4, required — The checkout session ID.

## Request body

- CheckoutUpdate — Update an existing checkout session using an access token.
  - `custom_field_data` object — Key-value object storing custom field values.
  - `product_id` string, uuid4, nullable — ID of the product to checkout. Must be present in the checkout's product list.
  - `product_price_id` string, uuid4, nullable — ID of the product price to checkout. Must correspond to a price present in the checkout's product list.
  - `amount` integer, nullable — Amount in cents, before discounts and taxes. Only useful for custom prices, it'll be ignored for fixed and free prices.
  - `seats` integer, nullable — Number of seats for seat-based pricing.
  - `is_business_customer` boolean, nullable
  - `customer_name` string, nullable — The name of the customer.
  - `customer_email` string, email, nullable — Email address of the customer.
  - `customer_billing_name` string, nullable
  - `customer_billing_address` AddressInput
    - `line1` string, nullable
    - `line2` string, nullable
    - `postal_code` string, nullable
    - `city` string, nullable
    - `state` string, nullable
    - `country` 'AD' | 'AE' | 'AF' | 'AG' | 'AI' | 'AL' | 'AM' | 'AO' | 'AQ' | 'AR' | 'AS' | 'AT' | 'AU' | 'AW' | 'AX' | 'AZ' | 'BA' | 'BB' | 'BD' | 'BE' | 'BF' | 'BG' | 'BH' | 'BI' | 'BJ' | 'BL' | 'BM' | 'BN' | 'BO' | 'BQ' | 'BR' | 'BS' | 'BT' | 'BV' | 'BW' | 'BY' | 'BZ' | 'CA' | 'CC' | 'CD' | 'CF' | 'CG' | 'CH' | 'CI' | 'CK' | 'CL' | 'CM' | 'CN' | 'CO' | 'CR' | 'CV' | 'CW' | 'CX' | 'CY' | 'CZ' | 'DE' | 'DJ' | 'DK' | 'DM' | 'DO' | 'DZ' | 'EC' | 'EE' | 'EG' | 'EH' | 'ER' | 'ES' | 'ET' | 'FI' | 'FJ' | 'FK' | 'FM' | 'FO' | 'FR' | 'GA' | 'GB' | 'GD' | 'GE' | 'GF' | 'GG' | 'GH' | 'GI' | 'GL' | 'GM' | 'GN' | 'GP' | 'GQ' | 'GR' | 'GS' | 'GT' | 'GU' | 'GW' | 'GY' | 'HK' | 'HM' | 'HN' | 'HR' | 'HT' | 'HU' | 'ID' | 'IE' | 'IL' | 'IM' | 'IN' | 'IO' | 'IQ' | 'IS' | 'IT' | 'JE' | 'JM' | 'JO' | 'JP' | 'KE' | 'KG' | 'KH' | 'KI' | 'KM' | 'KN' | 'KR' | 'KW' | 'KY' | 'KZ' | 'LA' | 'LB' | 'LC' | 'LI' | 'LK' | 'LR' | 'LS' | 'LT' | 'LU' | 'LV' | 'LY' | 'MA' | 'MC' | 'MD' | 'ME' | 'MF' | 'MG' | 'MH' | 'MK' | 'ML' | 'MM' | 'MN' | 'MO' | 'MP' | 'MQ' | 'MR' | 'MS' | 'MT' | 'MU' | 'MV' | 'MW' | 'MX' | 'MY' | 'MZ' | 'NA' | 'NC' | 'NE' | 'NF' | 'NG' | 'NI' | 'NL' | 'NO' | 'NP' | 'NR' | 'NU' | 'NZ' | 'OM' | 'PA' | 'PE' | 'PF' | 'PG' | 'PH' | 'PK' | 'PL' | 'PM' | 'PN' | 'PR' | 'PS' | 'PT' | 'PW' | 'PY' | 'QA' | 'RE' | 'RO' | 'RS' | 'RW' | 'SA' | 'SB' | 'SC' | 'SD' | 'SE' | 'SG' | 'SH' | 'SI' | 'SJ' | 'SK' | 'SL' | 'SM' | 'SN' | 'SO' | 'SR' | 'SS' | 'ST' | 'SV' | 'SX' | 'SZ' | 'TC' | 'TD' | 'TF' | 'TG' | 'TH' | 'TJ' | 'TK' | 'TL' | 'TM' | 'TN' | 'TO' | 'TR' | 'TT' | 'TV' | 'TW' | 'TZ' | 'UA' | 'UG' | 'UM' | 'US' | 'UY' | 'UZ' | 'VA' | 'VC' | 'VE' | 'VG' | 'VI' | 'VN' | 'VU' | 'WF' | 'WS' | 'YE' | 'YT' | 'ZA' | 'ZM' | 'ZW', required
  - `customer_tax_id` string, nullable
  - `locale` string, nullable — Locale of the customer, given as an IETF BCP 47 language tag, e.g. `en`, `en-US` or `en-GB-oxendict`. If `null` or unsupported, the locale will default to `en`.
  - `trial_interval` 'day' | 'week' | 'month' | 'year'
  - `trial_interval_count` integer, nullable — The number of interval units for the trial period.
  - `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**.
  - `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'
  - `discount_id` string, uuid4, nullable — ID of the discount to apply to the checkout.
  - `allow_discount_codes` boolean, nullable — Whether to allow the customer to apply discount codes. If you apply a discount through `discount_id`, it'll still be applied, but the customer won't be able to change it.
  - `require_billing_address` boolean, nullable — Whether to require the customer to fill their full billing address, instead of just the country. Customers in the US will always be required to fill their full address, regardless of this setting. If you preset the billing address, this setting will be automatically set to `true`.
  - `allow_trial` boolean, nullable — Whether to enable the trial period for the checkout session. If `false`, the trial period will be disabled, even if the selected product has a trial configured.
  - `customer_ip_address` string, ipvanyaddress, nullable
  - `customer_metadata` object, nullable — 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**.
  - `success_url` string, uri, nullable — URL where the customer will be redirected after a successful payment.You can add the `checkout_id={CHECKOUT_ID}` query parameter to retrieve the checkout session id.
  - `return_url` string, uri, nullable — When set, a back button will be shown in the checkout to return to this URL.
  - `embed_origin` string, nullable — If you plan to embed the checkout session, set this to the Origin of the embedding page. It'll allow the Polar iframe to communicate with the parent page.

## Response `200`

Checkout session updated.

- Checkout — Checkout session data retrieved using an access token.
  - `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.
  - `custom_field_data` object — Key-value object storing custom field values.
  - `payment_processor` 'stripe', required
  - `status` 'open' | 'expired' | 'confirmed' | 'succeeded' | 'failed', required
  - `client_secret` string, required — Client secret used to update and complete the checkout session from the client.
  - `url` string, required — URL where the customer can access the checkout session.
  - `expires_at` string, date-time, required — Expiration date and time of the checkout session.
  - `success_url` string, required — URL where the customer will be redirected after a successful payment.
  - `return_url` string, nullable, required — When set, a back button will be shown in the checkout to return to this URL.
  - `embed_origin` string, nullable, required — When checkout is embedded, represents the Origin of the page embedding the checkout. Used as a security measure to send messages only to the embedding page.
  - `amount` integer, required — Amount in cents, before discounts and taxes.
  - `seats` integer, nullable — Predefined number of seats (works with seat-based pricing only)
  - `min_seats` integer, nullable — Minimum number of seats (works with seat-based pricing only)
  - `max_seats` integer, nullable — Maximum number of seats (works with seat-based pricing only)
  - `discount_amount` integer, required — Discount amount in cents.
  - `net_amount` integer, required — Amount in cents, after discounts but before taxes.
  - `tax_amount` integer, nullable, required — Sales tax amount in cents. If `null`, it means there is no enough information yet to calculate it.
  - `tax_behavior` 'inclusive' | 'exclusive', required
  - `total_amount` integer, required — Amount in cents, after discounts and taxes.
  - `currency` string, required — Currency code of the checkout session.
  - `allow_trial` boolean, nullable, required — Whether to enable the trial period for the checkout session. If `false`, the trial period will be disabled, even if the selected product has a trial configured.
  - `active_trial_interval` 'day' | 'week' | 'month' | 'year', required
  - `active_trial_interval_count` integer, nullable, required — Number of interval units of the trial period, if any. This value is either set from the checkout, if `trial_interval_count` is set, or from the selected product.
  - `trial_end` string, date-time, nullable, required — End date and time of the trial period, if any.
  - `organization_id` string, uuid4, required — ID of the organization owning the checkout session.
  - `product_id` string, uuid4, nullable, required — ID of the product to checkout.
  - `product_price_id` string, uuid4, nullable, required — ID of the product price to checkout.
  - `discount_id` string, uuid4, nullable, required — ID of the discount applied to the checkout.
  - `allow_discount_codes` boolean, required — Whether to allow the customer to apply discount codes. If you apply a discount through `discount_id`, it'll still be applied, but the customer won't be able to change it.
  - `require_billing_address` boolean, required — Whether to require the customer to fill their full billing address, instead of just the country. Customers in the US will always be required to fill their full address, regardless of this setting. If you preset the billing address, this setting will be automatically set to `true`.
  - `is_discount_applicable` boolean, required — Whether the discount is applicable to the checkout. Typically, free and custom prices are not discountable.
  - `is_free_product_price` boolean, required — Whether the product price is free, regardless of discounts.
  - `is_payment_required` boolean, required — Whether the checkout requires payment, e.g. in case of free products or discounts that cover the total amount.
  - `is_payment_setup_required` boolean, required — Whether the checkout requires setting up a payment method, regardless of the amount, e.g. subscriptions that have first free cycles.
  - `is_payment_form_required` boolean, required — Whether the checkout requires a payment form, whether because of a payment or payment method setup.
  - `customer_id` string, uuid4, nullable, required
  - `is_business_customer` boolean, required — Whether the customer is a business or an individual. If `true`, the customer will be required to fill their full billing address and billing name.
  - `customer_name` string, nullable, required — Name of the customer.
  - `customer_email` string, nullable, required — Email address of the customer.
  - `customer_ip_address` string, ipvanyaddress, nullable, required
  - `customer_billing_name` string, nullable, required
  - `customer_billing_address` Address, required
    - `line1` string, nullable
    - `line2` string, nullable
    - `postal_code` string, nullable
    - `city` string, nullable
    - `state` string, nullable
    - `country` 'AD' | 'AE' | 'AF' | 'AG' | 'AI' | 'AL' | 'AM' | 'AO' | 'AQ' | 'AR' | 'AS' | 'AT' | 'AU' | 'AW' | 'AX' | 'AZ' | 'BA' | 'BB' | 'BD' | 'BE' | 'BF' | 'BG' | 'BH' | 'BI' | 'BJ' | 'BL' | 'BM' | 'BN' | 'BO' | 'BQ' | 'BR' | 'BS' | 'BT' | 'BV' | 'BW' | 'BY' | 'BZ' | 'CA' | 'CC' | 'CD' | 'CF' | 'CG' | 'CH' | 'CI' | 'CK' | 'CL' | 'CM' | 'CN' | 'CO' | 'CR' | 'CU' | 'CV' | 'CW' | 'CX' | 'CY' | 'CZ' | 'DE' | 'DJ' | 'DK' | 'DM' | 'DO' | 'DZ' | 'EC' | 'EE' | 'EG' | 'EH' | 'ER' | 'ES' | 'ET' | 'FI' | 'FJ' | 'FK' | 'FM' | 'FO' | 'FR' | 'GA' | 'GB' | 'GD' | 'GE' | 'GF' | 'GG' | 'GH' | 'GI' | 'GL' | 'GM' | 'GN' | 'GP' | 'GQ' | 'GR' | 'GS' | 'GT' | 'GU' | 'GW' | 'GY' | 'HK' | 'HM' | 'HN' | 'HR' | 'HT' | 'HU' | 'ID' | 'IE' | 'IL' | 'IM' | 'IN' | 'IO' | 'IQ' | 'IR' | 'IS' | 'IT' | 'JE' | 'JM' | 'JO' | 'JP' | 'KE' | 'KG' | 'KH' | 'KI' | 'KM' | 'KN' | 'KP' | 'KR' | 'KW' | 'KY' | 'KZ' | 'LA' | 'LB' | 'LC' | 'LI' | 'LK' | 'LR' | 'LS' | 'LT' | 'LU' | 'LV' | 'LY' | 'MA' | 'MC' | 'MD' | 'ME' | 'MF' | 'MG' | 'MH' | 'MK' | 'ML' | 'MM' | 'MN' | 'MO' | 'MP' | 'MQ' | 'MR' | 'MS' | 'MT' | 'MU' | 'MV' | 'MW' | 'MX' | 'MY' | 'MZ' | 'NA' | 'NC' | 'NE' | 'NF' | 'NG' | 'NI' | 'NL' | 'NO' | 'NP' | 'NR' | 'NU' | 'NZ' | 'OM' | 'PA' | 'PE' | 'PF' | 'PG' | 'PH' | 'PK' | 'PL' | 'PM' | 'PN' | 'PR' | 'PS' | 'PT' | 'PW' | 'PY' | 'QA' | 'RE' | 'RO' | 'RS' | 'RU' | 'RW' | 'SA' | 'SB' | 'SC' | 'SD' | 'SE' | 'SG' | 'SH' | 'SI' | 'SJ' | 'SK' | 'SL' | 'SM' | 'SN' | 'SO' | 'SR' | 'SS' | 'ST' | 'SV' | 'SX' | 'SY' | 'SZ' | 'TC' | 'TD' | 'TF' | 'TG' | 'TH' | 'TJ' | 'TK' | 'TL' | 'TM' | 'TN' | 'TO' | 'TR' | 'TT' | 'TV' | 'TW' | 'TZ' | 'UA' | 'UG' | 'UM' | 'US' | 'UY' | 'UZ' | 'VA' | 'VC' | 'VE' | 'VG' | 'VI' | 'VN' | 'VU' | 'WF' | 'WS' | 'YE' | 'YT' | 'ZA' | 'ZM' | 'ZW', required
  - `customer_tax_id` string, nullable, required
  - `locale` string, nullable
  - `payment_method_type` string, nullable, required — Payment method type selected by the customer in the checkout form, e.g. `card`, `apple_pay` or `upi`.
  - `payment_processor_metadata` object, required
  - `billing_address_fields` CheckoutBillingAddressFields, required
    - `country` 'required' | 'optional' | 'disabled', required
    - `state` 'required' | 'optional' | 'disabled', required
    - `city` 'required' | 'optional' | 'disabled', required
    - `postal_code` 'required' | 'optional' | 'disabled', required
    - `line1` 'required' | 'optional' | 'disabled', required
    - `line2` 'required' | 'optional' | 'disabled', required
  - `trial_interval` 'day' | 'week' | 'month' | 'year', required
  - `trial_interval_count` integer, nullable, required — The number of interval units for the trial period.
  - `metadata` MetadataOutputType, required
  - `external_customer_id` string, nullable, required — ID of the customer in your system. If a matching customer exists on Polar, the resulting order will be linked to this customer. Otherwise, a new customer will be created with this external ID set.
  - `products` CheckoutProduct[], required — List of products available to select.
    - `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.
    - `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)
              - …
          - 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.
              - …
    - `benefits` BenefitPublic[], required — List of benefits granted by the product.
      - `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' | 'discord' | 'github_repository' | 'downloadables' | 'license_keys' | 'meter_credit' | 'feature_flag' | '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.
    - `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
  - `product` CheckoutProduct, required — Product data for a checkout session.
    - `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.
    - `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)
              - …
          - 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.
              - …
    - `benefits` BenefitPublic[], required — List of benefits granted by the product.
      - `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' | 'discord' | 'github_repository' | 'downloadables' | 'license_keys' | 'meter_credit' | 'feature_flag' | '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.
    - `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
  - `product_price` union, required — Price of the selected product.
    - 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
            - `min_seats` integer, required — Minimum number of seats (inclusive)
            - `max_seats` integer, nullable — Maximum number of seats (inclusive). None for unlimited.
            - `price_per_seat` integer, required — Price per seat in cents for this tier
          - `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.
  - `prices` object, nullable, required — Mapping of product IDs to their list of prices.
  - `discount` union, required
    - CheckoutDiscountFixedOnceForeverDuration — Schema for a fixed amount discount that is applied once or forever.
      - `duration` 'once' | 'forever' | 'repeating', required
      - `type` 'fixed' | 'percentage', required
      - `amount` integer, required
      - `currency` string, required
      - `amounts` object, required — Map of currency to fixed amount to discount from the total.
      - `id` string, uuid4, required — The ID of the object.
      - `name` string, required
      - `code` string, nullable, required
    - CheckoutDiscountFixedRepeatDuration — Schema for a fixed amount discount that is applied on every invoice for a certain number of months.
      - `duration` 'once' | 'forever' | 'repeating', required
      - `duration_in_months` integer, required
      - `type` 'fixed' | 'percentage', required
      - `amount` integer, required
      - `currency` string, required
      - `amounts` object, required — Map of currency to fixed amount to discount from the total.
      - `id` string, uuid4, required — The ID of the object.
      - `name` string, required
      - `code` string, nullable, required
    - CheckoutDiscountPercentageOnceForeverDuration — Schema for a percentage discount that is applied once or forever.
      - `duration` 'once' | 'forever' | 'repeating', required
      - `type` 'fixed' | 'percentage', required
      - `basis_points` integer, required — Discount percentage in basis points. A basis point is 1/100th of a percent. For example, 1000 basis points equals a 10% discount.
      - `id` string, uuid4, required — The ID of the object.
      - `name` string, required
      - `code` string, nullable, required
    - CheckoutDiscountPercentageRepeatDuration — Schema for a percentage discount that is applied on every invoice for a certain number of months.
      - `duration` 'once' | 'forever' | 'repeating', required
      - `duration_in_months` integer, required
      - `type` 'fixed' | 'percentage', required
      - `basis_points` integer, required — Discount percentage in basis points. A basis point is 1/100th of a percent. For example, 1000 basis points equals a 10% discount.
      - `id` string, uuid4, required — The ID of the object.
      - `name` string, required
      - `code` string, nullable, required
  - `subscription_id` string, uuid4, nullable, required
  - `attached_custom_fields` AttachedCustomField[], nullable, required
    - `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.
  - `customer_metadata` object, required

## Other responses

- `403` — The checkout is expired, the customer already has an active subscription, or the organization is not ready to accept payments.
- `404` — Checkout session 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)
