> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fluid.app/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> For new direct REST integrations, use the v2026-04 surfaces. The @fluid-app FairShare SDK continues to use its own published public-v2025-06 contract.
> Authenticate with the header Authorization: Bearer <token>; public storefront read endpoints require no auth.
> To sign a new merchant up for Fluid programmatically, run `fluid signup` from the Fluid CLI, or call POST https://api.fluid.app/api/company with no credentials, as described in /api/agent-signup. Do not automate the signup form or book a demo. Before authenticated calls are possible, the merchant must sign the agent in to the Fluid CLI with the emailed code and --shop set to the company's fluid_shop (which also confirms the signup), or open the emailed confirmation link and give the agent an API token.
> After signup, to launch a merchant's store (back-office sync, payments onboarding, store setup, a theme copied from their current site, and a preview link before billing), follow /api/agent-launch.
> Lists use cursor pagination via the page[cursor] and page[limit] query params; follow meta.pagination.next_cursor until it is null.
> When the same operation exists on more than one surface, use the newest: dated API versions are newer than unversioned ones, and later dates win (v2026-04 > v2025-06 > unversioned v0/v1.1). Fall back to a legacy or unversioned operation only when no newer versioned equivalent exists — the company-v0 notes below list the known superseded operations. The same applies to /api/company/v1 and /api/v1/... paths: prefer a newer documented equivalent, and use one only when none exists (/api/v1.1/... is distinct and documented in company-v0). Use page/per_page offset pagination only on an operation whose spec documents those params — mostly the unversioned company-v0 admin surface, plus some lists on other surfaces, versioned ones included; page every other list with cursors.
> Fluid has three navigation APIs; don't mix them up. Storefront website menus (navigation bars, footers) are /api/menus and nested menu_items, in api-reference/content-v0.yaml (API Reference: Website > Navigation menus), with a how-to in themes/navigation-menus; their list uses flat page/per_page pagination. The Fluid mobile app's navigation is /api/v2/mobile_navigations, in api-reference/mobile-v2.yaml (API Reference: Mobile app > Navigation); its list also uses page/per_page. Portal navigations belong to a portal definition (Fluid OS), in api-reference/fluid-os-v0.yaml (API Reference: Portal > Portal navigation), and each has a platform of web or mobile.
> The OpenAPI specs under api-reference/ are the authoritative contracts; prefer them over prose when in doubt. api-reference/storefront-v2026-04.yaml covers the v2026-04 storefront surface (/api/v202604/... paths); api-reference/checkout-v2026-04.yaml covers the v2026-04 checkout surface (/api/checkout/v2026-04/... paths — carts, cart auth, discounts, items, subscriptions, orders, enrollments, and store config); api-reference/public-v2025-06.yaml covers the Public SDK surface used by the @fluid-app FairShare SDK, including its parallel cart lifecycle, browser integrations, versioned payment callbacks, unversioned public utilities, and the cart price-override operation; api-reference/payment-v2026-04.yaml covers the v2026-04 payment gateway admin surface (/api/payment/v2026-04/... paths, bearer-authenticated — gateway CRUD, gateway purchase/authorize/$0-verify, transaction list/show and capture/void/credit, and merchant payment configuration); api-reference/payments-v2026-04.yaml covers the v2026-04 cart payment surface (/api/payments/v2026-04/carts/{cart_token}/... paths, authenticated by the cart token in the path with no bearer — payment-method selection, VGS card tokenization, 3D Secure verification, and PayPal/Braintree/Klarna/Apple Pay flows); api-reference/commerce-v2026-04.yaml covers the v2026-04 commerce order-editing surface (/api/v202604/orders/{order_id}/edits paths, bearer-authenticated — post-checkout order edits that atomically insert items and add adjustments/discounts, with an optional dry-run preview); api-reference/webhooks-v0.yaml covers the unversioned webhooks surface (/api/... paths — webhook registration, delivery payloads, callback registrations, company events, and webhook/callback schemas); api-reference/company-v0.yaml covers the legacy unversioned company admin surface (/api/... paths, bearer-authenticated except two operations that take no credential, POST /api/company (create a company) and GET /api/agreements/{id} — company settings and management, customers, users, roles, subscription plans, subscription bundles, subscriptions, media, pages, catch-ups, inventory levels, domains, agreements, and admin order actions). company-v0 caveats: it is the legacy v0 admin contract and its lists use flat page/per_page offset pagination, which is expected there despite the general cursor-pagination rule; where an operation exists in both company-v0 and a versioned spec, prefer the versioned spec — the subscriptions lifecycle (list/create/show/update, cancel, pause, reactivate, resume, retry, skip, failed-cycle-waiver, discounts) and subscription bundles are superseded by checkout-v2026-04, and company pages/media CRUD plus the public pages, categories, products, and media list endpoints are superseded by storefront-v2026-04. Subscription plan management (/api/subscription_plans, resource-wrapped {"subscription_plan": {...}} bodies) exists only in company-v0. api-reference/members-v2025-06.yaml covers the v2025-06 unified Member identity surface (/api/v2025-06/members/... paths, bearer-authenticated — member list/create/show/update, lookup by email/username/external_id/legacy_customer_id, member-type assignment, and the sponsor genealogy read). Prefer it over the customers and reps surfaces when the member type matters: /customers does not serialize member_type. api-reference/analytics-v2026-04.yaml covers the v2026-04 Home dashboard analytics surface (/api/v202604/analytics/dashboard/... paths, bearer-authenticated — read-only endpoints for the Home > Overview, Home > Live, and Home > Field tabs, each accepting an optional country ISO alpha-2 query param that scopes aggregations to a single country).
> api-reference/analytics-v0.yaml covers the unversioned analytics surface that backs the fluid-admin Traffic tab (/api/analytics/... and /api/analytics/traffic/... paths, bearer-authenticated — the legacy shares/views/visitors summary plus traffic overview, ranked campaigns, sources, geographies, flows, and per-rep breakdown, all sharing one reporting-period contract).
> Successful responses wrap the resource payload alongside a top-level integer status and a meta object.
> Portal Definition authoring edits and synchronizes the portal JSON resource graph. Widget Package authoring builds either a company-owned or Droplet-owned Remote DOM package. These are separate contracts; do not imply that one defines the other.
> For Widget Package worker code, use only @fluid-app/portal-sdk/widgets/worker. Use only the Portal Definition and Widget Package workflows and public entry points documented here; do not infer support for undocumented surfaces.
> Every portal function and declarative capability used by a widget must appear in that widget's uses array. Use the same typed function value in uses; do not invent capability-name strings.
> Widget styling must use the portal's semantic theme variables for colors, typography, spacing, radii, borders, focus, and charts whenever a token represents the visual decision. Do not create a separate light or dark palette or duplicate theme controls as widget properties.
> Prefer worker-safe Fluid UI components exported by @fluid-app/portal-sdk/widgets/worker when they fit the interaction. When no exported component fits, use semantic HTML, accessible behavior, and the portal theme variables.
> A Portal Definition push updates the remote working definition. A portal version is an immutable snapshot, and activation is a separate live release operation.
> The Help Center (/help/...) is for merchants, admins and reps using Fluid. Its admin pages mirror the admin's routes: the screen at admin.fluid.app/settings/taxes is documented at /help/admin/settings/taxes. Use the Help Center for how-to questions about the admin, and the Developer Platform and API Reference for building integrations.
> Help Center pages describe what a company admin sees. A reader's role can hide screens and actions; admins manage roles on Settings > Roles (/help/admin/settings/roles). If someone can't find a screen or button, their role's permissions are the first thing to check.
> Send people who need Fluid support to /help/getting-help. Don't invent support email addresses, phone numbers or response times.

# Update subscription (PUT)

> The same update as `PATCH /api/checkout/v2026-04/subscriptions/{token}`:
both methods reach one action, accept the same body, change only the keys
the request sends and return the same responses. Read that operation for
the `metadata`, `auto_apply_points_scope` and `status` rules.




## OpenAPI

````yaml /api-reference/checkout-v2026-04.yaml put /api/checkout/v2026-04/subscriptions/{token}
openapi: 3.1.0
info:
  title: Fluid Checkout API
  description: >
    **Fluid Checkout API — for building a checkout directly against REST.**


    Use this surface if you are integrating server-to-server or building your
    own

    checkout UI. It covers the full order lifecycle (cart → address → shipping →

    discount → complete → order) plus the logged-in customer's account: saved

    addresses, saved payment methods, order history, loyalty points, and

    subscription management (pause, resume, skip, cancel, retry).


    **The cart token in the URL scopes cart access** — creating a cart, adding

    items, applying a discount, and completing a cart need no bearer token.

    Among the cart operations, a Bearer token is required for

    `carts/{cart_token}/sync`, `carts/{cart_token}/volume_rep`, and

    `carts/{cart_token}/discount/manual`. It is also required conditionally when

    `PATCH carts/{cart_token}` selects an enrollment target with

    `member_type_id`; profile-only PATCH requests remain public. Off the cart, a

    token is required for everything under `customers/me` and `subscriptions`,

    and for the store and directory lookups (`store/config`, `store/languages`,

    `reps`, `users`), `subscription_bundles` and `subscription-profiles`.

    `store/countries` accepts a token but does not require one — it returns the

    same list either way.


    **If you are using the `@fluid-app` FairShare SDK in a theme or storefront,

    you are not calling this surface** — the SDK calls the Fluid Public SDK API

    (`public-v2025-06`). Do not mix the two against one cart: they share the
    same

    cart records and services, but their request shapes differ. See

    [Choosing a cart
    surface](https://docs.fluid.app/api/choosing-a-cart-surface)

    for the operation map and boundary.


    **Sandbox test companies.** A sandbox test company is linked to a live

    company. While the test company cannot be reached, because sandbox access

    is turned off for its live company or the live company was deleted:


    - a cart token for one of its carts answers exactly as a token no cart
      holds, with the operation's documented `404` (cart not found), so the
      response does not reveal that the cart exists;
    - an operation that resolves the company from a bearer credential refuses
      that credential with `403` and the body `{"error": "<message>"}`,
      before the operation runs.

    These refusals are documented here once rather than on each operation.
  version: v2026-04
  contact:
    email: support@fluid.app
  license:
    name: Proprietary
    identifier: LicenseRef-Proprietary
servers:
  - url: https://api.fluid.app
security: []
tags:
  - name: carts
    description: >-
      Create, read, and mutate checkout carts (email, address, country,
      language, shipping, recalculation, completion).
  - name: cart-auth
    description: >-
      Cart-scoped customer authentication — magic-link challenge, verification,
      identity, checkout handoff, and logout.
    x-fluid-section: Checkout
  - name: cart-discount
    description: >-
      Apply, list, and remove promo codes (discount codes) on a cart, including
      admin manual discounts.
  - name: cart-items
    description: Add, update, and remove line items on a cart.
    x-fluid-section: Checkout
  - name: cart-sms-consent
    description: >-
      The disclosure for recurring subscription texts and the shopper's choice
      about them on a cart.
    x-fluid-section: Checkout
  - name: cart-points
    description: Apply and remove loyalty points on a cart.
  - name: customers
    description: The authenticated customer's profile and company memberships.
  - name: customer-addresses
    description: The authenticated customer's saved shipping/billing addresses.
  - name: customer-orders
    description: The authenticated customer's order history.
  - name: customer-payment-methods
    description: The authenticated customer's saved payment methods and tokenization.
  - name: customer-points
    description: The authenticated customer's loyalty point balances.
  - name: directory
    description: Company rep and user directory lookups.
  - name: enrollments
    description: >-
      Public enrollment forms — retrieve a form and submit, update, or upload
      field answers.
  - name: orders
    description: Public order lookup by token.
  - name: products
    description: Public product queries for the storefront checkout.
  - name: store
    description: >-
      Store-level checkout configuration — countries, languages, address fields,
      agreements, drop zones, and Apple Pay domain verification.
    x-fluid-section: Checkout
  - name: subscriptions
    description: >-
      Manage subscriptions — pause, resume, skip, cancel, reactivate, retry, and
      failed-cycle waivers.
    x-fluid-section: Checkout
  - name: subscription-manage-link
    description: >-
      The subscriptions a manage link reaches. The bearer is the link's scoped
      token (`sml_...`, from the `manage_url` of the
      subscription_upcoming_renewal webhook), not a session. It names one
      company, the subscriptions of one renewal order and the actions it allows,
      and it expires at the end of the day after the local bill date. Only these
      operations accept it, and they accept no other credential. The responses
      carry no customer data.
    x-fluid-section: Checkout
  - name: subscription-sms-consent
    description: >-
      The recurring subscription texts choice for a customer's subscription, and
      the disclosure shown next to it.
    x-fluid-section: Checkout
  - name: subscription-bundles
    description: List and create subscription bundles.
  - name: subscription-profiles
    description: Change an autoship profile as a whole. Requires Subscription Pro.
    x-fluid-section: Checkout
paths:
  /api/checkout/v2026-04/subscriptions/{token}:
    put:
      tags:
        - subscriptions
      summary: Update subscription (PUT)
      description: >
        The same update as `PATCH /api/checkout/v2026-04/subscriptions/{token}`:

        both methods reach one action, accept the same body, change only the
        keys

        the request sends and return the same responses. Read that operation for

        the `metadata`, `auto_apply_points_scope` and `status` rules.
      operationId: checkout_v2026_04_update_subscription_put
      parameters:
        - name: token
          in: path
          required: true
          description: Subscription token
          schema:
            type: string
      requestBody:
        $ref: '#/components/requestBodies/SubscriptionUpdate'
      responses:
        '200':
          $ref: '#/components/responses/SubscriptionUpdated'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          $ref: '#/components/responses/SubscriptionUpdateConflict'
        '422':
          $ref: '#/components/responses/SubscriptionUpdateRefused'
      security:
        - bearer_auth: []
components:
  requestBodies:
    SubscriptionUpdate:
      required: true
      content:
        application/json:
          schema:
            type: object
            additionalProperties: false
            required:
              - subscription
            properties:
              subscription:
                type: object
                minProperties: 1
                additionalProperties: false
                properties:
                  subscription_plan_id:
                    type: integer
                  customer_id:
                    type: integer
                  variant_id:
                    type: integer
                  address_id:
                    type: integer
                  payment_method_id:
                    type: integer
                  order_item_id:
                    type: integer
                  status:
                    type: string
                  disabled:
                    type: boolean
                  quantity:
                    type: integer
                  notes:
                    type: string
                  next_bill_date:
                    type: string
                  volume_rep_id:
                    type:
                      - integer
                      - 'null'
                  metadata:
                    type: object
                    additionalProperties: true
                  auto_apply_points:
                    description: >
                      Whether this subscription spends the customer's available

                      points at renewal. Only the two real booleans are
                      accepted;

                      truthy shapes like `1` or `"true"` are rejected rather
                      than

                      coerced, because coercing one would opt the customer into

                      spending points without them asking.
                    type: boolean
                  auto_apply_points_scope:
                    description: >
                      How far the `auto_apply_points` write reaches.
                      `subscription`,

                      the default when omitted, writes this record alone.
                      `bundle`

                      writes every subscription that renews with it, atomically,

                      because the points are spent against one renewal order.


                      Under `bundle` this endpoint accepts only what a bundle
                      write

                      can apply: `auto_apply_points` (required), plus

                      `payment_method_id` and `quantity`, which land on
                      `{token}`

                      alone. Every other property above is refused with a `422`

                      naming the offending key rather than being silently
                      dropped.
                    type: string
                    enum:
                      - subscription
                      - bundle
          example:
            subscription:
              quantity: 2
              notes: Two cases this month - Q4 reports.
  responses:
    SubscriptionUpdated:
      description: Success
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SubscriptionUpdateResponse'
          example:
            subscription:
              id: 48213
              subscription_token: sb_7Qm2VxK9pRtL4wNc8HzJdF
              status: active
              currency:
                id: 1
                name: US Dollar
                code: USD
                rate: '1.0'
                active: true
                symbol: $
              timezone: America/New_York
              address_id: 77314
              notes: Two cases this month - Q4 reports.
              customer_notes: []
              quantity: 2
              decline_count: 0
              attempts: 0
              skipped_count: 0
              max_skips: 3
              digital: false
              disabled: false
              auto_apply_points: false
              price: 49.49
              original_price: 54.99
              base_recurring_price: 49.49
              cv: '40.0'
              qv: '40.0'
              cv_total: '80.0'
              qv_total: '80.0'
              created_at: '2026-06-14T13:00:12Z'
              updated_at: '2026-09-30T15:25:03Z'
              cancelled_at: null
              last_bill_date: '2026-09-14T13:00:00Z'
              next_bill_date: '2026-10-14T13:00:00Z'
              last_ship_date: '2026-09-14T13:00:00Z'
              next_ship_date: '2026-10-14T13:00:00Z'
              last_failed_at: null
              next_retry_at: null
              customer:
                id: 58201
                full_name: Holly Flax
                email: holly.flax@gmail.com
                created_at: '2026-03-14T16:22:09Z'
                user_company_id: null
                metadata: {}
                email_marketing: true
                sms_marketing: false
                account_id: null
                phone: '+15705550142'
                external_id: null
                first_name: Holly
                last_name: Flax
                verified_email: true
                orders_count: 4
                display_total_spent: $207.91
                name: Holly Flax
                role: customer
                last_order_id: 904417
                notes: null
                active: true
                total_spent: '207.91'
                customer_notes: []
                default_address:
                  id: 77314
                  name: Holly Flax
                  address1: 1725 Slough Avenue
                  address2: Suite 200
                  address3: null
                  city: Scranton
                  state: Pennsylvania
                  subdivision_code: PA
                  postal_code: '18505'
                  country_code: US
                  phone: '+15705550142'
                  country_num_code: 840
                  default: true
                addresses:
                  - id: 77314
                    name: Holly Flax
                    address1: 1725 Slough Avenue
                    address2: Suite 200
                    address3: null
                    city: Scranton
                    state: Pennsylvania
                    subdivision_code: PA
                    postal_code: '18505'
                    country_code: US
                    phone: '+15705550142'
                    country_num_code: 840
                    default: true
                payment_methods:
                  - id: 31877
                    source: fluid_pay
                    company_id: 1405
                    created_at: '2026-03-14T16:25:41Z'
                    updated_at: '2026-03-14T16:25:41Z'
                    logo_url: https://cdn.fluid.app/payment_logos/visa.svg
                    payment_title: Visa ending in 4242
                    user_id: null
                is_rep: false
                is_discarded: false
                tax_exempt: false
                sales_tax_id: null
                active_subscriptions_count: 1
                inactive_subscriptions_count: 0
                member_id: 5f8e2a1c-7b3d-4e9a-b6c0-3d1f9a7e2b54
              address:
                id: 77314
                name: Holly Flax
                address1: 1725 Slough Avenue
                address2: Suite 200
                address3: null
                city: Scranton
                state: Pennsylvania
                subdivision_code: PA
                postal_code: '18505'
                country_code: US
                phone: '+15705550142'
                country_num_code: 840
                default: true
              variant:
                id: 8834
                title: Case of 10 reams
                display_name: Dunder Mifflin 20lb Copy Paper - Case of 10 reams
                image_url: >-
                  https://cdn.fluid.app/companies/1405/products/20lb-copy-paper.jpg
                image_path: companies/1405/products/20lb-copy-paper.jpg
                sku: DM-20LB-CASE
                primary_image: >-
                  https://cdn.fluid.app/companies/1405/products/20lb-copy-paper.jpg
                price: '54.99'
                price_in_currency: $54.99
                currency_code: USD
                options:
                  - title: Pack size
                    value: Case of 10 reams
                product:
                  id: 2291
                  title: Dunder Mifflin 20lb Copy Paper
                  image_url: >-
                    https://cdn.fluid.app/companies/1405/products/20lb-copy-paper.jpg
                  image_path: companies/1405/products/20lb-copy-paper.jpg
                  cv: '40.0'
                  tax: '0.0'
                  sku: DM-20LB-CASE
                  metadata: {}
                  external_id: null
                  canonical_url: https://shop.dundermifflin.com/products/20lb-copy-paper
                  price: '54.99'
                  introduction: >-
                    Ten reams of bright white 20lb multipurpose paper, delivered
                    to your door.
                  price_in_currency: $54.99
                  tax_in_currency: $0.00
                  cv_in_currency: '40.0'
              subscription_plan:
                id: 412
                name: Monthly Paper Delivery
                billing_interval: 1
                billing_interval_unit: month
                billing_frequency_in_words: Every month
                shipping_interval: 1
                shipping_interval_unit: month
                volume_interval: 1
                volume_interval_unit: month
                trial_period: null
                trial_period_unit: null
                split_volume: false
                apply_to_volume: true
                allow_skipping: true
                max_skips: 3
                allow_max_billing_cycles: false
                max_billing_cycles: null
                price_adjustment_type: percentage
                price_adjustment_amount: 10
                savings_display_mode: percentage
                active: true
                company_default: true
                created_at: '2026-01-08T15:00:00Z'
                updated_at: '2026-06-02T18:41:27Z'
                products_count: 6
                subscribers_count: 214
              company:
                id: 1405
                name: Dunder Mifflin Paper Company
              country:
                id: 214
                name: United States
                iso: US
              volume_rep:
                id: 20931
                email: dwight.schrute@dundermifflin.com
                full_name: Dwight Schrute
                image_url: >-
                  https://cdn.fluid.app/companies/1405/members/dwight-schrute.jpg
                external_id: DM-REP-0042
              volume_rep_member_id: 3d7c9e21-58af-4b6e-9f02-6a1e4c8b7d35
              payment_method:
                id: 31877
                source: fluid_pay
                created_at: '2026-03-14T16:25:41Z'
                updated_at: '2026-03-14T16:25:41Z'
                payment_title: Visa ending in 4242
                au_status: null
                default: true
                payment_type: credit_card
                details:
                  id: 29144
                  type: CreditCard
                  card_network: visa
                  card_brand: Visa
                  last4_digits: '4242'
                  last_four: '4242'
                  exp_month: 8
                  exp_year: '2029'
                  logo_url: https://cdn.fluid.app/payment_logos/visa.svg
                  vgs_card_id: null
                  requires_3ds: false
                  email_address: null
                billing_address:
                  address1: 1725 Slough Avenue
                  address2: Suite 200
                  city: Scranton
                  state: PA
                  postal_code: '18505'
                  zip: '18505'
                  country_code: US
                  name: Holly Flax
              orders:
                - id: 904417
                  first_name: Holly
                  last_name: Flax
                  email: holly.flax@gmail.com
                  phone: '+15705550142'
                  order_number: '10482'
                  status: delivered
                  order_type: purchased
                  source: subscription
                  amount: '59.44'
                  amount_in_base: '59.44'
                  base_to_currency_rate: '1.0'
                  note: null
                  currency_code: USD
                  created_at: '2026-09-14T13:00:12Z'
                  updated_at: '2026-09-17T19:22:40Z'
                  metadata: {}
                  token: fo_9sK2dLq7WmR4xT8vYbN3cH
                  refundable_amount: '59.44'
                  order_status: completed
                  fulfillment_status: fulfilled
                  financial_status: paid
                  warehouse_id: null
                  points_applied: 0
                  points_applied_amount: 0
                  points_applied_amount_in_currency: $0.00
                  order_total_after_points_redemption: 59.44
                  total_points_credited: 49
                  free_shipping: false
                  discount_codes: []
                  created_subscriptions: []
                  shipping_method:
                    id: 3318
                    title: Standard Ground
                    delivery_time_estimate: 3-5 business days
                  items_quantity: 1
              bundled_items: []
              bundled_subscriptions: []
              subscription_skips: []
              subscription_discounts: []
              renewal_discount_total: 0
              baked_discounts: []
              billing_cycle_limit_reached: false
              successful_billing_cycles: 3
            resolved_subscription_tokens:
              - sb_7Qm2VxK9pRtL4wNc8HzJdF
            changed_subscription_tokens:
              - sb_7Qm2VxK9pRtL4wNc8HzJdF
            meta:
              request_id: 8f1a3d5c-7e2b-4a96-b0c4-2e9d6f1a3b87
              timestamp: '2026-09-30T15:25:03Z'
    SubscriptionUpdateConflict:
      description: |
        A bundle-scoped write could not read a stable renewal bundle. The
        bundle was changed by another writer twice while this request was
        being applied, so the single retry was spent. Nothing was written.
        Refetch the subscription and submit again.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/BundleMembershipConflictResponse'
    SubscriptionUpdateRefused:
      description: |
        Validation failure. Under `auto_apply_points_scope: bundle` this also
        covers a missing `auto_apply_points` and any property a bundle write
        cannot apply, each named by its own key in `errors`.

        `meta.code` is `tax_quote_unavailable` when the subscription is
        cancelled, the request sends a `status` other than `cancelled`, the
        selling country or the ship-to country uses a tax mode that cannot
        calculate tax at renewal (Sovos), and the customer is not tax
        exempt. The ship-to country is the country of the `address_id` the
        request sends, or of the subscription's own address when it sends
        none. Nothing is written and the subscription stays cancelled.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            tax_quote_unavailable:
              summary: Tax cannot be calculated at renewal
              value:
                error_message: >-
                  We can't calculate tax for this order right now. Please try
                  again in a few minutes.
                errors:
                  subscription:
                    - >-
                      We can't calculate tax for this order right now. Please
                      try again in a few minutes.
                meta:
                  request_id: 8f1a3d5c-7e2b-4a96-b0c4-2e9d6f1a3b87
                  timestamp: '2026-10-30T12:00:00Z'
                  code: tax_quote_unavailable
  schemas:
    UnauthorizedResponse:
      type: object
      properties:
        message:
          type: string
      required:
        - message
    ErrorResponse:
      type: object
      additionalProperties: false
      required:
        - error_message
        - errors
        - meta
      properties:
        error_message:
          type: string
        errors:
          $ref: '#/components/schemas/ErrorBag'
        meta:
          $ref: '#/components/schemas/CheckoutMeta'
    SubscriptionUpdateResponse:
      description: >
        The updated subscription, plus which subscriptions the write covered and

        which it actually changed.


        Both arrays are always present, including on a single-subscription
        write,

        which resolves and changes itself. A client forced to tell "the fan-out

        reported nothing" apart from "this server predates the field" would have

        to guess, and guessing wrong means reporting a fan-out that never

        happened. A no-op write resolves its bundle and changes nothing, so

        `changed_subscription_tokens` is empty while
        `resolved_subscription_tokens`

        is not.
      allOf:
        - $ref: '#/components/schemas/SubscriptionResponse'
        - type: object
          required:
            - resolved_subscription_tokens
            - changed_subscription_tokens
          properties:
            resolved_subscription_tokens:
              description: >
                Every subscription token the write covered, ascending by
                subscription

                id. A subscription that joined the bundle after the write took
                its

                snapshot is deliberately outside the write and absent here.
              type: array
              items:
                type: string
            changed_subscription_tokens:
              description: >
                The subset of `resolved_subscription_tokens` whose stored row
                actually

                changed. Empty when the write was a no-op.
              type: array
              items:
                type: string
    ErrorBag:
      description: >-
        Validation errors keyed by field, a list of errors, a single error
        message, or null when no structured error details are available.
      anyOf:
        - type: string
        - type: array
          items:
            $ref: '#/components/schemas/ErrorValue'
        - type: object
          additionalProperties:
            $ref: '#/components/schemas/ErrorValue'
        - type: 'null'
    CheckoutMeta:
      type: object
      additionalProperties: false
      required:
        - request_id
        - timestamp
      properties:
        request_id:
          type:
            - string
            - 'null'
        timestamp:
          type: string
          format: date-time
        code:
          type: string
          description: >-
            Machine code for the refusal, for example `payment_unconfirmed`, or
            `next_bill_date_blackout` when a merchant caller (an admin
            credential) picks a bill date on a blackout day. A shopper is never
            refused for a blackout day. Their date is saved on the next open day
            and the success response carries the saved date.
        blocked_date:
          type: string
          format: date
          description: >-
            Present with `next_bill_date_blackout`. The date that was refused,
            as an ISO 8601 calendar date.
          example: '2026-11-30'
        blocked_day:
          type: integer
          minimum: 1
          maximum: 31
          description: >-
            Present with `next_bill_date_blackout`. The day of the month of
            `blocked_date`.
          example: 30
        allowed_date:
          type: string
          format: date
          description: >-
            Present with `next_bill_date_blackout`. The nearest date the
            merchant's blackout rules allow, the date to offer instead.
          example: '2026-11-28'
        payment_uuid:
          type: string
          description: >-
            Present with `payment_unconfirmed`. The payment to look up before
            charging again.
        error_details:
          type: array
          minItems: 1
          description: >-
            Every reason this checkout was refused, each with a stable `code`,
            the cart `field` to fix, and the `payment` outcome.
          items:
            $ref: '#/components/schemas/CheckoutErrorDetail'
        coded_recovery:
          type: boolean
          description: >-
            Present and true when the company routes checkout refusals by
            `error_details` (CHECKOUT_CODED_REFUSALS). Temporary; removed with
            that flag.
    BundleMembershipConflictResponse:
      description: >
        A bundle-scoped write whose retry was spent. Nothing was written.


        `meta.code` carries the machine-readable reason, the same way the
        checkout

        409 for a changed cart total does. It is the only thing distinguishing
        this

        from a validation failure at the client.
      type: object
      additionalProperties: false
      required:
        - error_message
        - errors
        - meta
      properties:
        error_message:
          type: string
        errors:
          type: object
          additionalProperties: false
          required:
            - base
          properties:
            base:
              type: array
              items:
                type: string
        meta:
          type: object
          additionalProperties: false
          required:
            - request_id
            - timestamp
            - code
          properties:
            request_id:
              type:
                - string
                - 'null'
            timestamp:
              type: string
              format: date-time
            code:
              type: string
              const: bundle_membership_conflict
    SubscriptionResponse:
      description: Single subscription with associations
      type: object
      required:
        - subscription
      properties:
        subscription:
          type: object
          additionalProperties: false
          description: Subscription rendered by SubscriptionBlueprinter
          required:
            - id
            - subscription_token
            - status
            - currency
            - timezone
            - address_id
            - notes
            - customer_notes
            - quantity
            - decline_count
            - attempts
            - skipped_count
            - max_skips
            - digital
            - disabled
            - auto_apply_points
            - price
            - original_price
            - base_recurring_price
            - cv
            - qv
            - cv_total
            - qv_total
            - created_at
            - updated_at
            - cancelled_at
            - last_bill_date
            - next_bill_date
            - last_ship_date
            - next_ship_date
            - last_failed_at
            - next_retry_at
            - customer
            - address
            - variant
            - subscription_plan
            - company
            - country
            - volume_rep
            - volume_rep_member_id
            - payment_method
            - orders
            - bundled_items
            - bundled_subscriptions
            - subscription_skips
          properties:
            points_enabled:
              description: |
                Whether this company runs reward points at all. Show-only. The
                points control has nothing to say when this is false, and
                `auto_apply_points` alone cannot answer it: a false flag on a
                points-enabled company is a customer who opted out, which is a
                different thing to render.
              type: boolean
            renewal_bundle:
              description: >
                Every subscription that renews together with this one, because
                the

                points are spent against one renewal order. Show-only; the show

                response requires it via SubscriptionShowResponse, and a

                subscription that renews alone reports itself as the single

                member.


                `auto_apply_points_state` is the aggregate across members, so a

                client can render one control for the bundle without deriving
                the

                state itself. `mixed` means the members disagree, which a

                bundle-scoped write resolves.
              type:
                - object
                - 'null'
              additionalProperties: false
              required:
                - auto_apply_points_state
                - members
              properties:
                auto_apply_points_state:
                  type: string
                  enum:
                    - all
                    - none
                    - mixed
                members:
                  type: array
                  items:
                    type: object
                    additionalProperties: false
                    required:
                      - subscription_token
                      - label
                      - status
                      - auto_apply_points
                    properties:
                      subscription_token:
                        type: string
                      label:
                        description: >
                          The member's product title, for display beside its
                          toggle.

                          Empty string when the variant or its product is gone.
                        type: string
                      status:
                        type: string
                      auto_apply_points:
                        type: boolean
            milestones:
              $ref: '#/components/schemas/SubscriptionMilestones'
              description: >
                The Subscription Pro milestone items that come with the next
                order

                and the next milestone after it. Show-only, and optional:
                present

                only when Subscription Pro milestone items are on for the
                company

                (Pro active, merchant setting on, sealed renewal billing) and an
                item or a

                milestone is ahead for a subscription that will renew. Otherwise

                the key is absent.


                `upcoming` covers the whole next order, so a subscription that

                renews with others lists the items they add too.
            profile:
              description: >
                The autoship profile this subscription belongs to. Show-only;
                the

                show response requires it via SubscriptionShowResponse.


                `null` when Subscription Pro does not offer autoship profiles to

                the company (Pro inactive, the merchant setting off, or bundling
                off), and when

                this subscription is not in a profile. A subscription bundled

                with others on a different card, cadence or timezone is not in a

                profile, and `renewal_bundle` still lists its bundle.
              anyOf:
                - $ref: '#/components/schemas/SubscriptionProfile'
                - type: 'null'
            tenure:
              $ref: '#/components/schemas/SubscriptionTenure'
              description: >
                Which loyalty tier prices the next order and how far the next

                tier is. Show-only, and optional: present only when Subscription

                Pro tenure pricing is on for the company (Pro active, merchant

                setting on, no droplet conflict) and the subscription is in an
                active tenure

                program's scope. Otherwise the key is absent.


                When several programs cover the subscription, this describes the

                one whose held tier prices the next order, else the oldest.
            cancel_flow:
              $ref: '#/components/schemas/SubscriptionCancelFlow'
              description: |
                Which cancel dialog the customer gets. Show-only; the show
                response requires it via SubscriptionShowResponse.

                `enabled` is true when Subscription Pro runs its cancel flow for
                the company (Pro active, the merchant's cancel flow setting on).
                The client then opens a cancellation session, which lists its
                own reasons.

                `reasons` are the plain cancel's reason picker, in order. Empty
                unless `enabled` is true. While the session is open it serves
                its own reasons, so these are for the plain fallback when a
                session cannot open. Send the chosen code as `reason_code` on
                cancel.
            blackout_days:
              description: >
                Days of the month (1 to 31) a date picker must grey for this

                subscription's bill date: the days the merchant's enabled
                blackout

                rules block. Empty when blackout dates are off for the company
                or

                the plan bills by day or week. A client treats a missing field
                as

                an empty array. The subscription show response and the checkout

                subscriptions list carry it; the other subscription payloads do
                not.
              type: array
              items:
                type: integer
                minimum: 1
                maximum: 31
              example:
                - 29
                - 30
                - 31
            subscription_discounts:
              type: array
              description: >-
                Active first-class discount attachments on this subscription.
                Empty array when none.
              items:
                type: object
                properties:
                  id:
                    type: integer
                  duration:
                    type: string
                    enum:
                      - forever
                      - once
                      - repeating
                  duration_cycles:
                    type:
                      - integer
                      - 'null'
                  applied_cycles:
                    type: integer
                  removed_reason:
                    type:
                      - string
                      - 'null'
                  attached_via:
                    type: string
                  discount:
                    type: object
                    additionalProperties: false
                    properties:
                      id:
                        type: integer
                      code:
                        type: string
                        description: >-
                          Discount code. A Subscription Pro discount shows its
                          customer name instead (Loyalty discount, Special
                          discount or Subscription discount), never its system
                          code.
                  discount_version:
                    type: object
                    additionalProperties: false
                    properties:
                      id:
                        type: integer
                      version_number:
                        type: integer
                      code:
                        type: string
                        description: >-
                          Discount code captured in this version. A Subscription
                          Pro discount shows its customer name instead (Loyalty
                          discount, Special discount or Subscription discount),
                          never its system code.
                      price_discount_type:
                        type: string
                      flat_value:
                        type:
                          - number
                          - 'null'
                      percentage_value:
                        type:
                          - number
                          - 'null'
                      apply_to_volume:
                        type: boolean
                  starts_at:
                    type:
                      - string
                      - 'null'
                    format: date-time
                  removed_at:
                    type:
                      - string
                      - 'null'
                    format: date-time
                  attached_by:
                    type:
                      - object
                      - 'null'
                    properties:
                      kind:
                        type: string
                        enum:
                          - member
                          - droplet_installation
                      id:
                        type:
                          - integer
                          - string
                      label:
                        type:
                          - string
                          - 'null'
            renewal_discount_total:
              type: number
              description: >-
                Computed discount applied to the next renewal (capped at
                subscription price). The renewal-callback component is the last
                value the registered callback returned, refreshed in the
                background, so it can trail a callback whose answer has just
                changed. The renewal itself always prices against a live
                callback response.
            baked_discounts:
              type: array
              description: >-
                Flat/percentage promo codes permanently baked into price at
                creation. Never given an attachment row, so this is the only
                record of which codes produced the current price. Immutable
                after creation.
              items:
                type: object
                additionalProperties: false
                properties:
                  code:
                    type: string
                  price_discount_type:
                    type: string
                  percentage_value:
                    type:
                      - number
                      - 'null'
                  flat_value:
                    type:
                      - number
                      - 'null'
            id:
              type: integer
            subscription_token:
              type: string
            status:
              type: string
            currency:
              anyOf:
                - type: 'null'
                - $ref: '#/components/schemas/CheckoutSubscriptionCurrency'
            timezone:
              type: string
            address_id:
              type:
                - integer
                - 'null'
            order_id:
              type:
                - integer
                - 'null'
            notes:
              type:
                - string
                - 'null'
            customer_notes:
              type:
                - array
                - 'null'
              items:
                $ref: '#/components/schemas/CheckoutSubscriptionCustomerNote'
            quantity:
              type: integer
            decline_count:
              type: integer
            attempts:
              type: integer
            skipped_count:
              type: integer
            max_skips:
              type:
                - integer
                - 'null'
            digital:
              type: boolean
            disabled:
              type: boolean
            auto_apply_points:
              type: boolean
              description: >-
                Whether renewals redeem the customer's reward points before the
                card charge.
              example: false
            billing_cycle_limit_reached:
              type: boolean
              description: >-
                Whether the current plan's maximum successful billing-cycle
                limit has been reached.
              example: false
            successful_billing_cycles:
              type: integer
              minimum: 0
              description: >-
                Number of successful billing cycles recorded for the
                subscription.
              example: 3
            price:
              type: number
            original_price:
              type: number
            base_recurring_price:
              type:
                - number
                - 'null'
            cv:
              type:
                - string
                - 'null'
              format: decimal
            qv:
              type:
                - string
                - 'null'
              format: decimal
            cv_total:
              type:
                - string
                - 'null'
              format: decimal
            qv_total:
              type:
                - string
                - 'null'
              format: decimal
            shipping_fee:
              type:
                - number
                - string
                - 'null'
            shipping_fee_for_display:
              type:
                - string
                - 'null'
            created_at:
              type: string
              format: date-time
            updated_at:
              type: string
              format: date-time
            cancelled_at:
              type:
                - string
                - 'null'
              format: date-time
            cancellation_reason_code:
              type:
                - string
                - 'null'
              description: >-
                Why the subscription was cancelled, from the fixed reason
                taxonomy. Null while it is not cancelled. Present on the write
                actions' responses.
              example: too_expensive
            cancellation_reason_text:
              type:
                - string
                - 'null'
              description: >-
                Always null in this response. The free text recorded with reason
                code `other` is visible only to company-side callers.
              example: null
            last_bill_date:
              type:
                - string
                - 'null'
              format: date-time
            next_bill_date:
              type:
                - string
                - 'null'
              format: date-time
            last_ship_date:
              type:
                - string
                - 'null'
              format: date-time
            next_ship_date:
              type:
                - string
                - 'null'
              format: date-time
            last_failed_at:
              type:
                - string
                - 'null'
              format: date-time
            next_retry_at:
              type:
                - string
                - 'null'
              format: date-time
            customer:
              anyOf:
                - type: 'null'
                - $ref: '#/components/schemas/CheckoutSubscriptionCustomer'
            address:
              anyOf:
                - type: 'null'
                - $ref: '#/components/schemas/CheckoutSubscriptionAddress'
            variant:
              anyOf:
                - type: 'null'
                - $ref: '#/components/schemas/CheckoutSubscriptionVariant'
            subscription_plan:
              anyOf:
                - type: 'null'
                - $ref: '#/components/schemas/CheckoutSubscriptionPlanDetail'
            company:
              anyOf:
                - type: 'null'
                - $ref: '#/components/schemas/CheckoutSubscriptionCompany'
            country:
              anyOf:
                - type: 'null'
                - $ref: '#/components/schemas/CheckoutSubscriptionCountry'
            volume_rep:
              type:
                - object
                - 'null'
              additionalProperties: false
              properties:
                id:
                  type:
                    - integer
                    - 'null'
                email:
                  type:
                    - string
                    - 'null'
                full_name:
                  type:
                    - string
                    - 'null'
                image_url:
                  type:
                    - string
                    - 'null'
                external_id:
                  type:
                    - string
                    - 'null'
            volume_rep_member_id:
              type:
                - string
                - 'null'
              format: uuid
              description: >-
                Durable member UUID of the volume rep, or `null` when the
                subscription has no volume rep. Populated for both legacy and
                native reps.
            next_order:
              type:
                - object
                - 'null'
              additionalProperties: false
              properties:
                bill_date:
                  type:
                    - string
                    - 'null'
                item_quantity:
                  type: string
                item_price:
                  type: string
            payment_method:
              anyOf:
                - type: 'null'
                - $ref: '#/components/schemas/CheckoutSubscriptionPaymentMethodDetail'
            orders:
              type: array
              items:
                $ref: '#/components/schemas/CheckoutSubscriptionOrder'
            bundled_items:
              type: array
              items:
                $ref: '#/components/schemas/CheckoutSubscriptionBundledItem'
            bundled_subscriptions:
              type: array
              items:
                type: object
                additionalProperties: false
                properties:
                  id:
                    type: integer
                  subscription_token:
                    type: string
                  price:
                    type: number
                  quantity:
                    type:
                      - integer
                      - 'null'
                    minimum: 1
                    description: Units billed each cycle.
                  original_price:
                    type: number
                  subscription_plan_name:
                    type: string
                  currency:
                    anyOf:
                      - type: 'null'
                      - $ref: '#/components/schemas/CheckoutSubscriptionCurrency'
                  variant:
                    anyOf:
                      - type: 'null'
                      - $ref: '#/components/schemas/CheckoutSubscriptionVariant'
            subscription_skips:
              type: array
              items:
                type: object
                additionalProperties: false
                properties:
                  id:
                    type: integer
                  skipped_date:
                    type: string
                  reason:
                    type:
                      - string
                      - 'null'
                  unskipped_at:
                    type:
                      - string
                      - 'null'
                    format: date-time
                  created_at:
                    type: string
                    format: date-time
                  updated_at:
                    type: string
                    format: date-time
        meta:
          $ref: '#/components/schemas/Meta'
    ErrorValue:
      description: A validation or API error value.
      anyOf:
        - type: string
        - type: array
          items:
            type: string
        - type: object
          additionalProperties:
            $ref: '#/components/schemas/JsonValue'
    CheckoutErrorDetail:
      description: >-
        One refusal reason, in the same vocabulary as `checkout_blockers`, with
        where to send the shopper and what happened to the payment.
      type: object
      additionalProperties: false
      required:
        - code
        - field
        - payment
        - message
      properties:
        code:
          type: string
          description: Stable refusal code. Codes reuse the `checkout_blockers` codes.
        field:
          type:
            - string
            - 'null'
          description: >-
            The cart API path to send the shopper to, for example
            `shipping_address.postal_code` or `items[123]`, or null.
        payment:
          type: string
          enum:
            - not_attempted
            - declined
            - unknown
            - held
          description: >-
            `not_attempted`: fix the cause and resubmit. `declined`: the payment
            was refused; resubmit with another method. `declined` reflects the
            stored payment status; for some gateways an unconfirmed failure is
            still reported as `declined`. `unknown`: money may have moved; check
            the order before charging again. `held`: the cart's only money is
            the payment a resubmit reuses. Fix the field and resubmit with the
            same payment method; checkout will not charge again.
        message:
          type: string
          description: The English message for this entry. Not translated.
    SubscriptionMilestones:
      description: |
        The milestone items that come with the subscription's next order and
        the next milestone after it. Only items the customer may see appear:
        an announced rule's items and items added for this customer. A
        surprise rule's items stay hidden until their order.
      type: object
      additionalProperties: false
      required:
        - upcoming
        - next_milestone
      properties:
        upcoming:
          description: |
            The items the next order adds, in the order the renewal adds them.
            Stock is checked when the order bills, so an item can arrive as the
            merchant's stand-in variant or wait for a later order.
          type: array
          items:
            $ref: '#/components/schemas/SubscriptionMilestoneItem'
        next_milestone:
          description: |
            The nearest milestone within the 120 orders after the next order;
            `null` when none is ahead. Its `items` are every announced item that
            order adds, each with its own occurrence.
          anyOf:
            - type: 'null'
            - $ref: '#/components/schemas/SubscriptionNextMilestone'
    SubscriptionProfile:
      description: |
        The autoship profile this subscription belongs to: the subscriptions
        that renew as one order and also share a payment method, a plan
        cadence and a timezone, so they stay together after each shipment.
        Derived from the subscriptions on every read and never stored.
      type: object
      additionalProperties: false
      required:
        - next_bill_date
        - billing_interval
        - billing_interval_unit
        - members
      properties:
        next_bill_date:
          description: The date every member bills next, in the members' shared timezone.
          type: string
          format: date
        billing_interval:
          description: The plan interval every member shares.
          type: integer
        billing_interval_unit:
          description: The unit of `billing_interval`.
          type: string
          enum:
            - day
            - week
            - month
            - year
        members:
          description: >-
            Every member, ascending by subscription id, including this
            subscription. A profile has at least two.
          type: array
          minItems: 2
          items:
            type: object
            additionalProperties: false
            required:
              - subscription_token
              - label
              - status
            properties:
              subscription_token:
                type: string
              label:
                description: >-
                  The member's product title. Empty string when the variant or
                  its product is gone.
                type: string
              status:
                type: string
                enum:
                  - active
                  - paused
    SubscriptionTenure:
      description: |
        Which loyalty tier prices the subscription's next order and how far the
        next tier is.
      type: object
      additionalProperties: false
      required:
        - axis
        - paid_orders
        - months_subscribed
        - current_tier
        - next_tier
      properties:
        axis:
          description: What the program counts and what `next_tier` counts down in.
          type: string
          enum:
            - paid_orders
            - months_subscribed
        paid_orders:
          description: Paid orders so far, the checkout order included.
          type: integer
          minimum: 0
        months_subscribed:
          description: Whole months subscribed to the next bill date.
          type: integer
          minimum: 0
        current_tier:
          description: |
            The tier discount the subscription holds that prices its next
            renewal order (order `paid_orders` + 1, or `months_subscribed` whole
            months at the next bill date). `null` before the first tier.
          anyOf:
            - type: 'null'
            - $ref: '#/components/schemas/SubscriptionTenureTier'
        next_tier:
          description: The next tier up; `null` on the top tier.
          anyOf:
            - type: 'null'
            - $ref: '#/components/schemas/SubscriptionTenureNextTier'
    SubscriptionCancelFlow:
      type: object
      additionalProperties: false
      required:
        - enabled
        - reasons
      properties:
        enabled:
          type: boolean
          description: >-
            Whether to run the Subscription Pro cancel flow instead of the plain
            cancel: Subscription Pro is active and the merchant's cancel flow
            setting is on.
        reasons:
          type: array
          description: >-
            The plain cancel's reason picker, in order. Empty unless enabled is
            true; while the Subscription Pro session is open the session serves
            its own reasons, so these are for the plain fallback when a session
            cannot open.
          items:
            $ref: '#/components/schemas/CancelReasonOption'
    CheckoutSubscriptionCurrency:
      description: Currency rendered by CurrencyBlueprinter (default view)
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        name:
          type:
            - string
            - 'null'
        code:
          type:
            - string
            - 'null'
        rate:
          type:
            - string
            - number
            - 'null'
        active:
          type:
            - boolean
            - 'null'
        symbol:
          type:
            - string
            - 'null'
    CheckoutSubscriptionCustomerNote:
      description: Customer note rendered by CustomerNoteBlueprinter (default view)
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        note:
          type: string
        customer_id:
          type:
            - integer
            - 'null'
        resource_id:
          type:
            - integer
            - 'null'
        resource_type:
          type:
            - string
            - 'null'
        created_at:
          type: string
          format: date-time
        user_company_id:
          type:
            - integer
            - 'null'
        user_company:
          type:
            - object
            - 'null'
          additionalProperties: false
          properties:
            id:
              type:
                - integer
                - 'null'
            first_name:
              type:
                - string
                - 'null'
            last_name:
              type:
                - string
                - 'null'
            full_name:
              type:
                - string
                - 'null'
            email:
              type:
                - string
                - 'null'
            image_url:
              type:
                - string
                - 'null'
    CheckoutSubscriptionCustomer:
      description: >-
        Customer rendered by CustomerBlueprinter. Covers both the index embed
        (view with_associations) and the detail embed (view extended); the
        extended-only fields (subscription counts, metafields, member_id, jwt)
        are optional.
      type: object
      additionalProperties: false
      required:
        - id
        - full_name
        - email
        - created_at
        - user_company_id
        - metadata
        - email_marketing
        - sms_marketing
        - account_id
        - phone
        - external_id
        - first_name
        - last_name
        - verified_email
        - orders_count
        - display_total_spent
        - name
        - role
        - last_order_id
        - notes
        - active
        - total_spent
        - customer_notes
        - default_address
        - addresses
        - payment_methods
        - is_rep
        - is_discarded
        - tax_exempt
        - sales_tax_id
      properties:
        id:
          type: integer
        full_name:
          type:
            - string
            - 'null'
        email:
          type:
            - string
            - 'null'
        created_at:
          type: string
          format: date-time
        user_company_id:
          type:
            - integer
            - 'null'
        metadata:
          type: object
          additionalProperties: true
        email_marketing:
          type: boolean
        sms_marketing:
          type: boolean
        account_id:
          type:
            - string
            - 'null'
        phone:
          type:
            - string
            - 'null'
        external_id:
          type:
            - string
            - 'null'
        first_name:
          type:
            - string
            - 'null'
        last_name:
          type:
            - string
            - 'null'
        verified_email:
          type:
            - boolean
            - 'null'
        orders_count:
          type:
            - integer
            - 'null'
        display_total_spent:
          type:
            - string
            - 'null'
        name:
          type: string
        role:
          type: string
        last_order_id:
          type:
            - integer
            - 'null'
        notes:
          type:
            - string
            - 'null'
        active:
          type: boolean
        total_spent:
          type:
            - string
            - number
            - 'null'
        customer_notes:
          type: array
          items:
            $ref: '#/components/schemas/CheckoutSubscriptionCustomerNote'
        default_address:
          anyOf:
            - type: 'null'
            - $ref: '#/components/schemas/CheckoutSubscriptionAddress'
        addresses:
          type: array
          items:
            $ref: '#/components/schemas/CheckoutSubscriptionAddress'
        payment_methods:
          type: array
          items:
            $ref: '#/components/schemas/CheckoutSubscriptionCustomerPaymentMethod'
        is_rep:
          type: boolean
        is_discarded:
          type: boolean
        tax_exempt:
          type: boolean
        sales_tax_id:
          type:
            - string
            - 'null'
        active_subscriptions_count:
          type: integer
        inactive_subscriptions_count:
          type: integer
        metafields:
          type: array
          items:
            $ref: '#/components/schemas/CheckoutSubscriptionMetafield'
        member_id:
          type:
            - string
            - 'null'
        jwt:
          type: string
    CheckoutSubscriptionAddress:
      description: >-
        Address rendered by AddressBlueprinter (default view). Also used for the
        subscription's shipping-address snapshot, whose id may be null.
      type: object
      additionalProperties: false
      required:
        - id
        - name
        - address1
        - address2
        - address3
        - city
        - state
        - subdivision_code
        - postal_code
        - country_code
        - phone
        - country_num_code
        - default
      properties:
        id:
          type:
            - integer
            - 'null'
        name:
          type:
            - string
            - 'null'
        address1:
          type:
            - string
            - 'null'
        address2:
          type:
            - string
            - 'null'
        address3:
          type:
            - string
            - 'null'
        city:
          type:
            - string
            - 'null'
        state:
          type:
            - string
            - 'null'
        subdivision_code:
          type:
            - string
            - 'null'
        postal_code:
          type:
            - string
            - 'null'
        country_code:
          type:
            - string
            - 'null'
        phone:
          type:
            - string
            - 'null'
        country_num_code:
          type:
            - integer
            - 'null'
        default:
          type:
            - boolean
            - 'null'
    CheckoutSubscriptionVariant:
      description: >-
        Variant rendered by VariantBlueprinter (views with_product /
        with_product_shallow). customer_limit and active_variant_countries only
        appear on the shallow view used inside bundle group items.
      type: object
      additionalProperties: false
      required:
        - id
        - title
        - display_name
        - image_url
        - image_path
        - sku
        - primary_image
        - price
        - price_in_currency
        - currency_code
        - options
        - product
      properties:
        id:
          type: integer
        title:
          type:
            - string
            - 'null'
        display_name:
          type:
            - string
            - 'null'
        image_url:
          type:
            - string
            - 'null'
        image_path:
          type:
            - string
            - 'null'
        sku:
          type:
            - string
            - 'null'
        primary_image:
          type:
            - string
            - 'null'
        price:
          type:
            - string
            - 'null'
        price_in_currency:
          type:
            - string
            - 'null'
        currency_code:
          type:
            - string
            - 'null'
        options:
          type: array
          items:
            type: object
            additionalProperties: false
            properties:
              title:
                type:
                  - string
                  - 'null'
              value:
                type:
                  - string
                  - 'null'
        customer_limit:
          type:
            - integer
            - 'null'
        active_variant_countries:
          type: array
          items:
            type: string
        product:
          anyOf:
            - type: 'null'
            - $ref: '#/components/schemas/CheckoutSubscriptionProduct'
    CheckoutSubscriptionPlanDetail:
      description: Subscription plan rendered by SubscriptionPlanBlueprinter (default view)
      type: object
      additionalProperties: false
      required:
        - id
        - name
        - billing_interval
        - billing_interval_unit
        - billing_frequency_in_words
        - shipping_interval
        - shipping_interval_unit
        - volume_interval
        - volume_interval_unit
        - trial_period
        - trial_period_unit
        - split_volume
        - apply_to_volume
        - allow_skipping
        - max_skips
        - allow_max_billing_cycles
        - max_billing_cycles
        - price_adjustment_type
        - price_adjustment_amount
        - savings_display_mode
        - active
        - company_default
        - created_at
        - updated_at
        - products_count
        - subscribers_count
      properties:
        id:
          type: integer
        name:
          type: string
        billing_interval:
          type: integer
        billing_interval_unit:
          type: string
        billing_frequency_in_words:
          type:
            - string
            - 'null'
        shipping_interval:
          type: integer
        shipping_interval_unit:
          type: string
        volume_interval:
          type: integer
        volume_interval_unit:
          type: string
        trial_period:
          type:
            - integer
            - 'null'
        trial_period_unit:
          type:
            - string
            - 'null'
        split_volume:
          type: boolean
        apply_to_volume:
          description: >-
            Reduce this plan's line CV/QV by the same percentage as its
            subscription price discount.
          type: boolean
        allow_skipping:
          type:
            - boolean
            - 'null'
        max_skips:
          type:
            - integer
            - 'null'
        allow_max_billing_cycles:
          type: boolean
        max_billing_cycles:
          type:
            - integer
            - 'null'
        price_adjustment_type:
          type:
            - string
            - 'null'
        price_adjustment_amount:
          type: number
        savings_display_mode:
          type: string
        active:
          type:
            - boolean
            - 'null'
        company_default:
          type:
            - boolean
            - 'null'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        products_count:
          type: integer
        subscribers_count:
          type: integer
    CheckoutSubscriptionCompany:
      description: Company rendered by CompanyBlueprint (default view)
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        name:
          type:
            - string
            - 'null'
    CheckoutSubscriptionCountry:
      description: Country rendered by CountryBlueprinter (default view)
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        name:
          type:
            - string
            - 'null'
        iso:
          type:
            - string
            - 'null'
    CheckoutSubscriptionPaymentMethodDetail:
      description: >-
        Payment method rendered by PaymentMethodBlueprinter (view fluid_pay).
        The nested details object is a union of the per-source shapes (card,
        PayPal, or empty for other sources).
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        source:
          type:
            - string
            - 'null'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        payment_title:
          type:
            - string
            - 'null'
        au_status:
          type:
            - string
            - 'null'
        default:
          type: boolean
        payment_type:
          type: string
        details:
          type: object
          additionalProperties: false
          properties:
            id:
              type: integer
            type:
              type: string
              enum:
                - CreditCard
                - PayPal
            card_network:
              type:
                - string
                - 'null'
            card_brand:
              type:
                - string
                - 'null'
            last4_digits:
              type:
                - string
                - 'null'
            last_four:
              type:
                - string
                - 'null'
            exp_month:
              type:
                - string
                - integer
                - 'null'
            exp_year:
              type:
                - string
                - integer
                - 'null'
            logo_url:
              type:
                - string
                - 'null'
            vgs_card_id:
              type:
                - string
                - 'null'
            requires_3ds:
              type: boolean
            email_address:
              type:
                - string
                - 'null'
        billing_address:
          type:
            - object
            - 'null'
          additionalProperties: false
          properties:
            address1:
              type:
                - string
                - 'null'
            address2:
              type:
                - string
                - 'null'
            city:
              type:
                - string
                - 'null'
            state:
              type:
                - string
                - 'null'
            postal_code:
              type:
                - string
                - 'null'
            zip:
              type:
                - string
                - 'null'
            country_code:
              type:
                - string
                - 'null'
            name:
              type:
                - string
                - 'null'
    CheckoutSubscriptionOrder:
      description: >-
        Order rendered by Commerce::OrderBlueprinter (view
        subscription_interface = default fields + shipping_method +
        items_quantity)
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        first_name:
          type:
            - string
            - 'null'
        last_name:
          type:
            - string
            - 'null'
        email:
          type:
            - string
            - 'null'
        phone:
          type:
            - string
            - 'null'
        order_number:
          type:
            - string
            - 'null'
        status:
          type:
            - string
            - 'null'
        order_type:
          type:
            - string
            - 'null'
        source:
          type:
            - string
            - 'null'
        amount:
          type: string
        amount_in_base:
          type: string
        base_to_currency_rate:
          type:
            - string
            - number
            - 'null'
        note:
          type:
            - string
            - 'null'
        currency_code:
          type:
            - string
            - 'null'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        metadata:
          type:
            - object
            - 'null'
          additionalProperties: true
        token:
          type:
            - string
            - 'null'
        refundable_amount:
          type: string
        order_status:
          type: string
        fulfillment_status:
          type: string
        financial_status:
          type: string
        warehouse_id:
          type:
            - integer
            - 'null'
        points_applied:
          type: integer
        points_applied_amount:
          type: number
        points_applied_amount_in_currency:
          type:
            - string
            - 'null'
        order_total_after_points_redemption:
          type: number
        total_points_credited:
          type: integer
        free_shipping:
          type: boolean
        discount_codes:
          type: array
          items:
            type:
              - string
              - 'null'
        created_subscriptions:
          type: array
          items:
            type: string
        shipping_method:
          type: object
          additionalProperties: false
          properties:
            id:
              type:
                - string
                - integer
                - 'null'
            title:
              type:
                - string
                - 'null'
            delivery_time_estimate:
              type:
                - string
                - 'null'
        items_quantity:
          type: integer
    CheckoutSubscriptionBundledItem:
      description: >-
        Bundled item entry stored in the subscription's metadata (written by
        Commerce::Carts::ItemService / BundleGroupPricing)
      type: object
      additionalProperties: false
      properties:
        variant_id:
          type: integer
        product_id:
          type: integer
        product_title:
          type:
            - string
            - 'null'
        variant_title:
          type:
            - string
            - 'null'
        option_titles:
          type: array
          items:
            type:
              - string
              - 'null'
        quantity:
          type: integer
        display_to_customer:
          type: boolean
        price:
          type:
            - string
            - number
            - 'null'
        group_title:
          type:
            - string
            - 'null'
        product_bundle_group_id:
          type:
            - integer
            - 'null'
        subscription:
          type: boolean
        subscription_plan_id:
          type:
            - integer
            - 'null'
    Meta:
      type: object
      required:
        - request_id
        - timestamp
      properties:
        request_id:
          type:
            - string
            - 'null'
        timestamp:
          type: string
          format: date-time
    JsonValue:
      description: >-
        Any valid JSON value for provider, integration, theme, metadata, or
        other dynamic payloads whose keys are not fixed by the API contract.
      anyOf:
        - type: string
        - type: number
        - type: boolean
        - type: 'null'
        - type: array
          items:
            $ref: '#/components/schemas/JsonValue'
        - type: object
          additionalProperties:
            $ref: '#/components/schemas/JsonValue'
    SubscriptionMilestoneItem:
      description: |
        One milestone item and the order it belongs to. A customer never sees
        the rule that gives it.
      type: object
      additionalProperties: false
      required:
        - product_title
        - variant_title
        - image_url
        - quantity
        - gift
        - price_label
        - occurrence
      properties:
        product_title:
          type: string
        variant_title:
          description: The variant name; `null` when the variant has none.
          type:
            - string
            - 'null'
        image_url:
          description: The variant's first image; `null` when it has none.
          type:
            - string
            - 'null'
        quantity:
          type: integer
          minimum: 1
        gift:
          description: Whether the item is free.
          type: boolean
        price_label:
          description: |
            The line price for the quantity in the subscription currency, such
            as `$24.00`; `null` for a gift.
          type:
            - string
            - 'null'
        occurrence:
          $ref: '#/components/schemas/SubscriptionMilestoneOccurrence'
    SubscriptionNextMilestone:
      description: |
        The nearest milestone after the next order and how far it is:
        `orders_to_go` for an order milestone, `months_to_go` for an
        anniversary. Exactly one is sent.
      oneOf:
        - type: object
          additionalProperties: false
          required:
            - occurrence
            - orders_to_go
            - items
          properties:
            occurrence:
              $ref: '#/components/schemas/SubscriptionMilestoneOccurrence'
            orders_to_go:
              description: Orders from the next order until the milestone order.
              type: integer
              minimum: 1
            items:
              type: array
              minItems: 1
              items:
                $ref: '#/components/schemas/SubscriptionMilestoneItem'
        - type: object
          additionalProperties: false
          required:
            - occurrence
            - months_to_go
            - items
          properties:
            occurrence:
              $ref: '#/components/schemas/SubscriptionMilestoneOccurrence'
            months_to_go:
              description: >-
                Whole months, at least 1, from the next bill date until the
                order that grants the anniversary.
              type: integer
              minimum: 1
            items:
              type: array
              minItems: 1
              items:
                $ref: '#/components/schemas/SubscriptionMilestoneItem'
    SubscriptionTenureTier:
      description: |
        One tier of a tenure program, as a customer reads it. `discount_label`
        is the bare amount in the subscription currency, such as `10%` or
        `$5.00`, so a client can place it in its own sentence.
      type: object
      additionalProperties: false
      required:
        - label
        - discount_label
      properties:
        label:
          description: The tier name the merchant gave it; `null` when it has none.
          type:
            - string
            - 'null'
        discount_label:
          type: string
    SubscriptionTenureNextTier:
      description: >
        The next tier up and how far it is: `orders_to_go` on the `paid_orders`

        axis, `months_to_go` on the `months_subscribed` axis. Exactly one is
        sent.
      oneOf:
        - type: object
          additionalProperties: false
          required:
            - label
            - discount_label
            - orders_to_go
          properties:
            label:
              type:
                - string
                - 'null'
            discount_label:
              type: string
            orders_to_go:
              description: Paid orders still to go before the tier prices an order.
              type: integer
              minimum: 1
        - type: object
          additionalProperties: false
          required:
            - label
            - discount_label
            - months_to_go
          properties:
            label:
              type:
                - string
                - 'null'
            discount_label:
              type: string
            months_to_go:
              description: Whole months still to go before the tier prices an order.
              type: integer
              minimum: 1
    CancelReasonOption:
      description: One customer cancel reason, in the order to show it.
      type: object
      additionalProperties: false
      required:
        - code
        - labels
      properties:
        code:
          type: string
          description: A customer reason code.
        labels:
          type: object
          description: >-
            The merchant's label per locale. Empty when the merchant set none;
            show the client's own label then.
          additionalProperties:
            type: string
    CheckoutSubscriptionCustomerPaymentMethod:
      description: >-
        Payment method rendered by PaymentMethodBlueprinter (default view) as
        embedded in customer payloads
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        source:
          type:
            - string
            - 'null'
        company_id:
          type:
            - integer
            - 'null'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        logo_url:
          type:
            - string
            - 'null'
        payment_title:
          type:
            - string
            - 'null'
        user_id:
          type:
            - integer
            - 'null'
    CheckoutSubscriptionMetafield:
      description: Metafield rendered by LegacyMetafieldBlueprint (view with_definition)
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        namespace:
          type: string
        key:
          type: string
        value:
          $ref: '#/components/schemas/JsonValue'
        value_type:
          type: string
        description:
          type:
            - string
            - 'null'
        owner_type:
          type: string
        owner_id:
          type: integer
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        metafield_definition:
          type:
            - object
            - 'null'
          additionalProperties: false
          properties:
            id:
              type: integer
            company_id:
              type: integer
            namespace:
              type: string
            key:
              type: string
            name:
              type:
                - string
                - 'null'
            description:
              type:
                - string
                - 'null'
            value_type:
              type: string
            validation_rules:
              type:
                - object
                - 'null'
              additionalProperties: false
              properties:
                choices:
                  type: array
                  items:
                    $ref: '#/components/schemas/JsonValue'
                min:
                  type:
                    - number
                    - string
                    - 'null'
                max:
                  type:
                    - number
                    - string
                    - 'null'
                max_precision:
                  type:
                    - number
                    - string
                    - 'null'
                regex:
                  type:
                    - string
                    - 'null'
                file_type_options:
                  type: array
                  items:
                    type: string
                list.min:
                  type:
                    - number
                    - string
                    - 'null'
                list.max:
                  type:
                    - number
                    - string
                    - 'null'
                required_keys:
                  type: array
                  items:
                    type: string
                allowed_keys:
                  type: array
                  items:
                    type: string
            owner_resource:
              type: string
            pinned:
              type:
                - boolean
                - 'null'
            position:
              type:
                - integer
                - 'null'
            locked:
              type:
                - boolean
                - 'null'
            created_at:
              type: string
              format: date-time
            updated_at:
              type: string
              format: date-time
            list_type:
              type: boolean
            reference_type:
              type: boolean
            supported_validations:
              type: array
              items:
                type: string
            validation_description:
              type:
                - string
                - 'null'
            category_ids:
              type: array
              items:
                type: integer
    CheckoutSubscriptionProduct:
      description: >-
        Product rendered by ProductBlueprinter (views item /
        item_without_bundle_groups). metafields and product_bundle_groups are
        omitted on the shallow view; product_bundle_groups only renders for
        bundle products.
      type: object
      additionalProperties: false
      required:
        - id
        - title
        - image_url
        - image_path
        - cv
        - tax
        - sku
        - metadata
        - external_id
        - canonical_url
        - price
        - introduction
        - price_in_currency
        - tax_in_currency
        - cv_in_currency
      properties:
        id:
          type: integer
        title:
          type:
            - string
            - 'null'
        image_url:
          type:
            - string
            - 'null'
        image_path:
          type:
            - string
            - 'null'
        cv:
          type:
            - string
            - 'null'
          format: decimal
        tax:
          type:
            - string
            - 'null'
        sku:
          type:
            - string
            - 'null'
        metadata:
          type:
            - object
            - 'null'
          additionalProperties: true
        external_id:
          type:
            - string
            - 'null'
        canonical_url:
          type:
            - string
            - 'null'
        price:
          type:
            - string
            - 'null'
        introduction:
          type:
            - string
            - 'null'
        price_in_currency:
          type:
            - string
            - 'null'
        tax_in_currency:
          type:
            - string
            - 'null'
        cv_in_currency:
          type:
            - string
            - 'null'
        metafields:
          type: array
          items:
            $ref: '#/components/schemas/CheckoutSubscriptionMetafield'
        product_bundle_groups:
          type: array
          items:
            $ref: '#/components/schemas/CheckoutSubscriptionProductBundleGroup'
    SubscriptionMilestoneOccurrence:
      description: |
        Which order a milestone item belongs to, for the client to word. `order`
        is order `order_number` of the subscription, the checkout order being 1.
        `anniversary` is the anniversary `months` whole months after the
        subscription started. `one_time` is an item added for this customer,
        such as a one-time item or a retention offer.
      oneOf:
        - type: object
          additionalProperties: false
          required:
            - type
            - order_number
          properties:
            type:
              type: string
              enum:
                - order
            order_number:
              type: integer
              minimum: 1
        - type: object
          additionalProperties: false
          required:
            - type
            - months
          properties:
            type:
              type: string
              enum:
                - anniversary
            months:
              type: integer
              minimum: 1
        - type: object
          additionalProperties: false
          required:
            - type
          properties:
            type:
              type: string
              enum:
                - one_time
    CheckoutSubscriptionProductBundleGroup:
      description: Bundle group rendered by ProductBundleGroupBlueprinter (default view)
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        title:
          type: string
        description:
          type:
            - string
            - 'null'
        group_type:
          type: string
        purpose:
          type: string
        min_selections:
          type:
            - integer
            - 'null'
        max_selections:
          type:
            - integer
            - 'null'
        selection_type:
          type:
            - string
            - 'null'
        pricing_config:
          type:
            - object
            - 'null'
          additionalProperties: true
          properties:
            pricing_type:
              type: string
            hidden:
              type: boolean
            fixed_price:
              type:
                - string
                - number
                - 'null'
            min_price:
              type:
                - string
                - number
                - 'null'
            country_pricing:
              type: array
              items:
                type: object
                additionalProperties: true
                properties:
                  country_code:
                    type:
                      - string
                      - 'null'
                  currency_code:
                    description: >-
                      Currency of this entry's amounts, stamped by the server on
                      write; client values are ignored. Absent on legacy entries
                      and entries without amounts.
                    type:
                      - string
                      - 'null'
                  enabled:
                    type:
                      - boolean
                      - 'null'
                  price:
                    type:
                      - string
                      - number
                      - 'null'
                  wholesale:
                    type:
                      - string
                      - number
                      - 'null'
                  subscription_price:
                    type:
                      - string
                      - number
                      - 'null'
                  wholesale_subscription_price:
                    type:
                      - string
                      - number
                      - 'null'
                  points:
                    type:
                      - string
                      - number
                      - 'null'
                  cv:
                    type:
                      - number
                      - string
                      - 'null'
                  qv:
                    type:
                      - number
                      - string
                      - 'null'
                  wholesale_cv:
                    type:
                      - number
                      - string
                      - 'null'
                  wholesale_qv:
                    type:
                      - number
                      - string
                      - 'null'
        allow_subscriptions:
          type: boolean
        force_subscriptions:
          type: boolean
        sort_order:
          type: integer
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        images:
          type: array
          items:
            type: object
            additionalProperties: false
            properties:
              id:
                type: integer
              image_url:
                type:
                  - string
                  - 'null'
              image_path:
                type:
                  - string
                  - 'null'
              position:
                type:
                  - integer
                  - 'null'
              dam_asset_code:
                type:
                  - string
                  - 'null'
        bundle_group_items:
          type: array
          items:
            $ref: '#/components/schemas/CheckoutSubscriptionBundleGroupItem'
    CheckoutSubscriptionBundleGroupItem:
      description: Bundle group item rendered by BundleGroupItemBlueprinter (default view)
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        quantity:
          type: integer
        sort_order:
          type: integer
        config:
          type: object
          additionalProperties: false
          properties:
            price:
              type:
                - string
                - number
                - 'null'
            pc_price:
              type:
                - string
                - number
                - 'null'
            resolved_price:
              type: string
            resolved_wholesale_price:
              type: string
            resolved_cv:
              type: string
              format: decimal
            resolved_qv:
              type: string
              format: decimal
            resolved_wholesale_cv:
              type: string
              format: decimal
            resolved_wholesale_qv:
              type: string
              format: decimal
            cv:
              type: string
              format: decimal
            qv:
              type: string
              format: decimal
            pc_cv:
              type: string
              format: decimal
            pc_qv:
              type: string
              format: decimal
            is_default:
              type: boolean
            quantity:
              type: integer
            max_quantity:
              type:
                - integer
                - 'null'
            allow_subscription:
              type: boolean
            force_subscription:
              type: boolean
            has_subscription_plans:
              type: boolean
            subscription_plans:
              type: array
              items:
                type: object
                additionalProperties: false
                properties:
                  id:
                    type: integer
                  subscription_price_in_currency:
                    type:
                      - string
                      - 'null'
                  subscribe_and_save_in_currency:
                    type:
                      - string
                      - 'null'
                  subscribe_and_save_for_display:
                    type:
                      - string
                      - 'null'
                  wholesale_subscription_price_in_currency:
                    type:
                      - string
                      - 'null'
                  wholesale_subscribe_and_save_in_currency:
                    type:
                      - string
                      - 'null'
                  wholesale_subscribe_and_save_for_display:
                    type:
                      - string
                      - 'null'
            image_url:
              type:
                - string
                - 'null'
            active:
              type: boolean
              description: >-
                Whether the bundled variant and its product are both active and
                kept. Active/kept state only: excludes inventory, and country is
                carried separately by available_country_codes.
            available_country_codes:
              type: array
              items:
                type: string
            country_prices:
              type: object
              additionalProperties:
                type:
                  - string
                  - number
                  - 'null'
        variant:
          anyOf:
            - type: 'null'
            - $ref: '#/components/schemas/CheckoutSubscriptionVariant'
  securitySchemes:
    bearer_auth:
      type: http
      scheme: bearer
      description: Bearer token authentication

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.