Skip to content
postpeg

Billing

Plans are priced by connected accounts. You can manage billing from the dashboard, or through the API if you’d rather build it into your own product.

Plans

Plans
FieldDescription
Trialfree, 7 days3 connected accounts and every feature. No card needed.
Starter$29 per month10 connected accounts. Unlimited posts, scheduling, analytics, comments and DMs.
Pro$79 per month50 connected accounts. Unlimited posts, scheduling, analytics, comments and DMs.
Scale$199 per monthUnlimited connected accounts (fair use: up to 150 accounts). Unlimited posts, scheduling, analytics, comments and DMs.

When the trial ends without a plan, the API answers 402 subscription_required except for GET /v1/me and the endpoints on this page. Connected accounts are kept for 3 days, so paying in that time picks up where you left off. See also Pricing.

Current plan

GET/v1/billing

Your plan, the subscription state and the plans on offer. It keeps working after the trial or subscription ends, so a client can always show how to pay.

curl https://api.postpeg.com/v1/billing \
  -H "Authorization: Bearer $POSTPEG_KEY"
Response · 200 OK
{
  "plan": "trial",
  "subscription_status": null,
  "current_period_end": null,
  "cancel_at_period_end": false,
  "trial_ends_at": "2026-10-01T13:55:02.114Z",
  "plans": [
    {
      "id": "starter",
      "name": "Starter",
      "price_usd": 29,
      "account_limit": 10
    },
    {
      "id": "pro",
      "name": "Pro",
      "price_usd": 79,
      "account_limit": 50
    },
    {
      "id": "scale",
      "name": "Scale",
      "price_usd": 199,
      "account_limit": 150
    }
  ]
}

For Scale, account_limit is the fair-use cap.

Checkout

POST/v1/billing/checkout

Checkout fields
FieldDescription
planstarter | pro | scale · requiredThe plan to buy.
success_urlhttp(s) URLWhere to send the buyer after paying.

Returns a link to a hosted checkout page. The plan switches as soon as the payment is confirmed, usually within seconds.

curl https://api.postpeg.com/v1/billing/checkout \
  -H "Authorization: Bearer $POSTPEG_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "plan": "pro",
    "success_url": "https://example.com/billing/done"
  }'
Response · 200 OK
{
  "url": "https://…",
  "expires_at": "2026-09-24T15:02:11.000Z"
}

Billing portal

POST/v1/billing/portal

A link to the billing portal, where the customer changes plan, updates their card, downloads invoices or cancels. The body is optional: pass return_url to choose where the portal sends them back.

curl https://api.postpeg.com/v1/billing/portal \
  -H "Authorization: Bearer $POSTPEG_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "return_url": "https://example.com/settings/billing"
  }'
Response · 200 OK
{
  "url": "https://…"
}

Before the first checkout there’s no billing account yet:

Response · 409 Conflict
{
  "type": "https://postpeg.com/errors/conflict",
  "title": "Conflict",
  "status": 409,
  "detail": "No billing account yet; start with POST /v1/billing/checkout",
  "code": "conflict",
  "request_id": "8f14e45f-ceea-467a-9575-1f2a5c3e6b0d"
}