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
| Field | Description |
|---|---|
Trialfree, 7 days | 3 connected accounts and every feature. No card needed. |
Starter$29 per month | 10 connected accounts. Unlimited posts, scheduling, analytics, comments and DMs. |
Pro$79 per month | 50 connected accounts. Unlimited posts, scheduling, analytics, comments and DMs. |
Scale$199 per month | Unlimited 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"{
"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
| Field | Description |
|---|---|
planstarter | pro | scale · required | The plan to buy. |
success_urlhttp(s) URL | Where 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"
}'{
"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"
}'{
"url": "https://…"
}Before the first checkout there’s no billing account yet:
{
"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"
}