Introduction to events

Ormuz events are public signals emitted when a business object changes state, a process reaches a notable step, or an external provider signal is normalized into the platform model.

Role

A business signal, not a command

An event describes something that already happened. It can synchronize your systems, trigger a process, audit an integration, or let you reread the relevant object through the API. It does not replace REST endpoints for creating or transitioning an object.

Use identifiers supplied in events to retrieve relevant objects and deduplicate processing.

Contract

Enveloppe commune

All events delivered by Ormuz use the same envelope. The field payload varies by type, but routing and idempotency fields remain stable.

FieldTypeDescription
idstringUnique event identifier. Use it as the consumer-side idempotency key.
typestringStable business-signal name, for example `invoice.issued` or `company.updated`.
merchant_idstringMerchant to which the event belongs.
company_idstring | nullPrimary company concerned when the event can be attached to a company.
occurred_atstringISO 8601 UTC timestamp when the signal was emitted.
contextobjectPublic correlation context, with source and request/correlation identifiers when available.
payloadobjectPublic payload specific to the type: object, snapshot, projection, or enriched business result according to its contract.

Naming

Event types

Platform events generally follow the form objet.action, for example invoice.issued. Events originating from an extension are prefixed with extension.<extension_key>. to preserve their technical origin without confusing them with Ormuz business events.

FamilyExamples
Companycompany.created, company.updated, company.suspended, contact.updated
Onboarding & complianceonboarding_case.completed, onboarding_case.rejected, compliance_check.created, compliance_check.review_required
Commerceorder.created, order.confirmed, checkout_session.completed, purchase_order.approved
Invoicinginvoice.issued, invoice.overdue, receivable.updated, credit_limit.updated
Paymentspsp_payment.succeeded, payment.received, payment_allocation.complete
Orchestrationprocess.instance.replayed, process.user_action.completed, approval_request.resolved
Extensionsextension.stripe.payment_intent.succeeded, extension.stripe.charge.refunded

The exhaustive list is exposed by GET /v1/events and detailed in the event catalog.

Consumption

Receive and use events

An event type declares the surfaces to which it can be delivered. All Core platform events are available for outbound webhooks; most, but not all, are also offered as process triggers. Check the catalog for the capability of the selected type.

CanalUsage
Webhooks sortantsDeliver Ormuz events to your application through signed HTTP.
Process triggersStart or resume a process when an expected business event occurs.
Catalogue APIList available types with GET /v1/events to configure your subscriptions.

To expose events to your application, create an endpoint in Receive webhooks and subscribe it to the types you need.

Reliability

Idempotency and processing order

A consumer must be able to receive the same event twice without producing two business effects. Persist the identifier id before executing an irreversible effect, then ignore events already seen.

  • Do not assume strict global ordering across all event types.
  • Use occurred_at to compare signals and reread the current object when business ordering matters.
  • Interpret the payload according to the type contract: some are snapshots, others objects or enriched results.
  • Prefer an explicit list in filter_types when your endpoint needs only a subset of events.

Extensions

Normalized extension events

Inbound provider webhooks may emit events prefixed with extension.. These events preserve technical provenance and may carry a platform-object draft, but they do not directly create the final business object.

Configuration of these endpoints is described in Inbound extension webhooks.

Evolution

Contracts and compatibility

Event types are the primary filtering contract. Payloads may be enriched with new public fields; consumers should ignore unknown fields and rely on the fields required by their use case.

To understand the compatibility boundary of public contracts, see public contract versioning.