Recurring invoices automatically generate and send invoices to a client on a fixed schedule: weekly, monthly, or yearly. They are a premium feature and require an active premium subscription.
A recurring invoice is a template. When it fires, Rebill creates a real invoice from it and sends it to the client. Recurring invoices must be activated before they start generating invoices.
List recurring invoices
GET /recurring_invoice
curl https://rebill-api-896466068278.africa-south1.run.app/recurring_invoice \ -H "Authorization: Bearer sk_your_secret_key"
Response:
{
"recurring_invoices": [
{
"id": "ri001",
"active": true,
"client_id": "xyz789",
"currency": "ZAR",
"interval": "month",
"interval_amount": 1,
"start_date": "2026-01-01T00:00:00Z",
"next_date": "2026-04-01T00:00:00Z",
"items": [...]
}
]
}Get a recurring invoice
GET /recurring_invoice/:id
Returns a single recurring invoice by ID.
Recurring invoice object
| Field | Type | Description |
|---|---|---|
| id | string | Unique identifier |
| created | timestamp | When the recurring invoice was created |
| active | boolean | Whether the schedule is currently running |
| currency | string | ISO 4217 currency code |
| client_id | string | ID of the client to invoice |
| start_date | timestamp | Date the schedule begins |
| end_date | timestamp | Date the schedule ends (optional; runs indefinitely if absent) |
| next_date | timestamp | When the next invoice will be generated |
| interval | string | Recurrence unit: week · month · year |
| interval_amount | integer | Number of intervals between invoices (e.g. 2 + month = every 2 months) |
| due_interval | string | Unit for calculating due date: day · week · month · year |
| due_interval_amount | integer | Number of due_interval units after invoice date (0 = due on issue) |
| items | array | Line items (same structure as invoice items) |
| notes | string | Notes to print on each generated invoice |
| bank_details | string | Bank details to print on each invoice |
| vat_enabled | boolean | Whether VAT is shown on generated invoices |
| whatsapp_enabled | boolean | Whether generated invoices are sent via WhatsApp |
| monthly_anchor | string | Controls which day of the month invoices are generated (see below) |
| monthly_anchor_day | integer | Used when monthly_anchor is specific_day (1–31) |
| late_fee_disabled | boolean | Whether late fees are disabled for generated invoices |
Monthly anchor
When the interval is month or year, the monthly_anchor field controls exactly which day of the month each invoice is generated:
| Value | Description |
|---|---|
same_day | Same day of the month as the start date (default) |
first_day | First day of the month |
last_day | Last day of the month |
specific_day | A specific day; set monthly_anchor_day to the day (1–31) |
last_day_offset | Offset from the end of the month |
Create a recurring invoice
POST /recurring_invoice
| Field | Required | Type | Description |
|---|---|---|---|
| client_id | Yes | string | ID of an existing client |
| start_date | Yes | date | Date the schedule begins (YYYY-MM-DD) |
| interval | Yes | string | Recurrence unit: week · month · year |
| interval_amount | Yes | integer | Number of intervals between invoices (must be > 0) |
| due_interval | Yes | string | Due date unit: day · week · month · year |
| due_interval_amount | Yes | integer | Number of due_interval units after issue date (0 = due on issue) |
| items | Yes | array | At least one line item |
| currency | No | string | ISO 4217 code; defaults to your account currency |
| end_date | No | date | Date the schedule ends; omit for indefinite |
| notes | No | string | Notes to print on each generated invoice |
| bank_details | No | string | Bank details to print on each invoice |
| vat_enabled | No | boolean | Show VAT on generated invoices (default: false) |
| whatsapp_enabled | No | boolean | Send via WhatsApp when invoices are generated (default: false) |
| monthly_anchor | No | string | same_day · first_day · last_day · specific_day · last_day_offset |
| monthly_anchor_day | No | integer | Day of month when monthly_anchor is specific_day (1–31) |
| late_fee_disabled | No | boolean | Disable late fees on generated invoices (default: false) |
curl -X POST https://rebill-api-896466068278.africa-south1.run.app/recurring_invoice \
-H "Authorization: Bearer sk_your_secret_key" \
-H "Content-Type: application/json" \
-d '{
"client_id": "xyz789",
"start_date": "2026-04-01",
"interval": "month",
"interval_amount": 1,
"due_interval": "day",
"due_interval_amount": 14,
"currency": "ZAR",
"items": [
{
"type": "service",
"name": "Monthly retainer",
"description": "Ongoing consulting retainer",
"quantity": 1,
"unit_price": 1500000,
"vat_type": "exclusive",
"vat_rate": 1500
}
]
}'Response (201 Created):
{
"id": "ri001"
}The recurring invoice is created in an inactive state. You must activate it before it starts generating invoices.
Update a recurring invoice
PUT /recurring_invoice/:id
Updates a recurring invoice. Accepts the same fields as create.
Delete a recurring invoice
DELETE /recurring_invoice/:id
Permanently deletes a recurring invoice. Returns 200 OK on success.
Activate a recurring invoice
PUT /recurring_invoice/:id/activate
Activates the schedule. Once active, Rebill will generate and send invoices on the configured cadence starting from the start_date.
curl -X PUT https://rebill-api-896466068278.africa-south1.run.app/recurring_invoice/ri001/activate \ -H "Authorization: Bearer sk_your_secret_key"
Deactivate a recurring invoice
PUT /recurring_invoice/:id/deactivate
Pauses the schedule. No new invoices will be generated until the recurring invoice is activated again. Existing generated invoices are not affected.
curl -X PUT https://rebill-api-896466068278.africa-south1.run.app/recurring_invoice/ri001/deactivate \ -H "Authorization: Bearer sk_your_secret_key"