Invoices take the date of the day they are issued
From 10 November 2026, issuing an invoice in the API v1 and in MCP sets issued_on to the day of issue, whatever the draft held. An earlier draft date moves to operation_on. Scheduled invoices take the day they run, batches issue oldest first, and a new 422, issue_date_before_series_last_issue_date, protects the date order of the series. The Modelo 303 and the Modelo 130 now assign each sales invoice to the period of its accrual date, and the invoice of a store order is no longer adjusted to the date of the series. Nine updated operations, with their MCP tools.
10 November 2026 — Until now, an invoice kept the date its draft carried, even when it was issued weeks later, and a series could end up with numbers out of date order. From today, issuing an invoice dates it the day it is issued. It applies to the API v1 and to MCP at once, with no notice period.
What changes
issued_onis the day of issue — when an invoice is issued,issued_onbecomes that calendar day inEurope/Madrid, whatever the draft held, earlier or later. From then on it is immutable.- The draft date moves to
operation_on— if the draft date was earlier than the day of issue andoperation_onwas empty, the draft date is kept inoperation_on. Anoperation_onyou had already sent is kept. A draft date later than the day of issue is replaced and does not becomeoperation_on. - Nothing else is recalculated —
due_onandpayment_termsstay as they were.
For example, issuing on 2026-11-10:
Draft issued_on | Draft operation_on | Issued invoice |
|---|---|---|
| 2026-10-21 | empty | issued_on: 2026-11-10 and operation_on: 2026-10-21 |
| 2026-10-21 | 2026-10-15 | issued_on: 2026-11-10 and operation_on: 2026-10-15 |
| 2026-11-10 | empty | issued_on: 2026-11-10 and no operation_on |
| 2026-11-17 | empty | issued_on: 2026-11-10 and no operation_on |
Scheduled, recurring and batches
- Scheduled invoices — an invoice you schedule leaves with the date of the day
it runs, not the draft date and not the day you scheduled it. Its draft date does
not move to
operation_on; anoperation_onyou sent is kept. - Recurring invoices — when the
generation_modeof the recurring invoice isissueorissue_and_send,generatecreates the invoice already issued, dated the day of issue. An earlier generation date is kept inoperation_on. - Batches issue oldest first —
bulk-statustoissued(or its aliassent) andbulk-send, which issues the drafts before sending them, process the invoices by draft date, and by age when two dates tie, whatever the order ofids. The lowest number goes to the oldest date.failures[]comes out in that processing order, not in the order you sent. bulk-createdoes not issue — it only creates drafts, soissued_onstays the draft date there.
A new 422 protects the order of the series
An invoice is never issued with a date earlier than the last issued invoice of its
series. The call answers 422, error.code: business_rule_violation and
error.subcode: issue_date_before_series_last_issue_date,
with error.param: issued_on. No number is consumed and the draft stays as it was.
{
"error": {
"type": "invalid_request_error",
"code": "business_rule_violation",
"subcode": "issue_date_before_series_last_issue_date",
"message": "No se puede emitir con fecha 10/11/2026: la serie ya tiene una factura emitida con fecha 12/11/2026.",
"param": "issued_on",
"doc_url": "https://docs.factuarea.com/guides/errors#business_rule_violation",
"request_id": "req_01KFPT3RM5H7J9K2M4N6P8Q0RS"
}
}The day of issue is now always today, so this only happens when the series already
holds an invoice dated in the future, which the API v1 allowed until now, or, in
rare cases, when the server clock goes back. Changing issued_on does not help.
Move the draft to another series of the same kind with series_id, or issue it once
the date of that last invoice arrives.
- Where you can get it —
createwith options that issue,paymentortype: F2;issue;sendon a draft;mark-sentin API versions before2026-10-01;bulk-send; andgenerateon a recurring invoice with an issuing mode. If you created the invoice withoptions, the draft already exists: issue that draft instead of repeating the creation. - Batches —
bulk-statusreports the rejected row infailures[]witherror_codebusiness_rule_violationand no subcode, and goes on with the rest.bulk-senddoes the same for companies with revisioned presentation; for the others, the rejection aborts the call with this 422, the invoices before it are already issued and the ones after it are not processed. - Scheduled invoices — one that the rule rejects when it runs is not issued: it
stays
scheduled, consumes no number and is tried again on the next pass.
Tax models count by the date of accrual
Issuing now keeps an earlier draft date in operation_on, so many more invoices carry
an operation_on different from issued_on. For an invoice not to change quarter just
because it was issued later, the Modelo 303 and the Modelo 130, in the API v1 and in
MCP, now assign each sales invoice to the period of its operation_on when it has one,
and of its issued_on when it does not.
- Modelo 303 and Modelo 130 — and their previews. The 130 is cumulative, so a sale enters from the quarter of its accrual date and counts only once.
- Corrective invoices — they always count by their own
issued_on, because their difference is declared in the period in which they are issued. - Modelo 347 — it does not change: it keeps assigning by
issued_on. - Expenses — they do not change.
For example, an invoice with operation_on 2026-09-28 and issued_on 2026-10-05 counts
in the third-quarter 303 and not in the fourth-quarter one. In the 347 it counts in the
fourth quarter.
A model that is already generated is not rewritten. Generating or previewing a period
that has already passed again can give another result: an invoice issued later whose
operation_on falls in it now counts there. The operations that generate and preview
models keep their shape and their description, so they are not among the updated
operations below; what changes is which invoices enter each period.
Which date decides the period gives the rule of each
model.
Store orders
The invoice that Factuarea creates automatically for a store order, WooCommerce or
Shopify, is born issued with the date of the day of issue, like any other. The day of
the order, in the time zone of the application, is kept in operation_on when it is
earlier. An order dated in the future, because the clock of the provider is ahead,
leaves with today's date and no operation_on.
- The date is no longer adjusted to the series — until now the date of the order
was moved to the date of the last numbered invoice of the series, and an integration
event was recorded with
discard_reasonseries_date_clamped. That no longer happens. The value stays in the enum ofdiscard_reason, and as a filter ofGET /v1/companies/{company}/integrations/events, because the events recorded before the change keep it. The integration event inbox lists it as retired. - The date order rule can refuse the invoice — if the rule above rejects the
invoice of an order, because the series holds an invoice issued with a future date,
the order is not invoiced on its own and no number is consumed. It is
recorded in the integration events with status
skippedand nodiscard_reason: itserror_messagesays that the order is not eligible for automatic invoicing and why. It is left for manual review and is not retried, andis_replayableisfalse. It is how any business rule that rejects the invoice of an order was already treated. Invoice it by hand in another series, or once the date of that last invoice arrives.
What to check in your integration
- Read the dates from the response — if you sent a past
issued_onexpecting it to stay,issued_onnow comes back as the day of issue and the date you sent is inoperation_on. Take both from the response ofissueorcreate, or from the invoice you read afterwards. - Dates in the future — a future
issued_onno longer survives: the invoice leaves with today's date and nooperation_on. If you also sent anoperation_onlater than the day of issue, issuing answersoperation_date_after_issue_date, unless the first line that declares aregime_keyuses 14 or 15. - Series with future dates — a series that already holds an invoice dated in the future refuses every issue until that day arrives. Use another series or wait. Annulling that invoice does not unblock the series, because annulled invoices count.
- Which date goes where — if the day the service was done matters, send it as
operation_onin the draft.issued_onon a draft is only the draft date. - MCP — the tools behave like their operations and return the same error:
issue_invoice,send_invoice,create_invoice,bulk_change_invoice_status,bulk_send_invoices,bulk_create_invoices,schedule_invoiceandgenerate_recurring_invoice. The description ofupdate_invoicenow says thatissued_onis the draft date. The guardrailemision-borrador-a-emitida, listed in Resources and prompts, explains the rule.
Updated operations
The descriptions of issued_on and operation_on change in the invoice resource
and in the request bodies of create and update. These nine operations change their
description, and the six that can answer the new 422 declare it:
POST /v1/companies/{company}/invoices— creating with options that issue,paymentortype: F2dates the invoice the day of issue. Declares the new 422.POST /v1/companies/{company}/invoices/bulk-create— its rows are drafts and are never issued there.POST /v1/companies/{company}/invoices/bulk-send— drafts are issued oldest first, dated the day of issue. Declares the new 422.POST /v1/companies/{company}/invoices/bulk-status— issuing goes oldest date first, and each invoice takes the date of the day of issue.POST /v1/companies/{company}/invoices/{invoice}/issue— the invoice leaves with the date of the day of issue. Declares the new 422.POST /v1/companies/{company}/invoices/{invoice}/mark-sent— in API versions before2026-10-01it issues the draft with the same rule. Declares the new 422.POST /v1/companies/{company}/invoices/{invoice}/schedule— the invoice leaves with the date of the day it runs, and stays scheduled if the series has a later issued invoice.POST /v1/companies/{company}/invoices/{invoice}/send— a draft is issued first, dated the day of issue. Declares the new 422.POST /v1/companies/{company}/recurring-invoices/{recurring_invoice}/generate— with an issuing mode the invoice is born issued, dated the day of issue. Declares the new 422.
Updated endpoints9
| Endpoint | Description |
|---|---|
POST/v1/companies/{company}/invoices | Create an invoice |
POST/v1/companies/{company}/invoices/bulk-create | Bulk create invoices |
POST/v1/companies/{company}/invoices/bulk-send | Bulk send invoices |
POST/v1/companies/{company}/invoices/bulk-status | Bulk change invoice status |
POST/v1/companies/{company}/invoices/{invoice}/issue | Issue an invoice |
POST/v1/companies/{company}/invoices/{invoice}/mark-sent | Mark an invoice as sent |
POST/v1/companies/{company}/invoices/{invoice}/schedule | Schedule an invoice |
POST/v1/companies/{company}/invoices/{invoice}/send | Send invoice by email |
POST/v1/companies/{company}/recurring-invoices/{recurring_invoice}/generate | Generate an invoice from a recurring template |