Docs/Guides/Billing & plans

Billing & plans

Plans

Every organization starts on free.

PlanDatabasesStorageCPUPrice
free1512 MB1$0
pro10200 GB16$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"