---
title: "Create a checkout configuration"
method: POST
path: "/checkout_configurations"
tags: ["Checkout Configurations"]
---

# Create a checkout configuration

`POST /checkout_configurations`

Creates a reusable checkout configuration for an existing or inline plan.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `account_id` string — Account ID, prefixed `biz_`.
  - `affiliate_code` string, nullable — Affiliate code to apply to the checkout.
  - `currency` string, nullable — Currency used for setup-mode payment method availability.
  - `metadata` object, nullable — Custom key-value metadata copied to payments and memberships.
  - `mode` 'payment' | 'setup' — Controls whether checkout charges the buyer immediately or saves payment details for later. Defaults to `payment`.
  - `payment_method_configuration` object, nullable — Payment method overrides for this checkout. `null` uses the plan or platform defaults.
    - `disabled` string[] — Payment methods explicitly disabled for checkout.
    - `enabled` string[] — Payment methods explicitly enabled for checkout.
    - `include_platform_defaults` boolean — Whether platform default payment methods are included.
  - `plan` object, nullable — Plan attributes used to create or find a plan for this checkout configuration. Mutually exclusive with `plan_id`.
    - `account_id` string, nullable — Account ID for the inline plan, prefixed `biz_`. Defaults to the account resolved from the request.
    - `billing_period` integer, nullable — Recurring billing interval in days, such as 30 for monthly or 365 for annual.
    - `currency` string, nullable — Three-letter ISO currency code for the plan's prices.
    - `description` string, nullable — Customer-visible plan description.
    - `expiration_days` integer, nullable — Access duration in days for expiration-based plans.
    - `force_create_new_plan` boolean, nullable — Whether to create a new plan instead of reusing a matching one.
    - `initial_price` number, nullable — Initial purchase price in the plan currency.
    - `metadata` object, nullable — Custom key-value metadata stored on the plan.
    - `override_tax_type` string, nullable — Tax classification override for this plan.
    - `payment_method_configuration` object, nullable — Payment method overrides for the inline plan. `null` uses platform defaults.
      - `disabled` string[] — Payment methods explicitly disabled for this plan.
      - `enabled` string[] — Payment methods explicitly enabled for this plan.
      - `include_platform_defaults` boolean — Whether platform default payment methods are included.
    - `plan_type` 'renewal' | 'one_time' | 'null', nullable — Billing model for the plan.
    - `product_id` string, nullable — Product ID the inline plan should belong to, prefixed `prod_`.
    - `release_method` 'buy_now' | 'waitlist' | 'null', nullable — Sales method for the plan.
    - `renewal_price` number, nullable — Recurring price charged each billing period.
    - `stock` integer, nullable — Units available for purchase.
    - `three_ds_level` 'mandate_challenge' | 'frictionless' | 'null', nullable — 3D Secure behavior for the inline plan, or `null` to use the account default.
    - `title` string, nullable — Plan display name shown to customers.
    - `trial_period_days` integer, nullable — Free trial days before the first renewal charge.
    - `unlimited_stock` boolean, nullable — Whether the plan has unlimited stock.
    - `visibility` 'visible' | 'hidden' | 'archived' | 'quick_link' | 'null', nullable — Whether the plan is visible to customers or hidden from public view.
  - `plan_id` string, nullable — Existing plan ID, prefixed `plan_`. Mutually exclusive with `plan`.
  - `redirect_url` string, nullable — URL customers are sent to after checkout.
  - `three_ds_level` 'mandate_challenge' | 'frictionless' | 'null', nullable — 3D Secure behavior for this checkout.

## Response `200`

checkout configuration created

- object
  - `account_id` string, required — Account ID, prefixed `biz_`.
  - `affiliate_code` string, nullable — Affiliate code applied at checkout, or `null` when none is set.
  - `created_at` string, required — When the checkout configuration was created, as an ISO 8601 timestamp.
  - `currency` string, nullable — Currency used for setup-mode payment method availability; defaults to `usd` when omitted.
  - `id` string, required — Checkout configuration ID, prefixed `ch_`.
  - `metadata` object, nullable — Custom key-value metadata copied to payments and memberships. `null` without the `checkout_configuration:basic:read` scope.
  - `mode` 'payment' | 'setup', required — Controls whether checkout charges the buyer immediately or saves payment details for later.
  - `payment_method_configuration` object, nullable — Payment method overrides for this checkout. `null` when it uses the plan or platform defaults.
    - `disabled` string[] — Payment methods explicitly disabled for checkout.
    - `enabled` string[] — Payment methods explicitly enabled for checkout.
    - `include_platform_defaults` boolean — Whether platform default payment methods are included.
  - `plan` object, nullable — Plan used for payment checkout. `null` in setup mode.
    - `adaptive_pricing_enabled` boolean, required — Whether this plan accepts local currency payments via adaptive pricing.
    - `billing_period` integer, nullable, required — Recurring billing interval in days, such as 30 for monthly or 365 for annual. `null` for one-time plans.
    - `currency` string, required — Three-letter ISO currency code for the plan's prices.
    - `expiration_days` integer, nullable, required — Access duration in days for expiration-based plans.
    - `id` string, required — Plan ID, prefixed `plan_`.
    - `initial_price` number, required — Initial purchase price in the plan currency.
    - `plan_type` 'renewal' | 'one_time', required — Billing model for the plan.
    - `release_method` 'buy_now' | 'waitlist', required — Sales method for the plan.
    - `renewal_price` number, required — Recurring price charged each billing period.
    - `three_ds_level` 'mandate_challenge' | 'frictionless' | 'null', nullable, required — 3D Secure behavior for this plan, or `null` to use the account default.
    - `trial_period_days` integer, nullable, required — Free trial days before the first renewal charge.
    - `visibility` 'visible' | 'hidden' | 'archived' | 'quick_link', required — Whether the plan is visible to customers or hidden from public view.
  - `purchase_url` string, nullable — Checkout URL you can send to customers.
  - `redirect_url` string, nullable — URL customers are sent to after checkout, or `null` when no redirect is configured.
  - `three_ds_level` 'mandate_challenge' | 'frictionless' | 'null', nullable — 3D Secure behavior for this checkout, or `null` to use the account default.
  - `updated_at` string, required — When the checkout configuration was last updated, as an ISO 8601 timestamp.

## Other responses

- `401` — Unauthorized

---

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