Your backend sends a fact.
A trusted event arrives with a stable event id. It is validated against an immutable contract version, deduplicated, written with an outbox row, and answered with a 202 receipt before any effect runs.
{
"event_id": "order-1001-completed",
"event_type": "order.completed",
"user_id": "user-42",
"payload": {
"total": 129.90,
"payment_status": "paid"
}
}