logo

Plans

Plan catalog endpoints for listing available subscription plans. Two public-facing endpoints are exposed: an authenticated listing used by the billing UI and an unauthenticated public catalog for the marketing site.

List Plans (Authenticated)

POST
https://multicartapi.com/api/v1/plans/get_plans/
API Key or Session Token

Return all enabled plans ordered by sort_order, including PayPal plan IDs and legacy alias fields used by the billing UI.

curl "https://multicartapi.com/api/v1/plans/get_plans/" \
  -X POST \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
Request body
{}
Response
{
  "code": 200,
  "data": [
    {
      "id": 1,
      "code": "starter",
      "name": "Starter",
      "title": "Get started for free",
      "features": [{"text": "1 000 scrapes / month", "active": true}],
      "price_cents": 0,
      "scrape_quota": 1000,
      "interval": "month",
      "currency": "USD",
      "is_default": true,
      "is_featured": false,
      "is_contact_sales": false,
      "sort_order": 0,
      "status": "enable",
      "paypal_product_id": null,
      "paypal_plan_id": null,
      "price": 0,
      "credits": 1000,
      "duration": "monthly",
      "currency_symbol": "$",
      "description": "1 000 scrapes / month"
    },
    {
      "id": 2,
      "code": "pro",
      "name": "Pro",
      "title": "For growing teams",
      "features": [{"text": "5 000 scrapes / month", "active": true}],
      "price_cents": 4900,
      "scrape_quota": 5000,
      "interval": "month",
      "currency": "USD",
      "is_default": false,
      "is_featured": true,
      "is_contact_sales": false,
      "sort_order": 1,
      "status": "enable",
      "paypal_product_id": "PROD-XXXXXXXXXXXX",
      "paypal_plan_id": "P-XXXXXXXXXXXX",
      "price": 49,
      "credits": 5000,
      "duration": "monthly",
      "currency_symbol": "$",
      "description": "5 000 scrapes / month"
    }
  ],
  "status": 1
}

Notes

No request body is required. Returns plans with `status='enable'` only, sorted ascending by `sort_order`. Response includes both canonical fields (`price_cents`, `scrape_quota`, `interval`) and synthesized legacy aliases (`price` in dollars, `credits`, `duration`, `currency_symbol`, `description`) for backward compatibility with existing frontends. The `paypal_plan_id` field is included in this response (unlike the public endpoint) because this endpoint is used by the billing UI to render the PayPal subscription button. `is_contact_sales: true` plans (e.g. Enterprise/Elite) have `paypal_plan_id: null` and cannot be subscribed to online.

List Plans (Public)

GET
https://multicartapi.com/api/v1/plans/public/
No auth (public)

Return the public plan catalog for the marketing site — no authentication required; PayPal internal IDs are omitted.

curl "https://multicartapi.com/api/v1/plans/public/" \
  -X GET
Response
{
  "code": 200,
  "data": [
    {
      "id": 1,
      "code": "starter",
      "name": "Starter",
      "title": "Get started for free",
      "features": [{"text": "1 000 scrapes / month", "active": true}],
      "price_cents": 0,
      "scrape_quota": 1000,
      "interval": "month",
      "currency": "USD",
      "is_default": true,
      "is_featured": false,
      "is_contact_sales": false,
      "sort_order": 0,
      "status": "enable",
      "price": 0,
      "credits": 1000,
      "duration": "monthly",
      "currency_symbol": "$",
      "description": "1 000 scrapes / month"
    }
  ],
  "status": 1
}

Notes

No authentication or request body required. Returns the same `status='enable'` plans sorted by `sort_order` as the authenticated endpoint, but uses `PublicPlanSerializer` which intentionally omits `paypal_product_id` and `paypal_plan_id` so internal PayPal identifiers are never exposed to unauthenticated callers. All other fields — including canonical (`price_cents`, `scrape_quota`, `interval`) and legacy aliases (`price`, `credits`, `duration`) — are present. This endpoint is not documented in the landing `/api-docs` but is used by the public pricing page on the marketing site.