---
title: "Publisher Plan Checkout"
method: POST
path: "/v1/publisher/{tenant_slug}/plan/checkout"
---

# Publisher Plan Checkout

`POST /v1/publisher/{tenant_slug}/plan/checkout`

## Request

- Base URL: `https://api.storyflo.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.storyflo.com/v1/publisher/{tenant_slug}/plan/checkout`
- Auth: none declared

Start a Stripe Checkout session for an author Plus / Pro upgrade.

Auth: publisher access_token (same gate as the dashboard).
Returns ``{"checkout_url": "..."}`` — the frontend redirects the
browser; Stripe handles card collection + activation; the
/v1/stripe/webhook fires customer.subscription.created and our
payments_publisher.handle_publisher_subscription_event flips
plan_tier on the publisher row.

503 if STRIPE_PRICE_AUTHOR_PLUS / _PRO Fly secrets aren't set
yet (operator activation gate). 400 on tier other than
plus|pro — Free is just "don't pay us", no checkout needed.

## Path parameters

- `tenant_slug` string, required

## Headers

- `x-storyflo-publisher-token` string, nullable

## Request body

- PlanCheckoutBody
  - `tier` string, required
  - `success_url` string, required
  - `cancel_url` string, required

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/storyflo/apis/storyflo-inference-router.md) · [All operations](https://skmtc.dev/storyflo/apis/storyflo-inference-router/llms.txt) · [OpenAPI document](https://skmtc.dev/storyflo/apis/storyflo-inference-router/revisions/c3a1a735ac7a?raw)
