{
  "_comment": "OUTPUT - webhook, Luminetric-Event: request.failed. Sent to the same registered URL as statements, under the same signature, when a request produces NO statement. Before this existed a client's only way to learn an invoice had died was to notice its absence. The client gets a closed reason code and a fixed sentence - never our exception text, which stays in canonical_failures.internal_message. customer_action_required has the meaning it has on the account resource in 04: is there anything the CLIENT can do. client_reference is the request's own, echoed when the request supplied one and omitted when it did not - a failure early enough to precede reading the request has none to echo. NOT TERMINAL: failed requests are triaged and re-run, and a later statement.available carrying the same request_id supersedes this event. Built by CanonicalFailure.body(); CanonicalDeliveryLocalTest holds that method to this file's shape.",

  "schema_version": "1.0.0",
  "event": "request.failed",
  "failure_id": "flr_6c2e9a17-4b83-4f05-9d61-2a7e0c5b8f39",
  "request_id": "req_0a4d6e82-9c37-4b15-a8f2-3e7b1d5c9042",
  "client_reference": "invoice-433193",
  "failed_at": "2026-09-24T03:41:12Z",

  "reason": {
    "code": "not_a_pdf",
    "message": "The document received is not a PDF. Resubmit the bill as a PDF.",
    "customer_action_required": true
  }
}
