[
  {
    "cancellable": false,
    "description": "A new account was created (password sign-up, SSO or OAuth).",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "user.registered",
    "payload": [
      {
        "always": true,
        "description": "New user",
        "name": "user_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "SSO/OAuth provider id when not a password sign-up",
        "name": "via",
        "ty": "string"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A user signed in successfully.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "user.logged_in",
    "payload": [
      {
        "always": true,
        "description": "User",
        "name": "user_id",
        "ty": "uuid"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "Sign-in from a new IP for an account with login alerts on.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "user.login_alert",
    "payload": [
      {
        "always": true,
        "description": "User",
        "name": "user_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Client IP",
        "name": "ip",
        "ty": "string"
      },
      {
        "always": true,
        "description": "Browser user agent",
        "name": "user_agent",
        "ty": "string"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A customer account was closed (GDPR erasure or admin close).",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "customer.closed",
    "payload": [
      {
        "always": true,
        "description": "Customer",
        "name": "customer_id",
        "ty": "uuid"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A customer placed an order.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "order.created",
    "payload": [
      {
        "always": true,
        "description": "Order",
        "name": "order_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Customer",
        "name": "customer_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Order total",
        "name": "total",
        "ty": "decimal"
      },
      {
        "always": true,
        "description": "ISO 4217 code",
        "name": "currency",
        "ty": "string"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "An order was accepted and its services created.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "order.approved",
    "payload": [
      {
        "always": true,
        "description": "Order",
        "name": "order_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Created service ids",
        "name": "services",
        "ty": "array"
      },
      {
        "always": false,
        "description": "Approved automatically on payment",
        "name": "auto",
        "ty": "bool"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "An order was cancelled.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "order.cancelled",
    "payload": [
      {
        "always": true,
        "description": "Order",
        "name": "order_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Cancelled by the fraud check",
        "name": "fraud",
        "ty": "bool"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A paid order was refunded with a credit note.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "order.refunded",
    "payload": [
      {
        "always": true,
        "description": "Order",
        "name": "order_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Credit note",
        "name": "credit_note_id",
        "ty": "uuid"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "The fraud check held an order for review.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "order.fraud_review",
    "payload": [
      {
        "always": true,
        "description": "Order",
        "name": "order_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Customer",
        "name": "customer_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Fraud score",
        "name": "score",
        "ty": "decimal"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "The fraud check rejected an order.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "order.fraud_rejected",
    "payload": [
      {
        "always": true,
        "description": "Order",
        "name": "order_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Customer",
        "name": "customer_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Fraud score",
        "name": "score",
        "ty": "decimal"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "An invoice was issued (order, renewal, late fee, debit note, project or billable items).",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "invoice.created",
    "payload": [
      {
        "always": true,
        "description": "Invoice",
        "name": "invoice_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Customer",
        "name": "customer_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Renewed service",
        "name": "service_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Renewal invoice",
        "name": "renewal",
        "ty": "bool"
      },
      {
        "always": false,
        "description": "Renewal requested early by the client",
        "name": "on_demand",
        "ty": "bool"
      },
      {
        "always": false,
        "description": "Overdue invoice the fee is for",
        "name": "late_fee_for",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Invoice the debit note corrects",
        "name": "debit_for",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Invoice number",
        "name": "number",
        "ty": "string"
      },
      {
        "always": false,
        "description": "Project",
        "name": "project_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "From billable items",
        "name": "billable",
        "ty": "bool"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "An invoice became fully paid (gateway, credit, autopay or admin).",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "invoice.paid",
    "payload": [
      {
        "always": true,
        "description": "Invoice",
        "name": "invoice_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Customer (only on checkout auto-paid invoices)",
        "name": "customer_id",
        "ty": "uuid"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "An invoice was voided.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "invoice.voided",
    "payload": [
      {
        "always": true,
        "description": "Invoice",
        "name": "invoice_id",
        "ty": "uuid"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "An unpaid invoice was cancelled by automation.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "invoice.cancelled",
    "payload": [
      {
        "always": true,
        "description": "Invoice",
        "name": "invoice_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Why, e.g. `overdue_auto_cancel`",
        "name": "reason",
        "ty": "string"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A payment on the invoice was refunded.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "invoice.refunded",
    "payload": [
      {
        "always": true,
        "description": "Invoice",
        "name": "invoice_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Credit note",
        "name": "credit_note_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Refund",
        "name": "refund_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Refunded amount",
        "name": "amount",
        "ty": "decimal"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "Daily reminder: an invoice is due in a few days.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "invoice.due_soon",
    "payload": [
      {
        "always": true,
        "description": "Invoice",
        "name": "invoice_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Customer",
        "name": "customer_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Days until due",
        "name": "days_left",
        "ty": "int"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "Daily reminder: an invoice is past due.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "invoice.overdue",
    "payload": [
      {
        "always": true,
        "description": "Invoice",
        "name": "invoice_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Customer",
        "name": "customer_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Days past due",
        "name": "days_overdue",
        "ty": "int"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A payment was captured.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "payment.succeeded",
    "payload": [
      {
        "always": false,
        "description": "Invoice",
        "name": "invoice_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Payment",
        "name": "payment_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Gateway id",
        "name": "gateway",
        "ty": "string"
      },
      {
        "always": false,
        "description": "Gateway reference",
        "name": "provider_ref",
        "ty": "string"
      },
      {
        "always": false,
        "description": "Charged by autopay",
        "name": "autopay",
        "ty": "bool"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A payment attempt failed.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "payment.failed",
    "payload": [
      {
        "always": false,
        "description": "Invoice",
        "name": "invoice_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Payment",
        "name": "payment_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Gateway id",
        "name": "gateway",
        "ty": "string"
      },
      {
        "always": false,
        "description": "Gateway reference",
        "name": "provider_ref",
        "ty": "string"
      },
      {
        "always": false,
        "description": "Autopay attempt",
        "name": "autopay",
        "ty": "bool"
      },
      {
        "always": false,
        "description": "Autopay attempt number",
        "name": "attempt",
        "ty": "int"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A gateway reported a chargeback or dispute.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "payment.disputed",
    "payload": [
      {
        "always": true,
        "description": "Gateway id",
        "name": "gateway",
        "ty": "string"
      },
      {
        "always": true,
        "description": "Gateway reference",
        "name": "provider_ref",
        "ty": "string"
      },
      {
        "always": false,
        "description": "Payment",
        "name": "payment_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Gateway event type",
        "name": "event_type",
        "ty": "string"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A saved card expires soon.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "payment_method.expiring",
    "payload": [
      {
        "always": true,
        "description": "Payment method",
        "name": "payment_method_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Customer",
        "name": "customer_id",
        "ty": "uuid"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A service was created from an order.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "service.created",
    "payload": [
      {
        "always": true,
        "description": "Service",
        "name": "service_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Order",
        "name": "order_id",
        "ty": "uuid"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A provisioning module action succeeded.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "service.provisioned",
    "payload": [
      {
        "always": true,
        "description": "Service",
        "name": "service_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "`create`, `suspend`, …",
        "name": "action",
        "ty": "string"
      },
      {
        "always": true,
        "description": "Module id",
        "name": "module",
        "ty": "string"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A provisioning module action failed.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "service.provision_failed",
    "payload": [
      {
        "always": true,
        "description": "Service",
        "name": "service_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Module action",
        "name": "action",
        "ty": "string"
      },
      {
        "always": true,
        "description": "Error message",
        "name": "error",
        "ty": "string"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A service was suspended.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "service.suspended",
    "payload": [
      {
        "always": true,
        "description": "Service",
        "name": "service_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Previous status",
        "name": "from",
        "ty": "string"
      },
      {
        "always": false,
        "description": "Why",
        "name": "reason",
        "ty": "string"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A service was reactivated.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "service.unsuspended",
    "payload": [
      {
        "always": true,
        "description": "Service",
        "name": "service_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Previous status",
        "name": "from",
        "ty": "string"
      },
      {
        "always": false,
        "description": "Why",
        "name": "reason",
        "ty": "string"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A service was terminated.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "service.terminated",
    "payload": [
      {
        "always": true,
        "description": "Service",
        "name": "service_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Previous status",
        "name": "from",
        "ty": "string"
      },
      {
        "always": false,
        "description": "Why",
        "name": "reason",
        "ty": "string"
      },
      {
        "always": false,
        "description": "The module terminated it remotely",
        "name": "provisioned",
        "ty": "bool"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A cancellation request was applied.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "service.cancelled",
    "payload": [
      {
        "always": true,
        "description": "Service",
        "name": "service_id",
        "ty": "uuid"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A support ticket was opened.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "ticket.opened",
    "payload": [
      {
        "always": true,
        "description": "Ticket",
        "name": "ticket_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Ticket number",
        "name": "number",
        "ty": "string"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A reply was posted on a ticket.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "ticket.replied",
    "payload": [
      {
        "always": true,
        "description": "Ticket",
        "name": "ticket_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Reply came from staff",
        "name": "by_staff",
        "ty": "bool"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A ticket was closed.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "ticket.closed",
    "payload": [
      {
        "always": true,
        "description": "Ticket",
        "name": "ticket_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Why, e.g. `inactive`",
        "name": "reason",
        "ty": "string"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A visitor started a live chat.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "chat.started",
    "payload": [
      {
        "always": true,
        "description": "Chat",
        "name": "chat_id",
        "ty": "uuid"
      },
      {
        "always": false,
        "description": "Visitor name",
        "name": "name",
        "ty": "string"
      },
      {
        "always": false,
        "description": "Visitor email",
        "name": "email",
        "ty": "string"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "A quote was sent to a customer.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "quote.sent",
    "payload": [
      {
        "always": true,
        "description": "Quote",
        "name": "quote_id",
        "ty": "uuid"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": false,
    "description": "An affiliate asked for a payout.",
    "kind": "domain",
    "modifiable": false,
    "modify": [],
    "name": "affiliate.payout_requested",
    "payload": [
      {
        "always": true,
        "description": "Affiliate",
        "name": "affiliate_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Payout",
        "name": "payout_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "Amount",
        "name": "amount",
        "ty": "decimal"
      },
      {
        "always": true,
        "description": "ISO 4217 code",
        "name": "currency",
        "ty": "string"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": true,
    "description": "Before a password sign-in is checked. Cancel to refuse the login (the client gets 409 `error.addon_hook_cancelled`). The payload is read-only: changes are ignored.",
    "kind": "pre",
    "modifiable": false,
    "modify": [],
    "name": "login.before",
    "payload": [
      {
        "always": true,
        "description": "Submitted email",
        "name": "email",
        "ty": "string"
      },
      {
        "always": false,
        "description": "Client IP",
        "name": "ip",
        "ty": "string"
      },
      {
        "always": false,
        "description": "Browser user agent",
        "name": "user_agent",
        "ty": "string"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": true,
    "description": "Before a sign-up. Cancel to refuse it; `display_name` may be rewritten. The password never leaves the host.",
    "kind": "pre",
    "modifiable": true,
    "modify": [
      [
        "display_name",
        "String of at most 200 bytes; anything else keeps the submitted name"
      ]
    ],
    "name": "client.before_register",
    "payload": [
      {
        "always": true,
        "description": "Submitted email",
        "name": "email",
        "ty": "string"
      },
      {
        "always": true,
        "description": "Display name (modifiable)",
        "name": "display_name",
        "ty": "string"
      },
      {
        "always": false,
        "description": "Client IP",
        "name": "ip",
        "ty": "string"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": true,
    "description": "Before an order is placed. Cancel to refuse; `coupon` may be set or cleared.",
    "kind": "pre",
    "modifiable": true,
    "modify": [
      [
        "coupon",
        "Non-empty string of at most 64 bytes sets the code, `null` removes it, any other value keeps the submitted code. The code is then validated like a typed one"
      ]
    ],
    "name": "order.before_place",
    "payload": [
      {
        "always": true,
        "description": "Customer",
        "name": "customer_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "ISO 4217 code",
        "name": "currency",
        "ty": "string"
      },
      {
        "always": true,
        "description": "Cart lines",
        "name": "items",
        "ty": "array"
      },
      {
        "always": false,
        "description": "Coupon code (modifiable)",
        "name": "coupon",
        "ty": "string"
      }
    ],
    "since": "0.1.0"
  },
  {
    "cancellable": true,
    "description": "Before an admin creates an invoice. Line descriptions may be rewritten; amounts only with `money.modify`.",
    "kind": "pre",
    "modifiable": true,
    "modify": [
      [
        "items[].description",
        "Non-blank string of at most 500 bytes, matched by position; otherwise the original line text"
      ],
      [
        "items[].unit_price",
        "Needs `capabilities.money.modify`; an exact decimal string (at most 4 places), audited as `addon.money_modified`. Without the capability the change is reverted"
      ]
    ],
    "name": "invoice.before_create",
    "payload": [
      {
        "always": true,
        "description": "Customer",
        "name": "customer_id",
        "ty": "uuid"
      },
      {
        "always": true,
        "description": "ISO 4217 code",
        "name": "currency",
        "ty": "string"
      },
      {
        "always": true,
        "description": "Issue immediately",
        "name": "finalize",
        "ty": "bool"
      },
      {
        "always": true,
        "description": "`{description, quantity, unit_price}` lines (decimals as strings)",
        "name": "items",
        "ty": "array"
      }
    ],
    "since": "0.1.0"
  }
]