> ## Documentation Index
> Fetch the complete documentation index at: https://www.dynamic.xyz/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Policy and screening webhooks

> Events emitted by the Policy Engine: policy violations, transaction review decisions, and address screening verdicts.

Policy and screening events fire under the `waas.*` and `wallet.*` namespaces. They cover blocked transactions, transaction review decisions, and screening verdicts on wallet addresses.

For the shared event envelope, endpoint setup, retries, and signature verification, see [Setting up webhooks](/docs/platform/dashboard/webhooks/setup) and [Event delivery & best practices](/docs/platform/dashboard/webhooks/delivery-best-practices). The current list of event types is always available from the [event types endpoint](/docs/api-reference/events/get-event-types).

## Policy violations

<ParamField body="waas.policy.violation" type="object">
  Occurs whenever a transaction is blocked by a configured policy rule. This event provides detailed information about the violation including the denied addresses, all counterparties involved in the transaction, and the reason for blocking. Useful for building allow-only rules, security monitoring, and debugging policy configurations. See [Policy Violation Webhooks](/docs/embedded-wallets/mpc/policies/violation-webhooks) for more details.
</ParamField>

## Screening verdicts

<ParamField body="wallet.sanctions.blocked" type="object">
  Occurs whenever one of a user's wallet addresses is blocked by sanctions /
  address screening on a `BLOCKED` verdict. Fires once per `BLOCKED` screening
  decision in a user flow (the winning result), not per provider response, and
  is not re-emitted on a cache-hit `BLOCKED`. Only `BLOCKED` outcomes emit:
  `OK`, `FLAGGED`, `REVIEW`, and `ERROR` do not. The payload contains
  `walletAddress` (lowercase, normalized), `chain`, `sanctionsProvider`,
  `sanctionCheckRequestId`, `categories` (the vendor-returned categories that
  triggered the block), `origin` (the user-flow surface that triggered the
  screening, for example `signIn`, `walletConnect`, `checkoutDestination`,
  `checkoutSource`, `flowDestination`, `flowSource`, `api`,
  `backgroundPrefetch`, `transactionSigning`, or `transactionScreenApi`; this
  enum will grow as new screening surfaces are added), `keyOwner` (`dynamic`
  or `customerProvided`), and `screenedAt`.
</ParamField>

<ParamField body="wallet.addressScreening.blocked" type="object">
  Occurs whenever a wallet address is blocked by a verdict from your own
  address screening policy rules or address lists. Split out from
  `wallet.sanctions.blocked`, which now covers only sanctions and the
  immutable floor, so you can subscribe to your own policy decisions without
  also receiving every sanctions block. Same payload shape as
  `wallet.sanctions.blocked`.
</ParamField>

<ParamField body="wallet.addressScreening.alerted" type="object">
  Occurs whenever a wallet address triggers an `ALERT` verdict from your own
  address screening policy. Same payload shape as
  `wallet.sanctions.blocked`.
</ParamField>

### Example screening payload

```json theme={"system"}
{
  "eventId": "2a92c161-3167-44ad-8fce-4c6cdaed8129",
  "messageId": "5a2a5360-bb7e-4ea6-9bd3-0146bf2f734f",
  "webhookId": "a86acea4-e050-4846-8e4f-0ae039f6e37c",
  "userId": "a5914498-7a8b-4c58-b04c-9624fef2897c",
  "eventName": "wallet.sanctions.blocked",
  "environmentId": "123e4567-e89b-12d3-a456-426614174000",
  "environmentName": "sandbox",
  "timestamp": "2023-10-26T14:30:59.210Z",
  "data": {
    "walletAddress": "0x7f367cc41522ce07553e823bf3be79a889debe1b",
    "chain": "ethereum",
    "sanctionsProvider": "dynamic-sanctions-screening",
    "sanctionCheckRequestId": "484e49ba-3026-4e2c-9bf0-ed98ae224833",
    "categories": ["Sanctions", "Blocklisted"],
    "origin": "signIn",
    "keyOwner": "dynamic",
    "screenedAt": "2023-10-26T14:30:59.210Z"
  }
}
```

<Note>
  `sanctions.wallet.blocked` is the deprecated alias of
  `wallet.sanctions.blocked`. Existing subscriptions on the old name keep
  receiving the event; it is not advertised in the event types catalog, so new
  subscriptions should use `wallet.sanctions.blocked`.
</Note>

## Transaction review

<Note>
  `waas.transaction.review.approved` and `waas.transaction.review.denied` are
  emitted when a transaction review resolves, but are not selectable in the
  event types catalog today.
</Note>

## Policy configuration events

Changes to policies, screening policies, and BYOK screening keys by dashboard admins emit `admin.*` events: `admin.waas.policy.*`, `admin.addressScreening.policy.*`, and `admin.addressScreening.byok.*`. These are documented with the other admin events under [Admin and environment events](/docs/platform/dashboard/webhooks/events).
