SStratum APIs

Export Controls Screening

API reference, version 1.0.0. Download the OpenAPI spec (JSON)

Authentication

All requests require an X-Stratum-Key header. Get a key by subscribing to a plan. An account key from your dashboard also works: it calls every API you have a plan for.

Base URL
https://api.stratumapis.com/v1/export-screening

Endpoints

gethttps://api.stratumapis.com/v1/export-screening/screen

Screen one name against the six US export-control lists and the four sanctions lists

Parameters
  • namerequiredin queryPerson or organisation name to screen
  • countryin queryThe party's country as a two-letter ISO 3166 code. Compared with the countries of a listing's addresses and reported as countryMatch on export-list matches. It never hides a match.
  • typein queryOn the sanctions lists, match person listings only, organisation listings only (entity; organisation and company also accepted), or both. The US export lists do not mark people and organisations apart, so every export listing is screened whatever the type.
  • minScorein queryCandidates scoring below this are left out
  • referencein queryYour own reference (for example an order number). Echoed back in the result, never stored.
Example request
curl -H "X-Stratum-Key: $KEY" \
  "https://api.stratumapis.com/v1/export-screening/screen?name=Niki%20Kyriakou&country=GB&type=entity&reference=order-4471"
Example response: A possible match on the US Entity List, with a London address
{
  "checkId": "chk_0143e5d0-1c6c-427a-a96b-91a08634185b",
  "screenedAt": "2026-10-10T09:12:44.512Z",
  "reference": "order-4471",
  "query": "Niki Kyriakou",
  "result": "possible_match",
  "count": 1,
  "matches": [
    {
      "list": "us_el",
      "listLabel": "US Entity List (BIS)",
      "name": "Niki Panteli Kyriakou",
      "score": 0.951,
      "addresses": [
        {
          "text": "91, Evgeniou Voulgareous, 4153",
          "city": "Limassol",
          "country": "CY"
        },
        {
          "text": "38, Princes Court-88 Brompton Road Knightsbridge, SW3 1ES",
          "city": "London",
          "country": "GB"
        }
      ],
      "countries": [
        "CY",
        "GB"
      ],
      "countryMatch": "match",
      "listedOn": "2011-08-15",
      "federalRegister": "76 FR 50407 (8/15/2011)",
      "licenceRequirement": "For all items subject to the EAR (See §744.11 of the EAR)",
      "licencePolicy": "Presumption of denial",
      "listingId": "828daede017810c4fdcaa56f51cf07cb91ed16bdd05faff93d169b9f",
      "sourceUrl": "https://www.bis.gov/regulations/ear/744#supplement-4-744",
      "moreInfoUrl": "https://www.bis.gov/licensing/guidance-on-end-user-and-end-use-controls-and-us-person-controls"
    }
  ],
  "screenedWith": {
    "type": "any",
    "minScore": 0.7,
    "country": "GB"
  },
  "listsScreened": [
    {
      "list": "ofsi",
      "name": "UK Sanctions List (FCDO)",
      "listUpdated": "2026-10-10",
      "weCheckedOn": "2026-10-10"
    },
    {
      "list": "un",
      "name": "UN Security Council Consolidated Sanctions List",
      "listUpdated": "2026-10-10",
      "weCheckedOn": "2026-10-10"
    },
    {
      "list": "eu",
      "name": "EU Consolidated Financial Sanctions List",
      "listUpdated": "2026-10-10",
      "weCheckedOn": "2026-10-10"
    },
    {
      "list": "ofac",
      "name": "US OFAC Sanctions Lists (SDN and non-SDN)",
      "listUpdated": "2026-10-10",
      "weCheckedOn": "2026-10-10"
    },
    {
      "list": "us_el",
      "name": "US Entity List (BIS)",
      "listUpdated": "2026-08-21",
      "weCheckedOn": "2026-10-10"
    },
    {
      "list": "us_dpl",
      "name": "US Denied Persons List (BIS)",
      "listUpdated": "2026-04-28",
      "weCheckedOn": "2026-10-10"
    },
    {
      "list": "us_dtc",
      "name": "US ITAR Debarred List (State Department)",
      "listUpdated": "2026-07-24",
      "weCheckedOn": "2026-10-10"
    },
    {
      "list": "us_uvl",
      "name": "US Unverified List (BIS)",
      "listUpdated": "2026-02-10",
      "weCheckedOn": "2026-10-10"
    },
    {
      "list": "us_isn",
      "name": "US Nonproliferation Sanctions (State Department)",
      "listUpdated": "2026-10-02",
      "weCheckedOn": "2026-10-10"
    },
    {
      "list": "us_meu",
      "name": "US Military End User List (BIS)",
      "listUpdated": "2026-02-20",
      "weCheckedOn": "2026-10-10"
    }
  ],
  "listsNotScreened": [],
  "notice": "This is a screening record, not a licensing decision. Whether you need a licence depends on the goods, the destination and the end use."
}
Example response: No match, with one list not loaded at the last refresh
{
  "checkId": "chk_7d0e2f61-0a7b-4c55-9e0f-3b2b8a7c1e44",
  "screenedAt": "2026-10-10T09:14:02.118Z",
  "query": "Harbour Freight Ltd",
  "result": "no_match",
  "count": 0,
  "matches": [],
  "screenedWith": {
    "type": "entity",
    "minScore": 0.7
  },
  "listsScreened": [
    {
      "list": "ofsi",
      "name": "UK Sanctions List (FCDO)",
      "listUpdated": "2026-10-10",
      "weCheckedOn": "2026-10-10"
    },
    {
      "list": "us_el",
      "name": "US Entity List (BIS)",
      "listUpdated": "2026-08-21",
      "weCheckedOn": "2026-10-10"
    }
  ],
  "listsNotScreened": [
    {
      "list": "us_meu",
      "name": "US Military End User List (BIS)",
      "why": "Could not be loaded at our last refresh, so this check did not cover it."
    }
  ],
  "notice": "This is a screening record, not a licensing decision. Whether you need a licence depends on the goods, the destination and the end use."
}
Errors
  • 400Invalid input. code says which: missing_name, invalid_name, invalid_type, invalid_country, invalid_reference, unsupported_field, invalid_json, missing_names, too_many_names, per_name_field. In /bulk the message names the item, for example names[3].country .... A country we can't read is always refused, never silently ignored. dateOfBirth, nationality and pepAndAdverseMedia belong to the Sanctions Screening API and are refused here (unsupported_field).
  • 401Missing, invalid or revoked API key (missing_key, invalid_key, revoked_key)
  • 403The key belongs to a different Stratum API (wrong_api; a Sanctions Screening key does not work here), the account has no Export Controls Screening plan (no_plan), or the call came through RapidAPI, where this API is not listed (not_on_rapidapi)
  • 429This month's limit is reached (monthly_limit_reached, at twice your plan's allowance) or the free trial's allowance is used (trial_limit_reached). Nothing was screened or counted. Treat the names as not screened. Screening resumes on the 1st of next month, on upgrading, or when we raise your limit.
  • 500The screen did not complete. Treat the name as not yet screened and retry with backoff; do not treat it as clear.
  • 503The export-control lists are not available right now (export_lists_unavailable), or the service timed out. Nothing was screened or charged: a screen is never answered from the sanctions lists alone. Treat the name as not yet screened and retry with backoff; do not treat it as clear.
posthttps://api.stratumapis.com/v1/export-screening/bulk

Screen up to 100 names in one request (one check per name)

Each name can be a plain string, or an object with its own country, type, minScore and reference. Top-level type and minScore are defaults for names that don't set their own; country goes on each name. If the request would take you past your monthly limit it is refused whole (429), with how many checks remain. A request answers within about 20 seconds: if names are left when time runs out, the response has incomplete: true and lists them in notScreened; send those again. Only screened names are charged.

Example request
curl -X POST -H "X-Stratum-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{"names":[{"name":"Harbour Freight Ltd","country":"GB","type":"organisation","reference":"consignee-18"},{"name":"Niki Kyriakou","country":"CY","reference":"end-user-18"}]}' \
  "https://api.stratumapis.com/v1/export-screening/bulk"
Errors
  • 400Invalid input. code says which: missing_name, invalid_name, invalid_type, invalid_country, invalid_reference, unsupported_field, invalid_json, missing_names, too_many_names, per_name_field. In /bulk the message names the item, for example names[3].country .... A country we can't read is always refused, never silently ignored. dateOfBirth, nationality and pepAndAdverseMedia belong to the Sanctions Screening API and are refused here (unsupported_field).
  • 401Missing, invalid or revoked API key (missing_key, invalid_key, revoked_key)
  • 403The key belongs to a different Stratum API (wrong_api; a Sanctions Screening key does not work here), the account has no Export Controls Screening plan (no_plan), or the call came through RapidAPI, where this API is not listed (not_on_rapidapi)
  • 429This month's limit is reached (monthly_limit_reached, at twice your plan's allowance) or the free trial's allowance is used (trial_limit_reached). Nothing was screened or counted. Treat the names as not screened. Screening resumes on the 1st of next month, on upgrading, or when we raise your limit.
  • 500The screen did not complete. Treat the name as not yet screened and retry with backoff; do not treat it as clear.
  • 503The export-control lists are not available right now (export_lists_unavailable), or the service timed out. Nothing was screened or charged: a screen is never answered from the sanctions lists alone. Treat the name as not yet screened and retry with backoff; do not treat it as clear.
gethttps://api.stratumapis.com/v1/export-screening/lists

The ten lists, their size and both dates (free)

Example request
curl -H "X-Stratum-Key: $KEY" \
  "https://api.stratumapis.com/v1/export-screening/lists"
Example response
{
  "lists": [
    {
      "list": "us_el",
      "name": "US Entity List (BIS)",
      "url": "https://www.bis.gov/regulations/ear/744#supplement-4-744",
      "entryCount": 3419,
      "listUpdated": "2026-08-21",
      "weCheckedOn": "2026-10-10"
    }
  ],
  "listsNotLoaded": [],
  "exportFileDate": "2026-10-09T23:15:00.025206+00:00"
}
Errors
  • 503The export-control lists are not available right now (export_lists_unavailable), or the service timed out. Nothing was screened or charged: a screen is never answered from the sanctions lists alone. Treat the name as not yet screened and retry with backoff; do not treat it as clear.
gethttps://api.stratumapis.com/v1/export-screening/changes

Each day's additions, removals and amended listings on the six US export lists (free)

What changed on each US export-control list, day by day, from the daily 04:00 UTC refresh. A listing whose reference changed but which is otherwise the same counts once, as amended; a step too large to be one day of listings (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.

Parameters
  • daysin queryHow many days back from the last refresh
  • listin queryComma-separated list slugs (us_el, us_dpl, us_dtc, us_uvl, us_isn, us_meu); every list when left out
Example request
curl -H "X-Stratum-Key: $KEY" \
  "https://api.stratumapis.com/v1/export-screening/changes?list=us_el%2Cus_meu"
Errors
  • 400Bad days or list value (invalid_days, invalid_list)
  • 503The change history starts with the next daily refresh (changes_not_ready)
gethttps://api.stratumapis.com/v1/export-screening/ownership/{companyNumber}

Screen a UK company and everyone recorded in its ownership at Companies House (one check)

Screens the company by its registered name, then every owner and controller recorded at Companies House (people, UK companies, and foreign companies by name, walking up through UK holding companies up to five levels) against the same ten lists, and reads the result against the US rule that extends Entity List and Military End User List restrictions to companies those parties own 50% or more of, directly or indirectly, individually or together. Companies House records holdings as bands, not exact figures, so the result says what the bands allow. More than 75% of the shares, or more than 50% but not more than 75%, is read as owning 50% or more. More than 25% but not more than 50% could be exactly 50%, so it is a possible 50% owner, never a certain one. Voting rights, the right to appoint directors or significant influence, with no share band, means the holder controls the company but owns 25% of the shares or less. Ownership is followed as a chain: a company 50% or more owned by a listed party is itself covered, and so is a company it owns 50% or more of. ownership.level is one of listed_owner_50_percent, listed_owners_may_reach_50_percent, listed_party_in_ownership (any list, any holding, including control) or nothing_found. The 50% levels need a strong name match (0.85 or more); weaker possible matches are still listed per owner. Every match is a possible match by name, to be checked. This covers ownership recorded at Companies House only: owners above a foreign company are not recorded there, and ownership.limits names each place the check could not see past. It is not a determination under the US rule. Counts as one check, only when the ownership was read: an unknown company (404) or a Companies House failure (503) is not charged and never reads as "nothing found".

Parameters
  • companyNumberrequiredin pathAs Companies House shows it, for example 01234567 or SC123456. A shorter all-digit number is padded with leading zeros.
Example request
curl -H "X-Stratum-Key: $KEY" \
  "https://api.stratumapis.com/v1/export-screening/ownership/08991238"
Example response
{
  "checkId": "chk_5b3c0c7e-2f61-4c1e-9a54-0d2f8a6b1e90",
  "screenedAt": "2026-10-10T21:03:48.402Z",
  "companyNumber": "08991238",
  "query": "HIKVISION UK LIMITED",
  "result": "possible_match",
  "count": 0,
  "matches": [],
  "screenedWith": {
    "type": "entity",
    "minScore": 0.7
  },
  "listsScreened": [
    {
      "list": "us_el",
      "name": "US Entity List (BIS)",
      "listUpdated": "2026-08-21",
      "weCheckedOn": "2026-10-10"
    }
  ],
  "listsNotScreened": [],
  "ownership": {
    "level": "listed_party_in_ownership",
    "message": "Hangzhou Hikvision Digital Technology Corporation Limited, recorded as controlling this company, is a possible match for a party on the US OFAC Sanctions Lists (SDN and non-SDN) and the US Entity List (BIS). Check the match.",
    "owners": [
      {
        "name": "Coöperatief Hikvision Europe U.A.",
        "kind": "corporate",
        "companyNumber": null,
        "through": [],
        "band": "fifty_plus",
        "reach": "fifty_plus",
        "holding": "owns 50% or more",
        "matches": []
      },
      {
        "name": "Hangzhou Hikvision Digital Technology Corporation Limited",
        "kind": "corporate",
        "companyNumber": null,
        "through": [],
        "band": "control",
        "reach": "control",
        "holding": "controls the company (no shareholding over 25% recorded)",
        "matches": [
          {
            "list": "ofac",
            "listLabel": "US OFAC Sanctions Lists (SDN and non-SDN)",
            "name": "HANGZHOU HIKVISION DIGITAL TECHNOLOGY CO.",
            "LTD.": null,
            "score": 1
          },
          {
            "list": "us_el",
            "listLabel": "US Entity List (BIS)",
            "name": "Hangzhou Hikvision Digital Technology Co.",
            "Ltd.": null,
            "score": 1
          }
        ]
      }
    ],
    "limits": [
      "Coöperatief Hikvision Europe U.A. (registered in Netherlands): its own owners are not recorded at Companies House.",
      "Hangzhou Hikvision Digital Technology Corporation Limited (registered in Zhejiang, China): its own owners are not recorded at Companies House."
    ],
    "companiesHouseNote": "This covers ownership recorded at Companies House only. Owners above a foreign company are not recorded there.",
    "ownershipReadAt": "2026-10-10T21:03:47.143Z"
  },
  "notice": "This is a screening record, not a licensing decision. Whether you need a licence depends on the goods, the destination and the end use."
}
Errors
  • 400Not a UK company number (invalid_company_number)
  • 401Missing, invalid or revoked API key (missing_key, invalid_key, revoked_key)
  • 403The key belongs to a different Stratum API (wrong_api; a Sanctions Screening key does not work here), the account has no Export Controls Screening plan (no_plan), or the call came through RapidAPI, where this API is not listed (not_on_rapidapi)
  • 404Companies House has no company with that number (company_not_found). Not charged.
  • 429This month's limit is reached (monthly_limit_reached, at twice your plan's allowance) or the free trial's allowance is used (trial_limit_reached). Nothing was screened or counted. Treat the names as not screened. Screening resumes on the 1st of next month, on upgrading, or when we raise your limit.
  • 503The ownership could not be read from Companies House (ownership_not_checked), or the export lists are unavailable (export_lists_unavailable). Nothing was checked or charged; treat the company as not yet checked, never as clear.
posthttps://api.stratumapis.com/v1/export-screening/monitored

Add a buyer, consignee or supplier to your export watchlist (free)

Watchlist entries are re-screened against the ten lists every day at 05:00 UTC. A listing that newly matches appears in GET /monitored/changes with its details, and we email an alert. This watchlist is separate from a Sanctions Screening watchlist: each lists, counts and alerts only its own entries. Watchlist size: Starter 250, Growth 1,000, Pro 5,000.

Example request
curl -X POST -H "X-Stratum-Key: $KEY" \
  "https://api.stratumapis.com/v1/export-screening/monitored"
Request body
{
  "type": "object",
  "required": [
    "entityName",
    "entityType"
  ],
  "properties": {
    "entityName": {
      "type": "string",
      "maxLength": 200
    },
    "entityType": {
      "type": "string",
      "enum": [
        "individual",
        "company"
      ]
    },
    "country": {
      "type": "string",
      "example": "GB",
      "description": "The party's country as a two-letter ISO 3166 code. Optional; reported against the export lists' addresses."
    },
    "customerEmail": {
      "type": "string",
      "description": "Where alerts for this entry go. Defaults to the email you subscribed with."
    }
  }
}
Errors
  • 400Invalid body. Returns { "error": "<code>", "message": "..." }. dateOfBirth, nationality and rescreenCadence belong to the Sanctions Screening watchlist and are refused here (unsupported_field).
  • 409Watchlist full (tier_cap_reached)
gethttps://api.stratumapis.com/v1/export-screening/monitored

List your export watchlist with each entry's latest result (free)

Example request
curl -H "X-Stratum-Key: $KEY" \
  "https://api.stratumapis.com/v1/export-screening/monitored"
gethttps://api.stratumapis.com/v1/export-screening/monitored/changes

New matches on your export watchlist in the last N days (free)

Poll after 05:00 UTC. The first screen of a new entry lists every match as new (kind first-screen).

Parameters
  • daysin query
Example request
curl -H "X-Stratum-Key: $KEY" \
  "https://api.stratumapis.com/v1/export-screening/monitored/changes"
deletehttps://api.stratumapis.com/v1/export-screening/monitored/{entityId}

Remove an entry from your export watchlist (idempotent)

Parameters
  • entityIdrequiredin path
Example request
curl -X DELETE -H "X-Stratum-Key: $KEY" \
  "https://api.stratumapis.com/v1/export-screening/monitored/:entityId"