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

# Sanctions Screening

> Lightweight signup-time sanctions screen. On hit, signup is allowed but transactions are held pending manual review.

Every new signup is screened against OFAC, EU, UN, and UK sanctions lists. False positives are common, so a hit **does not block signup** — instead the user's transactions are held until Anunnaki compliance reviews the case. This balances safety with user experience.

Production cutover will use **ComplyAdvantage**; sandbox runs against a deterministic stub.

<Warning>
  **Tipping-off is prohibited.** Never tell a user they were flagged for sanctions. Use generic language only ("Account under review"). This is a criminal offence in many jurisdictions under FATF guidance. Currents response shapes and webhooks intentionally omit matched-entity details from the operator-facing surface — matched names live only in admin tooling.
</Warning>

## Scope at launch

| Screen type                       | Status                     |
| --------------------------------- | -------------------------- |
| Sanctions (OFAC, EU, UN, UK)      | **Enabled** (KGC required) |
| Politically Exposed Persons (PEP) | Off — can enable later     |
| Adverse media                     | Off — can enable later     |
| Crypto address screening          | Out of scope               |

## Endpoints

| Method | Path                   | Description                                                          |
| ------ | ---------------------- | -------------------------------------------------------------------- |
| `POST` | `/v1/sanctions/screen` | Screen a user at signup. Idempotent on `(tenant, external_user_id)`. |
| `GET`  | `/v1/sanctions/status` | Read current screening status for a user.                            |

### `POST /v1/sanctions/screen`

```bash theme={null}
curl https://sandbox.api.anunnakielite.com/v1/sanctions/screen \
  -H "Authorization: Bearer cur_sk_test_EXAMPLEKEY123456789012345678901234" \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": "rt_usr_8a2f1c",
    "first_name": "Jane",
    "last_name": "Doe",
    "date_of_birth": "1992-04-17",
    "nationality": "FR",
    "email": "jane.doe@example.com"
  }'
```

Clear:

```json theme={null}
{
  "screen_id": "scr_a1b2c3",
  "user_id": "rt_usr_8a2f1c",
  "status": "clear",
  "checked_at": "2026-05-24T15:02:00Z",
  "transactions_held": false
}
```

Hit (signup still allowed; transactions auto-held):

```json theme={null}
{
  "screen_id": "scr_a1b2c3",
  "user_id": "rt_usr_8a2f1c",
  "status": "hit_review_pending",
  "match_count": 1,
  "highest_match_score": 0.92,
  "case_id": "case_99f02a",
  "checked_at": "2026-05-24T15:02:00Z",
  "transactions_held": true,
  "signup_allowed": true,
  "estimated_review_time": "24-48h"
}
```

Matched-entity names are **never** returned at this endpoint. They are visible only to Anunnaki compliance via admin tooling.

### `GET /v1/sanctions/status`

```bash theme={null}
curl "https://sandbox.api.anunnakielite.com/v1/sanctions/status?user_id=rt_usr_8a2f1c" \
  -H "Authorization: Bearer cur_sk_test_EXAMPLEKEY123456789012345678901234"
```

| Status               | Meaning                                                          |
| -------------------- | ---------------------------------------------------------------- |
| `clear`              | No hits. Transactions allowed.                                   |
| `hit_review_pending` | Hit, under review. **All transactions held.**                    |
| `cleared`            | Reviewer dismissed as false positive. Holds lifted.              |
| `confirmed`          | Reviewer confirmed real match. Account terminated, funds frozen. |

## Webhooks

| Event                      | Fires when                                                                              |
| -------------------------- | --------------------------------------------------------------------------------------- |
| `sanctions.hit`            | Screening returned a hit; transactions auto-held.                                       |
| `sanctions.cleared`        | Reviewer dismissed the hit; resume transactions.                                        |
| `sanctions.confirmed`      | Reviewer confirmed real match; terminate account, freeze funds.                         |
| `sanctions.account_frozen` | Auxiliary event fired alongside `sanctions.confirmed` for an unambiguous freeze signal. |

```json theme={null}
{
  "event": "sanctions.cleared",
  "event_id": "evt_san_a1b2c3",
  "timestamp": "2026-05-25T09:14:00Z",
  "data": {
    "case_id": "case_99f02a",
    "user_id": "rt_usr_8a2f1c",
    "reviewer": "anunnaki_compliance",
    "transactions_held": false
  }
}
```

## Sandbox triggers (stub vendor)

| Identity                           | Result                                         |
| ---------------------------------- | ---------------------------------------------- |
| `first_name: "SanctionedSam"`      | `hit_review_pending`, score ≥ 0.95 (OFAC SDN). |
| `first_name` starts with `"Maybe"` | `hit_review_pending`, borderline score \~0.85. |
| `last_name: "TestHit"`             | `hit_review_pending`, 2 matches (OFAC + EU).   |
| Anything else                      | `clear`.                                       |

## Policy

* **Vendor:** ComplyAdvantage at production cutover.
* **Scope:** sanctions only at launch — no PEP, no adverse media.
* **Review SLA:** 48 hours from signup.
* **Re-screening:** quarterly bulk re-screen of active users; on-demand if needed.

## Error codes

| Status | Code                                           |
| ------ | ---------------------------------------------- |
| 400    | `missing_fields`                               |
| 401    | `unauthorized`                                 |
| 409    | `already_screened` (use `GET /status` instead) |
| 429    | `rate_limited`                                 |
| 503    | `vendor_unavailable` (retry with backoff)      |
