← APIs / OpenSanctions
Verified

OpenSanctions

Apiosk Basicsby Apiosk Basics · General

Sanctions, PEP and watchlist screening for people and companies. Check whether a person or a company is sanctioned (OFAC SDN, EU, UK OFSI, UN and hundreds of other lists), is a politically exposed person (PEP) or a close associate of one, appears on a debarment, wanted or crime-linked list, or is a known owner or officer of an entity that is. Screen a name with fuzzy matching and scored results, search the entity graph as text, pull one entity with its ownership, directorship and family links, or read the underlying source statements. Built on the OpenSanctions consolidated dataset, rebuilt continuously from 478 source datasets.

dataapi
Price per request
$0.05
About

OpenSanctions consolidates the world's sanctions lists, politically-exposed-person registers, debarment and law-enforcement lists into one de-duplicated entity graph, and this is its hosted query API (yente 5.5.0). `/match` is the screening endpoint: post one or more example entities — a name plus any of nationality, birth date, tax or registration number, address — and get scored candidates back with per-feature explanations, so an AML or KYC/KYB onboarding check can be run against a real false-positive threshold instead of a naive name compare. `/search` reaches the same index with free text plus country, topic and property filters, and returns faceted counts, which is what a user-facing search box or an exploratory agent wants. `/entities` fetches one entity in full by the id those two return, and — through the same path — its graph context: `/entities/{id}/adjacent` for every linked entity grouped by property, or `/entities/{id}/adjacent/ownershipOwner` for one relationship at a time, which is how ownership and control chains are walked for UBO work. `/statements` is the provenance layer: one row per assertion, saying which source dataset claims which property value for which entity, with first- and last-seen dates. `/catalog` lists the 478 datasets and the collections (default, sanctions, peps, debarment, crime) that scope every other call, and `/algorithms` lists the six scoring algorithms `/match` accepts. `/reconcile` is the OpenRefine reconciliation manifest, for screening a whole spreadsheet column. Apiosk holds the upstream subscription and meters per call, so an agent needs no OpenSanctions account of its own.

Base URL
https://gateway.apiosk.com/opensanctions
Technical Specs
Auth MethodapiKey
Response FormatJSON
Endpoints7
Endpoints
MethodPathDescriptionCost
GET /algorithms List the entity-matching scoring algorithms the /match endpoint accepts, each with the scoring features it uses, what each feature measures, its coefficient and a link to the implementation. Returns the six available algorithms (logic-v2, ofac, name-based, name-qualified, logic-v1, regression-v1), the one currently aliased as "best", and which alias is the default. Read this before tuning a screening threshold or reasoning about why a match scored as it did, so the threshold sent matches the algorithm actually scoring it — the score distributions differ sharply between a name-only matcher and a qualified one.
$0.05 default
View details
GET /catalog List the datasets and collections available as query scopes — the values that go in the path of /search/{dataset}, /match/{dataset} and /reconcile/{dataset}. Returns each dataset's name, title, summary and description, its publisher and their country, its tags, entity and thing counts, version and last update, and the collections that group it. 478 datasets as of 2026-09-06: collections such as default (everything), sanctions, peps, debarment and crime sit alongside single source lists such as us_ofac_sdn, eu_fsf and gb_hmt_sanctions. Call this first when you need to screen against a specific regime or regulator rather than the whole graph, or to check how fresh a particular list is before relying on it.
$0.05 default
View details
GET /entities Fetch one OpenSanctions entity — a sanctioned person, a designated company, a politically exposed person (PEP) — in full by its entity ID, as returned by /search or /match: every name and alias, topics (sanction, role.pep, crime, debarment), the source datasets that assert it, sanction programmes, identifiers, and by default the nested adjacent entities such as addresses, identification documents and family members. A caller building the request path directly can also append further segments for the entity's graph context at this same price: /adjacent returns every linked entity grouped by property, and /adjacent/<property_name> returns one relationship at a time — ownershipOwner and ownershipAsset for ownership chains and ultimate beneficial ownership, directorshipDirector and directorshipOrganization for officers, familyPerson and familyRelative for relatives and close associates, address for registered addresses. That is how a screening hit is turned into the network around it.
$0.08 default
View details
POST /match Screen a person or a company against sanctions lists, PEP registers and watchlists by example — the flagship OpenSanctions call and the right one for AML/KYC/KYB onboarding checks. Post one or more example entities (a name, plus any of birth date, nationality, country, address, tax or company registration number) and get back scored candidate matches with a per-feature explanation of why each scored as it did, so false positives can be tuned with a threshold instead of eyeballed. Answers "is this person sanctioned", "is this company on the OFAC SDN list", "is this director a politically exposed person", "is this counterparty debarred". Batch several names in one call by giving each its own key; every key comes back under the same name. Scope it by appending the dataset as a path segment: /match/default screens everything, /match/sanctions only sanctions lists, /match/peps only PEP registers, /match/us_ofac_sdn only that one list.
$0.11 default
View details
GET /reconcile Service manifest for the OpenRefine reconciliation API — the W3C reconciliation protocol description that lets OpenRefine, and any other reconciliation client, screen a whole spreadsheet or column of names against OpenSanctions. Returns the supported protocol versions, the identifier and schema spaces, the batch size, the default entity types and the preview/suggest/extend service URLs. Append the dataset scope as a path segment, e.g. /reconcile/sanctions to reconcile against sanctions lists only. This is the manifest, not the reconciliation query itself: point an OpenRefine reconciliation service at this URL and it will read this document to learn how to talk to the service.
$0.05 default
View details
GET /search Full-text search of the OpenSanctions entity graph: find sanctioned people and companies, politically exposed persons (PEPs), debarred suppliers, wanted persons and crime-linked entities by name or free text, with country, topic, dataset and property filters and faceted counts. Cheaper than /match because it ranks rather than scores and returns no per-match explanation — use it to explore, to power a user-facing search box, or when a human will read the hits; use /match when a screening decision needs a score and a threshold. Append the dataset scope as a path segment: /search/default searches everything, /search/sanctions only sanctions lists, /search/peps only PEP registers.
$0.10 default
View details
GET /statements Browse OpenSanctions data in its most granular, statement-based form: one row per assertion, saying which source dataset claims which property value for which entity, with the original value as published and the dates it was first and last seen. This is the provenance layer — use it when a compliance file has to record WHERE a fact came from (which sanctions list asserted this alias, which publisher gave this birth date), or to diff what changed between two screening runs. Scope every call: supply at least one of dataset, entity_id or canonical_id, because an unfiltered request returns an arbitrary alphabetical slice of a corpus in the hundreds of millions. Then narrow further by property, property type, value or schema.
$0.07 default
View details
Endpoint documentation
GET/algorithms
$0.05 default
Description

List the entity-matching scoring algorithms the /match endpoint accepts, each with the scoring features it uses, what each feature measures, its coefficient and a link to the implementation. Returns the six available algorithms (logic-v2, ofac, name-based, name-qualified, logic-v1, regression-v1), the one currently aliased as "best", and which alias is the default. Read this before tuning a screening threshold or reasoning about why a match scored as it did, so the threshold sent matches the algorithm actually scoring it — the score distributions differ sharply between a name-only matcher and a qualified one.

Pricing
$0.05 default
Parameters
{
  "additionalProperties": false,
  "description": "This endpoint takes no parameters.",
  "properties": {},
  "type": "object"
}
Example response
{
  "algorithms": [
    {
      "description": "A rule-based matching system that generates a set of basic scores via name and identifier-based matching, and then qualifies that score using supporting or contradicting features of the two entities. Its name matcher uses a versatile matching algorithm that uses cultural reference data for precise and explainable cross-language and cross-script matching.",
      "docs": {},
      "features": {
        "address_entity_match": {
          "coefficient": 0.98,
          "description": "Two address entities relate to similar addresses.",
          "url": "https://github.com/opensanctions/nomenklatura/blob/4.10.0/nomenklatura/matching/compare/addresses.py#L60"
        },
        "name_match": {
          "coefficient": 1.0,
          "description": "Match two entities by analyzing and comparing their names.",
          "url": "https://github.com/opensanctions/nomenklatura/blob/4.10.0/nomenklatura/matching/logic_v2/names/match.py#L169"
        }
      },
      "name": "logic-v2"
    }
  ],
  "best": "logic-v2",
  "default": "best"
}
GET/catalog
$0.05 default
Description

List the datasets and collections available as query scopes — the values that go in the path of /search/{dataset}, /match/{dataset} and /reconcile/{dataset}. Returns each dataset's name, title, summary and description, its publisher and their country, its tags, entity and thing counts, version and last update, and the collections that group it. 478 datasets as of 2026-09-06: collections such as default (everything), sanctions, peps, debarment and crime sit alongside single source lists such as us_ofac_sdn, eu_fsf and gb_hmt_sanctions. Call this first when you need to screen against a specific regime or regulator rather than the whole graph, or to check how fresh a particular list is before relying on it.

Pricing
$0.05 default
Parameters
{
  "additionalProperties": false,
  "description": "This endpoint takes no parameters.",
  "properties": {},
  "type": "object"
}
Example response
{
  "current": [
    "default"
  ],
  "datasets": [
    {
      "category": null,
      "entity_count": 72049,
      "last_export": "2026-09-06T12:18:04+00:00",
      "license": null,
      "name": "us_ofac_sdn",
      "publisher": {
        "acronym": "OFAC",
        "country": "us",
        "country_label": "United States",
        "name": "Office of Foreign Assets Control",
        "official": true,
        "url": "https://www.treasury.gov/"
      },
      "summary": "The primary United States' sanctions list, specially designated nationals (SDN) part.\n",
      "tags": [
        "list.sanction",
        "juris.us",
        "issuer.west",
        "sector.maritime"
      ],
      "thing_count": 38065,
      "title": "US OFAC Specially Designated Nationals (SDN) List",
      "updated_at": "2026-09-06T12:18:04+00:00",
      "url": "https://www.treasury.gov/resource-center/sanctions/Pages/default.aspx",
      "version": "20260906121804-ipg"
    }
  ],
  "index_stale": false,
  "outdated": []
}
GET/entities
$0.08 default
Description

Fetch one OpenSanctions entity — a sanctioned person, a designated company, a politically exposed person (PEP) — in full by its entity ID, as returned by /search or /match: every name and alias, topics (sanction, role.pep, crime, debarment), the source datasets that assert it, sanction programmes, identifiers, and by default the nested adjacent entities such as addresses, identification documents and family members. A caller building the request path directly can also append further segments for the entity's graph context at this same price: /adjacent returns every linked entity grouped by property, and /adjacent/<property_name> returns one relationship at a time — ownershipOwner and ownershipAsset for ownership chains and ultimate beneficial ownership, directorshipDirector and directorshipOrganization for officers, familyPerson and familyRelative for relatives and close associates, address for registered addresses. That is how a screening hit is turned into the network around it.

Pricing
$0.08 default
Parameters
{
  "properties": {
    "entity_id": {
      "description": "ID of the entity to retrieve, e.g. Q7747 or NK-A7z. Take it from the id field of a /search or /match result. Append /adjacent, or /adjacent/<property_name> such as ownershipOwner, directorshipDirector, familyPerson or address, for that entity's graph context at the same price.",
      "type": "string",
      "x-parameter-location": "path"
    },
    "limit": {
      "default": 10,
      "description": "Results per property, on the /adjacent forms only.",
      "maximum": 500,
      "type": "integer"
    },
    "nested": {
      "default": true,
      "description": "Include adjacent entities (addresses, identification documents, family) inline in the response. Applies to the plain entity fetch.",
      "type": "boolean"
    },
    "offset": {
      "default": 0,
      "description": "Start at this offset, on the /adjacent forms only.",
      "maximum": 9499,
      "type": "integer"
    },
    "sort": {
      "description": "Sorting criteria, on the /adjacent forms only.",
      "items": {
        "type": "string"
      },
      "type": "array"
    }
  },
  "required": [
    "entity_id"
  ],
  "type": "object"
}
Example response
{
  "caption": "Vladimir Putin",
  "datasets": [
    "us_ofac_sdn"
  ],
  "first_seen": "2026-01-01T12:00:00Z",
  "id": "Q7747",
  "last_change": "2026-01-01T12:00:00Z",
  "last_seen": "2026-01-01T12:00:00Z",
  "properties": {
    "birthDate": [
      "1952-10-07"
    ],
    "name": [
      "Vladimir Putin"
    ],
    "nationality": [
      "ru"
    ],
    "topics": [
      "role.pep",
      "sanction"
    ]
  },
  "referents": [
    "ofac-1234"
  ],
  "schema": "Person",
  "target": true
}
POST/match
$0.11 default
Description

Screen a person or a company against sanctions lists, PEP registers and watchlists by example — the flagship OpenSanctions call and the right one for AML/KYC/KYB onboarding checks. Post one or more example entities (a name, plus any of birth date, nationality, country, address, tax or company registration number) and get back scored candidate matches with a per-feature explanation of why each scored as it did, so false positives can be tuned with a threshold instead of eyeballed. Answers "is this person sanctioned", "is this company on the OFAC SDN list", "is this director a politically exposed person", "is this counterparty debarred". Batch several names in one call by giving each its own key; every key comes back under the same name. Scope it by appending the dataset as a path segment: /match/default screens everything, /match/sanctions only sanctions lists, /match/peps only PEP registers, /match/us_ofac_sdn only that one list.

Pricing
$0.11 default
Parameters
{
  "properties": {
    "algorithm": {
      "default": "best",
      "description": "Scoring algorithm. \"best\" is an alias that currently resolves to logic-v2. GET /algorithms lists each one with the features it scores on.",
      "enum": [
        "best",
        "logic-v2",
        "ofac",
        "name-based",
        "name-qualified",
        "logic-v1",
        "regression-v1"
      ],
      "type": "string"
    },
    "changed_since": {
      "description": "Only match entities updated since this ISO date/time — for re-screening a book of customers against what changed.",
      "pattern": "^\\\\d{4}-\\\\d{2}-\\\\d{2}(T\\\\d{2}(:\\\\d{2}(:\\\\d{2})?)?)?$",
      "type": "string"
    },
    "dataset": {
      "default": "default",
      "description": "Dataset or collection to screen against, appended as a path segment. Use default (everything), sanctions, peps, debarment, crime, or a single source dataset such as us_ofac_sdn or eu_fsf. List the options with GET /catalog.",
      "type": "string",
      "x-parameter-location": "path"
    },
    "exclude_dataset": {
      "description": "Remove these datasets from the results.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "exclude_entity_ids": {
      "description": "Entity IDs to exclude from matching, e.g. ones already cleared as false positives.",
      "items": {
        "type": "string"
      },
      "maxItems": 50,
      "type": "array"
    },
    "exclude_schema": {
      "description": "Remove these entity types from the results, e.g. Address.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "include_dataset": {
      "description": "Only include results from these datasets (within the scope named in the path).",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "limit": {
      "default": 5,
      "description": "Number of candidate matches to return per query.",
      "maximum": 500,
      "type": "integer"
    },
    "threshold": {
      "default": 0.7,
      "description": "Score at or above which a candidate is reported as a match rather than merely a near miss. Raise it to cut false positives, lower it to widen the net.",
      "type": "number"
    },
    "topics": {
      "description": "Only return results carrying any of these topics, e.g. sanction, role.pep, crime, debarment.",
      "items": {
        "type": "string"
      },
      "type": "array"
    }
  },
  "required": [
    "dataset"
  ],
  "type": "object"
}
Request schema
{
  "properties": {
    "queries": {
      "additionalProperties": {
        "properties": {
          "id": {
            "description": "Your own identifier for this query entity, echoed back.",
            "type": "string"
          },
          "properties": {
            "additionalProperties": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "description": "FollowTheMoney properties, each an ARRAY of strings even when there is one value. name is the only one that really matters; birthDate, nationality, country, address, idNumber, taxNumber, registrationNumber and innCode all sharpen the score.",
            "type": "object"
          },
          "schema": {
            "description": "Entity type from the FollowTheMoney model: Person, Company, Organization, LegalEntity, Vessel, Airplane.",
            "type": "string"
          }
        },
        "required": [
          "schema",
          "properties"
        ],
        "type": "object"
      },
      "description": "Map of your own query key -> entity example. Each key comes back in the response under the same name, so a batch of names can be screened in one call.",
      "type": "object"
    }
  },
  "required": [
    "queries"
  ],
  "type": "object"
}
Example request
{
  "queries": {
    "q1": {
      "properties": {
        "birthDate": [
          "1952-10-07"
        ],
        "name": [
          "Vladimir Putin"
        ],
        "nationality": [
          "ru"
        ]
      },
      "schema": "Person"
    },
    "q2": {
      "properties": {
        "country": [
          "ru"
        ],
        "name": [
          "Rosneft"
        ]
      },
      "schema": "Company"
    }
  }
}
Example response
{
  "algorithm": "logic-v2",
  "limit": 5,
  "responses": {
    "q1": {
      "query": {
        "properties": {
          "name": [
            "Vladimir Putin"
          ]
        },
        "schema": "Person"
      },
      "results": [
        {
          "caption": "Vladimir Putin",
          "datasets": [
            "us_ofac_sdn"
          ],
          "features": {
            "name_match": 1.0
          },
          "first_seen": "2026-01-01T12:00:00Z",
          "id": "Q7747",
          "last_change": "2026-01-01T12:00:00Z",
          "last_seen": "2026-01-01T12:00:00Z",
          "match": true,
          "properties": {
            "name": [
              "Vladimir Putin"
            ],
            "topics": [
              "role.pep",
              "sanction"
            ]
          },
          "referents": [
            "ofac-1234"
          ],
          "schema": "Person",
          "score": 0.95,
          "target": true
        }
      ],
      "status": 200,
      "total": {
        "relation": "eq",
        "value": 42
      }
    }
  }
}
GET/reconcile
$0.05 default
Description

Service manifest for the OpenRefine reconciliation API — the W3C reconciliation protocol description that lets OpenRefine, and any other reconciliation client, screen a whole spreadsheet or column of names against OpenSanctions. Returns the supported protocol versions, the identifier and schema spaces, the batch size, the default entity types and the preview/suggest/extend service URLs. Append the dataset scope as a path segment, e.g. /reconcile/sanctions to reconcile against sanctions lists only. This is the manifest, not the reconciliation query itself: point an OpenRefine reconciliation service at this URL and it will read this document to learn how to talk to the service.

Pricing
$0.05 default
Parameters
{
  "properties": {
    "dataset": {
      "default": "default",
      "description": "Dataset or collection to reconcile against, appended as a path segment. Use default, sanctions, peps, debarment, crime, or a single source dataset such as us_ofac_sdn. List the options with GET /catalog.",
      "type": "string",
      "x-parameter-location": "path"
    }
  },
  "required": [
    "dataset"
  ],
  "type": "object"
}
Example response
{
  "batchSize": 100,
  "defaultTypes": [
    {
      "id": "Person",
      "name": "Person"
    },
    {
      "id": "Company",
      "name": "Company"
    }
  ],
  "documentation": "https://www.opensanctions.org/docs/api/",
  "identifierSpace": "https://opensanctions.org/reference/#schema",
  "name": "yente",
  "schemaSpace": "https://opensanctions.org/reference/#schema",
  "versions": [
    "0.2"
  ]
}
GET/search
$0.10 default
Description

Full-text search of the OpenSanctions entity graph: find sanctioned people and companies, politically exposed persons (PEPs), debarred suppliers, wanted persons and crime-linked entities by name or free text, with country, topic, dataset and property filters and faceted counts. Cheaper than /match because it ranks rather than scores and returns no per-match explanation — use it to explore, to power a user-facing search box, or when a human will read the hits; use /match when a screening decision needs a score and a threshold. Append the dataset scope as a path segment: /search/default searches everything, /search/sanctions only sanctions lists, /search/peps only PEP registers.

Pricing
$0.10 default
Parameters
{
  "properties": {
    "changed_since": {
      "description": "Only entities updated since this ISO date/time.",
      "pattern": "^\\\\d{4}-\\\\d{2}-\\\\d{2}(T\\\\d{2}(:\\\\d{2}(:\\\\d{2})?)?)?$",
      "type": "string"
    },
    "countries": {
      "description": "Filter by ISO 3166-1 alpha-2 country codes, e.g. ru, ir.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "dataset": {
      "default": "default",
      "description": "Dataset or collection to search, appended as a path segment. Use default, sanctions, peps, debarment, crime, or a single source dataset such as us_ofac_sdn. List the options with GET /catalog.",
      "type": "string",
      "x-parameter-location": "path"
    },
    "datasets": {
      "description": "Filter by dataset name, respecting filter_op.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "exclude_dataset": {
      "description": "Remove these datasets from the search scope.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "exclude_schema": {
      "description": "Remove these entity types from the results.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "facets": {
      "default": [
        "countries",
        "topics",
        "datasets"
      ],
      "description": "Which facet counts to include in the response.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "filter": {
      "description": "Filter on a specific entity property with the syntax field:value, e.g. birthDate:1952-10-07 or programId:UKR.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "filter_op": {
      "description": "How multiple filters on the SAME field combine.",
      "enum": [
        "AND",
        "OR"
      ],
      "type": "string"
    },
    "fuzzy": {
      "default": false,
      "description": "Allow fuzzy query syntax in q.",
      "type": "boolean"
    },
    "include_dataset": {
      "description": "Restrict the search scope to these datasets within the path scope.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "limit": {
      "default": 10,
      "description": "Number of results to return.",
      "maximum": 500,
      "type": "integer"
    },
    "offset": {
      "default": 0,
      "description": "Start at this result offset. The API refuses to page beyond 9499.",
      "maximum": 9499,
      "type": "integer"
    },
    "q": {
      "default": "",
      "description": "Query text — a person or company name, or any free text.",
      "type": "string"
    },
    "schema": {
      "default": "Thing",
      "description": "Entity type that may match, e.g. Person, Company, Organization, LegalEntity, Vessel, Airplane. Thing matches all of them.",
      "type": "string"
    },
    "simple": {
      "default": false,
      "description": "Use the simplified query syntax intended for user-facing search boxes.",
      "type": "boolean"
    },
    "sort": {
      "description": "Sorting criteria, e.g. first_seen:desc. Default is relevance.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "topics": {
      "description": "Filter by entity topic, e.g. sanction, role.pep, crime, debarment, wanted.",
      "items": {
        "type": "string"
      },
      "type": "array"
    }
  },
  "required": [
    "dataset"
  ],
  "type": "object"
}
Example response
{
  "facets": {
    "countries": {
      "label": "Countries",
      "values": [
        {
          "count": 42,
          "label": "Russia",
          "name": "ru"
        }
      ]
    },
    "topics": {
      "label": "Topics",
      "values": [
        {
          "count": 42,
          "label": "Politician",
          "name": "role.pep"
        }
      ]
    }
  },
  "limit": 10,
  "offset": 0,
  "results": [
    {
      "caption": "Vladimir Putin",
      "datasets": [
        "us_ofac_sdn"
      ],
      "first_seen": "2026-01-01T12:00:00Z",
      "id": "Q7747",
      "last_change": "2026-01-01T12:00:00Z",
      "last_seen": "2026-01-01T12:00:00Z",
      "properties": {
        "country": [
          "ru"
        ],
        "name": [
          "Vladimir Putin"
        ],
        "topics": [
          "role.pep",
          "sanction"
        ]
      },
      "referents": [
        "ofac-1234"
      ],
      "schema": "Person",
      "target": true
    }
  ],
  "total": {
    "relation": "eq",
    "value": 1
  }
}
GET/statements
$0.07 default
Description

Browse OpenSanctions data in its most granular, statement-based form: one row per assertion, saying which source dataset claims which property value for which entity, with the original value as published and the dates it was first and last seen. This is the provenance layer — use it when a compliance file has to record WHERE a fact came from (which sanctions list asserted this alias, which publisher gave this birth date), or to diff what changed between two screening runs. Scope every call: supply at least one of dataset, entity_id or canonical_id, because an unfiltered request returns an arbitrary alphabetical slice of a corpus in the hundreds of millions. Then narrow further by property, property type, value or schema.

Pricing
$0.07 default
Parameters
{
  "properties": {
    "canonical_id": {
      "description": "Filter by the normalised, de-duplicated OpenSanctions entity ID, e.g. NK-1234 or Q7747 — the id /search and /match return. One of dataset, entity_id or canonical_id must be given.",
      "requiredOneOf": "scope",
      "type": "string"
    },
    "dataset": {
      "description": "Filter by source dataset, e.g. us_ofac_sdn. One of dataset, entity_id or canonical_id must be given.",
      "requiredOneOf": "scope",
      "type": "string"
    },
    "entity_id": {
      "description": "Filter by source entity ID as published by the origin dataset, e.g. ofac-1234. One of dataset, entity_id or canonical_id must be given.",
      "requiredOneOf": "scope",
      "type": "string"
    },
    "limit": {
      "default": 50,
      "description": "Number of statements to return.",
      "maximum": 5000,
      "type": "integer"
    },
    "offset": {
      "default": 0,
      "description": "Statements to skip before returning them.",
      "maximum": 9499,
      "type": "integer"
    },
    "prop": {
      "description": "Filter by property name, e.g. alias, birthDate, address.",
      "type": "string"
    },
    "prop_type": {
      "description": "Filter by property type, e.g. name, date, country, identifier.",
      "type": "string"
    },
    "schema": {
      "description": "Filter by entity type, e.g. Person, Company, LegalEntity.",
      "type": "string"
    },
    "sort": {
      "default": [
        "canonical_id",
        "prop"
      ],
      "description": "Sorting criteria.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "value": {
      "description": "Filter by the asserted property value.",
      "type": "string"
    }
  },
  "required": [],
  "type": "object"
}
Example response
{
  "limit": 50,
  "offset": 0,
  "results": [
    {
      "canonical_id": "NK-1234",
      "dataset": "us_ofac_sdn",
      "entity_id": "ofac-1234",
      "first_seen": "2026-01-01T12:00:00Z",
      "id": "0000ad52d4d91a8",
      "lang": "eng",
      "last_seen": "2026-01-01T12:00:00Z",
      "original_value": "John Doe (Esq.)",
      "prop": "alias",
      "prop_type": "name",
      "schema": "LegalEntity",
      "value": "John Doe"
    }
  ],
  "total": {
    "relation": "eq",
    "value": 42
  }
}