Invoice email bounced
Delivered once per invoice email that ends up undelivered: the recipient's server rejected it
(BOUNCED) or the recipient marked it as spam (COMPLAINED). It is not sent again if the
same notification is received twice or the email had already been marked as bounced.
Trigger: The email sending service reports a bounce or a spam complaint for the email of an invoice.
Recommended actions:
- Flag the invoice in your records as not delivered and contact the customer by another channel.
- Fix the recipient address before sending the invoice again.
Always verify BeeL-Signature before processing.
Header Parameters
HMAC-SHA256 signature. Format: t=<unix_timestamp>,v1=<hex_signature>
Verify this before processing any event (see spec description for algorithm).
^t=\d+,v1=[0-9a-f]{64}$Canonical event type identifier (matches the type field of the payload).
"verifactu.status.updated" | "invoice.issued" | "invoice.email.sent" | "invoice.pdf.generated" | "invoice.voided" | "recurring_invoice.paused" | "invoice.schedule_failed" | "account.claimed" | "company.created" | "representation.signed" | "email_domain.verified" | "email_domain.failed" | "email_domain.removed" | "connection.connected" | "connection.disconnected" | "invoice.reply.received" | "invoice.reply.deleted" | "invoice.email.bounced"Unique identifier of this webhook event delivery.
uuid"invoice.email.bounced"ISO-8601 timestamp when the event was created.
date-timeBeeL. API version that generated this event.
Deprecated in favour of the TEST/PROD environment vocabulary: livemode: true is equivalent to environment PROD.
true only for test deliveries triggered manually from the BeeL. dashboard.
Unique identifier (UUID) of the company the event is about, or null when not scoped to a specific company. A single endpoint receives events for every company it manages (multi-NIF / accounting firms); route on this field.
uuidNIF of the company the event is about (human-readable identifier).
Account the event happened in. For your own events this is your account; for events of accounts you manage it identifies which one. Route on this field together with account_external_ref.
uuidYour own identifier for that account, as supplied when you provisioned it (external_ref). Lets you map the event onto your internal record without an extra lookup. null for accounts you did not provision.
How account_id relates to you: own when the event happened in your own account, managed when it happened in an account you manage. Same field name and vocabulary as the account_relationship you set on POST /v1/webhooks to choose which of these you receive (own by default; all there means both).
"own" | "managed" | nullPayload for invoice.email.bounced events.
Response Body
Invoice email sent
Delivered when an invoice has been successfully sent to its recipients via email. **Trigger:** Outbound email provider confirms the message was queued/delivered. **Recommended actions:** - Mark the invoice as "sent" in your records. - Persist `all_recipients` and `sent_at` for audit / customer service. **Always verify `BeeL-Signature` before processing.**
Scheduled invoice not issued
Delivered when an invoice you scheduled could **not** be issued on its date and BeeL. gave up retrying. The invoice is not lost: it stays in drafts, untouched, and can be issued by hand once the cause is fixed. **Why this matters:** nothing else tells you. Unlike `recurring_invoice.paused`, there is no schedule to pause here — a scheduled invoice is a one-off, so without this event the work simply stops and no one finds out. **Trigger:** the daily batch retried the scheduled emission and hit a failure that waiting will not fix. A transient failure does **not** produce this event; the next run retries it. **Recommended actions:** - Fix the `blocker` (it is the same vocabulary the emission API returns in a 422 `EMISSION_NOT_READY`) and issue the draft. - Note that it will then be issued with the date of the day it is issued: backdating a fiscal document is not allowed. **Also delivered in Test.** Sandbox is a faithful rehearsal of the mechanism, so you can see this failure mode before it happens in Live. **Always verify `BeeL-Signature` before processing.**