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

# Confirm Checkout

> Confirm a completed Stripe Session for its currently authorized org admin.

Stripe's customer and client reference must agree with stored org authority.
Membership is rechecked under the writer lock before any reconciliation.
Subscription reconciliation retains its org lock and webhook-race semantics.

Stripe failures return retryable 502 CHECKOUT_CONFIRM_FAILED. Pending
Sessions or subscription propagation return 409 CHECKOUT_CONFIRM_PENDING
only after authorization. A reconciled org still without a billable plan
emits the ERROR-level CHECKOUT_CONFIRM_NO_PLAN marker: brief propagation
races are retryable, but persistent absence strands a paying customer and
must be loud rather than silently bouncing them back to the paywall.



## OpenAPI

````yaml https://api.getfloo.com/openapi.json post /v1/billing/checkout/confirm
openapi: 3.1.0
info:
  title: floo API
  version: 0.1.0
servers:
  - url: https://api.getfloo.com
security: []
paths:
  /v1/billing/checkout/confirm:
    post:
      tags:
        - billing
      summary: Confirm Checkout
      description: >-
        Confirm a completed Stripe Session for its currently authorized org
        admin.


        Stripe's customer and client reference must agree with stored org
        authority.

        Membership is rechecked under the writer lock before any reconciliation.

        Subscription reconciliation retains its org lock and webhook-race
        semantics.


        Stripe failures return retryable 502 CHECKOUT_CONFIRM_FAILED. Pending

        Sessions or subscription propagation return 409 CHECKOUT_CONFIRM_PENDING

        only after authorization. A reconciled org still without a billable plan

        emits the ERROR-level CHECKOUT_CONFIRM_NO_PLAN marker: brief propagation

        races are retryable, but persistent absence strands a paying customer
        and

        must be loud rather than silently bouncing them back to the paywall.
      operationId: billing_confirm_checkout
      parameters:
        - $ref: '#/components/parameters/X-Floo-Org-Id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CheckoutConfirmRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrgResponse'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - bearerAuth: []
components:
  parameters:
    X-Floo-Org-Id:
      name: X-Floo-Org-Id
      in: header
      required: false
      schema:
        type: string
        format: uuid
      description: Organization to act in; defaults to the one joined most recently.
  schemas:
    CheckoutConfirmRequest:
      properties:
        session_id:
          type: string
          maxLength: 255
          minLength: 1
          pattern: ^cs_
          title: Session Id
      type: object
      required:
        - session_id
      title: CheckoutConfirmRequest
      description: Identify the Stripe Session whose purchase is being confirmed.
    OrgResponse:
      properties:
        id:
          type: string
          format: uuid
          title: Id
        name:
          type: string
          title: Name
        slug:
          type: string
          title: Slug
        plan:
          anyOf:
            - $ref: '#/components/schemas/OrgPlan'
            - type: 'null'
        spend_cap:
          anyOf:
            - type: integer
            - type: 'null'
          title: Spend Cap
        spend_cap_policy:
          $ref: '#/components/schemas/SpendCapPolicy'
        current_period_spend_cents:
          type: integer
          title: Current Period Spend Cents
          default: 0
        spend_cap_exceeded:
          type: boolean
          title: Spend Cap Exceeded
          default: false
        billing_period_start:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Billing Period Start
        billing_period_end:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Billing Period End
        member_count:
          type: integer
          title: Member Count
        member_limit:
          anyOf:
            - type: integer
            - type: 'null'
          title: Member Limit
        has_payment_method:
          type: boolean
          title: Has Payment Method
          default: false
        is_internal:
          type: boolean
          title: Is Internal
          default: false
        my_role:
          $ref: '#/components/schemas/OrgRole'
        onboarding_completed_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Onboarding Completed At
        logo_data_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Logo Data Url
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          type: string
          format: date-time
          title: Updated At
      type: object
      required:
        - id
        - name
        - slug
        - plan
        - spend_cap
        - spend_cap_policy
        - member_count
        - my_role
        - created_at
        - updated_at
      title: OrgResponse
      description: Response for a single organization.
    ErrorResponse:
      properties:
        detail:
          $ref: '#/components/schemas/ErrorDetail'
      type: object
      required:
        - detail
      title: ErrorResponse
      description: Body of every error response except request validation (422).
    OrgPlan:
      type: string
      enum:
        - paygo
        - team
        - enterprise
      title: OrgPlan
      description: Billing plan tier for an organization.
    SpendCapPolicy:
      type: string
      enum:
        - 'off'
        - alerts_only
        - freeze_new_spend
        - hard_stop
      title: SpendCapPolicy
      description: How floo should react when an org reaches its spend cap.
    OrgRole:
      type: string
      enum:
        - admin
        - member
        - viewer
      title: OrgRole
      description: Role of a user within an organization.
    ErrorDetail:
      properties:
        code:
          type: string
          title: Code
        message:
          type: string
          title: Message
      additionalProperties: true
      type: object
      required:
        - code
        - message
      title: ErrorDetail
      description: Standard error envelope with operation-specific JSON context.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: A `floo_` API key.

````

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