---
title: "Subscribe or switch plans with no browser"
method: POST
path: "/api/v1/billing/subscribe"
tags: ["Billing"]
---

# Subscribe or switch plans with no browser

`POST /api/v1/billing/subscribe`

## Request

- Base URL: `https://overwing.ai`
- URL: `https://overwing.ai/api/v1/billing/subscribe`
- Auth: HTTP bearer

New subscriptions need a Stripe payment method id (pm_...), created with Stripe.js, a Stripe test token, or an agent payment provider. Switching an existing subscription needs only the plan and is prorated. Returns 202 with payment_url when the bank requires an extra confirmation step.

## Request body

- object
  - `plan` 'starter' | 'growth' | 'scale', required
  - `payment_method` string

## Response `201`

Active

- SubscribeResponse
  - `plan` string
  - `daily_limit` integer
  - `subscription_status` string
  - `current_period_end` string, nullable
  - `requires_action` boolean
  - `payment_url` string, nullable
  - `notice` string

## Other responses

- `202`: Requires action
- `400`: Validation error
- `401`: Missing or invalid API key
- `402`: Payment method rejected
- `409`: Already on that plan
- `503`: Billing not enabled

---

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