
# Transaction decision webhooks

Myaza sends one concise summary when a transaction is assessed and again if its effective decision changes.

## Events

| Event | Use it for |
| --- | --- |
| `fraud.transaction.assessed` | Apply the first transaction decision. |
| `fraud.decision.changed` | Replace the previous decision with the new effective decision. |
| `event.flagged` | Legacy compatibility for non-allow decisions. New integrations should use the events above. |

## Example

```json
{
  "id": "evt_transaction_01",
  "event": "fraud.transaction.assessed",
  "createdAt": "2026-08-15T15:02:12.884Z",
  "data": {
    "externalTransactionId": "txn_928401",
    "activityId": "act_tx_01",
    "decisionId": "dec_tx_01",
    "decision": "review",
    "summary": {
      "outcome": "review",
      "title": "Review required",
      "reason": "A high-risk transaction rule matched.",
      "score": 82,
      "riskLevel": "high",
      "matchedRules": 1,
      "nextAction": {
        "type": "review_activity",
        "label": "Review transaction"
      }
    }
  }
}
```

Use `data.summary` for normal integration logic:

1. Deduplicate by the envelope `id`.
2. Branch on `summary.outcome`.
3. Display `summary.reason` when a person needs context.
4. Follow `summary.nextAction` when it is not `none`.

The same payload can include detailed rule, screening, billing and Travel Rule evidence. Store that evidence for audit or open the transaction read API when you need it, but do not recompute Myaza's decision from those details.

Delivery order is not guaranteed. A later `fraud.decision.changed` event is authoritative for the effective decision.
