Billing
A prepaid balance: connected accounts beyond the free ones are charged day by day and usage (X API, messages) as it happens. Topping it up happens in the dashboard.
Get the balance
Section titled “Get the balance”/v1/billingBalance, connected accounts and what they cost. With the balance used up, connecting beyond the free accounts, and publishing or sending from accounts beyond them or on X, answer 402.
Response 200
data
enabledbooleanrequiredFalse while billing is not available: nothing is charged or limited.
balancenumberrequiredPrepaid balance in cents (up to three decimals). Negative when charges outran it.
currencystringrequiredconnectedAccountsintegerrequiredfreeAccountsintegerrequiredmonthlyEstimateintegerrequiredMonthly price of the accounts connected now, in cents. It is charged day by day.
dailyEstimatenumberrequiredWhat those accounts cost today, in cents (up to three decimals).
daysLeftinteger | nullrequiredWhole days the balance covers at that cost; null when nothing is charged daily.
linesobject[]requiredlines
fromintegerrequiredtointeger | nullrequiredaccountsintegerrequiredunitAmountintegerrequiredCents per account and month.
amountintegerrequired
canConnectMorebooleanrequiredWhether one more account can be connected right now.
blockedbooleanrequiredThe balance is used up: accounts beyond the free ones, and X accounts, cannot publish or send until it is topped up.
cardobjectThe saved payment method, for automatic recharges.
card
brandstringrequiredCard brand (
visa,mastercard…) or another saved method (link,sepa_debit).last4stringexpMonthintegerexpYearinteger
autoRechargeobjectautoRecharge
enabledbooleanrequiredthresholdintegerrequiredRecharge when the balance falls below this, in cents.
amountintegerrequiredWhat each recharge adds, in cents.
monthlyLimitintegerrequiredMost that automatic recharges add in a calendar month, in cents.
autoRechargeErrorobjectWhy the last automatic recharge failed; it switched itself off.
autoRechargeError
atstring (date-time)requiredmessagestringrequired
autoRechargedThisMonthintegerrequiredAdded by automatic recharges this calendar month, in cents.
topUpobjectrequiredAllowed top-up amounts, in cents.
topUp
minintegerrequiredmaxintegerrequired
hasPortalbooleanrequiredWhether the billing portal (invoices, payment method) is available.
curl "https://api.usecrier.com/v1/billing" \ -H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/billing', { headers: { Authorization: `Bearer ${process.env.CRIER_API_KEY}`, },});const { data } = await res.json();import os, requests
res = requests.get( "https://api.usecrier.com/v1/billing", headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},)data = res.json()["data"]List balance movements
Section titled “List balance movements”/v1/billing/movementsTop-ups and charges, newest first.
Parameters
limitinteger
Response 200
data []
idstringrequiredkindstringrequiredamountnumberrequiredCents (up to three decimals): positive adds, negative debits.
atstring (date-time)requireddaystringUTC day (YYYY-MM-DD) a charge covers.
accountsintegerAccounts a day was charged for.
familystringUsage family of a usage charge.
curl "https://api.usecrier.com/v1/billing/movements" \ -H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/billing/movements', { headers: { Authorization: `Bearer ${process.env.CRIER_API_KEY}`, },});const { data } = await res.json();import os, requests
res = requests.get( "https://api.usecrier.com/v1/billing/movements", headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},)data = res.json()["data"]Top up the balance
Section titled “Top up the balance”/v1/billing/top-upDashboard onlyOpens a payment page. The balance grows once the payment succeeds; the card is saved for automatic recharges.
Body
amountintegerrequiredBalance to add, in cents (taxes, if any, on top). Limits come with GET /v1/billing.
successUrlstring (uri)requiredDashboard page to come back to after paying.
cancelUrlstring (uri)requiredDashboard page to come back to if the user leaves Checkout.
Response 200
data
urlstring (uri)requiredSend the user here.
curl -X POST "https://api.usecrier.com/v1/billing/top-up" \ -H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/billing/top-up', { method: 'POST', headers: { Authorization: `Bearer ${process.env.CRIER_API_KEY}`, },});const { data } = await res.json();import os, requests
res = requests.post( "https://api.usecrier.com/v1/billing/top-up", headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},)data = res.json()["data"]Set automatic recharges
Section titled “Set automatic recharges”/v1/billing/auto-rechargeDashboard onlyTops up the saved card when the balance falls below the threshold, up to a monthly limit. Needs one top-up first.
Body
enabledbooleanrequiredthresholdintegerrequiredRecharge when the balance falls below this, in cents.
amountintegerrequiredWhat each recharge adds, in cents.
monthlyLimitintegerrequiredMost that automatic recharges may add in a calendar month, in cents.
Response 200
data
enabledbooleanrequiredFalse while billing is not available: nothing is charged or limited.
balancenumberrequiredPrepaid balance in cents (up to three decimals). Negative when charges outran it.
currencystringrequiredconnectedAccountsintegerrequiredfreeAccountsintegerrequiredmonthlyEstimateintegerrequiredMonthly price of the accounts connected now, in cents. It is charged day by day.
dailyEstimatenumberrequiredWhat those accounts cost today, in cents (up to three decimals).
daysLeftinteger | nullrequiredWhole days the balance covers at that cost; null when nothing is charged daily.
linesobject[]requiredlines
fromintegerrequiredtointeger | nullrequiredaccountsintegerrequiredunitAmountintegerrequiredCents per account and month.
amountintegerrequired
canConnectMorebooleanrequiredWhether one more account can be connected right now.
blockedbooleanrequiredThe balance is used up: accounts beyond the free ones, and X accounts, cannot publish or send until it is topped up.
cardobjectThe saved payment method, for automatic recharges.
card
brandstringrequiredCard brand (
visa,mastercard…) or another saved method (link,sepa_debit).last4stringexpMonthintegerexpYearinteger
autoRechargeobjectautoRecharge
enabledbooleanrequiredthresholdintegerrequiredRecharge when the balance falls below this, in cents.
amountintegerrequiredWhat each recharge adds, in cents.
monthlyLimitintegerrequiredMost that automatic recharges add in a calendar month, in cents.
autoRechargeErrorobjectWhy the last automatic recharge failed; it switched itself off.
autoRechargeError
atstring (date-time)requiredmessagestringrequired
autoRechargedThisMonthintegerrequiredAdded by automatic recharges this calendar month, in cents.
topUpobjectrequiredAllowed top-up amounts, in cents.
topUp
minintegerrequiredmaxintegerrequired
hasPortalbooleanrequiredWhether the billing portal (invoices, payment method) is available.
curl -X PUT "https://api.usecrier.com/v1/billing/auto-recharge" \ -H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/billing/auto-recharge', { method: 'PUT', headers: { Authorization: `Bearer ${process.env.CRIER_API_KEY}`, },});const { data } = await res.json();import os, requests
res = requests.put( "https://api.usecrier.com/v1/billing/auto-recharge", headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},)data = res.json()["data"]Open the billing portal
Section titled “Open the billing portal”/v1/billing/portalDashboard onlyInvoices and the saved payment method.
Body
returnUrlstring (uri)requiredDashboard page to come back to.
Response 200
data
urlstring (uri)requiredSend the user here.
curl -X POST "https://api.usecrier.com/v1/billing/portal" \ -H "Authorization: Bearer $CRIER_API_KEY"const res = await fetch('https://api.usecrier.com/v1/billing/portal', { method: 'POST', headers: { Authorization: `Bearer ${process.env.CRIER_API_KEY}`, },});const { data } = await res.json();import os, requests
res = requests.post( "https://api.usecrier.com/v1/billing/portal", headers={"Authorization": f"Bearer {os.environ['CRIER_API_KEY']}"},)data = res.json()["data"]© 2026 Crier by TWOFACES ·usecrier.com ·Dashboard ·soporte@twofacesco.com