OpenSanctions
OpenSanctions — Data on international sanctions, crime and politically …
OpenSanctions exposes data on international sanctions, crime and politically exposed persons We verified a keyless GET endpoint returning JSON (Open Data). Check the provider docs for rate limits and terms before production use.
We probe a documented GET and expect 2xx JSON — full uptime and health score. Open provider docs ↗
On our probe schedule. Uptime charts appear after the first check lands.
GET https://api.opensanctions.org/openapi.json
{
"openapi": "3.1.0",
"info": {
"title": "OpenSanctions API",
"description": "\n## Introduction\n\nThe [OpenSanctions](https://www.opensanctions.org) API allows users to search and query\nthe OpenSanctions [entity graph](https://www.opensanctions.org/docs/entities/). The API\ncan be used to search people, companies and [other types of entities](https://www.opensanctions.org/reference/#schema).\nIn particular, it can be used to check the presence of a specific entity on [sanctions\nlists](https://www.opensanctions.org/datasets/sanctions/) or in the broader\n[OpenSanctions dataset](https://www.opensanctions.org/datasets/).\n\nSee also:\n* [Example code in Python, JS, and more](https://github.com/opensanctions/api-examples#folders-and-files)\n* [OpenSanctions API product page](https://www.opensanctions.org/docs/api/)\n* [Account and usage information](https://www.opensanctions.org/service/account/)\n* [API frequently asked questions](https://www.opensanctions.org/docs/api/faq/)\n\n### Which endpoint should I use?\n\nThe API supports a variety of methods to access and query OpenSanctions data:\n\n* **Entity matching ([/match](#tag/Matching/operation/match_match__dataset__post))**. Use this\n endpoint if you have a set of people or companies you wish to check against\n sanctions or PEPs lists. This API supports fuzzy name matching and using additional\n criteria (e.g. nationality, birth dates, tax identifiers, or addresses) to [score\n entity matches](https://www.opensanctions.org/matcher/) and avoid false positives.\n\n [Read the tutorial](https://www.opensanctions.org/docs/api/matching/) for an introduction in how to use the matching API. You will also want to familiarise yourself with the [entity data model](https://www.opensanctions.org/docs/entities/) used by the system and the [data dictionary](https://www.opensanctions.org/reference/) entity\n types and properties.\n\n* **Text-based search ([/search](#tag/Matching/operation/search_search__dataset__get))**\n is a useful tool for providing a user-facing search interface, including faceted\n navigation. The search uses [industry standard string syntax](https://www.opensanctions.org/docs/api/search/)\n which can be used to perform field-specific searches, wildcard and fuzzy searches. The\n scores and ranking are generated by the search index and express search relevance, not\n match quality.\n\n* **Entity fetching ([/entities](#tag/Data-access/operation/fetch_entity_entities__entity_id__get))**.\n Retrieve the full details about an entity in the database. The full record will include\n adjacent entities, such as company owners and subsidiaries, family members and associates\n for PEPs, and detailed records for addresses and identification documents linked to\n entities. This endpoint can be used to perform incremental traversal of the OpenSanctions\n graph.\n\n Read about the [entity data model](https://www.opensanctions.org/docs/entities/) and\n consult the [data dictionary](https://www.opensanctions.org/reference/) to see all entity\n types and their respective properties.\n\n* **Statement-based data access ([/statements](#tag/Data-access/operation/statements_statements_get))**\n allows browsing OpenSanctions data in its most granular form. This can be useful to see\n what source dataset a particular assertion (e.g. the birth date of a person) is sourced\n from. Read about the [statement data model](https://www.opensanctions.org/docs/statements/).\n\n* **OpenRefine Reconciliation API ([/reconcile](#tag/Reconciliation))**. A specialised API\n that lets OpenSanctions data be used by the [OpenRefine](https://openrefine.org/) data\n cleaning tool. Read [the tutorial](https://www.opensanctions.org/articles/2022-01-10-openrefine-reconciliation/)\n to understand how this can be used as an investigative tool.\n\n## Authorization and API keys\n\nTo use the OpenSanctions API, you need an API key. Please visit the [API product page](https://www.opensanctions.org/api/) or [contact us](https://www.opensanctions.org/contact/) to learn more. OpenSanctions will issue free API keys to users in academia, non-profit organizations and those working in for-profit journalism.\n\n* [Using API authentication](https://www.opensanctions.org/docs/api/authentication/)\n\n## Dataset scopes\n\nThe API provides a sophisticated mechanism for selecting the scope of the data\nthat sould be queried by a particular request - for example, you can run a name\nagainst all sanctions lists, but not the datasets listing PEPs.\n\nDatasets can be of two types: source datasets - e.g. `us_ofac_sdn` (the US main\nsanctions list) contain only entities from one source. These source datasets are\ngrouped into collections - e.g. [`sanctions`](https://www.opensanctions.org/datasets/sanctions/),\nwhich contains entities from all sanctions lists contained in the database, or\n[`peps`](https://www.opensanctions.org/datasets/peps/), which covers all politically\nexposed persons sourced from various origins. If you are unsure which dataset you\nwant to screen against, use [`default`](https://www.opensanctions.org/datasets/default/) (the full\nOpenSanctions dataset).\n\nThese dataset scopes can be applied to searches and mapping requests by selecting\nthe desired scope in the URL path of the query: `/search/sanctions` will search\nall sanctioned entities, while `/search/us_ofac_sdn` limits the search to only\nthose entities listed on the US list.\n\nPlease note that each indivdual entity (e.g. a sanctioned person) can be linked to\nmultiple datasets because it has been [de-duplicated](https://www.opensanctions.org/docs/identifiers/).\n\n* See also: [List of datasets in OpenSanctions](https://www.opensanctions.org/datasets/)",
"termsOfService": "https://www.opensanctions.org/docs/terms",
"contact": {
"name": "OpenSanctions",
"url": "https://www.opensanctions.org/",
"email": "info@opensanctions.org"
},
"version": "yente 5.5.0",
"x-logo": {
"url": "https://assets.opensanctions.org/images/ura/logo_text_spaced.svg"
},
"externalDocs": {
"description": "Home page",
"url": "https://www.opensanctions.org"
}
},
"paths": {
"/match/{dataset}": {
"post": {
"tags": [
"Matching"
],
"summary": "Query by example matcher",
"description": "Match entities based on a complex set of criteria, like name, date of birth\nand nationality of a person. This works by submitting a batch of entities, each\nformatted like those returned by the API.\n\nTutorials:\n* [Using the matching API](https://www.opensanctions.org/docs/api/matching/)\n* [Configuring the scoring system](https://www.opensanctions.org/docs/api/scoring/)\n\nFor example, the following would be valid query examples:\n\n```json\n\"queries\": {\n \"entity1\": {\n \"schema\": \"Person\",\n \"properties\": {\n \"name\": [\"John Doe\"],\n \"birthDate\": [\"1975-04-21\"],\n \"nationality\": [\"us\"]\n }\n },\n \"entity2\": {\n \"schema\": \"Company\",\n \"properties\": {\n \"name\": [\"Brilliant Amazing Limited\"],\n \"jurisdiction\": [\"hk\"],\n \"registrationNumber\": [\"84BA99810\"]\n }\n }\n}\n```\nThe values for `entity1`, `entity2` can be chosen freely to correlate results\non the client side when the request is returned. The responses will be given\nfor each submitted example like this:\n\n```json\n\"responses\": {\n \"entity1\": {\n \"query\": {},\n \"results\": [...]\n },\n \"entity2\": {\n \"query\": {},\n \"results\": [...]\n }\n}\n```\n\nThe precision of the results will be dependent on the amount of detail submitted\nwith each example. The following properties are most helpful for particular types:\n\n* **Person**: ``name``, ``birthDate``, ``nationality``, ``idNumber``, ``address``\n* **Organization**: ``name``, ``country``, ``registrationNumber``, ``address``\n* **Company**: ``name``, ``jurisdiction``, ``registrationNumber``, ``address``,\n ``incorporationDate``",
"operationId": "match_match__dataset__post",
"parameters": [
{
"name": "dataset",
"in": "path",
"required": true,
"schema": {
"type": "string",
"description": "Data source or collection name to scope the query to.",
"examples": [
"default"
],
"title": "Dataset"
},
"description": "Data source or collection name to scope the query to."
},
{
"name": "limit",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"maximum": 500,
"title": "Number of results to return",
"default": 5
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/EntityMatchQuery"
}
}
}
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/EntityMatchResponse"
}
}
}
},
"400": {
"description": "Invalid query",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
},
"500": {
"description": "Server error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/search/{dataset}": {
"get": {
"tags": [
"Matching"
],
"summary": "Simple entity search",
"description": "Search endpoint for matching entities based on a simple piece of text, e.g.\na name. This can be used to implement a simple, user-facing search. For proper\nentity matching, the multi-property matching API should be used instead.\n\nSearch queries can include field-specific fitlers, wildcards and fuzzy searches.\nSee also: [search API documentation](https://www.opensanctions.org/docs/api/search/).",
"operationId": "search_search__dataset__get",
"parameters": [
{
"name": "dataset",
"in": "path",
"required": true,
"schema": {
"type": "string",
"description": "Data source or collection name to scope the query to.",
"examples": [
"default"
],
"title": "Dataset"
},
"description": "Data source or collection name to scope the query to."
},
{
"name": "q",
"in": "query",
"required": false,
"schema": {
"type": "string",
"title": "Query text",
"default": ""
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SearchResponse"
}
}
}
},
"400": {
"description": "Invalid query",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
},
"500": {
"description": "Server error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/entities/{entity_id}": {
"get": {
"tags": [
"Data access"
],
"summary": "Fetch Entity",
"description": "Retrieve a single entity by its ID. The entity will be returned in\nfull, with data from all datasets and with nested entities (adjacent\npassport, sanction and associated entities) included. If the entity ID\nhas been merged into a different canonical entity, an HTTP redirect will\nbe triggered.\n\nIntro: [entity data model](https://www.opensanctions.org/docs/entities/).",
"operationId": "fetch_entity_entities__entity_id__get",
"parameters": [
{
"name": "entity_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"description": "ID of the entity to retrieve",
"examples": [
"Q7747"
],
"title": "Entity Id"
},
"description": "ID of the entity to retrieve"
},
{
"name": "nested",
"in": "query",
"required": false,
"schema": {
"type": "boolean",
"title": "Include adjacent entities (e.g. addresses, family) in response",
"default": true
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/EntityResponse"
}
}
}
},
"308": {
"description": "The entity was merged into another ID"
},
"404": {
"description": "Entity not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
},
"500": {
"description": "Server error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/entities/{entity_id}/adjacent": {
"get": {
"tags": [
"Data access"
],
"summary": "Fetch Adjacent Entities*",
"description": "***Beta:** This endpoint is released for wider testing and is not yet recommended\nfor production use. We welcome feedback. Its interface may change without announcement.\n\nRetrieve entities adjacent to a given entity e.g. passports, sanctions, associates.\n\nThis endpoint offers the same information as adjacent entities nested in\n[`/entities/{entity_id}`](#tag/Data-access/operation/fetch_entity_entities__entity_id__get),\nbut offers pagination for cases where the number of results is potentially very large.",
"operationId": "Fetch_Adjacent_Entities__entities__entity_id__adjacent_get",
"parameters": [
{
"name": "entity_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"description": "ID of the entity whose graph context was requested",
"examples": [
"Q7747"
],
"title": "Entity Id"
},
"description": "ID of the entity whose graph context was requested"
},
{
"name": "sort",
"in": "query",
"required": false,
"schema": {
"type": "array",
"items": {
"type": "string"
},
"title": "Sorting criteria",
"default": []
}
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/EntityAdjacentResponse"
}
}
}
},
"308": {
"description": "The entity was merged into another ID"
},
"404": {
"description": "Entity not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
},
"500": {
"description": "Server error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/entities/{entity_id}/adjacent/{property_name}": {
"get": {
"tags": [
"Data access"
],
"summary": "Fetch Adjacent By Property*",
"description": "***Beta:** This endpoint is released for wider testing and is not yet recommended\nfor production use. We welcome feedback. Its interface may change without announcement.\n\nRetrieve entities adjacent to a given entity for a specific property.\n\nThis endpoint offers the same information as adjacent entities nested in\n[`/entities/{entity_id}`](#tag/Data-access/operation/fetch_entity_entities__entity_id__get),\nbut offers pagination for cases where the number of results is potentially very large.",
"operationId": "Fetch_Adjacent_by_Property__entities__entity_id__adjacent__property_name__get",
"parameters": [
{
"name": "entity_id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"description": "ID of the entity hose graph context was requested",
"examples": [
"Q7747"
],
"title": "Entity Id"
},
"description": "ID of the entity hose graph context was requested"
},
{
"name": "property_name",
"in": "path",
"required": true,
"schema": {
"type": "string",
"description": "Name of the property to fetch adjacent entities for",
"examples": [
"address",
"ownershipOwner"
],
"title": "Property Name"
},
"description": "Name of the property to fetch adjacent entities for"
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AdjacentResultsResponse"
}
}
}
},
"308": {
"description": "The entity was merged into another ID"
},
"404": {
"description": "Entity or property not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
},
"500": {
"description": "Server error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/reconcile/{dataset}": {
"get": {
"tags": [
"Reconciliation"
],
"summary": "Reconciliation manifest",
"description": "Reconciliation API, emulates Google Refine API. This endpoint can be used\nto bulk match entities against the system using an end-user application like\n[OpenRefine](https://openrefine.org). The reconciliation API uses the same\nsearch and matching functions as the matching API and will also produce\nscores that reflect additional properties like country or date of birth, if\nspecified.\n\nTutorial: [Using OpenRefine to match entities in a spreadsheet](https://www.opensanctions.org/articles/2022-01-10-openrefine-reconciliation/).",
"operationId": "reconcile_reconcile__dataset__get",
"parameters": [
{
"name": "dataset",
"in": "path",
"required": true,
"schema": {
"type": "string",
"description": "Data source or collection name to scope the query to.",
"examples": [
"default"
],
"title": "Dataset"
},
"description": "Data source or collection name to scope the query to."
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/FreebaseManifest"
}
}
}
},
"400": {
"description": "Invalid query",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
},
"500": {
"description": "Server error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/healthz": {
"get": {
"tags": [
"System information"
],
"summary": "Health check",
"description": "No-op basic health check. This is used by cluster management systems like\nKubernetes to verify the service is responsive.",
"operationId": "healthz_healthz_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StatusResponse"
}
}
}
},
"500": {
"description": "Service is not ready",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/readyz": {
"get": {
"tags": [
"System information"
],
"summary": "Search index readiness check",
"description": "Search index health check. This is used to know if the service has completed\nits index building.",
"operationId": "readyz_readyz_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StatusResponse"
}
}
}
},
"503": {
"description": "Index is not ready",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"AdjacentResultsResponse": {
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"examples": [
20
]
},
"offset": {
"type": "integer",
"title": "Offset",
"default": 0,
"examples": [
0
]
},
"total": {
"$ref": "#/components/schemas/TotalSpec"
},
"results": {
"items": {
"anyOf": [
{
"type": "string"
},
{
"$ref": "#/components/schemas/EntityResponse"
}
]
},
"type": "array",
"title": "Results",
"default": [],
"examples": [
[
{
"id": "ds-abc-own-123",
"properties": {
"asset": [
{
"caption": "Company 1 Ltd.",
"id": "NK-1234",
"properties": {
"name": [
"Company 1 Ltd."
]
},
"schema": "Comany"
}
]
},
"schema": "Ownership"
}
]
]
}
},
"type": "object",
"required": [
"limit",
"total"
],
"title": "AdjacentResultsResponse"
},
"Algorithm": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"features": {
"additionalProperties": {
"$ref": "#/components/schemas/FeatureDoc"
},
"type": "object",
"title": "Features",
"description": "Deprecated, use `docs` instead",
"deprecated": true
},
"docs": {
"$ref": "#/components/schemas/AlgorithmDocs"
}
},
"type": "object",
"required": [
"name",
"features"
],
"title": "Algorithm"
},
"AlgorithmDocs": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"config": {
"additionalProperties": {
"$ref": "#/components/schemas/ConfigVar"
},
"type": "object",
"title": "Config"
},
"features": {
"additionalProperties": {
"$ref": "#/components/schemas/FeatureDoc"
},
"type": "object",
"title": "Features"
}
},
"type": "object",
"required": [
"name",
"config"
],
"title": "AlgorithmDocs",
"description": "Documentation for a scoring algorithm."
},
"AlgorithmResponse": {
"properties": {
"algorithms": {
"items": {
"$ref": "#/components/schemas/Algorithm"
},
"type": "array",
"title": "Algorithms"
},
"default": {
"type": "string",
"title": "Default"
},
"best": {
"type": "string",
"title": "Best"
}
},
"type": "object",
"required": [
"algorithms",
"default"
],
"title": "AlgorithmResponse"
},
"ConfigVar": {
"properties": {
"type": {
"$ref": "#/components/schemas/ConfigVarType",
"default": "float"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"default": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
],
"title": "Default",
"default": 0
}
},
"type": "object",
"title": "ConfigVar",
"description": "A configuration variable for a scoring algorithm."
},
"ConfigVarType": {
"type": "string",
"enum": [
"string",
"integer"
],
"title": "ConfigVarType",
"description": "The type of a configuration variable."
},
"DataCatalogModel": {
"properties": {
"datasets": {
"items": {
"$ref": "#/components/schemas/YenteDatasetModel"
},
"type": "array",
"title": "Datasets"
},
"current": {
"items": {
"type": "string"
},
"type": "array",
"title": "Current"
},
"outdated": {
"items": {
"type": "string"
},
"type": "array",
"title": "Outdated"
},
"index_stale": {
"type": "boolean",
"title": "Index Stale",
"default": false
}
},
"type": "object",
"required": [
"datasets",
"current"
],
"title": "DataCatalogModel"
},
"DataCoverage": {
"properties": {
"start": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Start"
},
"end": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "End"
},
"countries": {
"items": {
"type": "string"
},
"type": "array",
"title": "Countries",
"default": []
},
"frequency": {
"type": "string",
"enum": [
"unknown",
"never"
],
"title": "Frequency",
"default": "unknown"
},
"schedule": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Schedule"
}
},
"type": "object",
"title": "DataCoverage",
"description": "Details on the temporal and geographic scope of a dataset."
}
}
},
"tags": [
{
"name": "Matching",
"description": "Endpoints for conducting a user-facing entity search or matching a local data store against the given dataset.",
"externalDocs": {
"description": "Data dictionary",
"url": "https://opensanctions.org/reference/"
}
},
{
"name": "System information",
"description": "Service metadata endpoints for health checking and getting the application metadata to be used in client applications."
}
]
}curl "https://api.opensanctions.org/openapi.json"const res = await fetch("https://api.opensanctions.org/openapi.json");
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.opensanctions.org/openapi.json")
print(res.json())/openapi.jsonPROBEDOpenSanctions — Data on international sanctions, crime and politically …
/openapi.json?limit=5Paginated variant with limit parameter.
/search/{dataset}Simple entity search
/entities/{entity_id}Fetch Entity
/entities/{entity_id}/adjacentFetch Adjacent Entities*
/entities/{entity_id}/adjacent/{property_name}Fetch Adjacent By Property*
We probe a documented GET and expect 2xx JSON — full uptime and health score. Export includes every documented route below.
Not tracked yet. Shape-change history starts once this API joins our probe schedule.
OpenSanctions: common questions
Is OpenSanctions free to use?
Yes — OpenSanctions is a free open data API. Free tier: Free — limits not published. Whether the free tier allows commercial use is unclear — check the provider docs.
Does OpenSanctions need an API key?
No — OpenSanctions needs no API key or signup. You can call it straight away; rate limits still apply (Unpublished).
Can I call OpenSanctions from the browser?
Yes — OpenSanctions returns CORS headers over HTTPS, so front-end code can fetch it directly with no backend proxy. Use the fetch snippet on this page, or hit "Run live" to try it now.
Is OpenSanctions up right now?
OpenSanctions is catalogued but not yet on our probe schedule, so we don't publish a live status for it. Check the provider's own status page or docs for its current state.