---
title: "Start a Stripe Checkout for a credit pack; 201 with the new purchase, or 200 with the open purchase of the same pack started in the last 5 minutes (20 purchases per account per hour). For a tier, a Checkout in subscription mode: 201 with purchase null (20 per account per hour); the subscription events then set GET /v1/account/billing/subscription"
method: POST
path: "/v1/account/billing/checkout-sessions"
---

# Start a Stripe Checkout for a credit pack; 201 with the new purchase, or 200 with the open purchase of the same pack started in the last 5 minutes (20 purchases per account per hour). For a tier, a Checkout in subscription mode: 201 with purchase null (20 per account per hour); the subscription events then set GET /v1/account/billing/subscription

`POST /v1/account/billing/checkout-sessions`

## Request

- Base URL: `https://api.roveapi.com`
- URL: `https://api.roveapi.com/v1/account/billing/checkout-sessions`
- Auth: API key in cookie `rove_session`

## Request body

- object
  - `item_id` string, required: A current catalogue pack id (e.g. pack_1k) or tier id (tier_builder, tier_scale).

## Response `200`

The open purchase of this pack from the last 5 minutes (a repeated click)

- object
  - `purchase` object, nullable, required: The purchase for a pack; null for a tier (a subscription Checkout creates no purchase: read GET /v1/account/billing/subscription after return).
    - `id` string, uuid, required
    - `object` 'purchase', required
    - `status` 'created' | 'open' | 'requires_action' | 'processing' | 'paid' | 'refunded' | 'disputed' | 'reversed' | 'expired' | 'canceled' | 'failed', required
    - `livemode` boolean, required
    - `actor` 'owner_web' | 'api_key' | 'auto_topup' | 'legacy_link', required
    - `api_key_id` string, uuid, nullable, required
    - `api_key_name` string, nullable, required
    - `replayed` boolean, required
    - `channel` 'checkout' | 'off_session', required
    - `item` object, required
      - `id` string, required
      - `version` integer, required
      - `name` string, required
    - `amount_cents` integer, required
    - `currency` 'usd', required
    - `credits` integer, required: Whole credits the pack grants.
    - `amount_refunded_cents` integer, required
    - `millicredits_reversed` integer, required
    - `millicredits_held` integer, required
    - `next_action` object, nullable, required
      - `type` 'open_checkout_url', required
      - `url` string, required
      - `expires_at` string, date-time, required
      - `reason` 'checkout_requested' | 'no_saved_method' | 'off_session_not_allowed' | 'authentication_required' | 'card_declined', required
      - `instruction` string, required
    - `retry` 'same_key' | 'new_key', nullable, required
    - `failure_code` string, nullable, required
    - `created_at` string, date-time, required
    - `paid_at` string, date-time, nullable, required
  - `checkout_url` string, required: The Stripe Checkout page; it grants nothing by itself. Read the purchase until it is paid, or the subscription until it is active.

## Other responses

- `201`: Successful response (Cache-Control: no-store)
- `400`: RFC 7807 invalid-params
- `401`: RFC 7807 owner-session-required: sign in at owner_action_url
- `403`: RFC 7807 owner-origin-refused (mutations only)
- `404`: RFC 7807 pack-not-found: no current pack or tier has this id; read the catalogue again
- `409`: RFC 7807 subscription-exists: the account already has a live subscription; change or cancel it in the payment portal
- `429`: RFC 7807 purchase-rate-limited: 20 purchases (or subscription Checkouts) per account per hour (soft); Retry-After
- `503`: RFC 7807 billing-unavailable; Retry-After: 30, retry same_key

---

[API](https://skmtc.dev/roveapi/apis/rove-api.md) · [All operations](https://skmtc.dev/roveapi/apis/rove-api/llms.txt) · [OpenAPI document](https://skmtc.dev/roveapi/apis/rove-api/revisions/0e5d69bde586?raw)
