{"openapi": "3.1.0", "info": {"title": "OFACScreen API", "version": "1", "description": "Screen names, wallet addresses, identifiers and street addresses against OFAC and other sanctions lists, and monitor them. Each search counts against the plan's monthly allowance, shared with the web interface; X-RateLimit-Limit and X-RateLimit-Remaining come with every screening response, and a 429 says when the allowance resets. Documentation: https://www.ofacscreen.com/api-docs/"}, "servers": [{"url": "https://api.ofacscreen.com/api/v1"}], "security": [{"bearerAuth": []}], "paths": {"/screen/": {"post": {"operationId": "screenName", "summary": "Screen one name", "description": "Screen one name against the default lists. The name can also be a wallet address, ID number, email, website or phone number. Counts as one search, and each email, phone or website sent beside it one more.", "parameters": [{"name": "limit", "in": "query", "schema": {"type": "integer", "minimum": 1, "description": "Return only the highest-scoring `limit` matches. Omit it to get every match. `total_matches` is always the real total."}}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ScreenRequest"}}}}, "responses": {"200": {"description": "The matches.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/NameScreenResponse"}}}, "headers": {"X-RateLimit-Limit": {"description": "The month's search allowance.", "schema": {"type": "integer"}}, "X-RateLimit-Remaining": {"description": "Searches left this month.", "schema": {"type": "integer"}}}}, "400": {"description": "The request is malformed or a field is invalid. `error` says which.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "The Authorization header is missing or the API key is invalid.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "The trial or plan has ended, there is no plan, or the plan has no API access.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Refusal"}}}}, "429": {"description": "The month's searches are used up, or too few remain for this request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/QuotaExceeded"}}}, "headers": {"X-RateLimit-Limit": {"description": "The month's search allowance.", "schema": {"type": "integer"}}, "X-RateLimit-Remaining": {"description": "Searches left this month.", "schema": {"type": "integer"}}, "Retry-After": {"description": "Seconds until the allowance resets, at most 86400. Sent on a paid plan only; a trial does not reset.", "schema": {"type": "integer"}}}}}}}, "/screen/batch/": {"post": {"operationId": "screenBatch", "summary": "Screen up to 100 names", "description": "Each name counts as one search, each email, phone or website one more, and each address one more when it names a street or building. An address naming only a city or a country comes back with an address_error and is neither searched nor charged. The quota check covers the whole request before anything runs.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BatchRequest"}}}}, "responses": {"200": {"description": "One result per name or item.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BatchResponse"}}}, "headers": {"X-RateLimit-Limit": {"description": "The month's search allowance.", "schema": {"type": "integer"}}, "X-RateLimit-Remaining": {"description": "Searches left this month.", "schema": {"type": "integer"}}}}, "400": {"description": "The request is malformed or a field is invalid. `error` says which.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "The Authorization header is missing or the API key is invalid.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "The trial or plan has ended, there is no plan, or the plan has no API access.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Refusal"}}}}, "429": {"description": "The month's searches are used up, or too few remain for this request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/QuotaExceeded"}}}, "headers": {"X-RateLimit-Limit": {"description": "The month's search allowance.", "schema": {"type": "integer"}}, "X-RateLimit-Remaining": {"description": "Searches left this month.", "schema": {"type": "integer"}}, "Retry-After": {"description": "Seconds until the allowance resets, at most 86400. Sent on a paid plan only; a trial does not reset.", "schema": {"type": "integer"}}}}}}}, "/screen/address/": {"post": {"operationId": "screenAddress", "summary": "Screen one street address", "description": "Returns the listed parties whose recorded address resembles it, each with the matched_address it matched on. Counts as one search. The lists record addresses for only some of the parties on them, so no match clears no one at the address: screen the names too.", "parameters": [{"name": "limit", "in": "query", "schema": {"type": "integer", "minimum": 1, "description": "Return only the highest-scoring `limit` matches. Omit it to get every match. `total_matches` is always the real total."}}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddressScreenRequest"}}}}, "responses": {"200": {"description": "The matches.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddressScreenResponse"}}}, "headers": {"X-RateLimit-Limit": {"description": "The month's search allowance.", "schema": {"type": "integer"}}, "X-RateLimit-Remaining": {"description": "Searches left this month.", "schema": {"type": "integer"}}}}, "400": {"description": "The request is malformed or a field is invalid. `error` says which.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "The Authorization header is missing or the API key is invalid.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "The trial or plan has ended, there is no plan, or the plan has no API access.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Refusal"}}}}, "429": {"description": "The month's searches are used up, or too few remain for this request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/QuotaExceeded"}}}, "headers": {"X-RateLimit-Limit": {"description": "The month's search allowance.", "schema": {"type": "integer"}}, "X-RateLimit-Remaining": {"description": "Searches left this month.", "schema": {"type": "integer"}}, "Retry-After": {"description": "Seconds until the allowance resets, at most 86400. Sent on a paid plan only; a trial does not reset.", "schema": {"type": "integer"}}}}}}}, "/lists/": {"get": {"operationId": "listSources", "summary": "The sanctions lists", "security": [], "responses": {"200": {"description": "Every list available to screen.", "content": {"application/json": {"schema": {"type": "object", "properties": {"lists": {"type": "array", "items": {"$ref": "#/components/schemas/SanctionsList"}}}, "required": ["lists"]}}}}}}}, "/monitoring/": {"get": {"operationId": "listMonitored", "summary": "The names and addresses you monitor", "responses": {"200": {"description": "Every active watched item.", "content": {"application/json": {"schema": {"type": "object", "properties": {"entities": {"type": "array", "items": {"$ref": "#/components/schemas/WatchedItem"}}, "total": {"type": "integer"}}, "required": ["entities", "total"]}}}}, "401": {"description": "The Authorization header is missing or the API key is invalid.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "As for every endpoint, or the plan does not include monitoring.", "content": {"application/json": {"schema": {"oneOf": [{"$ref": "#/components/schemas/Refusal"}, {"$ref": "#/components/schemas/Error"}]}}}}, "429": {"description": "The month's searches are used up, or too few remain for this request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/QuotaExceeded"}}}, "headers": {"X-RateLimit-Limit": {"description": "The month's search allowance.", "schema": {"type": "integer"}}, "X-RateLimit-Remaining": {"description": "Searches left this month.", "schema": {"type": "integer"}}, "Retry-After": {"description": "Seconds until the allowance resets, at most 86400. Sent on a paid plan only; a trial does not reset.", "schema": {"type": "integer"}}}}}}, "post": {"operationId": "addMonitored", "summary": "Monitor a name or address", "description": "Each is re-screened on every sanctions list update and an email alert is sent when a new match is found.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WatchRequest"}}}}, "responses": {"201": {"description": "Added.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WatchCreated"}}}}, "400": {"description": "The request is malformed or a field is invalid. `error` says which.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "The Authorization header is missing or the API key is invalid.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "As for every endpoint, or the plan does not include monitoring.", "content": {"application/json": {"schema": {"oneOf": [{"$ref": "#/components/schemas/Refusal"}, {"$ref": "#/components/schemas/Error"}]}}}}, "409": {"description": "Already monitored.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "The month's searches are used up, or the plan's monitoring limit is reached.", "content": {"application/json": {"schema": {"oneOf": [{"$ref": "#/components/schemas/QuotaExceeded"}, {"$ref": "#/components/schemas/MonitoringLimit"}]}}}, "headers": {"X-RateLimit-Limit": {"description": "The month's search allowance.", "schema": {"type": "integer"}}, "X-RateLimit-Remaining": {"description": "Searches left this month.", "schema": {"type": "integer"}}, "Retry-After": {"description": "Seconds until the allowance resets, at most 86400. Sent on a paid plan only; a trial does not reset.", "schema": {"type": "integer"}}}}}}, "delete": {"operationId": "removeMonitored", "summary": "Stop monitoring a name or address", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"id": {"type": "integer"}}, "required": ["id"]}}}}, "responses": {"200": {"description": "Removed.", "content": {"application/json": {"schema": {"type": "object", "properties": {"id": {"type": "integer"}, "deleted": {"type": "boolean", "const": true}}, "required": ["id", "deleted"]}}}}, "400": {"description": "The request is malformed or a field is invalid. `error` says which.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "The Authorization header is missing or the API key is invalid.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "As for every endpoint, or the plan does not include monitoring.", "content": {"application/json": {"schema": {"oneOf": [{"$ref": "#/components/schemas/Refusal"}, {"$ref": "#/components/schemas/Error"}]}}}}, "429": {"description": "The month's searches are used up, or too few remain for this request.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/QuotaExceeded"}}}, "headers": {"X-RateLimit-Limit": {"description": "The month's search allowance.", "schema": {"type": "integer"}}, "X-RateLimit-Remaining": {"description": "Searches left this month.", "schema": {"type": "integer"}}, "Retry-After": {"description": "Seconds until the allowance resets, at most 86400. Sent on a paid plan only; a trial does not reset.", "schema": {"type": "integer"}}}}, "404": {"description": "No monitored item with this id.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}}, "components": {"securitySchemes": {"bearerAuth": {"type": "http", "scheme": "bearer", "description": "An API key from API keys in your dashboard: `Authorization: Bearer <key>`."}}, "schemas": {"Error": {"type": "object", "properties": {"error": {"type": "string"}}, "required": ["error"]}, "Refusal": {"type": "object", "properties": {"error": {"type": "string"}, "reason": {"type": "string", "enum": ["no_plan", "trial_ended", "plan_ended", "not_included"]}, "upgrade_url": {"type": "string", "format": "uri", "description": "On a trial or with no plan, checkout for the entry plan. On a paid plan, the plans page."}, "pricing_url": {"type": "string", "format": "uri", "description": "The plans page."}}, "required": ["error", "reason", "upgrade_url", "pricing_url"]}, "QuotaExceeded": {"type": "object", "properties": {"error": {"type": "string"}, "limit": {"type": "integer", "description": "The month's allowance."}, "used": {"type": "integer"}, "remaining": {"type": "integer"}, "required": {"type": "integer", "description": "The searches this request needed: each name, street address, email, phone or website counts as one."}, "resets_at": {"type": ["string", "null"], "format": "date-time", "description": "When the allowance resets. Null on a trial."}, "reason": {"type": "string", "enum": ["quota_exhausted", "trial_ended", "plan_ended"]}, "upgrade_url": {"type": "string", "format": "uri"}, "pricing_url": {"type": "string", "format": "uri"}}, "required": ["error", "limit", "used", "remaining", "required", "resets_at", "reason", "upgrade_url", "pricing_url"]}, "Match": {"type": "object", "properties": {"id": {"type": "integer"}, "name": {"type": "string"}, "entry_type": {"type": "string"}, "list_code": {"type": "string"}, "list_name": {"type": "string"}, "list_kind": {"type": "string", "enum": ["sanctions", "export_control", "tax", "wanted", "money_laundering", "forced_labor"]}, "program": {"type": "string"}, "remarks": {"type": "string"}, "score": {"type": "number", "minimum": 0, "maximum": 1}, "score_pct": {"type": "integer"}, "matched_alias": {"type": ["string", "null"], "description": "The alias or identifier that matched; null when the primary name did."}, "matched_identifier": {"type": "boolean", "description": "True when matched_alias is a listed ID number, wallet, email, website or phone number."}, "aliases": {"type": "array", "items": {"type": "string"}}, "addresses": {"type": "array", "items": {"type": "object", "properties": {"city": {"type": "string"}, "country": {"type": "string"}}}}, "identifications": {"type": "array", "items": {"type": "object", "properties": {"type": {"type": "string"}, "number": {"type": "string"}}}}, "match_level": {"type": "string", "enum": ["high", "medium", "low"], "description": "high from a score of 0.8, medium from 0.5, low below."}}, "required": ["id", "name", "entry_type", "list_code", "list_name", "list_kind", "program", "remarks", "score", "score_pct", "matched_alias", "matched_identifier", "aliases", "addresses", "identifications", "match_level"]}, "AddressMatch": {"allOf": [{"$ref": "#/components/schemas/Match"}, {"type": "object", "properties": {"matched_address": {"type": "object", "description": "The listed address it matched on, as the list recorded it; '' for a part it does not record.", "properties": {"address": {"type": "string"}, "city": {"type": "string"}, "state": {"type": "string"}, "postal_code": {"type": "string"}, "country": {"type": "string"}}, "required": ["address", "city", "state", "postal_code", "country"]}}, "required": ["matched_address"]}]}, "JurisdictionFlag": {"type": "object", "description": "An embargoed or high-risk place the request points to. A flag is not a sanctions match: it never adds to matches or total_matches.", "properties": {"tier": {"type": "string", "enum": ["embargoed", "high_risk"]}, "jurisdiction": {"type": "string"}, "reason": {"type": "string"}, "authority": {"type": "string"}, "source_url": {"type": "string", "format": "uri"}, "evidence": {"type": "string", "description": "What in the request raised it."}, "other_grounds": {"type": "array", "items": {"type": "object", "properties": {"tier": {"type": "string", "enum": ["embargoed", "high_risk"]}, "reason": {"type": "string"}, "authority": {"type": "string"}, "source_url": {"type": "string", "format": "uri"}}}}}, "required": ["tier", "jurisdiction", "reason", "authority", "source_url", "evidence", "other_grounds"]}, "ScreenRequest": {"type": "object", "properties": {"name": {"type": "string", "minLength": 1, "maxLength": 500, "description": "Name, wallet address, ID number, email, website or phone number to screen."}, "type": {"type": "string", "enum": ["individual", "entity", "vessel", "aircraft"], "description": "Keep only listed entries of this type. Defaults to all types. Leave it out when screening people: some lists record people as entities, so a person can be missed."}, "country": {"type": "string", "maxLength": 100, "description": "Any spelling or ISO code. An embargoed or high-risk country comes back in jurisdiction_flags."}, "threshold": {"type": "number", "minimum": 0.0, "maximum": 1.0, "default": 0.3, "description": "Minimum match score."}, "lists": {"type": "array", "items": {"type": "string", "enum": ["AE_EOCN", "AU_DFAT", "BIS_DPL", "BIS_EL", "BIS_MEU", "BIS_UVL", "CANADA_SEMA", "DHS_UFLPA", "EU_FSF", "FBI_WANTED", "FINCEN_311", "FR_GELS", "IL_NBCTF", "JP_MOF", "MX_SAT_69B", "OFAC_NONSDN", "OFAC_SDN", "PL_MSWIA", "STATE_DTC", "STATE_ISN", "SWISS_SECO", "UK_SANCTIONS", "UN_CONSOLIDATED"]}, "description": "List codes from GET /lists/ to search instead of the default ones. Omit it to search every list marked `\"core\": true`; a list marked `false` is searched only when named. An unknown code is refused with a 400."}, "limit": {"type": "integer", "minimum": 1, "description": "Return only the highest-scoring `limit` matches. Omit it to get every match. `total_matches` is always the real total."}, "email": {"type": "string", "maxLength": 500, "description": "The party's email address, checked against the ones the lists record. Up to 5 separated by commas, semicolons or line breaks, each one more search."}, "phone": {"type": "string", "maxLength": 500, "description": "The party's phone number, checked against the ones the lists record. Up to 5 separated by commas, semicolons or line breaks, each one more search."}, "website": {"type": "string", "maxLength": 500, "description": "The party's website, checked against the ones the lists record. Up to 5 separated by commas, semicolons or line breaks, each one more search."}}, "required": ["name"]}, "AddressScreenRequest": {"type": "object", "properties": {"address": {"type": "string", "minLength": 1, "maxLength": 500, "description": "The street address to screen: street and number or building, city, postal code. A city or country on its own is refused with a 400 and not charged."}, "country": {"type": "string", "maxLength": 100, "description": "Keep only listed addresses in this country, and those with no country on file. Any spelling or ISO code. Read with the address for jurisdiction_flags."}, "type": {"type": "string", "enum": ["individual", "entity", "vessel", "aircraft"], "description": "Keep only listed entries of this type. Defaults to all types. Leave it out when screening people: some lists record people as entities, so a person can be missed."}, "threshold": {"type": "number", "minimum": 0.0, "maximum": 1.0, "default": 0.3, "description": "Minimum match score."}, "lists": {"type": "array", "items": {"type": "string", "enum": ["AE_EOCN", "AU_DFAT", "BIS_DPL", "BIS_EL", "BIS_MEU", "BIS_UVL", "CANADA_SEMA", "DHS_UFLPA", "EU_FSF", "FBI_WANTED", "FINCEN_311", "FR_GELS", "IL_NBCTF", "JP_MOF", "MX_SAT_69B", "OFAC_NONSDN", "OFAC_SDN", "PL_MSWIA", "STATE_DTC", "STATE_ISN", "SWISS_SECO", "UK_SANCTIONS", "UN_CONSOLIDATED"]}, "description": "List codes from GET /lists/ to search instead of the default ones. Omit it to search every list marked `\"core\": true`; a list marked `false` is searched only when named. An unknown code is refused with a 400."}, "limit": {"type": "integer", "minimum": 1, "description": "Return only the highest-scoring `limit` matches. Omit it to get every match. `total_matches` is always the real total."}}, "required": ["address"]}, "ScreenResponse": {"type": "object", "properties": {"query": {"type": "string"}, "lists_searched": {"type": "array", "items": {"type": "string"}}, "matches": {"type": "array", "items": {"$ref": "#/components/schemas/Match"}, "description": "Highest score first."}, "total_matches": {"type": "integer"}, "jurisdiction_flags": {"type": "array", "items": {"$ref": "#/components/schemas/JurisdictionFlag"}}, "screened_at": {"type": "string", "format": "date-time"}}, "required": ["query", "lists_searched", "matches", "total_matches", "jurisdiction_flags", "screened_at"]}, "NameScreenResponse": {"allOf": [{"$ref": "#/components/schemas/ScreenResponse"}, {"type": "object", "description": "contacts, contact_matches and total_contact_matches come back only when the request sent an email, phone or website.", "properties": {"contacts": {"type": "array", "items": {"$ref": "#/components/schemas/Contact"}}, "contact_matches": {"type": "array", "items": {"$ref": "#/components/schemas/Match"}, "description": "Listed parties recorded with an email, phone or website sent. matches stays the name's."}, "total_contact_matches": {"type": "integer"}}}]}, "Contact": {"type": "object", "properties": {"type": {"type": "string", "enum": ["email", "phone", "website"]}, "value": {"type": "string"}, "total_matches": {"type": "integer"}, "error": {"type": "string", "description": "Present instead of total_matches when the value was not searched or the search failed. It was not charged."}}, "required": ["type", "value"]}, "AddressScreenResponse": {"allOf": [{"$ref": "#/components/schemas/ScreenResponse"}, {"type": "object", "properties": {"matches": {"type": "array", "items": {"$ref": "#/components/schemas/AddressMatch"}}}}]}, "BatchItem": {"type": "object", "properties": {"name": {"type": "string", "minLength": 1, "maxLength": 500}, "address": {"type": "string", "maxLength": 500}, "country": {"type": "string", "maxLength": 100, "description": "Narrows this item's searches to listed entries tied to the country or to none."}, "email": {"type": "string", "maxLength": 500, "description": "The party's email address, checked against the ones the lists record. Up to 5 separated by commas, semicolons or line breaks, each one more search."}, "phone": {"type": "string", "maxLength": 500, "description": "The party's phone number, checked against the ones the lists record. Up to 5 separated by commas, semicolons or line breaks, each one more search."}, "website": {"type": "string", "maxLength": 500, "description": "The party's website, checked against the ones the lists record. Up to 5 separated by commas, semicolons or line breaks, each one more search."}}, "required": ["name"]}, "BatchRequest": {"type": "object", "description": "Send `names` or `items`, not both, with at most 100 entries.", "properties": {"names": {"type": "array", "minItems": 1, "maxItems": 100, "items": {"type": "string", "maxLength": 500}}, "items": {"type": "array", "minItems": 1, "maxItems": 100, "items": {"$ref": "#/components/schemas/BatchItem"}}, "type": {"type": "string", "enum": ["individual", "entity", "vessel", "aircraft"], "description": "Keep only listed entries of this type. Defaults to all types. Leave it out when screening people: some lists record people as entities, so a person can be missed."}, "threshold": {"type": "number", "minimum": 0.0, "maximum": 1.0, "default": 0.3, "description": "Minimum match score."}, "lists": {"type": "array", "items": {"type": "string", "enum": ["AE_EOCN", "AU_DFAT", "BIS_DPL", "BIS_EL", "BIS_MEU", "BIS_UVL", "CANADA_SEMA", "DHS_UFLPA", "EU_FSF", "FBI_WANTED", "FINCEN_311", "FR_GELS", "IL_NBCTF", "JP_MOF", "MX_SAT_69B", "OFAC_NONSDN", "OFAC_SDN", "PL_MSWIA", "STATE_DTC", "STATE_ISN", "SWISS_SECO", "UK_SANCTIONS", "UN_CONSOLIDATED"]}, "description": "List codes from GET /lists/ to search instead of the default ones. Omit it to search every list marked `\"core\": true`; a list marked `false` is searched only when named. An unknown code is refused with a 400."}}, "oneOf": [{"required": ["names"]}, {"required": ["items"]}]}, "BatchResult": {"type": "object", "properties": {"query": {"type": "string"}, "matches": {"type": "array", "items": {"$ref": "#/components/schemas/Match"}}, "total_matches": {"type": "integer"}, "error": {"type": "string", "description": "Present instead of matches when the search failed. It was not charged; retry it."}, "address": {"type": "string"}, "address_matches": {"type": "array", "items": {"$ref": "#/components/schemas/AddressMatch"}}, "total_address_matches": {"type": "integer"}, "address_error": {"type": "string", "description": "Present instead of address_matches when the address was not searched or the search failed."}, "contacts": {"type": "array", "items": {"$ref": "#/components/schemas/Contact"}}, "contact_matches": {"type": "array", "items": {"$ref": "#/components/schemas/Match"}, "description": "Listed parties recorded with an email, phone or website sent. matches stays the name's."}, "total_contact_matches": {"type": "integer"}, "jurisdiction_flags": {"type": "array", "items": {"$ref": "#/components/schemas/JurisdictionFlag"}}}, "required": ["query", "jurisdiction_flags"]}, "BatchResponse": {"type": "object", "properties": {"lists_searched": {"type": "array", "items": {"type": "string"}}, "results": {"type": "array", "items": {"$ref": "#/components/schemas/BatchResult"}}, "total_screened": {"type": "integer", "description": "The searches that ran and were charged."}, "screened_at": {"type": "string", "format": "date-time"}}, "required": ["lists_searched", "results", "total_screened", "screened_at"]}, "SanctionsList": {"type": "object", "properties": {"code": {"type": "string"}, "name": {"type": "string"}, "country": {"type": "string"}, "description": {"type": "string"}, "last_updated": {"type": ["string", "null"], "format": "date-time", "description": "When the list was last updated."}, "data_as_of": {"type": ["string", "null"], "format": "date", "description": "The date the publisher put on this copy, or null where it gives none."}, "core": {"type": "boolean", "description": "Whether a screening that names no lists searches this list."}, "entry_count": {"type": "integer", "description": "The entries on the list."}}, "required": ["code", "name", "country", "description", "last_updated", "data_as_of", "core", "entry_count"]}, "WatchedItem": {"type": "object", "properties": {"id": {"type": "integer"}, "kind": {"type": "string", "enum": ["name", "address"]}, "name": {"type": "string", "description": "The watched name or address."}, "country": {"type": "string", "description": "An address only: the country it was added with, empty for none."}, "entity_type": {"type": ["string", "null"], "description": "Null for an address."}, "last_checked_at": {"type": ["string", "null"], "format": "date-time"}, "last_match_found": {"type": "boolean"}, "last_match_score": {"type": "number"}}, "required": ["id", "kind", "name", "entity_type", "last_checked_at", "last_match_found", "last_match_score"]}, "WatchRequest": {"type": "object", "description": "Send `name` to watch a name, or `address` (with an optional `country`) to watch a street address.", "properties": {"name": {"type": "string", "minLength": 1, "maxLength": 500}, "entity_type": {"type": "string", "enum": ["individual", "entity"], "default": "individual"}, "address": {"type": "string", "minLength": 1, "maxLength": 500, "description": "Must name a street or building: a city or country alone is refused with a 400."}, "country": {"type": "string", "maxLength": 100, "description": "An address only: keeps matches tied to this country or to none."}}, "anyOf": [{"required": ["name"]}, {"required": ["address"]}]}, "WatchCreated": {"type": "object", "properties": {"id": {"type": "integer"}, "kind": {"type": "string", "enum": ["name", "address"]}, "name": {"type": "string"}, "country": {"type": "string"}, "entity_type": {"type": ["string", "null"]}, "created": {"type": "boolean", "const": true}}, "required": ["id", "kind", "name", "entity_type", "created"]}, "MonitoringLimit": {"type": "object", "properties": {"error": {"type": "string"}, "limit": {"type": "integer", "description": "The names and addresses the plan can monitor."}, "current": {"type": "integer"}}, "required": ["error", "limit", "current"]}}}}