Billing & plans
Plans
Every organization starts on free.
| Plan | Databases | Storage | CPU | Price |
|---|---|---|---|---|
free | 1 | 512 MB | 1 | $0 |
pro | 10 | 200 GB | 16 | $25/mo base + usage |
pro bills a base fee plus metered usage (CPU-hours and storage-hours) on top.
Fetch the current, authoritative numbers instead of hardcoding them:
curl https://api.astrabase.app/api/v1/plans -H "Authorization: Bearer $TOKEN"
Changing plan
curl -X PATCH https://api.astrabase.app/api/v1/organizations/$ORG_ID/subscription \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"plan_id": "<plan-uuid-from-/plans>"}'
Moving to a paid plan is pay-first: the response carries a
pending_invoice_id — an invoice for the plan's base fee. Your plan switches,
and a new 30-day billing period starts, as soon as that invoice is paid. Moving
to a plan with no base fee (like free) takes effect immediately.
Usage & invoices
curl .../organizations/$ORG_ID/usage -H "Authorization: Bearer $TOKEN"
curl .../organizations/$ORG_ID/invoices -H "Authorization: Bearer $TOKEN"
curl .../organizations/$ORG_ID/invoices/$INVOICE_ID -H "Authorization: Bearer $TOKEN"
Paying an invoice
Two self-service ways, both requiring the subscription:manage permission
(owner or billing role):
Crypto (via NOWPayments) — returns a deposit address, settles asynchronously once the deposit is confirmed:
curl -X POST .../invoices/$INVOICE_ID/pay/crypto \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"pay_currency": "usdtbsc"}'
# 202 Accepted
Mobile money (via FedaPay) — the customer approves on their phone, settles asynchronously once confirmed:
curl -X POST .../invoices/$INVOICE_ID/pay/mobile-money \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"mode": "mtn_ci", "phone_number": "+225xxxxxxxxxx"}'
# 202 Accepted
For crypto and mobile money, poll payment status instead of assuming success from the response:
curl .../invoices/$INVOICE_ID/payments -H "Authorization: Bearer $TOKEN"