Skip to content

Plans

GET /public/plans is the only endpoint that needs no authentication. It powers a pricing page.

bash
curl https://api.postlyra.com/public/plans
json
{
  "plans": [
    {
      "slug": "solo",
      "location": "default",
      "popular": true,
      "sort_order": 1,
      "name": { "en": "Solo" },
      "description": { "en": "For one person running their own social media." },
      "prices": {
        "monthly": { "amount": 2900, "currency": "EUR" },
        "yearly": { "amount": 29000, "currency": "EUR" }
      },
      "features": { "brands": 1, "ai_credits_monthly": 10000, "storage_limit": 5 }
    }
  ],
  "generated_at": "2026-08-15T09:00:00+00:00"
}

Notes

Amounts are in minor units. 2900 is 29.00 EUR. Divide by 100 before display. This differs from GET /subscription/plans, which returns decimals.

Caching. The response carries Cache-Control: public, max-age=300 and is also cached server side for 5 minutes. A price change takes up to 5 minutes to appear.

What is included. Only plans that are active, are not hidden, and have both an active monthly and an active yearly price. A plan missing either price is excluded entirely, which is the usual reason a newly created plan does not show up.

location is default or special, for pricing pages that group plans into rows.

name and description are keyed by locale. Today only en is populated.

For what a plan's features values actually control at runtime, see Entitlements.

Postlyra, by MAVA Design