---
title: "Start a Team upgrade checkout"
method: POST
path: "/v1/orgs/{orgId}/billing/checkout-sessions"
tags: ["Billing"]
---

# Start a Team upgrade checkout

`POST /v1/orgs/{orgId}/billing/checkout-sessions`

## Request

- Base URL: `https://api.tessl.io`
- URL: `https://api.tessl.io/v1/orgs/{orgId}/billing/checkout-sessions`
- Auth: none declared

Creates a Stripe Checkout session (subscription mode) for the Team plan. Returns the hosted checkout URL to redirect to. Stripe creates the customer and recurring subscription; the org is provisioned by the Stripe webhook once checkout completes.

## Path parameters

- `orgId` string, uuid, required

## Headers

- `Authorization` string

## Request body

- object

## Response `201`

Default Response

- object
  - `links` object, required
    - `self` string, uri, required
  - `data` object, required
    - `id` string, required
    - `type` 'checkout-session', required
    - `attributes` object, required
      - `checkoutUrl` string, uri, required

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `409`: Conflict
- `500`: Internal Server Error
- `503`: Service Unavailable

## Changes

- **2026-09-15** `d50a02b79ad3`: 2 info
  - added the optional property `error/code` to the response with the `403` status
  - added the optional property `error/url` to the response with the `403` status

[Operation history](https://skmtc.dev/tessl/apis/tessl-api/changes/v1/orgs/:orgId/billing/checkout-sessions/post.md)

---

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