---
title: "Open a Stripe Checkout Session for the Builder or Team plan"
method: POST
path: "/api/v1/billing/checkout"
tags: ["Billing"]
---

# Open a Stripe Checkout Session for the Builder or Team plan

`POST /api/v1/billing/checkout`

## Request

- Base URL: `https://api.hub-equity.com`
- URL: `https://api.hub-equity.com/api/v1/billing/checkout`
- Auth: HTTP bearer

Creates (or reuses) the workspace's Stripe customer and returns the URL of a hosted Checkout page. Builder prices include VAT, Team prices exclude it; Stripe Tax computes the amount and collects the buyer's VAT number for the EU B2B reverse charge. Returns 409 when the workspace already has a subscription: plan changes go through the portal.

## Request body

- CheckoutRequest
  - `plan` 'builder' | 'team' | 'pro': Plan to subscribe to: `builder` or `team`. `pro` is accepted as the former name of `team`. Defaults to Builder.
  - `interval` 'monthly' | 'annual': Billing interval for the chosen plan.
  - `return_path` string: Same-site path the customer returns to. Only absolute same-site paths are honoured; anything else falls back to the default.

## Response `200`

Successful Response

- ApiResponseBillingSessionResponse
  - `success` boolean, required
  - `data` BillingSessionResponse
    - `url` string, required: Stripe-hosted page to redirect the customer to.
  - `error` ApiError: API error details.
    - `code` string, required
    - `message` string, required
    - `details` object, nullable
  - `meta` ApiMeta: API response metadata. Pagination fields (``page`` / ``per_page`` / ``total``) are populated on collection endpoints only. They are omitted from the payload on single-resource endpoints.
    - `timestamp` string, date-time
    - `request_id` string, nullable
    - `page` integer, nullable
    - `per_page` integer, nullable
    - `total` integer, nullable
  - `links` ApiLinks: HATEOAS-style pagination cursors. Host-relative path + query links for a collection page. Present on collection endpoints, ``null`` fields where a page doesn't exist (``next`` on the last page, ``prev`` on the first). The whole ``links`` object is omitted from single-resource responses (see ``ApiResponse`` serializer).
    - `self` string, nullable
    - `first` string, nullable
    - `prev` string, nullable
    - `next` string, nullable
    - `last` string, nullable

## Other responses

- `422`: Validation Error

---

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