diff --git a/independent-publisher-connectors/OpenSanctions/ConnectorCertificationPackage.zip b/independent-publisher-connectors/OpenSanctions/ConnectorCertificationPackage.zip new file mode 100644 index 0000000000..ed6e125cb5 Binary files /dev/null and b/independent-publisher-connectors/OpenSanctions/ConnectorCertificationPackage.zip differ diff --git a/independent-publisher-connectors/OpenSanctions/apiDefinition.swagger.json b/independent-publisher-connectors/OpenSanctions/apiDefinition.swagger.json new file mode 100644 index 0000000000..71b7a4bcf7 --- /dev/null +++ b/independent-publisher-connectors/OpenSanctions/apiDefinition.swagger.json @@ -0,0 +1,2558 @@ +{ + "swagger": "2.0", + "info": { + "version": "yente 5.0.2", + "title": "OpenSanctions", + "description": "The OpenSanctions API lets you search and query the global sanctions and politically exposed persons (PEP) database. It provides endpoints for entity matching, text search, entity retrieval, and granular statement-level data. Use it to check people or companies against sanctions lists or explore the OpenSanctions entity graph.", + "contact": { + "email": "dan.romano@swolcat.com", + "name": "OpenSanctions", + "url": "https://developments.substack.com" + } + }, + "host": "api.opensanctions.org", + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.opensanctions.org/" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.opensanctions.org/docs/privacy/" + }, + { + "propertyName": "Categories", + "propertyValue": "Data" + } + ], + "basePath": "/", + "securityDefinitions": { + "api_key": { + "type": "apiKey", + "in": "query", + "name": "api_key" + } + }, + "schemes": [ + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/match/{dataset}": { + "post": { + "summary": "Match entities against a dataset", + "x-ms-summary": "Match entities by name, DOB, and nationality", + "description": "Use this endpoint to match people or companies against a dataset using fuzzy name, date of birth, and nationality criteria. Returns scored match results with confidence thresholds.\n", + "tags": [ + "Matching" + ], + "operationId": "Match_match__dataset__post", + "deprecated": false, + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "name": "dataset", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "description": "Dataset or collection name to run the match query on.", + "x-ms-summary": "Target dataset name" + }, + { + "name": "limit", + "in": "query", + "required": false, + "default": 5, + "type": "integer", + "format": "int32", + "maximum": 500, + "description": "Maximum number of matches to return (1�500).", + "x-ms-summary": "Result limit" + }, + { + "name": "threshold", + "in": "query", + "required": false, + "default": 0.7, + "type": "number", + "format": "double", + "description": "Minimum score to include a result (0�1).", + "x-ms-summary": "Match threshold" + }, + { + "name": "cutoff", + "in": "query", + "required": false, + "default": 0.7, + "type": "number", + "format": "double", + "description": "Minimum acceptable score for best match cutoff.", + "x-ms-summary": "Cutoff score" + }, + { + "name": "algorithm", + "in": "query", + "required": false, + "default": "logic-v1", + "type": "string", + "description": "Matching algorithm to use, e.g., logic-v1.", + "x-ms-summary": "Algorithm version" + }, + { + "name": "include_dataset", + "in": "query", + "required": false, + "default": [], + "type": "array", + "items": { + "type": "string" + }, + "description": "Datasets to explicitly include in the match.", + "x-ms-summary": "Included datasets" + }, + { + "name": "exclude_schema", + "in": "query", + "required": false, + "default": [], + "type": "array", + "items": { + "type": "string" + }, + "description": "Schemas to exclude from the match process.", + "x-ms-summary": "Excluded schemas" + }, + { + "name": "exclude_dataset", + "in": "query", + "required": false, + "default": [], + "type": "array", + "items": { + "type": "string" + }, + "description": "Datasets to exclude from the match process.", + "x-ms-summary": "Excluded datasets" + }, + { + "name": "topics", + "in": "query", + "required": false, + "default": [], + "type": "array", + "items": { + "type": "string" + }, + "description": "Restrict matches to entities tagged with these topics.", + "x-ms-summary": "Topics filter" + }, + { + "name": "changed_since", + "in": "query", + "required": false, + "type": "string", + "description": "Only include entities changed since this ISO date.", + "x-ms-summary": "Changed since date" + }, + { + "name": "exclude_entity_ids", + "in": "query", + "required": false, + "default": [], + "type": "array", + "maxItems": 50, + "uniqueItems": false, + "items": { + "type": "string" + }, + "description": "Entity IDs to ignore during matching. Use to filter false positives or previously reviewed entities.\n", + "x-ms-summary": "Excluded entity IDs" + }, + { + "name": "Content-Type", + "in": "header", + "required": false, + "enum": [ + "application/json" + ], + "type": "string", + "description": "Content type of the request body (application/json).", + "x-ms-summary": "Content type header" + }, + { + "name": "body", + "in": "body", + "required": true, + "description": "EntityMatchQuery payload defining entities to match.", + "x-ms-summary": "Request body", + "schema": { + "$ref": "#/definitions/EntityMatchQuery" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "schema": { + "$ref": "#/definitions/EntityMatchResponse" + }, + "headers": {} + }, + "400": { + "description": "Invalid query", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "headers": {} + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/HTTPValidationError" + }, + "headers": {} + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "headers": {} + } + }, + "x-ms-visibility": "important" + } + }, + "/search/{dataset}": { + "get": { + "summary": "Search entities in a dataset", + "x-ms-summary": "Text-based entity search by name or keyword", + "description": "Use this endpoint to search entities by name or keyword within a dataset. Supports field filters, fuzzy matching, and optional faceting.\n", + "tags": [ + "Matching" + ], + "operationId": "Search_search__dataset__get", + "deprecated": false, + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "dataset", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "description": "Dataset or collection to search within.", + "x-ms-summary": "Target dataset" + }, + { + "name": "q", + "in": "query", + "required": false, + "type": "string", + "description": "Text to search for, such as a name or keyword.", + "x-ms-summary": "Search query" + }, + { + "name": "schema", + "in": "query", + "required": false, + "default": "Thing", + "type": "string", + "description": "Restrict results to a specific schema (e.g., Person).", + "x-ms-summary": "Schema filter" + }, + { + "name": "include_dataset", + "in": "query", + "required": false, + "default": [], + "type": "array", + "items": { + "type": "string" + }, + "description": "Only return entities from these datasets.", + "x-ms-summary": "Included datasets" + }, + { + "name": "exclude_dataset", + "in": "query", + "required": false, + "default": [], + "type": "array", + "items": { + "type": "string" + }, + "description": "Exclude entities from these datasets.", + "x-ms-summary": "Excluded datasets" + }, + { + "name": "exclude_schema", + "in": "query", + "required": false, + "default": [], + "type": "array", + "items": { + "type": "string" + }, + "description": "Exclude entities of these schema types.", + "x-ms-summary": "Excluded schemas" + }, + { + "name": "changed_since", + "in": "query", + "required": false, + "type": "string", + "description": "Only include entities updated since this ISO date.", + "x-ms-summary": "Changed since date" + }, + { + "name": "countries", + "in": "query", + "required": false, + "default": [], + "type": "array", + "items": { + "type": "string" + }, + "description": "Filter by country codes (ISO 3166-1 alpha-2).", + "x-ms-summary": "Country filter" + }, + { + "name": "topics", + "in": "query", + "required": false, + "default": [], + "type": "array", + "items": { + "type": "string" + }, + "description": "Restrict results to entities tagged with topics.", + "x-ms-summary": "Topics filter" + }, + { + "name": "datasets", + "in": "query", + "required": false, + "default": [], + "type": "array", + "items": { + "type": "string" + }, + "description": "Filter by dataset identifiers.", + "x-ms-summary": "Datasets filter" + }, + { + "name": "filter", + "in": "query", + "required": false, + "default": [], + "type": "array", + "items": { + "type": "string" + }, + "description": "Use syntax 'field:value' to filter fields, e.g., properties.birthDate:1985.\n", + "x-ms-summary": "Field filter" + }, + { + "name": "limit", + "in": "query", + "required": false, + "default": 10, + "type": "integer", + "format": "int32", + "maximum": 500, + "description": "Maximum number of results to return (1�500).", + "x-ms-summary": "Result limit" + }, + { + "name": "offset", + "in": "query", + "required": false, + "default": 0, + "type": "integer", + "format": "int32", + "maximum": 9499, + "description": "Starting offset for paged results.", + "x-ms-summary": "Result offset" + }, + { + "name": "sort", + "in": "query", + "required": false, + "default": [], + "type": "array", + "items": { + "type": "string" + }, + "description": "Sort results by field, e.g., score:desc.", + "x-ms-summary": "Sort order" + }, + { + "name": "target", + "in": "query", + "required": false, + "type": "string", + "description": "Deprecated. Use the 'topics' parameter instead.", + "x-ms-summary": "Target (deprecated)" + }, + { + "name": "fuzzy", + "in": "query", + "required": false, + "default": false, + "type": "boolean", + "description": "Enable fuzzy text matching (approximate search).", + "x-ms-summary": "Fuzzy search" + }, + { + "name": "simple", + "in": "query", + "required": false, + "default": false, + "type": "boolean", + "description": "Simplify results by skipping detailed metadata.", + "x-ms-summary": "Simple mode" + }, + { + "name": "facets", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string", + "enum": [ + "datasets", + "schema", + "countries", + "identifiers", + "topics", + "genders" + ] + }, + "description": "Return facet counts for these fields.", + "x-ms-summary": "Facet fields" + }, + { + "name": "filter_op", + "in": "query", + "required": false, + "enum": [ + "AND", + "OR" + ], + "type": "string", + "description": "Logic to combine multiple filters (AND/OR).", + "x-ms-summary": "Filter operator" + } + ], + "responses": { + "200": { + "description": "Successful Response", + "schema": { + "$ref": "#/definitions/SearchResponse" + }, + "headers": {} + }, + "400": { + "description": "Invalid query", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "headers": {} + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/HTTPValidationError" + }, + "headers": {} + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "headers": {} + } + }, + "x-ms-visibility": "important" + } + }, + "/healthz": { + "get": { + "summary": "Check API health status", + "x-ms-summary": "Basic health check for service availability", + "description": "Returns a simple status response confirming the API is reachable and operational. Commonly used by monitoring tools or Kubernetes liveness probes.\n", + "tags": [ + "System information" + ], + "operationId": "Healthz_healthz_get", + "deprecated": false, + "produces": [ + "application/json" + ], + "parameters": [], + "responses": { + "200": { + "description": "API is healthy and responsive.", + "schema": { + "$ref": "#/definitions/StatusResponse" + } + }, + "500": { + "description": "Service unavailable or not ready.", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/readyz": { + "get": { + "summary": "Check search index readiness", + "x-ms-summary": "Confirms if the search index is fully built", + "description": "Returns the status of the search index to indicate whether the API is ready to handle queries. Useful for monitoring startup and deployment readiness.\n", + "tags": [ + "System information" + ], + "operationId": "Readyz_readyz_get", + "deprecated": false, + "produces": [ + "application/json" + ], + "parameters": [], + "responses": { + "200": { + "description": "Index is ready and service is operational.", + "schema": { + "$ref": "#/definitions/StatusResponse" + } + }, + "503": { + "description": "Index is still building or unavailable.", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/algorithms": { + "get": { + "summary": "Get supported matching algorithms", + "x-ms-summary": "Lists available matching and scoring algorithms", + "description": "Retrieves a list of all supported matching and scoring algorithms used by the API for entity comparison and result ranking.\n", + "tags": [ + "System information" + ], + "operationId": "Algorithms_algorithms_get", + "deprecated": false, + "produces": [ + "application/json" + ], + "parameters": [], + "responses": { + "200": { + "description": "Returns list of supported algorithms.", + "schema": { + "$ref": "#/definitions/AlgorithmResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/updatez": { + "post": { + "summary": "Force index regeneration", + "x-ms-summary": "Rebuilds the search index using an update token", + "description": "Triggers a manual rebuild of the search index. Requires a valid update token for authorization. Use this to refresh the dataset when data or structure changes occur.\n", + "tags": [ + "System information" + ], + "operationId": "Force_update_updatez_post", + "deprecated": false, + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "token", + "in": "query", + "required": false, + "type": "string", + "x-ms-visibility": "important", + "description": "API token required to authorize index rebuild.", + "x-ms-summary": "Update token" + }, + { + "name": "sync", + "in": "query", + "required": false, + "default": false, + "type": "boolean", + "x-ms-visibility": "important", + "description": "Run synchronously and wait for index completion.", + "x-ms-summary": "Sync mode" + } + ], + "responses": { + "200": { + "description": "Index rebuild started or completed successfully.", + "schema": { + "$ref": "#/definitions/StatusResponse" + } + }, + "403": { + "description": "Missing or invalid update token.", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "422": { + "description": "Invalid input or parameters.", + "schema": { + "$ref": "#/definitions/HTTPValidationError" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/entities/{entity_id}": { + "get": { + "summary": "Get entity by ID", + "x-ms-summary": "Retrieve a single entity by its unique identifier", + "description": "Returns the full record for an entity specified by its ID, including related data such as ownership, associations, and linked properties.\n", + "tags": [ + "Data access" + ], + "operationId": "Fetch_entity_entities__entity_id__get", + "deprecated": false, + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "entity_id", + "in": "path", + "required": true, + "type": "string", + "description": "Unique ID of the entity to retrieve.", + "x-ms-summary": "Entity ID" + }, + { + "name": "nested", + "in": "query", + "required": false, + "default": true, + "type": "boolean", + "description": "Include linked or related entities in the response.", + "x-ms-summary": "Include nested entities" + } + ], + "responses": { + "200": { + "description": "Entity retrieved successfully.", + "schema": { + "type": "object", + "additionalProperties": true, + "description": "Dynamic JSON object. Allows all field types without validation.\n" + }, + "examples": { + "application/json": "{\n \"id\": \"Q7747\",\n \"caption\": \"Vladimir Putin\",\n \"schema\": \"Person\",\n \"properties\": { \"name\": [\"Vladimir Putin\"] }\n}\n" + } + }, + "308": { + "description": "Entity was merged into another ID." + }, + "404": { + "description": "Entity not found or no longer exists.", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "422": { + "description": "Invalid or malformed request parameters.", + "schema": { + "$ref": "#/definitions/HTTPValidationError" + } + }, + "500": { + "description": "Internal server error retrieving entity.", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/entities/{entity_id}/adjacent": { + "get": { + "summary": "Get entities adjacent to an entity", + "x-ms-summary": "Retrieve related entities such as links, owners, or associates", + "description": "Returns entities connected to the specified entity, such as linked people, companies, identifiers, or sanctions. Useful for exploring graph relationships in the OpenSanctions dataset.\n", + "tags": [ + "Data access" + ], + "operationId": "Fetch_Adjacent_Entities__entities__entity_id__adjacent_get", + "deprecated": false, + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "entity_id", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "description": "Unique ID of the entity whose connections to retrieve.", + "x-ms-summary": "Entity ID" + }, + { + "name": "sort", + "in": "query", + "required": false, + "default": [], + "type": "array", + "items": { + "type": "string" + }, + "x-ms-visibility": "advanced", + "description": "Sort results by field, e.g., score:desc.", + "x-ms-summary": "Sort order" + }, + { + "name": "limit", + "in": "query", + "required": false, + "default": 10, + "type": "integer", + "format": "int32", + "maximum": 500, + "description": "Maximum number of related entities to return (1�500).", + "x-ms-summary": "Result limit" + }, + { + "name": "offset", + "in": "query", + "required": false, + "default": 0, + "type": "integer", + "format": "int32", + "maximum": 9499, + "description": "Starting offset for paginated related entities.", + "x-ms-summary": "Result offset" + } + ], + "responses": { + "200": { + "description": "Related entities retrieved successfully.", + "schema": { + "type": "object", + "additionalProperties": true + } + }, + "308": { + "description": "Entity was merged into another ID." + }, + "404": { + "description": "Entity not found or unavailable.", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "422": { + "description": "Invalid request or malformed parameters.", + "schema": { + "$ref": "#/definitions/HTTPValidationError" + } + }, + "500": { + "description": "Internal server error retrieving related entities.", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/entities/{entity_id}/adjacent/{property_name}": { + "get": { + "summary": "Get related entities by property", + "x-ms-summary": "Retrieve adjacent entities linked by a specific property", + "description": "Returns entities related to a given entity through a specific property, such as ownership, family ties, or identifiers. Useful for exploring graph relationships in detail.\n", + "tags": [ + "Data access" + ], + "operationId": "Fetch_Adjacent_by_Property__entities__entity_id__adjacent__property_name__get", + "deprecated": false, + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "entity_id", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "description": "Unique ID of the entity whose related items to fetch.", + "x-ms-summary": "Entity ID" + }, + { + "name": "property_name", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "description": "Property name used to fetch related entities.", + "x-ms-summary": "Property name" + }, + { + "name": "sort", + "in": "query", + "required": false, + "default": [], + "type": "array", + "items": { + "type": "string" + }, + "x-ms-visibility": "advanced", + "description": "Sort related entities by field, e.g., score:desc.", + "x-ms-summary": "Sort order" + }, + { + "name": "limit", + "in": "query", + "required": false, + "default": 10, + "type": "integer", + "format": "int32", + "maximum": 500, + "description": "Maximum number of related entities to return (1�500).", + "x-ms-summary": "Result limit" + }, + { + "name": "offset", + "in": "query", + "required": false, + "default": 0, + "type": "integer", + "format": "int32", + "maximum": 9499, + "description": "Starting offset for paginated related results.", + "x-ms-summary": "Result offset" + } + ], + "responses": { + "200": { + "description": "Related entities retrieved successfully.", + "schema": { + "type": "object", + "additionalProperties": true, + "description": "Dynamic JSON structure reprsenting related entities. Each property may contain arrays of strings or nested entity objects." + } + }, + "308": { + "description": "Entity was merged into another ID." + }, + "404": { + "description": "Entity or property not found.", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "422": { + "description": "Invalid parameters or validation failure.", + "schema": { + "$ref": "#/definitions/HTTPValidationError" + } + }, + "500": { + "description": "Internal server error retrieving related entities.", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/catalog": { + "get": { + "summary": "Get dataset catalog", + "x-ms-summary": "Retrieve the list of all indexed datasets", + "description": "Returns the full service catalog containing all available and indexed datasets in the OpenSanctions API. Useful for discovering dataset names and metadata.\n", + "tags": [ + "Data access" + ], + "operationId": "Catalog_catalog_get", + "deprecated": false, + "produces": [ + "application/json" + ], + "parameters": [], + "responses": { + "200": { + "description": "Dataset catalog retrieved successfully.", + "schema": { + "type": "object", + "additionalProperties": true + } + } + }, + "x-ms-visibility": "important" + } + }, + "/statements": { + "get": { + "summary": "Get raw entity statements", + "x-ms-summary": "Retrieve raw data records from the statement model", + "description": "Returns granular entity data as individual statements from the OpenSanctions database. Each statement represents a single fact (e.g., name, address, birth date) extracted from source data.\n", + "tags": [ + "Data access" + ], + "operationId": "Statements_statements_get", + "deprecated": false, + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "dataset", + "in": "query", + "required": false, + "type": "string", + "x-ms-visibility": "important", + "description": "Limit results to statements from this dataset.", + "x-ms-summary": "Dataset name" + }, + { + "name": "entity_id", + "in": "query", + "required": false, + "type": "string", + "x-ms-visibility": "important", + "description": "Return statements linked to this entity ID.", + "x-ms-summary": "Entity ID" + }, + { + "name": "canonical_id", + "in": "query", + "required": false, + "type": "string", + "x-ms-visibility": "advanced", + "description": "Fetch statements for the canonical entity ID.", + "x-ms-summary": "Canonical ID" + }, + { + "name": "prop", + "in": "query", + "required": false, + "type": "string", + "x-ms-visibility": "advanced", + "description": "Filter statements by property name.", + "x-ms-summary": "Property filter" + }, + { + "name": "value", + "in": "query", + "required": false, + "type": "string", + "x-ms-visibility": "advanced", + "description": "Filter statements containing this property value.", + "x-ms-summary": "Property value" + }, + { + "name": "schema", + "in": "query", + "required": false, + "type": "string", + "x-ms-visibility": "advanced", + "description": "Restrict statements to entities of a given schema.", + "x-ms-summary": "Schema filter" + }, + { + "name": "sort", + "in": "query", + "required": false, + "default": [], + "type": "array", + "items": { + "type": "string" + }, + "x-ms-visibility": "advanced", + "description": "Sort results by field, e.g., timestamp:desc.", + "x-ms-summary": "Sort order" + }, + { + "name": "limit", + "in": "query", + "required": false, + "default": 50, + "type": "integer", + "format": "int32", + "maximum": 5000, + "description": "Maximum number of statements to return (1�5000).", + "x-ms-summary": "Result limit" + }, + { + "name": "offset", + "in": "query", + "required": false, + "default": 0, + "type": "integer", + "format": "int32", + "maximum": 9499, + "description": "Starting offset for paginated results.", + "x-ms-summary": "Result offset" + } + ], + "responses": { + "200": { + "description": "Statements retrieved successfully.", + "schema": { + "$ref": "#/definitions/StatementResponse" + } + }, + "422": { + "description": "Invalid request or validation failure.", + "schema": { + "$ref": "#/definitions/HTTPValidationError" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/reconcile/{dataset}": { + "get": { + "summary": "Reconcile entities for a dataset", + "x-ms-summary": "Bulk match entities via OpenRefine-compatible API", + "description": "Provides a reconciliation endpoint compatible with the Google Refine (OpenRefine) API. Use this to bulk match or verify entity names against a dataset from an external tool such as OpenRefine.\n", + "tags": [ + "Reconciliation" + ], + "operationId": "Reconcile_reconcile__dataset__get", + "deprecated": false, + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "dataset", + "in": "path", + "required": true, + "type": "string", + "description": "Dataset or collection name to reconcile against.", + "x-ms-summary": "Target dataset", + "x-ms-visibility": "important" + } + ], + "responses": { + "200": { + "description": "Reconciliation metadata or match results returned.", + "schema": { + "$ref": "#/definitions/FreebaseManifest" + } + }, + "400": { + "description": "Invalid or malformed reconciliation query.", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "422": { + "description": "Validation failed for one or more parameters.", + "schema": { + "$ref": "#/definitions/HTTPValidationError" + } + }, + "500": { + "description": "Internal server error during reconciliation.", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + } + }, + "definitions": { + "AdjacentResultsResponse": { + "title": "AdjacentResultsResponse", + "type": "object", + "properties": { + "limit": { + "example": 20, + "type": "integer", + "format": "int32" + }, + "offset": { + "example": 0, + "type": "integer", + "default": 0, + "format": "int32" + }, + "total": { + "$ref": "#/definitions/TotalSpec" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/Result" + } + } + }, + "required": [ + "limit", + "total" + ] + }, + "Algorithm": { + "title": "Algorithm", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the matching or scoring algorithm." + }, + "description": { + "type": "string", + "description": "Short description of what the algorithm does." + }, + "features": { + "type": "object", + "description": "Deprecated. Use the `docs` property instead.", + "additionalProperties": { + "$ref": "#/definitions/FeatureDoc" + } + }, + "docs": { + "$ref": "#/definitions/AlgorithmDocs" + } + }, + "required": [ + "name", + "features", + "docs" + ] + }, + "AlgorithmDocs": { + "title": "AlgorithmDocs", + "description": "Documentation for a scoring algorithm.", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": {}, + "config": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ConfigVar" + } + }, + "features": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/FeatureDoc" + } + } + }, + "required": [ + "name", + "config", + "features" + ] + }, + "AlgorithmResponse": { + "title": "AlgorithmResponse", + "type": "object", + "properties": { + "algorithms": { + "type": "array", + "items": { + "$ref": "#/definitions/Algorithm" + } + }, + "default": { + "type": "string" + }, + "best": { + "type": "string" + } + }, + "required": [ + "algorithms", + "default", + "best" + ] + }, + "ConfigVar": { + "title": "ConfigVar", + "description": "A configuration variable for a scoring algorithm.", + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/ConfigVarType" + }, + "description": { + "type": "string", + "description": "Explanation of what this configuration variable controls." + }, + "default": { + "type": "string", + "description": "Default value for this configuration variable, if any." + } + }, + "required": [ + "type" + ] + }, + "ConfigVarType": { + "title": "ConfigVarType", + "description": "The type of a configuration variable.", + "type": "string", + "enum": [ + "integer", + "float", + "boolean" + ] + }, + "DataCatalogModel": { + "title": "DataCatalogModel", + "type": "object", + "properties": { + "datasets": { + "type": "array", + "items": { + "$ref": "#/definitions/YenteDatasetModel" + } + }, + "current": { + "type": "array", + "items": { + "type": "string" + } + }, + "outdated": { + "type": "array", + "items": { + "type": "string" + } + }, + "index_stale": { + "type": "boolean", + "default": false + } + }, + "required": [ + "datasets", + "current", + "outdated" + ] + }, + "DataCoverage": { + "title": "DataCoverage", + "description": "Details on the temporal and geographic scope of a dataset.", + "type": "object", + "properties": { + "start": { + "type": "string", + "format": "date", + "description": "The start date of the dataset coverage period." + }, + "end": { + "type": "string", + "format": "date", + "description": "The end date of the dataset coverage period." + }, + "countries": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "List of ISO country codes covered by the dataset." + }, + "frequency": { + "$ref": "#/definitions/Frequency" + }, + "schedule": { + "type": "string", + "description": "Optional schedule or cron expression for dataset updates." + } + }, + "required": [ + "countries" + ] + }, + "DataPublisher": { + "title": "DataPublisher", + "description": "Publisher information, eg. the government authority.", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "url": {}, + "name_en": {}, + "acronym": {}, + "description": {}, + "country": {}, + "official": {}, + "logo_url": {}, + "country_label": { + "readOnly": true + } + }, + "required": [ + "name" + ] + }, + "DataResource": { + "title": "DataResource", + "description": "A downloadable resource that is part of a dataset.", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "url": {}, + "checksum": {}, + "timestamp": {}, + "mime_type": {}, + "title": {}, + "size": {}, + "mime_type_label": { + "readOnly": true + } + }, + "required": [ + "name" + ] + }, + "EntityAdjacentResponse": { + "title": "EntityAdjacentResponse", + "type": "object", + "properties": { + "entity": { + "$ref": "#/definitions/EntityResponse" + }, + "adjacent": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/AdjacentResultsResponse" + } + } + }, + "required": [ + "entity", + "adjacent" + ] + }, + "EntityExample": { + "title": "EntityExample", + "type": "object", + "properties": { + "id": { + "example": "my-entity-id" + }, + "schema": { + "example": "Person", + "type": "string" + }, + "properties": { + "example": { + "name": [ + "John Doe" + ] + }, + "type": "object", + "additionalProperties": {} + } + }, + "required": [ + "schema", + "properties" + ] + }, + "EntityMatchQuery": { + "title": "EntityMatchQuery", + "type": "object", + "properties": { + "weights": { + "example": { + "name_literal": 0.8 + }, + "type": "object", + "default": {}, + "additionalProperties": { + "type": "number", + "format": "double" + } + }, + "config": { + "description": "Algorithm-specific configuration parameters.", + "example": { + "nm_number_mismatch": 0.4 + }, + "type": "object", + "additionalProperties": {} + }, + "queries": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/EntityExample" + } + } + }, + "required": [ + "queries" + ] + }, + "EntityMatchResponse": { + "title": "EntityMatchResponse", + "type": "object", + "properties": { + "responses": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/EntityMatches" + } + }, + "matcher": { + "description": "Information about the matcher that was used to score this request. Deprecated, use `/algorithms` endpoint instead.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/FeatureDoc" + } + }, + "limit": { + "example": 5, + "type": "integer", + "format": "int32" + } + }, + "required": [ + "responses", + "matcher", + "limit" + ] + }, + "EntityMatches": { + "title": "EntityMatches", + "type": "object", + "properties": { + "status": { + "example": 200, + "type": "integer", + "default": 200, + "format": "int32" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/ScoredEntityResponse" + } + }, + "total": { + "$ref": "#/definitions/TotalSpec" + }, + "query": { + "$ref": "#/definitions/EntityExample" + } + }, + "required": [ + "results", + "total", + "query" + ] + }, + "EntityResponse": { + "title": "EntityResponse", + "type": "object", + "properties": { + "id": { + "example": "NK-A7z....", + "type": "string" + }, + "caption": { + "example": "John Doe", + "type": "string" + }, + "schema": { + "example": "LegalEntity", + "type": "string" + }, + "properties": { + "example": { + "name": [ + "John Doe" + ] + }, + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "datasets": { + "example": [ + "us_ofac_sdn" + ], + "type": "array", + "default": [], + "items": { + "type": "string" + } + }, + "referents": { + "example": [ + "ofac-1234" + ], + "type": "array", + "default": [], + "items": { + "type": "string" + } + }, + "target": { + "type": "boolean", + "default": false + }, + "first_seen": { + "example": "2025-10-14T10:32:06.418Z" + }, + "last_seen": { + "example": "2025-10-14T10:32:06.418Z" + }, + "last_change": { + "example": "2025-10-14T10:32:06.418Z" + } + }, + "required": [ + "id", + "caption", + "schema", + "properties" + ] + }, + "ErrorResponse": { + "title": "ErrorResponse", + "type": "object", + "properties": { + "detail": { + "example": "Detailed error message", + "type": "string" + } + }, + "required": [ + "detail" + ] + }, + "Facet": { + "title": "Facet", + "type": "string", + "enum": [ + "datasets", + "schema", + "countries", + "identifiers", + "topics", + "genders" + ] + }, + "FeatureDoc": { + "title": "FeatureDoc", + "description": "Documentation for a particular feature in the matching API model.", + "type": "object", + "properties": { + "description": {}, + "coefficient": { + "type": "number", + "format": "double" + }, + "url": { + "type": "string" + } + }, + "required": [ + "description", + "coefficient", + "url" + ] + }, + "FreebaseManifest": { + "title": "FreebaseManifest", + "type": "object", + "properties": { + "versions": { + "example": [ + "0.2" + ], + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "example": "yente", + "type": "string" + }, + "identifierSpace": { + "type": "string", + "minLength": 1 + }, + "schemaSpace": { + "type": "string", + "minLength": 1 + }, + "documentation": { + "type": "string", + "minLength": 1 + }, + "batchSize": { + "type": "integer", + "format": "int32" + }, + "view": { + "$ref": "#/definitions/FreebaseManifestView" + }, + "preview": { + "$ref": "#/definitions/FreebaseManifestPreview" + }, + "suggest": { + "$ref": "#/definitions/FreebaseManifestSuggest" + }, + "extend": { + "$ref": "#/definitions/FreebaseManifestExtend" + }, + "defaultTypes": { + "type": "array", + "items": { + "$ref": "#/definitions/FreebaseType" + } + } + }, + "required": [ + "versions", + "name", + "identifierSpace", + "schemaSpace", + "documentation", + "batchSize", + "view", + "preview", + "suggest", + "extend", + "defaultTypes" + ] + }, + "FreebaseManifestExtend": { + "title": "FreebaseManifestExtend", + "type": "object", + "properties": { + "propose_properties": { + "$ref": "#/definitions/FreebaseManifestExtendProposeProperties" + }, + "propose_settings": { + "type": "array", + "items": { + "$ref": "#/definitions/FreebaseManifestExtendPropertySetting" + } + } + }, + "required": [ + "propose_properties", + "propose_settings" + ] + }, + "FreebaseManifestExtendPropertySetting": { + "title": "FreebaseManifestExtendPropertySetting", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "label": { + "type": "string" + }, + "type": { + "type": "string" + }, + "default": {}, + "help_text": { + "type": "string" + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/definitions/FreebaseManifestExtendPropertySettingChoice" + } + } + }, + "required": [ + "name", + "label", + "type", + "default", + "help_text" + ] + }, + "FreebaseManifestExtendPropertySettingChoice": { + "title": "FreebaseManifestExtendPropertySettingChoice", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + }, + "FreebaseManifestExtendProposeProperties": { + "title": "FreebaseManifestExtendProposeProperties", + "type": "object", + "properties": { + "service_url": { + "type": "string", + "minLength": 1 + }, + "service_path": { + "type": "string" + } + }, + "required": [ + "service_url", + "service_path" + ] + }, + "FreebaseManifestPreview": { + "title": "FreebaseManifestPreview", + "type": "object", + "properties": { + "url": { + "type": "string" + }, + "width": { + "type": "integer", + "format": "int32" + }, + "height": { + "type": "integer", + "format": "int32" + } + }, + "required": [ + "url", + "width", + "height" + ] + }, + "FreebaseManifestSuggest": { + "title": "FreebaseManifestSuggest", + "type": "object", + "properties": { + "entity": { + "$ref": "#/definitions/FreebaseManifestSuggestType" + }, + "type": { + "$ref": "#/definitions/FreebaseManifestSuggestType" + }, + "property": { + "$ref": "#/definitions/FreebaseManifestSuggestType" + } + }, + "required": [ + "entity", + "type", + "property" + ] + }, + "FreebaseManifestSuggestType": { + "title": "FreebaseManifestSuggestType", + "type": "object", + "properties": { + "service_url": { + "type": "string", + "minLength": 1 + }, + "service_path": { + "type": "string" + } + }, + "required": [ + "service_url", + "service_path" + ] + }, + "FreebaseManifestView": { + "title": "FreebaseManifestView", + "type": "object", + "properties": { + "url": { + "type": "string" + } + }, + "required": [ + "url" + ] + }, + "FreebaseType": { + "title": "FreebaseType", + "type": "object", + "properties": { + "id": { + "example": "Person", + "type": "string" + }, + "name": { + "example": "People", + "type": "string" + }, + "description": {} + }, + "required": [ + "id", + "name" + ] + }, + "FtResult": { + "title": "FtResult", + "description": "A explained score for a particular feature result.", + "type": "object", + "properties": { + "detail": {}, + "score": { + "type": "number", + "format": "double" + } + }, + "required": [ + "detail", + "score" + ] + }, + "HTTPValidationError": { + "title": "HTTPValidationError", + "type": "object", + "properties": { + "detail": { + "type": "array", + "items": { + "$ref": "#/definitions/ValidationError" + } + } + } + }, + "Operator": { + "title": "Operator", + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + "ScoredEntityResponse": { + "title": "ScoredEntityResponse", + "type": "object", + "properties": { + "id": { + "example": "NK-A7z....", + "type": "string" + }, + "caption": { + "example": "John Doe", + "type": "string" + }, + "schema": { + "example": "LegalEntity", + "type": "string" + }, + "properties": { + "example": { + "name": [ + "John Doe" + ] + }, + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "datasets": { + "example": [ + "us_ofac_sdn" + ], + "type": "array", + "default": [], + "items": { + "type": "string" + } + }, + "referents": { + "example": [ + "ofac-1234" + ], + "type": "array", + "default": [], + "items": { + "type": "string" + } + }, + "target": { + "type": "boolean", + "default": false + }, + "first_seen": { + "example": "2025-10-14T10:32:06.418Z" + }, + "last_seen": { + "example": "2025-10-14T10:32:06.418Z" + }, + "last_change": { + "example": "2025-10-14T10:32:06.418Z" + }, + "score": { + "type": "number", + "default": 0.99, + "format": "double" + }, + "features": { + "description": "A dictionary of subscores from features in the algorithm. Deprecated, use `explanations` instead.", + "type": "object", + "additionalProperties": { + "type": "number", + "format": "double" + } + }, + "explanations": { + "description": "A dictionary of subscores from features in the algorithm and explanations for how they were calculated.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/FtResult" + } + }, + "match": { + "description": "Whether the score is above the match threshold.", + "type": "boolean" + }, + "token": {} + }, + "required": [ + "id", + "caption", + "schema", + "properties", + "features", + "explanations", + "match" + ] + }, + "SearchFacet": { + "title": "SearchFacet", + "type": "object", + "properties": { + "label": { + "example": "Countries", + "type": "string" + }, + "values": { + "type": "array", + "items": { + "$ref": "#/definitions/SearchFacetItem" + } + } + }, + "required": [ + "label", + "values" + ] + }, + "SearchFacetItem": { + "title": "SearchFacetItem", + "type": "object", + "properties": { + "name": { + "example": "ru", + "type": "string" + }, + "label": { + "example": "Russia", + "type": "string" + }, + "count": { + "example": 42, + "type": "integer", + "default": 1, + "format": "int32" + } + }, + "required": [ + "name", + "label" + ] + }, + "SearchResponse": { + "title": "SearchResponse", + "type": "object", + "properties": { + "limit": { + "example": 20, + "type": "integer", + "format": "int32" + }, + "offset": { + "example": 0, + "type": "integer", + "default": 0, + "format": "int32" + }, + "total": { + "$ref": "#/definitions/TotalSpec" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/EntityResponse" + } + }, + "facets": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/SearchFacet" + } + } + }, + "required": [ + "limit", + "total", + "results", + "facets" + ] + }, + "Statement": { + "title": "Statement", + "type": "object", + "properties": { + "id": { + "example": "0000ad52d4d91a8...", + "type": "string" + }, + "entity_id": { + "example": "ofac-1234", + "type": "string" + }, + "canonical_id": { + "example": "NK-1234", + "type": "string" + }, + "prop": { + "example": "alias", + "type": "string" + }, + "prop_type": { + "example": "name", + "type": "string" + }, + "schema": { + "example": "LegalEntity", + "type": "string" + }, + "value": { + "example": "John Doe", + "type": "string" + }, + "original_value": { + "example": "John Doe (Esq.)" + }, + "dataset": { + "example": "us_ofac_sdn", + "type": "string" + }, + "lang": { + "example": "eng" + }, + "first_seen": { + "type": "string", + "format": "date-time" + }, + "last_seen": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "entity_id", + "canonical_id", + "prop", + "prop_type", + "schema", + "value", + "dataset", + "first_seen", + "last_seen" + ] + }, + "StatementResponse": { + "title": "StatementResponse", + "type": "object", + "properties": { + "limit": { + "example": 20, + "type": "integer", + "format": "int32" + }, + "offset": { + "example": 0, + "type": "integer", + "default": 0, + "format": "int32" + }, + "total": { + "$ref": "#/definitions/TotalSpec" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/Statement" + } + } + }, + "required": [ + "limit", + "total", + "results" + ] + }, + "StatusResponse": { + "title": "StatusResponse", + "type": "object", + "properties": { + "status": { + "type": "string", + "default": "ok" + } + } + }, + "TotalSpec": { + "title": "TotalSpec", + "type": "object", + "properties": { + "value": { + "example": 42, + "type": "integer", + "format": "int32" + }, + "relation": { + "example": "eq", + "type": "string", + "default": "eq" + } + }, + "required": [ + "value" + ] + }, + "ValidationError": { + "title": "ValidationError", + "type": "object", + "properties": { + "loc": { + "type": "array", + "items": {} + }, + "msg": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "loc", + "msg", + "type" + ] + }, + "YenteDatasetModel": { + "title": "YenteDatasetModel", + "description": "Represents a dataset within OpenSanctions, including its metadata, coverage, resources, and related datasets.\n", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique dataset identifier." + }, + "title": { + "type": "string", + "description": "Human-readable dataset title." + }, + "license": { + "type": "string", + "description": "License under which the dataset is published." + }, + "summary": { + "type": "string", + "description": "Short summary of the dataset." + }, + "description": { + "type": "string", + "description": "Detailed dataset description." + }, + "url": { + "type": "string", + "description": "Web URL for dataset documentation." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp of the last dataset update." + }, + "last_export": { + "type": "string", + "format": "date-time", + "description": "Timestamp of the last export." + }, + "entity_count": { + "type": "integer", + "format": "int32", + "description": "Total number of entities included in the dataset." + }, + "thing_count": { + "type": "integer", + "format": "int32", + "description": "Total number of non-entity objects in the dataset." + }, + "version": { + "type": "string", + "description": "Dataset version identifier." + }, + "category": { + "type": "string", + "description": "Category of dataset (e.g., sanctions, PEPs)." + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "Keywords or topics associated with the dataset." + }, + "publisher": { + "$ref": "#/definitions/Publisher" + }, + "coverage": { + "$ref": "#/definitions/Coverage" + }, + "resources": { + "type": "array", + "items": { + "$ref": "#/definitions/DataResource" + }, + "description": "List of resources included in the dataset." + }, + "children": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "Child datasets derived from this dataset." + }, + "load": { + "type": "string", + "description": "Optional data loading information." + }, + "entities_url": { + "type": "string", + "description": "API URL for accessing entity data." + }, + "delta_url": { + "type": "string", + "description": "API URL for accessing delta (update) data." + }, + "namespace": { + "type": "boolean", + "default": false, + "description": "Indicates if the dataset defines its own namespace." + }, + "index_version": { + "type": "string", + "description": "Index version number." + }, + "index_current": { + "type": "boolean", + "readOnly": true, + "description": "Whether the index is current." + } + }, + "required": [ + "name", + "title" + ] + }, + "Coverage": { + "title": "Coverage", + "description": "Describes the temporal, geographic, and update coverage of a dataset.\n", + "type": "object", + "properties": { + "start": { + "type": "string", + "format": "date", + "description": "The start date of the dataset coverage period." + }, + "end": { + "type": "string", + "format": "date", + "description": "The end date of the dataset coverage period." + }, + "countries": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "List of ISO country codes covered by the dataset." + }, + "frequency": { + "$ref": "#/definitions/Frequency" + }, + "schedule": { + "type": "string", + "description": "Optional schedule or cron expression for dataset updates." + } + }, + "required": [ + "countries" + ] + }, + "Frequency": { + "title": "Frequency", + "type": "string", + "enum": [ + "unknown", + "never", + "hourly", + "daily", + "weekly", + "monthly", + "annually" + ] + }, + "Operator1": { + "title": "Operator1", + "description": "Logic to use when combining multiple filters on the same field (topics, countries, datasets). Please specify AND for new integrations (to override a legacy default) and when building a faceted user interface.", + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + "Property": { + "title": "Property", + "type": "object", + "properties": { + "id": { + "example": "NK-A7z....", + "type": "string" + }, + "caption": { + "example": "John Doe", + "type": "string" + }, + "schema": { + "example": "LegalEntity", + "type": "string" + }, + "properties": { + "example": { + "name": [ + "John Doe" + ] + }, + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "datasets": { + "example": [ + "us_ofac_sdn" + ], + "type": "array", + "default": [], + "items": { + "type": "string" + } + }, + "referents": { + "example": [ + "ofac-1234" + ], + "type": "array", + "default": [], + "items": { + "type": "string" + } + }, + "target": { + "type": "boolean", + "default": false + }, + "first_seen": { + "example": "2025-10-14T10:32:06.418Z" + }, + "last_seen": { + "example": "2025-10-14T10:32:06.418Z" + }, + "last_change": { + "example": "2025-10-14T10:32:06.418Z" + } + } + }, + "Publisher": { + "title": "Publisher", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "url": {}, + "name_en": {}, + "acronym": {}, + "description": {}, + "country": {}, + "official": {}, + "logo_url": {}, + "country_label": { + "readOnly": true + } + } + }, + "Result": { + "title": "Result", + "type": "object", + "properties": { + "id": { + "example": "NK-A7z....", + "type": "string" + }, + "caption": { + "example": "John Doe", + "type": "string" + }, + "schema": { + "example": "LegalEntity", + "type": "string" + }, + "properties": { + "example": { + "name": [ + "John Doe" + ] + }, + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "datasets": { + "example": [ + "us_ofac_sdn" + ], + "type": "array", + "default": [], + "items": { + "type": "string" + } + }, + "referents": { + "example": [ + "ofac-1234" + ], + "type": "array", + "default": [], + "items": { + "type": "string" + } + }, + "target": { + "type": "boolean", + "default": false + }, + "first_seen": { + "example": "2025-10-14T10:32:06.418Z" + }, + "last_seen": { + "example": "2025-10-14T10:32:06.418Z" + }, + "last_change": { + "example": "2025-10-14T10:32:06.418Z" + } + } + } + }, + "tags": [ + { + "name": "Matching", + "description": "Endpoints for conducting a user-facing entity search or matching a local data store against the given dataset.", + "externalDocs": { + "url": "https://opensanctions.org/reference/", + "description": "Data dictionary" + } + }, + { + "name": "System information", + "description": "Service metadata endpoints for health checking and getting the application metadata to be used in client applications." + }, + { + "name": "Data access", + "description": "Endpoints for fetching data from the API, either related to individual entities, or for bulk data access in various forms.", + "externalDocs": { + "url": "https://opensanctions.org/reference/", + "description": "Data dictionary" + } + }, + { + "name": "Reconciliation", + "description": "The Reconciliation Service provides four separate endpoints that work in concert to implement the data matching API used by OpenRefine, Wikidata and several other services and utilities.", + "externalDocs": { + "url": "https://reconciliation-api.github.io/specs/latest/", + "description": "W3C Community API specification" + } + } + ], + "security": [ + { + "api_key": [] + } + ] +} \ No newline at end of file diff --git a/independent-publisher-connectors/OpenSanctions/apiSettings.json b/independent-publisher-connectors/OpenSanctions/apiSettings.json new file mode 100644 index 0000000000..dd30520903 --- /dev/null +++ b/independent-publisher-connectors/OpenSanctions/apiSettings.json @@ -0,0 +1,24 @@ +{ + "properties": { + "connectionParameters": { + + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "API Key", + "description": "The API key", + "tooltip": "Provide your API Key", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#da3b01", + "capabilities": [], + "publisher": "Dan Romano", + "stackOwner": "OpenSanctions Datenbanken GmbH" + } +} \ No newline at end of file diff --git a/independent-publisher-connectors/OpenSanctions/readme.md b/independent-publisher-connectors/OpenSanctions/readme.md new file mode 100644 index 0000000000..8959622a24 --- /dev/null +++ b/independent-publisher-connectors/OpenSanctions/readme.md @@ -0,0 +1,75 @@ +# OpenSanctions + +## Overview + +The OpenSanctions API provides access to a global database of persons and companies of political, criminal, or economic interest. It aggregates data from hundreds of sanctions lists, politically exposed persons (PEPs), +and watchlists across the world. + +You can use this connector to match, search, and fetch entities, explore relationships, and analyze dataset coverage. + +Learn more at [OpenSanctions.org](https://www.opensanctions.org/). + +## Publisher - Dan Romano (swolcat) + +## Prerequisites + +You will need an API key from OpenSanctions to use this connector. Register for a free key at: +[https://www.opensanctions.org/api/](https://www.opensanctions.org/api/) + +## Supported Operations +### Match entities by dataset + +Match entities based on name and optional fields such as birth date, nationality, and identifiers. This endpoint supports fuzzy matching. + +### Search entities in a dataset + +Search entities using a simple text query. Supports filters, topics, countries, and datasets for refined searches. + +### Get entity by ID + +Retrieve a single entity record by its unique identifier, including nested and related attributes. + +### Get adjacent entities + +Return entities adjacent to a specified entity (e.g., associates, family members, or related companies). + +### Get adjacent entities by property + +Return related entities for a specific property (e.g., familyPerson, ownershipOwner, membershipMember). + +### Get dataset catalog + +Retrieve the list of all indexed datasets available via OpenSanctions. + +### Get system health + +Perform a system health check to verify service availability. + +### Get matching algorithms + +List supported entity-matching algorithms used by the system. + +### Force index update + +Trigger a re-indexing operation if authorized with a valid update token. + +## Getting Started + +1. Create an account at [OpenSanctions.org](https://www.opensanctions.org/). +2. An API key +3. In Power Automate or Power Apps, create a new connection using your API key. +4. Use the connector’s actions to search, match, or fetch entities. + +## Obtaining Credentials + +Visit [https://www.opensanctions.org/api/](https://www.opensanctions.org/api/) to request an API key. You’ll receive an `ApiKey` value that should be used in the `Authorization` header: + +Authorization: ApiKey YOUR_API_KEY + +## Known Issues and Limitations + +- Response structures are dynamic; use "Parse JSON" in Power Automate to access nested values. +- The `search` and `match` endpoints may return large responses depending on the dataset scope. +- Some endpoints require a valid `dataset` parameter (e.g., `sanctions`). +- Sorting by unsupported fields (like `score`) may trigger errors. +- API rate limits may apply depending on your plan. \ No newline at end of file