Billing
Five read-only endpoints for inspecting the current team's billing state. Useful for in-app dashboards, programmatic plan checks, and accounting integrations.
All write actions (changing plan, updating payment method, cancelling) live in the dashboard only — they cannot be performed via the API.
Base URL: https://formspring.io/api/v1
| Method | Path | Ability |
|---|---|---|
| GET | /billing/team |
billing:read |
| GET | /billing/plan |
billing:read |
| GET | /billing/usage |
billing:read |
| GET | /billing/subscription |
billing:read |
| GET | /billing/invoices |
billing:read |
The billing:read ability can only be granted to tokens minted by an owner or admin. See Roles →.
Show team
GET /billing/team
Returns the current team's identity and billing-relevant metadata.
Response 200:
{
"data": {
"id": "team_01H...",
"name": "Acme Co.",
"slug": "acme",
"owner_email": "florian@example.com",
"country": "DE",
"tax_id": "DE123456789",
"billing_email": "ap@example.com",
"created_at": "2025-08-01T00:00:00Z"
}
}
Show plan
GET /billing/plan
Returns the plan the team is on, including price, included quotas, and feature flags.
Response 200:
{
"data": {
"name": "Pro+",
"slug": "pro-plus",
"price_cents": 4900,
"currency": "EUR",
"interval": "monthly",
"features": {
"ai_moderation": true,
"ai_insights": true,
"auto_categorization": true,
"akismet": true,
"api_access": true,
"max_forms": null,
"max_submissions_per_month": 100000,
"max_team_members": 25
}
}
}
null quotas mean unlimited.
Show usage
GET /billing/usage
Current billing period's usage snapshot. Refreshes within 60 seconds of new submissions arriving.
Response 200:
{
"data": {
"period_start": "2026-05-01T00:00:00Z",
"period_end": "2026-06-01T00:00:00Z",
"submissions": {
"used": 12384,
"included": 100000,
"overage": 0
},
"forms": {
"used": 23,
"included": null
},
"team_members": {
"used": 4,
"included": 25
},
"ai_calls": {
"used": 12384,
"included": 100000
}
}
}
Plan a UI by reading used / included and showing a progress bar. The overage field is only populated on plans that allow paid overage.
Show subscription
GET /billing/subscription
The active subscription's lifecycle state.
Response 200:
{
"data": {
"status": "active",
"current_period_start": "2026-05-01T00:00:00Z",
"current_period_end": "2026-06-01T00:00:00Z",
"cancel_at_period_end": false,
"trial_ends_at": null,
"payment_method": {
"type": "card",
"brand": "visa",
"last4": "4242",
"exp_month": 12,
"exp_year": 2028
}
}
}
status is one of: trialing, active, past_due, canceled, incomplete. A team in past_due can still receive submissions but cannot create new resources.
List invoices
GET /billing/invoices?per_page=25
Paginated list of invoices in reverse chronological order.
Response 200:
{
"data": [
{
"id": "in_01H...",
"number": "ACME-2026-0007",
"status": "paid",
"amount_cents": 4900,
"currency": "EUR",
"issued_at": "2026-05-01T00:00:00Z",
"paid_at": "2026-05-01T00:00:12Z",
"pdf_url": "https://formspring.io/invoices/in_01H.../pdf?signature=..."
}
],
"meta": { "current_page": 1, "per_page": 25, "total": 14 }
}
pdf_url is a signed URL valid for 60 minutes. Re-list to mint a fresh URL.
Common errors
| Status | Meaning |
|---|---|
401 |
Token missing or invalid |
402 |
API not available on free plan |
403 |
Token lacks billing:read (e.g. minted by an editor or viewer) |
404 |
No subscription found (free-plan teams) |
429 |
API rate limit hit |