Docs
Sanctions & PEP Screening

API Reference

Sanctions and PEP screening endpoint reference

Status: under development. Target interface, may evolve until 1.0.

All endpoints require a secret API key. Requests may carry an X-Request-Id header (UUID v4); it is echoed in the response and logged on both sides as the reconciliation key.

POST /v1/screening/screen

Screen up to 100 subjects in one request.

Authentication: API key (secret)

Request

POST /v1/screening/screen
Authorization: Bearer oat_your_secret_key
Content-Type: application/json
{
  "subjects": [
    {
      "reference": "NEF-2026-004182",
      "type": "individual",
      "name": "Jean-Pierre Martin",
      "birth_date": "1974-03-12",
      "nationalities": ["FR"],
      "country_of_residence": "FR",
      "identifiers": [
        { "type": "passport", "value": "18AB94721", "country": "FR" }
      ]
    }
  ],
  "options": {
    "sources": ["ofac_sdn", "ofac_cons", "fr_tresor_gels", "pep_fr"],
    "threshold": 0.75,
    "include_weak_aliases": false
  }
}
FieldTypeRequiredDescription
subjects[].referencestringYesCaller's internal reference, echoed back verbatim. Must not contain personal data.
subjects[].typeenumYesindividual, entity, vessel, aircraft
subjects[].namestringYesFull name as collected
subjects[].birth_datestringNoYYYY-MM-DD, or YYYY if only the year is known
subjects[].nationalitiesstring[]NoISO 3166-1 alpha-2; strongly improves precision
subjects[].identifiersarrayNoPassport, residence permit, national or registration identifier
options.sourcesstring[]NoDefaults to every source enabled on the account
options.thresholdnumberNoRestitution threshold, 0 to 1. Default 0.75
options.include_weak_aliasesbooleanNoInclude aliases flagged weak by the source. Default false

Response 200

{
  "screening_id": "scr_01J9XQ2M4K7P3N8V",
  "screened_at": "2026-07-31T09:14:22Z",
  "list_versions": {
    "ofac_sdn": { "version": "2026-07-30", "retrieved_at": "2026-07-31T06:00:11Z" },
    "fr_tresor_gels": { "version": "2026-07-29", "retrieved_at": "2026-07-31T05:30:02Z" }
  },
  "results": [
    {
      "reference": "NEF-2026-004182",
      "status": "potential_match",
      "matches": [
        {
          "entity_id": "ent_01J9XQ3P8T2M6R4W",
          "score": 0.91,
          "match_type": "name_and_registration",
          "matched_fields": ["name", "registration_number"],
          "list": "fr_tresor_gels",
          "category": "sanction",
          "entity": {
            "type": "entity",
            "primary_name": "SOCIETE GENERALE DE NEGOCE",
            "aliases": ["SGN SARL"],
            "regimes": [
              {
                "code": "UE_SYRIE",
                "label": "Régime UE Syrie",
                "legal_basis": "Règlement (UE) n° 36/2012",
                "listed_at": "2023-11-14"
              }
            ],
            "source_url": "https://gels-avoirs.dgtresor.gouv.fr/..."
          }
        }
      ]
    }
  ]
}

status is clear, potential_match or error. category is sanction, pep or pep_rca.

Each submitted subject counts as one billable unit, whatever the batching.


GET /v1/screening/screenings/:screening_id

Replays a past screening identically, including the list versions in force at the time of the call. This is the evidence endpoint. Retention: 5 years by default (L.561-12 CMF baseline); longer retention is configurable contractually.

Authentication: API key (secret)


GET /v1/screening/entities/:entity_id

Full record of a designated entity: names and aliases, birth data, nationalities, identifiers, every applicable regime with legal basis and designation dates, known addresses, digital asset addresses when present, and the link to the original source. For PEPs: functions held with start and end dates, jurisdiction, level, and declared family or association links.

Authentication: API key (secret)


GET /v1/screening/lists

Health and versions of the sources enabled on the account. Poll it from your monitoring.

Authentication: API key (secret)

Response 200

{
  "lists": [
    {
      "id": "fr_tresor_gels",
      "label": "Registre national des gels — DG Trésor",
      "version": "2026-07-29",
      "retrieved_at": "2026-07-31T05:30:02Z",
      "record_count": 4187,
      "status": "healthy"
    }
  ]
}

A stale status means a source has not refreshed within the contractual window and should raise an alert on your side as on ours.


POST /v1/screening/subjects

Registers a subject for continuous screening. It is re-screened on every source update; any new match triggers a webhook signed with HMAC-SHA256 (X-Webhook-Signature, same scheme and retry policy as monitoring webhooks).

Authentication: API key (secret)

{
  "reference": "NEF-2026-004182",
  "type": "individual",
  "name": "Jean-Pierre Martin",
  "birth_date": "1974-03-12",
  "nationalities": ["FR"]
}

Related: GET /v1/screening/subjects, DELETE /v1/screening/subjects/:reference.


POST /v1/screening/exports/audit

Produces a timestamped, signed export of screenings over a period: subject, reference, result, matches, applied threshold, list versions. CSV and JSON. Designed for inspection evidence.

Authentication: API key (secret)


Errors

{
  "error": "The 'name' field is required for subject at index 3.",
  "request_id": "3f8a1c40-9d2e-4b71-8c05-1a7e6f2b4d90"
}
CodeCondition
400Malformed request
401Missing, expired or invalid API key
403Publishable key used, or source not enabled on the account
422Valid request but unprocessable subject
429Rate limit exceeded, see Retry-After
503Temporary unavailability. No screening is deemed performed.

A 503 must never be interpreted as clear: replay the screening. Standard rate limit is 200 requests per minute per API key; dedicated throughput is available contractually.