{
  "openapi": "3.1.0",
  "info": {
    "title": "UK Sanctions Screening API",
    "version": "1.2.0",
    "description": "Screen person and organisation names against the official sanctions lists:\nthe UK Sanctions List (FCDO), the UN Security Council consolidated list,\nthe EU consolidated financial sanctions list and the US OFAC SDN and\nnon-SDN lists. All four are refreshed daily at 04:00 UTC.\n\nEvery result carries a `checkId`, the time it ran, the inputs it used and\nthe lists screened with the date each was last updated, so you can keep\nit as a dated record of the check. We keep no copy of the names you\nscreen.\n\nUsage: one name screened is one check; a bulk request counts one check per\nname. `GET /lists` and the watchlist routes do not count. Each screening\nresponse carries `X-Checks-Used`, `X-Checks-Included` and `X-Checks-Limit`\nheaders for the current calendar month (UTC). Past your plan's allowance,\nextra checks are billed at your plan's per-check rate; at twice the\nallowance (or at the allowance during the free trial) screening pauses with\na 429 until the 1st of the next month.\n\nIf a screen fails (429, 5xx, a timeout), treat the name as not yet screened:\nretry, and do not treat it as clear.\n",
    "contact": {
      "name": "Stratum APIs",
      "url": "https://stratumapis.com",
      "email": "support@stratumapis.com"
    },
    "termsOfService": "https://stratumapis.com/legal/terms",
    "x-logo": {
      "url": "https://stratumapis.com/icon.svg",
      "altText": "Stratum APIs"
    }
  },
  "servers": [
    {
      "url": "https://api.stratumapis.com/v1/sanctions",
      "description": "Production"
    }
  ],
  "security": [
    {
      "apiKey": []
    }
  ],
  "paths": {
    "/screen": {
      "get": {
        "summary": "Screen one name against all four sanctions lists",
        "operationId": "screen",
        "parameters": [
          {
            "in": "query",
            "name": "name",
            "required": true,
            "example": "Roman Abramovich",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "description": "Person or organisation name to screen"
          },
          {
            "in": "query",
            "name": "type",
            "required": false,
            "example": "person",
            "schema": {
              "type": "string",
              "enum": [
                "person",
                "entity",
                "any"
              ],
              "default": "any"
            },
            "description": "Match person listings only, organisation listings only (`entity`; `organisation` and `company` also accepted), or both"
          },
          {
            "in": "query",
            "name": "dateOfBirth",
            "required": false,
            "example": "1966-10-24",
            "schema": {
              "type": "string"
            },
            "description": "YYYY-MM-DD, or YYYY-MM / YYYY if only the month or year is known. Compared with every date of birth the lists publish for a person; see `dateOfBirthMatch`."
          },
          {
            "in": "query",
            "name": "nationality",
            "required": false,
            "example": "RU",
            "schema": {
              "type": "string"
            },
            "description": "Two-letter ISO 3166 country code. Compared with the listed nationalities; see `nationalityMatch`."
          },
          {
            "in": "query",
            "name": "reference",
            "required": false,
            "example": "applicant-1042",
            "schema": {
              "type": "string",
              "maxLength": 100
            },
            "description": "Your own reference (for example an applicant id). Echoed back in the result, never stored."
          },
          {
            "in": "query",
            "name": "minScore",
            "required": false,
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "default": 0.7
            },
            "description": "Candidates scoring below this are left out"
          },
          {
            "in": "query",
            "name": "pepAndAdverseMedia",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Also screen for politically exposed persons (PEP) and adverse media. Paid per name from your Stratum credit (25p, 15p once your account has run 1,000 this month), taken before the check and given back if it doesn't run or reuses an answer you already paid for today; the reply's `credit` says what was charged. Not in a free trial. One name at a time (not on /bulk). Without enough credit: HTTP 402."
          }
        ],
        "responses": {
          "200": {
            "description": "Screening result. `count` 0 means no listing matched at the threshold.",
            "headers": {
              "X-Checks-Used": {
                "$ref": "#/components/headers/ChecksUsed"
              },
              "X-Checks-Included": {
                "$ref": "#/components/headers/ChecksIncluded"
              },
              "X-Checks-Limit": {
                "$ref": "#/components/headers/ChecksLimit"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScreeningResult"
                },
                "examples": {
                  "possibleMatch": {
                    "summary": "Possible match, date of birth and nationality agree",
                    "value": {
                      "checkId": "chk_0b119844-7a02-49b3-ac11-4977427f137f",
                      "screenedAt": "2026-09-27T21:15:20.930Z",
                      "reference": "applicant-1042",
                      "query": "Roman Abramovich",
                      "count": 2,
                      "matches": [
                        {
                          "list": "ofsi",
                          "name": "Roman Arkadyevich ABRAMOVICH",
                          "aliases": [
                            "Roman ABRAMOVICH"
                          ],
                          "type": "person",
                          "score": 1,
                          "nationality": "Israel, Portugal, Russia",
                          "dateOfBirth": "24/10/1966",
                          "sanctionRegime": "The Russia (Sanctions) (EU Exit) Regulations 2019",
                          "designationDate": "10/03/2022",
                          "listingId": "RUS0270",
                          "sourceUrl": "https://www.gov.uk/government/publications/the-uk-sanctions-list",
                          "matchedAlias": "Roman ABRAMOVICH",
                          "nameScore": 1,
                          "dateOfBirthMatch": "match",
                          "nationalityMatch": "match"
                        },
                        {
                          "list": "eu",
                          "name": "Roman Abramovič",
                          "type": "person",
                          "score": 1,
                          "nationality": "RUSSIAN FEDERATION",
                          "dateOfBirth": "1966-10-24",
                          "sanctionRegime": "UKR",
                          "listingId": "137652",
                          "sourceUrl": "https://webgate.ec.europa.eu/fsd/fsf",
                          "matchedAlias": "Roman Arkadyevich ABRAMOVICH",
                          "nameScore": 1,
                          "dateOfBirthMatch": "match",
                          "nationalityMatch": "match"
                        }
                      ],
                      "screenedWith": {
                        "type": "person",
                        "minScore": 0.7,
                        "dateOfBirth": "1966-10-24",
                        "nationality": "RU"
                      },
                      "listsScreened": [
                        "UK Sanctions List (FCDO) (updated 2026-09-27)",
                        "UN Security Council Consolidated Sanctions List (updated 2026-09-27)",
                        "EU Consolidated Financial Sanctions List (updated 2026-09-27)",
                        "US OFAC Sanctions Lists (SDN and non-SDN) (updated 2026-09-27)"
                      ],
                      "screenProvenance": "Screened against: UK Sanctions List (FCDO), UN Security Council Consolidated Sanctions List, EU Consolidated Financial Sanctions List and US OFAC Sanctions Lists (SDN and non-SDN).",
                      "listsSnapshotAt": "2026-09-27T21:07:17.132Z"
                    }
                  },
                  "noMatch": {
                    "summary": "No possible matches",
                    "value": {
                      "checkId": "chk_7f70769c-cfe8-4147-beb6-022854bd3e12",
                      "screenedAt": "2026-09-27T21:15:21.572Z",
                      "reference": "applicant-1043",
                      "query": "Amelia Hartwell-Pryce",
                      "count": 0,
                      "matches": [],
                      "screenedWith": {
                        "type": "any",
                        "minScore": 0.7
                      },
                      "listsScreened": [
                        "UK Sanctions List (FCDO) (updated 2026-09-27)",
                        "UN Security Council Consolidated Sanctions List (updated 2026-09-27)",
                        "EU Consolidated Financial Sanctions List (updated 2026-09-27)",
                        "US OFAC Sanctions Lists (SDN and non-SDN) (updated 2026-09-27)"
                      ],
                      "screenProvenance": "Screened against: UK Sanctions List (FCDO), UN Security Council Consolidated Sanctions List, EU Consolidated Financial Sanctions List and US OFAC Sanctions Lists (SDN and non-SDN).",
                      "listsSnapshotAt": "2026-09-27T21:07:17.132Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "402": {
            "description": "Not enough Stratum credit for PEP and adverse media; nothing was screened or charged.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "code": "insufficient_credit",
                    "message": "PEP and adverse media costs 25p from your Stratum credit, and your balance is 5p. Top up at https://stratumapis.com/dashboard, or screen without pepAndAdverseMedia."
                  },
                  "neededPence": 25,
                  "balancePence": 5,
                  "topUpPath": "https://stratumapis.com/dashboard"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/WrongApi"
          },
          "429": {
            "$ref": "#/components/responses/LimitReached"
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/bulk": {
      "post": {
        "summary": "Screen up to 100 names in one request (one check per name)",
        "description": "Each name can be a plain string, or an object with its own `type`,\n`dateOfBirth`, `nationality` and `reference`, so an organisation and the\npeople responsible for it can go in one request. Top-level `type` and\n`minScore` are defaults for names that don't set their own. If the\nrequest would take you past your monthly limit it is refused whole\n(429), with how many checks remain. A request answers within about\n20 seconds: if names are left when time runs out, the response has\n`incomplete: true` and lists them in `notScreened`; send those again.\nOnly screened names are charged.\n",
        "operationId": "screenBulk",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "names"
                ],
                "properties": {
                  "names": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 100,
                    "items": {
                      "oneOf": [
                        {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 200
                        },
                        {
                          "$ref": "#/components/schemas/BulkName"
                        }
                      ]
                    }
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "person",
                      "entity",
                      "any"
                    ],
                    "default": "any"
                  },
                  "minScore": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1,
                    "default": 0.7
                  }
                }
              },
              "example": {
                "names": [
                  {
                    "name": "Aerocaribbean Airlines",
                    "type": "organisation",
                    "reference": "org-77"
                  },
                  {
                    "name": "Roman Abramovich",
                    "type": "person",
                    "dateOfBirth": "1966-10-24",
                    "nationality": "RU",
                    "reference": "trustee-77a"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "One screening result per name, in request order, each with its own `checkId`",
            "headers": {
              "X-Checks-Used": {
                "$ref": "#/components/headers/ChecksUsed"
              },
              "X-Checks-Included": {
                "$ref": "#/components/headers/ChecksIncluded"
              },
              "X-Checks-Limit": {
                "$ref": "#/components/headers/ChecksLimit"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "count",
                    "results"
                  ],
                  "properties": {
                    "count": {
                      "type": "integer",
                      "description": "Names screened in this response"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ScreeningResult"
                      }
                    },
                    "incomplete": {
                      "type": "boolean",
                      "description": "Present and true when time ran out before every name was screened"
                    },
                    "notScreened": {
                      "type": "array",
                      "description": "The names not screened yet (with their position in the request); send them again",
                      "items": {
                        "type": "object",
                        "properties": {
                          "index": {
                            "type": "integer"
                          },
                          "name": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorised"
          },
          "403": {
            "$ref": "#/components/responses/WrongApi"
          },
          "429": {
            "$ref": "#/components/responses/LimitReached"
          },
          "500": {
            "$ref": "#/components/responses/ServerError"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/lists": {
      "get": {
        "summary": "Which lists are loaded, their size and when each was last refreshed (free)",
        "operationId": "listsMetadata",
        "responses": {
          "200": {
            "description": "List metadata",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "generatedAt": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "lists": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "slug": {
                            "type": "string",
                            "enum": [
                              "ofsi",
                              "un",
                              "eu",
                              "ofac"
                            ]
                          },
                          "name": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string"
                          },
                          "entryCount": {
                            "type": "integer"
                          },
                          "lastRefreshed": {
                            "type": "string",
                            "format": "date-time"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/changes": {
      "get": {
        "summary": "Each day's additions, removals and re-issued listings per list (free)",
        "description": "What changed on each sanctions list, day by day, from the daily 04:00 UTC refresh: the history behind Certaby's UK sanctions list changes page. A list is compared only when both days hold a fresh copy of it; a listing re-issued under a new reference counts once, as amended; a step too large to be one day of designations (a change of source or file format) is withheld with its counts. Days with no change are left out. Free: does not count as a check.",
        "operationId": "listChanges",
        "parameters": [
          {
            "in": "query",
            "name": "days",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 120,
              "default": 30
            },
            "description": "How many days back from the last refresh"
          },
          {
            "in": "query",
            "name": "list",
            "required": false,
            "example": "ofsi",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated list slugs (ofsi, un, eu, ofac); every list when left out"
          }
        ],
        "responses": {
          "200": {
            "description": "The change history",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "updatedAt": {
                      "type": "string",
                      "format": "date-time",
                      "description": "When the last refresh was compared"
                    },
                    "from": {
                      "type": "string",
                      "format": "date",
                      "description": "First day covered"
                    },
                    "lists": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "slug": {
                            "type": "string",
                            "enum": [
                              "ofsi",
                              "un",
                              "eu",
                              "ofac"
                            ]
                          },
                          "name": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string"
                          },
                          "entryCount": {
                            "type": "integer"
                          },
                          "lastRefreshed": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "lastChanged": {
                            "type": "string",
                            "format": "date",
                            "description": "Last day with a change on this list",
                            "if any": null
                          }
                        }
                      }
                    },
                    "days": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "date": {
                            "type": "string",
                            "format": "date"
                          },
                          "lists": {
                            "type": "object",
                            "description": "Keyed by list slug; only lists that changed that day",
                            "additionalProperties": {
                              "type": "object",
                              "properties": {
                                "added": {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/components/schemas/ListChangeItem"
                                  }
                                },
                                "removed": {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/components/schemas/ListChangeItem"
                                  }
                                },
                                "amended": {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/components/schemas/ListChangeItem"
                                  }
                                },
                                "withheld": {
                                  "type": "object",
                                  "properties": {
                                    "added": {
                                      "type": "integer"
                                    },
                                    "removed": {
                                      "type": "integer"
                                    },
                                    "reason": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad days or list value"
          },
          "503": {
            "description": "The change history starts with the next daily refresh"
          }
        }
      }
    },
    "/monitored": {
      "post": {
        "summary": "Add a person or organisation to your watchlist (free)",
        "description": "Watchlist entries are re-screened against the refreshed lists every day\nat 05:00 UTC. A listing that newly matches appears in\n`GET /monitored/changes` with its details, and we email an alert.\nWatchlist size: Starter 250, Growth 1,000, Pro 5,000.\n",
        "operationId": "addMonitored",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "entityName",
                  "entityType"
                ],
                "properties": {
                  "entityName": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "entityType": {
                    "type": "string",
                    "enum": [
                      "individual",
                      "company"
                    ]
                  },
                  "dateOfBirth": {
                    "type": "string",
                    "example": "1980-01-31",
                    "description": "A person's date of birth as YYYY-MM-DD (or YYYY-MM / YYYY if only the month or year is known). Optional. The daily re-screen uses it as `/screen` does: a listing with a different date of birth scores lower, so a namesake stops showing as a possible match. Ignored for a company."
                  },
                  "nationality": {
                    "type": "string",
                    "example": "GB",
                    "description": "A person's nationality as a two-letter ISO 3166 code. Optional; weaker evidence than a date of birth."
                  },
                  "customerEmail": {
                    "type": "string",
                    "description": "Where alerts for this entry go. Defaults to the email you subscribed with."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Added",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "entityId": {
                      "type": "string"
                    },
                    "entityName": {
                      "type": "string"
                    },
                    "entityType": {
                      "type": "string",
                      "enum": [
                        "individual",
                        "company"
                      ]
                    },
                    "addedAt": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "cap": {
                      "type": "integer",
                      "description": "Your plan's watchlist size"
                    },
                    "remaining": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid body. Returns { \"error\": \"<code>\", \"message\": \"...\" }"
          },
          "409": {
            "description": "Watchlist full (`tier_cap_reached`)"
          }
        }
      },
      "get": {
        "summary": "List your watchlist with each entry's latest result (free)",
        "operationId": "listMonitored",
        "responses": {
          "200": {
            "description": "Watchlist",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "entries": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "entityId": {
                            "type": "string"
                          },
                          "entityName": {
                            "type": "string"
                          },
                          "entityType": {
                            "type": "string",
                            "enum": [
                              "individual",
                              "company"
                            ]
                          },
                          "dateOfBirth": {
                            "type": "string",
                            "description": "As given when the entry was added"
                          },
                          "nationality": {
                            "type": "string",
                            "description": "As given when the entry was added"
                          },
                          "addedAt": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "lastScreenedAt": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "lastResult": {
                            "type": "object",
                            "description": "Summary of the latest daily screen"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/monitored/pep-recheck": {
      "get": {
        "summary": "Whether your watch list gets a monthly PEP and adverse media re-check",
        "operationId": "getPepRecheck",
        "responses": {
          "200": {
            "description": "The switch and its price.",
            "content": {
              "application/json": {
                "example": {
                  "ok": true,
                  "monthly": true,
                  "pricePerPersonPence": 15,
                  "updatedAt": "2026-10-07T22:17:30.101Z"
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "Switch the monthly PEP and adverse media re-check on or off",
        "description": "On, each person on your watch list is re-checked for PEP and adverse media every 30 days, 15p a person from your Stratum credit; new matches are emailed and appear in /monitored/changes. A person is skipped while your credit is short. The daily sanctions screen is free either way.",
        "operationId": "setPepRecheck",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "monthly": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Saved.",
            "content": {
              "application/json": {
                "example": {
                  "ok": true,
                  "monthly": true,
                  "pricePerPersonPence": 15,
                  "updatedAt": "2026-10-07T22:17:30.101Z"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        }
      }
    },
    "/monitored/changes": {
      "get": {
        "summary": "New matches on your watchlist in the last N days (free)",
        "description": "Poll after 05:00 UTC. The first screen of a new entry lists every match as new (`kind` `first-screen`).",
        "operationId": "monitoredChanges",
        "parameters": [
          {
            "in": "query",
            "name": "days",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 30,
              "default": 7
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Changes, newest first",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "days": {
                      "type": "integer"
                    },
                    "changes": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "entityId": {
                            "type": "string"
                          },
                          "entityName": {
                            "type": "string"
                          },
                          "screenedAt": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "change": {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "enum": [
                                  "first-screen",
                                  "delta"
                                ]
                              },
                              "netNewSanctions": {
                                "type": "integer"
                              },
                              "newSanctionsMatches": {
                                "type": "array",
                                "description": "The listings that newly match, with enough detail to review them",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "list": {
                                      "type": "string",
                                      "enum": [
                                        "ofsi",
                                        "un",
                                        "eu",
                                        "ofac"
                                      ]
                                    },
                                    "listingId": {
                                      "type": "string"
                                    },
                                    "name": {
                                      "type": "string"
                                    },
                                    "score": {
                                      "type": "number"
                                    },
                                    "sanctionRegime": {
                                      "type": "string"
                                    },
                                    "sourceUrl": {
                                      "type": "string"
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                },
                "example": {
                  "count": 1,
                  "days": 1,
                  "changes": [
                    {
                      "entityId": "ent_2d0524a6-5afd-4b60-91b1-c4488ec063bf",
                      "entityName": "Example Name",
                      "screenedAt": "2026-09-27T05:00:12.928Z",
                      "change": {
                        "kind": "delta",
                        "netNewSanctions": 1,
                        "newSanctionsMatches": [
                          {
                            "list": "ofac",
                            "listingId": "7845",
                            "name": "Example LISTED NAME",
                            "score": 0.9,
                            "sourceUrl": "https://sanctionssearch.ofac.treas.gov/"
                          }
                        ]
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/monitored/{entityId}": {
      "delete": {
        "summary": "Remove an entry from your watchlist (idempotent)",
        "operationId": "deleteMonitored",
        "parameters": [
          {
            "in": "path",
            "name": "entityId",
            "required": true,
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Removed (or was not present)"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Stratum-Key"
      }
    },
    "headers": {
      "ChecksUsed": {
        "description": "Checks used this calendar month (UTC), including this request",
        "schema": {
          "type": "integer"
        }
      },
      "ChecksIncluded": {
        "description": "Checks included in your plan each month",
        "schema": {
          "type": "integer"
        }
      },
      "ChecksLimit": {
        "description": "Where screening pauses this month (twice the allowance; the allowance during the free trial)",
        "schema": {
          "type": "integer"
        }
      }
    },
    "responses": {
      "BadRequest": {
        "description": "Invalid input. `code` says which: `missing_name`, `invalid_name`,\n`invalid_type`, `invalid_date_of_birth`, `invalid_nationality`,\n`invalid_reference`, `invalid_json`, `missing_names`, `too_many_names`,\n`per_name_field`. In `/bulk` the message names the item, for example\n`names[3].dateOfBirth ...`. A date of birth or nationality we can't read\nis always refused, never silently ignored.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "invalid_nationality",
                "message": "nationality must be a two-letter ISO 3166 country code, for example GB",
                "requestId": "EYIY1iPIrPEEPcg="
              }
            }
          }
        }
      },
      "Unauthorised": {
        "description": "Missing, invalid or revoked API key (`missing_key`, `invalid_key`, `revoked_key`)",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "WrongApi": {
        "description": "The key belongs to a different Stratum API (`wrong_api`), or it is an account key and the account has no plan for this API (`no_plan`)",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "LimitReached": {
        "description": "This month's limit is reached (`monthly_limit_reached`, at twice your\nplan's allowance) or the free trial's allowance is used\n(`trial_limit_reached`). Nothing was screened or counted. Treat the\nnames as not screened. Screening resumes on the 1st of next month, on\nupgrading, or when we raise your limit.\n",
        "headers": {
          "X-Checks-Used": {
            "$ref": "#/components/headers/ChecksUsed"
          },
          "X-Checks-Included": {
            "$ref": "#/components/headers/ChecksIncluded"
          },
          "X-Checks-Limit": {
            "$ref": "#/components/headers/ChecksLimit"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "ServerError": {
        "description": "The screen did not complete. Treat the name as not yet screened and retry\nwith backoff; do not treat it as clear.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Unavailable": {
        "description": "The service is temporarily unavailable or timed out. Treat the name as not\nyet screened and retry with backoff; do not treat it as clear.\n"
      }
    },
    "schemas": {
      "ListChangeItem": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name as the list publishes it"
          },
          "type": {
            "type": "string",
            "enum": [
              "person",
              "entity"
            ]
          },
          "listingId": {
            "type": "string",
            "description": "The publisher's reference (UK RUS3720, OFAC 57717)"
          },
          "previousListingId": {
            "type": "string",
            "description": "For a re-issued listing",
            "the reference it replaced": null
          },
          "regime": {
            "type": "string"
          },
          "designated": {
            "type": "string",
            "format": "date",
            "description": "Date of designation as the list states it"
          },
          "nationality": {
            "type": "string"
          }
        }
      },
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string",
                "example": "missing_name"
              },
              "message": {
                "type": "string"
              },
              "requestId": {
                "type": "string",
                "description": "Quote this if you contact support"
              }
            }
          }
        }
      },
      "BulkName": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "type": {
            "type": "string",
            "enum": [
              "person",
              "entity",
              "any"
            ]
          },
          "dateOfBirth": {
            "type": "string",
            "description": "YYYY-MM-DD or YYYY"
          },
          "nationality": {
            "type": "string",
            "description": "Two-letter ISO 3166 code"
          },
          "reference": {
            "type": "string",
            "maxLength": 100
          },
          "minScore": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          }
        }
      },
      "ScreeningResult": {
        "type": "object",
        "required": [
          "checkId",
          "screenedAt",
          "query",
          "count",
          "matches",
          "screenedWith",
          "listsScreened",
          "screenProvenance"
        ],
        "properties": {
          "checkId": {
            "type": "string",
            "description": "Unique id for this screen. Keep it with your record; we keep no copy of the result."
          },
          "screenedAt": {
            "type": "string",
            "format": "date-time",
            "description": "When the screen ran (UTC)"
          },
          "reference": {
            "type": "string",
            "description": "Your reference",
            "when you sent one": null
          },
          "query": {
            "type": "string",
            "description": "The name as screened"
          },
          "count": {
            "type": "integer",
            "description": "Number of possible matches at or above minScore"
          },
          "matches": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Match"
            }
          },
          "screenedWith": {
            "type": "object",
            "description": "The inputs this screen used",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "person",
                  "entity",
                  "any"
                ]
              },
              "minScore": {
                "type": "number"
              },
              "dateOfBirth": {
                "type": "string"
              },
              "nationality": {
                "type": "string"
              }
            }
          },
          "listsScreened": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Each list screened, with the date it was last updated. Keep this with your record of the check."
          },
          "screenProvenance": {
            "type": "string",
            "description": "One sentence naming the lists screened, suitable for an audit record"
          },
          "listsSnapshotAt": {
            "type": "string",
            "format": "date-time",
            "description": "When our copy of the lists was built from the publishers' files"
          }
        }
      },
      "Match": {
        "type": "object",
        "required": [
          "list",
          "name",
          "type",
          "score"
        ],
        "properties": {
          "list": {
            "type": "string",
            "enum": [
              "ofsi",
              "un",
              "eu",
              "ofac"
            ],
            "description": "Which list the listing comes from. `ofsi` is the UK Sanctions List (FCDO);\nthe slug predates OFSI's list closing in January 2026 and is kept for compatibility.\n"
          },
          "name": {
            "type": "string",
            "description": "Primary name on the list"
          },
          "aliases": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "type": {
            "type": "string",
            "enum": [
              "person",
              "entity"
            ]
          },
          "score": {
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "description": "How closely the name matches (1.0 = exact), adjusted when you sent a date of\nbirth or nationality: a same-day date of birth adds 0.05, a date of birth in a\ndifferent year subtracts 0.15, a different nationality subtracts 0.05. A\npossible match is something to review, not a confirmed match.\n"
          },
          "nameScore": {
            "type": "number",
            "description": "Name similarity alone, before the adjustment. Present when you sent a date of birth or nationality."
          },
          "matchedAlias": {
            "type": "string",
            "description": "The listed alias that matched",
            "when the match came through an alias": null
          },
          "dateOfBirth": {
            "type": "string",
            "description": "Every date of birth the list publishes, as written there, separated by \"; \""
          },
          "dateOfBirthMatch": {
            "type": "string",
            "enum": [
              "match",
              "partial",
              "mismatch",
              "not_listed"
            ],
            "description": "Present for person matches when you sent a date of birth. `match`: a listed\ndate is the same day. `partial`: same year only (the list gives only a year or\na range, or a different day). `mismatch`: every listed date is in another\nyear. `not_listed`: the list gives none.\n"
          },
          "nationality": {
            "type": "string",
            "description": "Every nationality the list publishes",
            "as written there": null
          },
          "nationalityMatch": {
            "type": "string",
            "enum": [
              "match",
              "mismatch",
              "not_listed"
            ],
            "description": "Present for person matches when you sent a nationality"
          },
          "sanctionRegime": {
            "type": "string",
            "description": "e.g. \"The Russia (Sanctions) (EU Exit) Regulations 2019\", \"CUBA\""
          },
          "designationDate": {
            "type": "string",
            "description": "As written by the list"
          },
          "listingId": {
            "type": "string",
            "description": "The list's own identifier for the listing"
          },
          "sourceUrl": {
            "type": "string",
            "format": "uri",
            "description": "Where to check the listing on the publisher's site"
          }
        }
      }
    }
  }
}