---
title: "Create or resume an owner's hosted Stripe Checkout"
method: POST
path: "/v1/organizations/{organization_id}/billing/checkouts"
---

# Create or resume an owner's hosted Stripe Checkout

`POST /v1/organizations/{organization_id}/billing/checkouts`

## Request

- Base URL: `https://app.ohmyho.st`
- URL: `https://app.ohmyho.st/v1/organizations/{organization_id}/billing/checkouts`
- Auth: HTTP bearer

Returns a human payment URL, never charges a saved card. Paid is USD 10/month; each top-up pack is USD 10 before tax; a purchase grants 100 credits per dollar up to USD 100 and 125 credits per dollar for the part above, so 10 packs grant 10000 and 20 packs grant 22500 credits. Top-ups require active Paid access and have no time limit during uninterrupted Paid membership; remaining top-ups expire when the workspace returns to Free. Monthly Paid credits expire at billing-period end without rollover. Retry the same offer, packs and Idempotency-Key after uncertainty. Browser return is not payment proof; read this checkout and the organization balance. A conflicting or existing subscription returns billing_purchase_conflict (409); read the original checkout or request an owner billing portal URL instead of another purchase. Works at zero credits.

## Path parameters

- `organization_id` string, required

## Headers

- `X-Request-Id` string
- `Idempotency-Key` string, required

## Request body

- object
  - `offer` 'topup' | 'paid', required
  - `packs` integer, required: Paid requires exactly one pack.

## Response `201`

Original checkout and its current provider-observed status.

- BillingCheckout
  - `organization_id` string, required
  - `checkout_id` string, required
  - `offer` 'topup' | 'paid', required
  - `state` 'open' | 'complete' | 'expired', required
  - `payment_confirmed` boolean, required
  - `url` string, uri, nullable, required
  - `expires_at` string, date-time, required
  - `packs` integer, required
  - `credited_micros` string, required
  - `revoked_micros` string, required
  - `paid_until` string, date-time, nullable, required
  - `required_action` 'none' | 'complete_checkout' | 'open_billing_portal' | 'contact_support', required: Human payment handoff. Complete the returned Checkout URL, request a fresh billing portal URL to correct billing details, or contact ohmyho.st when tax configuration requires review. none includes a draft invoice awaiting automatic processing; it is not a claim of current Paid coverage. Never infer renewal success from the historical payment_confirmed flag.
  - `billing_issue` BillingTaxIssue, nullable, required: Verified issue on an existing Stripe invoice; no new purchase is needed.
    - `code` 'billing_tax_location_required' | 'billing_tax_calculation_failed' | 'billing_tax_configuration_required', required
    - `invoice_id` string, required
    - `observed_at` string, date-time, required
    - `required_action` 'open_billing_portal' | 'contact_support', required

## Other responses

- `400`: The request failed.
- `401`: The request failed.
- `402`: The request failed.
- `404`: The resource does not exist or is not visible to the authenticated principal.
- `409`: The request failed.
- `413`: The request failed.
- `429`: The request failed.
- `503`: The request failed.

---

[API](https://skmtc.dev/ohmyho/apis/ohmyho-st-api.md) · [All operations](https://skmtc.dev/ohmyho/apis/ohmyho-st-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ohmyho/apis/ohmyho-st-api/revisions/d069888c0017?raw)
