API Reference

Recurring invoices

Create and manage recurring invoice schedules via the Rebill API. Covers the object schema, anchor day options, and activate/deactivate endpoints.

Last updated

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://api.rebill.co.za/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

FieldTypeDescription
idstringUnique identifier
createdtimestampWhen the recurring invoice was created
activebooleanWhether the schedule is currently running
currencystringISO 4217 currency code
client_idstringID of the client to invoice
start_datetimestampDate the schedule begins
end_datetimestampDate the schedule ends (optional; runs indefinitely if absent)
next_datetimestampWhen the next invoice will be generated
intervalstringRecurrence unit: week · month · year
interval_amountintegerNumber of intervals between invoices (e.g. 2 + month = every 2 months)
due_intervalstringUnit for calculating due date: day · week · month · year
due_interval_amountintegerNumber of due_interval units after invoice date (0 = due on issue)
itemsarrayLine items (same structure as invoice items)
notesstringNotes to print on each generated invoice
bank_detailsstringBank details to print on each invoice
vat_enabledbooleanWhether VAT is shown on generated invoices
whatsapp_enabledbooleanWhether generated invoices are sent via WhatsApp
monthly_anchorstringControls which day of the month invoices are generated (see below)
monthly_anchor_dayintegerUsed when monthly_anchor is specific_day (1 to 31)
late_fee_disabledbooleanWhether late fees are disabled for generated invoices
discount_typestringfixed or percentage; applied to each generated invoice (if applicable)
discount_valueintegerCents (fixed) or basis points (percentage)
labelsarrayInternal organisation labels (strings); never shown to the client

Monthly anchor

When the interval is month or year, the monthly_anchor field controls exactly which day of the month each invoice is generated:

ValueDescription
same_daySame day of the month as the start date (default)
first_dayFirst day of the month
last_dayLast day of the month
specific_dayA specific day; set monthly_anchor_day to the day (1 to 31)
last_day_offsetOffset from the end of the month

Create a recurring invoice

POST /recurring_invoice
FieldRequiredTypeDescription
client_idYesstringID of an existing client
start_dateYesdateDate the schedule begins (YYYY-MM-DD)
intervalYesstringRecurrence unit: week · month · year
interval_amountYesintegerNumber of intervals between invoices (must be > 0)
due_intervalYesstringDue date unit: day · week · month · year
due_interval_amountYesintegerNumber of due_interval units after issue date (0 = due on issue)
itemsYesarrayAt least one line item
currencyNostringISO 4217 code; defaults to your account currency
end_dateNodateDate the schedule ends; omit for indefinite
notesNostringNotes to print on each generated invoice
bank_detailsNostringBank details to print on each invoice
vat_enabledNobooleanShow VAT on generated invoices (default: false)
whatsapp_enabledNobooleanSend via WhatsApp when invoices are generated (default: false)
monthly_anchorNostringsame_day · first_day · last_day · specific_day · last_day_offset
monthly_anchor_dayNointegerDay of month when monthly_anchor is specific_day (1 to 31)
late_fee_disabledNobooleanDisable late fees on generated invoices (default: false)
discount_typeNostringfixed or percentage; applied to each generated invoice
discount_valueNointegerCents (fixed) or basis points (percentage)
labelsNoarrayInternal organisation labels, up to 10, 40 characters each
activate_immediatelyNobooleanActivate the schedule immediately on create instead of leaving it inactive (default: false)
schedule_initial_nowNobooleanOnly applies with activate_immediately: generate the first invoice right away instead of waiting for the first scheduled date
curl -X POST https://api.rebill.co.za/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": "standard",
        "vat_rate": 1500
      }
    ]
  }'

Response (201 Created):

{
  "id": "ri001"
}

By default the recurring invoice is created inactive; you must activate it before it starts generating invoices. Set activate_immediately: true to skip that step.

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.

Update recurring invoice labels

PUT /recurring_invoice/:id/labels

Replaces the recurring invoice's internal label list. Works while the schedule is active; labels are operator-only metadata and nothing else on the schedule changes.

FieldRequiredTypeDescription
labelsYesarrayFull replacement list of label strings, up to 10, 40 characters each
curl -X PUT https://api.rebill.co.za/recurring_invoice/ri001/labels \
  -H "Authorization: Bearer sk_your_secret_key" \
  -H "Content-Type: application/json" \
  -d '{
    "labels": ["retainer"]
  }'

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://api.rebill.co.za/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://api.rebill.co.za/recurring_invoice/ri001/deactivate \
  -H "Authorization: Bearer sk_your_secret_key"

Was this article helpful?

Still need help?

Our support team is happy to help you get the most out of Rebill.

Contact support