---
title: "Plans, prices, credit packs, and the free tier"
method: GET
path: "/v1/plans"
tags: ["models"]
---

# Plans, prices, credit packs, and the free tier

`GET /v1/plans`

## Request

- Base URL: `https://aicontentdrop.com`
- URL: `https://aicontentdrop.com/v1/plans`
- Auth: one of:
  - none
  - HTTP bearer

Subscription plans with their monthly price and credit allocation, the one-time top-up packs, and the free tier, derived from the same constants checkout bills against. No API key required. Use this instead of scraping the pricing page, and /v1/models for what a credit buys on each model.

## Response `200`

Plans and prices

- Plans
  - `object` 'list', required
  - `currency` 'usd', required
  - `billing_model` string: Post-deduct: credits are charged only when a generation succeeds, so there is no refund path.
  - `free_tier` object, required
    - `available` boolean, required
    - `credits` integer, required
    - `price_usd` number
    - `card_required` boolean
    - `allocation` 'one_time', required: Granted once, on email confirmation, and stamped so it cannot be replayed.
    - `renews` boolean
    - `email_confirmation_required` boolean
    - `signup_url` string, uri
    - `agent_signup` string, uri: POST here with the human's address to have a magic link sent; an agent cannot complete signup alone.
  - `plans` object[], required
    - `id` string, required
    - `name` string, required
    - `price_usd_per_month` number, required
    - `price_usd_per_month_billed_annually` number, nullable: Monthly rate when billed annually, not a yearly total. Null when the plan has no annual option.
    - `credits_per_month` integer, required
    - `max_quality` string
    - `popular` boolean
    - `features` string[]
    - `checkout_url` string, uri
  - `credit_packs` object[], required: One-time top-ups. Credits from a pack do not expire with the billing period.
    - `id` string, required
    - `credits` integer, required
    - `price_usd` number, required
    - `usd_per_credit` number
    - `one_time` boolean
  - `per_model_costs` string, uri
  - `documentation` string, uri

## Other responses

- `429`: Rate limited. Read Retry-After (header) or error.retry_after_seconds (body) — they carry the same number — and wait that long. Retrying sooner extends the window rather than shortening it.
- `500`: Unexpected failure on our side. Retry once; nothing was charged.

---

[API](https://skmtc.dev/aicontentdrop/apis/ai-content-drop-api.md) · [All operations](https://skmtc.dev/aicontentdrop/apis/ai-content-drop-api/llms.txt) · [OpenAPI document](https://skmtc.dev/aicontentdrop/apis/ai-content-drop-api/revisions/75a13a8043ae?raw)
