openapi: 3.0.3 info: title: sanctions.io Account Management Screening API description: The sanctions.io API provides sanctions, PEP (politically exposed persons), and criminal watchlist screening for AML compliance. It covers the Screening API (v2.3) - real-time single search, batch screening of up to 10,000 records per request, adverse media search, data source listing, and full database export - and the Monitoring API (v3.1) for continuous monitoring with alerts, plus account management (tokens, company and webhook configuration, users, plans, usage). All requests require a Bearer API token in the Authorization header; the API version is selected with the Accept header, for example "application/json; version=2.3" (the adverse media endpoint requires version=3.0). Sign up for a self-serve 7-day free trial at https://api.sanctions.io/users/signup to obtain a key. version: '2.3' contact: name: sanctions.io url: https://www.sanctions.io email: info@sanctions.io termsOfService: https://www.sanctions.io/terms-of-service servers: - url: https://api.sanctions.io description: Production security: - bearerAuth: [] tags: - name: Screening description: Real-time single screening against sanctions, PEP, and criminal watchlists. paths: /search/: get: operationId: createScreeningRequest tags: - Screening summary: Screen a name in real time description: Queries the sanctions, criminal watchlist, and PEP databases for a name and returns scored matches. Supports individuals, entities, vessels, and aircraft. Results include the confidence score, matched record details, the originating data source, and the echoed search parameters. parameters: - $ref: '#/components/parameters/acceptVersion' - name: name in: query required: true description: Primary name of the entity being screened (maximum 15 words). Full legal name for individuals; registered name for organizations. schema: type: string example: Walter White - name: min_score in: query required: true description: Minimum match confidence score (0.8-1.0) for a result to count as a match. Recommended starting value 0.88; 0.93 for stricter matching. schema: type: number format: float minimum: 0.8 maximum: 1.0 example: 0.88 - name: data_source in: query required: true description: Comma-separated watchlist short codes (from the sources endpoint) or a Screening Collection, e.g. "sdn,nonsdn,uk-sanctions". Include ADV-MEDIA to add adverse media. schema: type: string example: sdn,nonsdn - name: entity_type in: query required: false description: Type of the screened entity. Strongly recommended to improve performance and match accuracy. schema: type: string enum: - individual - entity - vessel - aircraft - name: country in: query required: false description: ISO 3166-1 alpha-2 country associated with the entity (nationality/residence for individuals, incorporation/operating country for organizations). schema: type: string example: US - name: date_of_birth in: query required: false description: Date of birth (YYYY-MM-DD). Strongly recommended for individuals, particularly for PEP screening. schema: type: string format: date example: '1956-01-01' - name: identifier in: query required: false description: Additional identifier (passport number, national ID, tax ID, email, company domain, SWIFT code, IMO number, aircraft registration, wallet address; max 120 characters) screened in parallel with the name. schema: type: string maxLength: 120 - name: external_identifier in: query required: false description: Client-defined identifier stored and returned in results so alerts map back to your internal records. schema: type: string example: ABC123 - name: name_match_boosting_threshold in: query required: false description: Optional threshold (0.8-1.0, recommended 0.93-0.95) above which high-confidence name matches are boosted in the overall confidence score. schema: type: number format: float minimum: 0.8 maximum: 1.0 example: 0.94 responses: '200': description: Paginated screening matches plus the echoed search parameters. content: application/json: schema: $ref: '#/components/schemas/ScreeningResponse' '401': $ref: '#/components/responses/Unauthorized' components: schemas: ScreeningResponse: type: object properties: count: type: integer next: type: string nullable: true previous: type: string nullable: true results: type: array items: $ref: '#/components/schemas/ScreeningMatch' search: type: object properties: params: type: object timestamp: type: string format: date-time api_version: type: string example: '2.3' id: type: string format: uuid Error: type: object properties: detail: type: string ScreeningMatch: type: object properties: confidence_score: type: number format: float example: 1.0 name: type: string alt_names: type: array items: type: string entity_type: type: string example: Entity address: type: array items: type: string country_residence: type: array items: type: string nationality: type: array items: type: string data_source: type: object properties: name: type: string short_name: type: string remarks: type: string si_identifier: type: string description: sanctions.io-specific unique identifier for the record. first_import: type: string format: date-time last_update: type: string format: date-time data_hash: type: string description: Changes when the underlying record changes. parameters: acceptVersion: name: Accept in: header required: false description: Selects the API version, e.g. "application/json; version=2.3". Without the header, version 1.0 is used by default. schema: type: string example: application/json; version=2.3 responses: Unauthorized: description: Authentication credentials were not provided or are invalid. content: application/json: schema: $ref: '#/components/schemas/Error' example: detail: Authentication credentials were not provided. securitySchemes: bearerAuth: type: http scheme: bearer description: 'API token from the sanctions.io user portal, passed as "Authorization: Bearer {token}". The token may also be sent as a URL parameter, but the Authorization header is recommended.'