Recurring Billing
Per-cycle billing schedules on a reusable account; deposits are attributed to periods and payers are reminded.
Bill a customer on a recurring cycle from a reusable virtual account. Each cycle Xental opens a period for the (variable) expected amount, attributes the customer's deposits to open periods oldest-first, reminds them when due/overdue, and emits billing.period.due/paid/overdue events. It never pulls funds — the customer pays into their account; Xental attributes and reminds.
Amounts are in kobo
amountKobo: 50000 is ₦500. The per-period expected amount is set at creation and can be changed per cycle via next-amount.Overpayment carries forward
One active schedule per account
/api/v1/billing/schedulesList the tenant's billing schedules (most recent first).
Query parameters
takeintegeroptionalResponses
curl -X GET "https://api.xental.online/api/v1/billing/schedules" \
-H "Authorization: Bearer <API_TOKEN>"/api/v1/billing/schedulesCreate a schedule on one of your reusable virtual accounts and open its first period.
Creates a schedule on one of your reusable virtual accounts and opens the first period. Interval is Weekly | Monthly | Quarterly | Yearly.
Body parameters
accountRefstringoptionalintervalstringoptionalamountKobointegeroptionaldueOffsetDaysintegeroptionaldescriptionstringoptionalreferencestringoptionalResponses
curl -X POST "https://api.xental.online/api/v1/billing/schedules" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"accountRef": "inv_001",
"amountKobo": 500000,
"dueOffsetDays": 100000
}'{
"accountRef": "inv_001",
"amountKobo": 500000,
"dueOffsetDays": 100000
}/api/v1/billing/schedules/{id}Fetch a schedule by id.
Path parameters
idstringrequiredResponses
curl -X GET "https://api.xental.online/api/v1/billing/schedules/:id" \
-H "Authorization: Bearer <API_TOKEN>"/api/v1/billing/schedules/{id}/next-amountSet the expected amount for the next cycle (variable billing).
Sets the expected amount for the next cycle — billing is variable, so each period can differ.
Path parameters
idstringrequiredBody parameters
amountKobointegeroptionalResponses
curl -X PUT "https://api.xental.online/api/v1/billing/schedules/:id/next-amount" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"amountKobo": 500000
}'{
"amountKobo": 500000
}/api/v1/billing/schedules/{id}/pausePause a schedule (stops opening new periods).
Path parameters
idstringrequiredResponses
curl -X POST "https://api.xental.online/api/v1/billing/schedules/:id/pause" \
-H "Authorization: Bearer <API_TOKEN>"/api/v1/billing/schedules/{id}/resumeResume a paused schedule.
Path parameters
idstringrequiredResponses
curl -X POST "https://api.xental.online/api/v1/billing/schedules/:id/resume" \
-H "Authorization: Bearer <API_TOKEN>"/api/v1/billing/schedules/{id}/cancelCancel a schedule permanently.
Path parameters
idstringrequiredResponses
curl -X POST "https://api.xental.online/api/v1/billing/schedules/:id/cancel" \
-H "Authorization: Bearer <API_TOKEN>"/api/v1/billing/schedules/{id}/periodsList a schedule's billing periods (most recent first).
Path parameters
idstringrequiredQuery parameters
takeintegeroptionalResponses
curl -X GET "https://api.xental.online/api/v1/billing/schedules/:id/periods" \
-H "Authorization: Bearer <API_TOKEN>"