> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reap.video/llms.txt
> Use this file to discover all available pages before exploring further.

# Manage Subscription

> Get a Stripe billing portal link to change plan, update payment details, or cancel

> **For AI agents:** a documentation index is at [/llms.txt](/llms.txt). Every page is also available as markdown, just append `.md` to the URL.

## Overview

Get a Stripe billing-portal link for the studio's subscription. In the portal the user can change plan, update the payment method, view invoices, or cancel. Like [Top Up Media Credits](/api-reference/top-up-media-credits), this endpoint only returns a URL — all changes happen in the browser.

<Warning>
  **Admin keys only.** Only API keys created by the studio admin can call this endpoint; member keys receive a `403`.
</Warning>

<Note>
  Plans purchased through **AppSumo** are managed in your AppSumo account, not Stripe. AppSumo subscriptions receive a `400` with a message pointing to appsumo.com.
</Note>

## Response

<ResponseField name="url" type="string">
  Stripe billing-portal URL. Open it in a browser to manage the subscription.
</ResponseField>

## Example Request

<CodeGroup>
  ```bash cURL theme={"system"}
  curl -X GET "https://public.reap.video/api/v1/automation/manage-subscription" \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```

  ```javascript JavaScript theme={"system"}
  const response = await fetch('https://public.reap.video/api/v1/automation/manage-subscription', {
    headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
  });

  const { url } = await response.json();
  console.log('Manage your subscription at:', url);
  ```

  ```python Python theme={"system"}
  import requests

  response = requests.get(
      'https://public.reap.video/api/v1/automation/manage-subscription',
      headers={'Authorization': 'Bearer YOUR_API_KEY'}
  )

  print('Manage your subscription at:', response.json()['url'])
  ```
</CodeGroup>

## Example Response

<CodeGroup>
  <CodeGroup.Tab label="200 OK">
    ```json theme={"system"}
    {
      "url": "https://billing.stripe.com/p/session/live_XYZ..."
    }
    ```
  </CodeGroup.Tab>

  <CodeGroup.Tab label="400 AppSumo Plan">
    ```json theme={"system"}
    {
      "detail": "Your plan was purchased through AppSumo, so billing is managed in your AppSumo account, not Stripe. Visit appsumo.com to manage your plan."
    }
    ```
  </CodeGroup.Tab>

  <CodeGroup.Tab label="403 Forbidden">
    ```json theme={"system"}
    {
      "detail": "Only the studio admin can manage the subscription."
    }
    ```
  </CodeGroup.Tab>

  <CodeGroup.Tab label="401 Unauthorized">
    ```json theme={"system"}
    {
      "detail": "Unauthorized - Invalid or missing API key"
    }
    ```
  </CodeGroup.Tab>
</CodeGroup>

## Rate Limiting

This endpoint is subject to the standard rate limit of **10 requests per minute**.

## Next Steps

* **Just need more media credits?** Use [Top Up Media Credits](/api-reference/top-up-media-credits) — it works for any API key and doesn't change your plan
* **Check current plan and usage** with [Get Plan Usage](/api-reference/get-plan-usage)


## OpenAPI

````yaml GET /automation/manage-subscription
openapi: 3.1.0
info:
  title: Reap Automation API
  description: AI-powered video processing automation API
  version: 1.0.0
servers:
  - url: https://public.reap.video/api/v1
security:
  - bearerAuth: []
paths:
  /automation/manage-subscription:
    get:
      summary: Manage Subscription
      description: >-
        Get a Stripe billing-portal link to change plan, update the payment
        method, view invoices, or cancel. Admin API keys only; AppSumo plans are
        managed on appsumo.com instead.
      operationId: getManageSubscriptionUrl
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingUrlResponse'
components:
  schemas:
    BillingUrlResponse:
      type: object
      properties:
        url:
          type: string
          description: Stripe URL to open in a browser
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````