---
title: "Subscribe to a plan"
method: POST
path: "/api/v1/organizations/{organizationId}/billing/subscribe"
tags: ["Organizations"]
---

# Subscribe to a plan

`POST /api/v1/organizations/{organizationId}/billing/subscribe`

## Request

- Base URL: `https://app.easyscraper.com`
- URL: `https://app.easyscraper.com/api/v1/organizations/{organizationId}/billing/subscribe`
- Auth: API key in cookie `better-auth.session_token`

Subscribe the organization to a plan's monthly or yearly price, and return the URL to send the member to. Without a subscription, it's Stripe Checkout, which comes back to `returnUrl` (a page of the web app) once paid. With one, the subscription moves to the plan: through the billing portal, where the member confirms the prorated amount, or at once (prorated) when either plan charges per member, returning `returnUrl`. Requires the `billing: ["manage"]` permission (owners and admins)

## Path parameters

- `organizationId` string, uuid, required

## Request body

- object
  - `planId` string, required
  - `interval` 'month' | 'year', required
  - `returnUrl` string, uri, required

## Response `200`

OK

- object
  - `url` string, uri, required

## Other responses

- `400`: 400
- `401`: 401
- `403`: 403
- `404`: 404
- `409`: 409
- `429`: 429

## Changes

- **2026-11-02** `a12cef98c52b`: 1 breaking
  - added `subschema #1` to the response body `oneOf` list for the response status `400`
- **2026-10-31** `3e642e95991a`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/easyscraper/apis/easy-scraper-api/changes/api/v1/organizations/:organizationId/billing/subscribe/post.md)

---

[API](https://skmtc.dev/easyscraper/apis/easy-scraper-api.md) - [All operations](https://skmtc.dev/easyscraper/apis/easy-scraper-api/llms.txt) - [OpenAPI document](https://skmtc.dev/easyscraper/apis/easy-scraper-api/revisions/a12cef98c52b?raw)
