Billing
Read-only access to the user's subscription, subscription history, available plans, payment status and balance transactions.
A Configo account pays for a subscription to a plan (tariff). The plan sets how many projects the user can own, how many members each project can have, and which features are on. All projects owned by the user work only while the subscription is active.
Through the public API billing is read-only: buying, renewing and paying for a subscription happens in the Configo app.
The API itself is available on every plan.
Field types follow the field notation.
Access
Every endpoint on this page requires the billing OAuth scope and acts on the authenticated user's own account.
Tariff Object
Tariff Structure
| Field | Type | Description |
|---|---|---|
| uuid | uuid | Plan ID |
| name | string | Name |
| price | decimal | Price per member per month, USD |
| projects | integer | How many projects the user may own |
| members | integer | Members per project included in the plan |
| features | integer | Feature bitmask |
| is_public | boolean | false for a plan made individually for this user |
| is_corporate | boolean | Corporate plan |
| is_default | boolean | The plan offered by default |
Feature bits
| Feature | Value | Meaning |
|---|---|---|
members_no_limit |
1 | No member limit |
documents |
2 | Document templates |
widget |
4 | The embeddable widget |
sheet |
8 | Production sheet |
ai |
1048576 | AI assistance |
support |
4194304 | Dedicated support |
The API itself is available on every plan.
List Tariffs
GET /api/v1/billing/tariffs
Returns the plans available to the user: public plans and any made for them individually.
Get Tariff
GET /api/v1/billing/tariffs/{tariff.uuid}
Returns a single tariff, or 404 RES_NOT_FOUND if it does not exist or is not available to the
user.
Subscription Object
Subscription Structure
| Field | Type | Description |
|---|---|---|
| id | integer | Subscription ID |
| parent_id | ?integer | The subscription this one renewed or upgraded |
| status | string | created (awaiting payment), completed (paid), failed, cancelled, refunded, expired, upgraded |
| tariff_uuid | uuid | The plan |
| tariff_name | string | Its name |
| features | integer | The plan's feature bitmask |
| members | integer | Members per project bought |
| date_start | date | First day, YYYY-MM-DD |
| date_end | date | Last day |
| is_trial | boolean | Trial subscription |
| is_renewable | boolean | Renews automatically |
| total_amount | ?decimal | Price, USD; null if a partner manages the subscription |
| paid_amount | ?decimal | Amount paid; null if a partner manages the subscription |
| note | string | Comment; empty if a partner manages the subscription |
| is_partner_managed | boolean | Whether a partner bought it for the user |
Get Current Subscription
GET /api/v1/billing/subscription
{
"subscription": {
"id": 1042,
"user_uuid": "0198e7aa-91f0-7c22-a4d1-0f9e8d7c6b5a",
"timezone": "America/Chicago",
"tariff_uuid": "0198d000-0000-7000-8000-000000000002",
"name": "Business",
"price": 15,
"projects": 3,
"features": 7,
"is_public": true,
"is_corporate": false,
"members": 5,
"date_start": "2026-09-01",
"date_end": "2026-09-30",
"is_trial": false,
"is_renewable": true,
"total_amount": 75
},
"discount": 2.5,
"had_trial": true,
"has_future_subscription": false
}
| Field | Type | Description |
|---|---|---|
| subscription | ?object | The active subscription, joined with its plan; null if there is none |
| discount | decimal | Credit for the unused part of the active subscription, applied when upgrading |
| had_trial | boolean | Whether the user has ever had a trial |
| has_future_subscription | boolean | Whether a renewal that starts later is already bought |
date_start and date_end are in the user's time zone.
List Subscriptions
GET /api/v1/billing/subscriptions
Returns the user's last 30 subscriptions, newest first.
Get Payment
GET /api/v1/billing/payments/{payment.uuid}
Status of a TON crypto payment started in the app.
{
"uuid": "0199b4dd-0000-7000-8000-000000000001",
"status": "pending",
"amount_usd": 75,
"ton_amount": 23.4375,
"ton_address": "UQ...",
"comment": "0199b4dd-0000-7000-8000-000000000001",
"expires_at": "2026-10-01T12:30:00.000Z"
}
status is pending, completed, expired or failed. The transfer must carry comment as its message.
List Balance Transactions
GET /api/v1/billing/transactions
Movements on the user's balance, newest first.
| Query param | Type | Description |
|---|---|---|
| limit? | integer | Up to 200. Default 50 |
| Field | Type | Description |
|---|---|---|
| id | integer | Transaction ID |
| amount | decimal | Positive for credit, negative for debit |
| type | string | topup, subscription_charge, subscription_refund or adjustment |
| note | string | Comment |
| user_subscription_id | ?integer | Related subscription |
| created_at | ISO8601 datetime | When it happened |
Errors
| Status | Code | When |
|---|---|---|
| 403 | AUTH_INSUFFICIENT_SCOPE |
The token lacks billing |
| 404 | RES_NOT_FOUND |
Get Tariff, Get Payment: it does not exist or is not available |