CompanyRecurringInvoices
Update a recurring invoice
Updates only the fields present in the body, leaving every other field of the recurring invoice template as it is.
- Omitted vs null: an omitted field keeps its current value; a field sent as null is cleared, and only where the request schema documents the field as nullable.
- lines: replaced as a whole, not patched line by line. The recipient survives the change, and an empty array is rejected.
- payment_method: replaced as a whole together with payment_iban, payment_swift and payment_term_days — send them in the same request or they are dropped.
- Schedule: frequency, day_of_month and start_date stay put unless you send them; sending a new value for any of the three moves the next generation — resending the ones already in effect changes nothing. Changing frequency recalculates it on the new grid and discards a pending skip. start_date is only editable while the template has not generated any invoice yet.
- custom_fields: replaced as a whole; omit it to keep the current ones, send null or [] to remove them all. Invoices already generated keep theirs.
patch/v1/companies/{company_id}/recurring-invoices/{recurring_invoice_id}
Request
- Base URL: https://app.beel.es/api
- URL: https://app.beel.es/api/v1/companies/{company_id}/recurring-invoices/{recurring_invoice_id}
- Auth: HTTP bearer
Headers
Idempotency-Keystring
Idempotency key to prevent duplicates in sensitive operations.
- Any unique client-generated string (e.g. an order id). A UUID also works but is not required
- Allowed characters: letters, digits, _ and - (max 255 chars)
- Retrying with the same key replays the first response when it was a success (2xx) or a server error (5xx): same status and body, plus the header Idempotency-Replay: true. After a 5xx, check whether the operation took effect before retrying with a new key
- A 4xx is not stored: the key is released, so the corrected request can reuse it
- Stored responses expire 24 hours after processing
The key is scoped per user and environment, and bound to the request body, so retrying after a network timeout replays the stored response instead of repeating the operation.
| Status | Code | When |
|---|---|---|
| 400 | INVALID_IDEMPOTENCY_KEY | The key breaks the format rules above. |
| 409 | IDEMPOTENCY_KEY_PROCESSING | The first request is still in flight. Wait for the Retry-After seconds (2) and retry with the same key. |
| 409 | IDEMPOTENCY_KEY_MISMATCH | The key was already used with a different body. Use a new key. |
Request body
Example request
{
"max_invoices": 6,
"lines": [
{
"unit_price": 50,
"total_excluding_tax": 1,
"total_including_tax": 100,
"exemption_reason": "EXENTA_ART_20"
}
],
"payment_method": "BANK_TRANSFER",
"custom_fields": [
{
"key": "store",
"value": "Gran Vía 12"
}
],
"email_configuration": {
"recipients": [
"user@example.com"
],
"cc": [
"user@example.com"
]
}
}Response
Recurring invoice updated successfully
Example response
{
"success": true,
"data": {
"draft_in_advance": true,
"status": "ACTIVE",
"pause": {
"reason": "GENERATION_FAILURE",
"blocker": "NIF_NOT_REGISTERED"
},
"lines": [
{
"pricing_mode": "UNIT_PRICE",
"total_excluding_tax": 1,
"total_including_tax": 100,
"exemption_reason": "EXENTA_ART_20"
}
],
"amount": 106,
"custom_fields": [
{
"key": "project",
"label": "Project",
"value": "Corporate website"
}
],
"max_invoices": 6,
"last_generated_scheduled_date": "2026-05-01"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}Changes
No recorded changes to this operation across all 1 revision of this API.