---
title: "Start a hosted Stripe Checkout purchase for the server-quoted subscription"
method: POST
path: "/onboarding/v3/checkout-session"
tags: ["Onboarding"]
---

# Start a hosted Stripe Checkout purchase for the server-quoted subscription

`POST /onboarding/v3/checkout-session`

## Request

- Base URL: `https://api.medianfi.com/api/v1`
- URL: `https://api.medianfi.com/api/v1/onboarding/v3/checkout-session`
- Auth: HTTP bearer

Subscription-mode Checkout with promotion codes enabled. Request body is empty; economics come from durable server state and the return URLs are server-built for the surface the request arrived from. A flow that has already paid answers 409 ONBOARDING_ALREADY_PAID and opens no session; the client reloads the flow.

## Headers

- `X-Median-App-Surface` 'qa'

## Request body

- OnboardingV3EmptyBody

## Response `200`

Hosted Checkout URL to redirect the customer to

- OnboardingV3CheckoutSessionApiResponse
  - `success` true, required
  - `data` OnboardingV3CheckoutSession, required
    - `url` string, uri, required: Hosted Stripe Checkout URL (always https on checkout.stripe.com).

## Other responses

- `400`: Onboarding request body is not valid JSON
- `401`: Authentication required
- `403`: Insufficient permissions or not a company member
- `404`: Resource not found
- `409`: Request conflicts with the durable onboarding state
- `413`: Onboarding pricing request exceeds the 4096-byte route limit
- `415`: Onboarding request charset or content encoding is unsupported
- `422`: Validation error
- `503`: Required sandbox provider configuration or service is unavailable

---

[API](https://skmtc.dev/medianfi/apis/median-api.md) · [All operations](https://skmtc.dev/medianfi/apis/median-api/llms.txt) · [OpenAPI document](https://skmtc.dev/medianfi/apis/median-api/revisions/20090ea32b0d?raw)
