NewProvince is only required for addresses in Spain
BeeL
Get startedMulti-NIFVeriFactuRulesStripeAPI referenceChangelog

A recurring template's history lists what did not happen too

The history now includes failed runs, skipped periods and pauses, each with a type. For those entries invoice_id is null.


ChangelogBreaking

The history of a recurring template listed only the invoices it generated. So a month with no invoice left no trace, and "why was March not invoiced?" had no answer in the API. The canonical history now records every entry: what was generated, and what was not and why.

The deprecated flat alias keeps returning only generated invoices, unchanged until it retires.

What breaks

  • The trap: an entry is no longer always an invoice. Code that takes each entry's invoice_id and fetches the invoice now meets FAILED, SKIPPED and PAUSED entries whose invoice_id is null. Filter on type: GENERATED for the previous list.
  • Pages hold entries, not invoices. The default 20 per page now mixes all four types, so a page can hold fewer invoices than before.

Does this affect you?

  • Grep for /recurring-invoices/ followed by /history under /v1/companies/. Anything that reads invoice_id from each entry needs to handle null, or filter on type first.

What else changed

  • type is GENERATED, FAILED, SKIPPED or PAUSED. Only GENERATED uses up the period. After the other three the period is still free, and the next run can fill it.
  • origin says who triggered a generation: MANUAL (a person) or UNATTENDED (the scheduled run). It is absent on entries that are not generations, and on generations recorded before this was stored.
  • reason explains a FAILED or PAUSED entry, translated to the caller's language. It is text for a person: branch on type, never on reason.
  • requested_by and requested_by_name say who skipped a period, on SKIPPED entries only. The name is the user's name, or their email when there is none, and never the raw id.
  • Recorded from 22 September on. Earlier failures, skips and pauses were never stored, so an older gap in the history still has no entry explaining it.

Endpoints

  • GET/v1/companies/{company_id}/recurring-invoices/{recurring_invoice_id}/historyEvery entry type, with type, origin, reason and requested_by

Where to go next