---
title: "Create subscription link"
method: POST
path: "/billing/subscription-link"
tags: ["billing"]
---

# Create subscription link

`POST /billing/subscription-link`

## Request

- Base URL: `https://storeinspect.com/api/v1`
- URL: `https://storeinspect.com/api/v1/billing/subscription-link`
- Auth: HTTP bearer

Creates a short-lived Stripe-hosted paid Checkout, exact upgrade-confirmation, or billing-recovery link for the selected plan. API-created Checkout does not include a free trial. Creating the link never changes or charges the subscription; a human must open and confirm it in Stripe.

## Request body

- SubscriptionLinkRequest
  - `plan` 'pro' | 'business' | 'enterprise', required
  - `billing` 'monthly' | 'annual'

## Response `200`

Short-lived Stripe-hosted billing link.

- BillingLinkResponse
  - `object` 'billing_link', required
  - `kind` 'checkout' | 'subscription_update_confirm' | 'billing_portal', required
  - `url` string, uri, required
  - `target_plan` 'pro' | 'business' | 'enterprise' | 'null', nullable, required
  - `target_billing` 'monthly' | 'annual' | 'null', nullable, required
  - `expires_at` string, date-time, nullable, required
  - `requires_customer_confirmation` true, required
  - `request_id` string, required

## Other responses

- `400`: Invalid plan or billing cadence.
- `401`: Missing, invalid, revoked, or suspended API key.
- `403`: The API key does not have billing:manage.
- `409`: The requested change is not a supported upgrade or billing state requires support.
- `429`: Too many billing links were requested.
- `503`: Stripe billing is temporarily unavailable.

---

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