Screen a person or business against global sanctions and denied-party watchlists.
Act on decision, not on topScore
decision is the integration contract. Branch on it and nothing else:
decision
Meaning
What you should do
clear
Nothing matched
Proceed
review
A possible match a human must adjudicate
Hold the subject
blocked
A confident match to an asset-freeze list
Hold and escalate
unavailable
Screening could not complete
Not screened. Retry or hold — never treat as clear
Why not the score
topScore is a name-similarity score, not a risk score, and it is returned for
diagnostics only — show it to your reviewers to help them triage, but do not build
thresholds on it. Four reasons, all measured against live watchlist data:
It does not separate real from innocent. A true OFAC SDN entry scores 0.8122 on
name alone; an innocent person with a common name scores 0.7513. Six points apart —
no threshold sits safely between them.
It is not comparable across subjects. The score carries a coverage penalty — a
name-only query is structurally capped however perfect the name, while a query with a
date of birth is not. The same SDN entry scores 0.8122 on name alone and 0.9025 with
a date of birth. Same person, same list entry, different number. A threshold applied
across a mixed population applies different standards to different customers.
It is not stable over time. That same entry scored 0.8762 on 2026-07-14 and
0.9025 on 2026-07-16 — same subject, same query, same software. The watchlists
themselves refresh (OFAC gained 61 entries in those two days) and scores move with the
data. Lists reload every 12 hours. A hard-coded >= 0.90 can change behaviour twice a
day, with no release on your side.
Legal effect follows the list, not the number. A 0.95 match on a sectoral list is
a transaction restriction; a 0.82 match on a freeze list is an asset freeze. Ranking
those by score is backwards.
decision absorbs all four. It is the only part of this response we treat as a stable
contract.
decision already folds in the score, the list’s legal effect, how much identity data was
available, and exact government-ID matches — so you do not have to.
Send more than a name
A dateOfBirth (people) or address (businesses) is what makes the answer trustworthy.
dataCompleteness in the response tells you what you gave us: full, partial, or
name_only. A name_only check is deliberately never auto-blocked, because at that
coverage the score cannot carry the weight. If you see name_only, your integration is
leaving accuracy on the table.
confirmWith — the one thing to send next
When a check comes back review or blocked, confirmWith asks for exactly one field:
the strongest piece of identity data you have not already sent. key is the request field
to send it in, so the ask is directly actionable — populate it, POST a new check, and if
that still hits you are asked for the next one. Anything already in hand is never asked for
twice, whatever order it arrived in.
For a person the ladder is dateOfBirth → governmentIds → altNames → address; for
a business, address → governmentIds → altNames → incorporationDate. So a check
carrying only a name is asked for a date of birth, while one that already carried a
government ID skips straight past it:
Your check carries
confirmWith asks for
name
dateOfBirth
name + governmentIds
dateOfBirth
name + governmentIds + dateOfBirth
altNames
the whole ladder
(empty — nothing left to send)
label is the same wording our compliance desk would use for that field, so it is safe to
show verbatim to whoever supplies the data.
Two things the ordering is honest about. A government ID is the strongest confirmation
available — an exact match to a listed party’s identifier is not a coincidence — but the
effect is one-way: an ID that doesn’t match does not clear anything by itself, it gives a
reviewer the grounds to. That is why a date of birth outranks it for a person: it changes
what the search returns rather than only how a returned match is judged.
confirmWith is empty on clear, and empty on unavailable — that check never ran, so more
identity data does not help; retry it instead. An empty array on a hit means the check is
already as strong as this API can make it and the remaining question needs a human.
Each successful check is billed once on your monthly invoice. unavailable checks are not
billed.
The screening result. This example shows a review — a real match that a human must confirm, and the shape most genuine hits arrive in. The topScore shown is illustrative: do not assert on it, and do not infer a threshold from it (see the endpoint description).
UTC timestamp (milliseconds since epoch) when response was generated.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Finogates API Documentation","colors":{"primary":"#0161EF","light":"#005FC8","dark":"#0161EF"},"logo":{"light":"https://mintcdn.com/finogates/XLUrxtJNLX8DNeIV/assets/logo/app-logo-dark.png?fit=max\u0026auto=format\u0026n=XLUrxtJNLX8DNeIV\u0026q=85\u0026s=e00390491535714f472eb3e4ec1edc84","dark":"https://mintcdn.com/finogates/XLUrxtJNLX8DNeIV/assets/logo/app-logo-light.png?fit=max\u0026auto=format\u0026n=XLUrxtJNLX8DNeIV\u0026q=85\u0026s=d3498e69f2963f42bbc431b5152a7906"},"favicon":"https://mintcdn.com/finogates/XLUrxtJNLX8DNeIV/favicon.ico?fit=max\u0026auto=format\u0026n=XLUrxtJNLX8DNeIV\u0026q=85\u0026s=5b975369622b0e780220864a3af0bd91","api":{"openapi":{"source":"https://api-sandbox.fg.wintpay.com/openapi-v1-platform.json","directory":"api-reference"}},"navbar":{"links":[{"href":"mailto:support@finogates.com","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.finogates.com"}},"seo":{"indexing":"all"},"fonts":{"family":"Inter","weight":400},"styling":{"eyebrows":"breadcrumbs","latex":false},"interaction":{"drilldown":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"finogates","hasAudioNarration":false,"actualSubdomain":"finogates","customDomains":["developer.finogates.com"],"gitSource":{"type":"github","owner":"paywint-developer","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6acdb33161144972c6aff215","collectionId":"071256f1-4b56-436f-b45e-c00a7f1caceb","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6acdb33161144972c6aff215"},"entitlements":{},"buildId":"6acdb33161144972c6aff215","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"API Reference","count":172},{"language":"default","tag":"Payees","count":18},{"language":"default","tag":"Phone Numbers","count":18},{"language":"default","tag":"Webhooks","count":16},{"language":"default","tag":"Card Processing","count":15},{"language":"default","tag":"Wallets","count":14},{"language":"default","tag":"Bank Accounts","count":13},{"language":"default","tag":"Verification","count":13},{"language":"default","tag":"Digital Assets","count":9},{"language":"default","tag":"International","count":9}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/screening/create-screening-check","slug":"/api-reference/screening/create-screening-check","pageMetadata":{"title":"Screen a Subject","openapi":"POST /v1/platform/screening/checks","description":"Screen a person or business against global sanctions and denied-party watchlists.\n\n### Act on `decision`, not on `topScore`\n\n`decision` is the integration contract. Branch on it and nothing else:\n\n| `decision` | Meaning | What you should do |\n|---|---|---|\n| `clear` | Nothing matched | Proceed |\n| `review` | A possible match a human must adjudicate | Hold the subject |\n| `blocked` | A confident match to an asset-freeze list | Hold and escalate |\n| `unavailable` | Screening could not complete | **Not screened.** Retry or hold — never treat as clear |\n\n### Why not the score\n\n`topScore` is a **name-similarity score, not a risk score**, and it is returned for\ndiagnostics only — show it to your reviewers to help them triage, but do not build\nthresholds on it. Four reasons, all measured against live watchlist data:\n\n- **It does not separate real from innocent.** A true OFAC SDN entry scores `0.8122` on\n name alone; an innocent person with a common name scores `0.7513`. Six points apart —\n no threshold sits safely between them.\n- **It is not comparable across subjects.** The score carries a coverage penalty — a\n name-only query is structurally capped however perfect the name, while a query with a\n date of birth is not. The same SDN entry scores `0.8122` on name alone and `0.9025` with\n a date of birth. Same person, same list entry, different number. A threshold applied\n across a mixed population applies different standards to different customers.\n- **It is not stable over time.** That same entry scored `0.8762` on 2026-07-14 and\n `0.9025` on 2026-07-16 — same subject, same query, same software. The watchlists\n themselves refresh (OFAC gained 61 entries in those two days) and scores move with the\n data. Lists reload every 12 hours. A hard-coded `>= 0.90` can change behaviour twice a\n day, with no release on your side.\n- **Legal effect follows the list, not the number.** A `0.95` match on a sectoral list is\n a transaction restriction; a `0.82` match on a freeze list is an asset freeze. Ranking\n those by score is backwards.\n\n`decision` absorbs all four. It is the only part of this response we treat as a stable\ncontract.\n\n`decision` already folds in the score, the list's legal effect, how much identity data was\navailable, and exact government-ID matches — so you do not have to.\n\n### Send more than a name\n\nA `dateOfBirth` (people) or `address` (businesses) is what makes the answer trustworthy.\n`dataCompleteness` in the response tells you what you gave us: `full`, `partial`, or\n`name_only`. A `name_only` check is deliberately never auto-blocked, because at that\ncoverage the score cannot carry the weight. If you see `name_only`, your integration is\nleaving accuracy on the table.\n\n### `confirmWith` — the one thing to send next\n\nWhen a check comes back `review` or `blocked`, `confirmWith` asks for **exactly one field**:\nthe strongest piece of identity data you have not already sent. `key` is the request field\nto send it in, so the ask is directly actionable — populate it, POST a new check, and if\nthat still hits you are asked for the next one. Anything already in hand is never asked for\ntwice, whatever order it arrived in.\n\nFor a **person** the ladder is `dateOfBirth` → `governmentIds` → `altNames` → `address`; for\na **business**, `address` → `governmentIds` → `altNames` → `incorporationDate`. So a check\ncarrying only a name is asked for a date of birth, while one that already carried a\ngovernment ID skips straight past it:\n\n| Your check carries | `confirmWith` asks for |\n|---|---|\n| name | `dateOfBirth` |\n| name + `governmentIds` | `dateOfBirth` |\n| name + `governmentIds` + `dateOfBirth` | `altNames` |\n| the whole ladder | *(empty — nothing left to send)* |\n\n`label` is the same wording our compliance desk would use for that field, so it is safe to\nshow verbatim to whoever supplies the data.\n\nTwo things the ordering is honest about. A **government ID** is the strongest confirmation\navailable — an exact match to a listed party's identifier is not a coincidence — but the\neffect is one-way: an ID that *doesn't* match does not clear anything by itself, it gives a\nreviewer the grounds to. That is why a **date of birth** outranks it for a person: it changes\nwhat the search returns rather than only how a returned match is judged.\n\n`confirmWith` is empty on `clear`, and empty on `unavailable` — that check never ran, so more\nidentity data does not help; retry it instead. An empty array on a hit means the check is\nalready as strong as this API can make it and the remaining question needs a human.\n\nEach successful check is billed once on your monthly invoice. `unavailable` checks are not\nbilled.","href":"/api-reference/screening/create-screening-check"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n em: \"em\",\n h3: \"h3\",\n li: \"li\",\n p: \"p\",\n strong: \"strong\",\n table: \"table\",\n tbody: \"tbody\",\n td: \"td\",\n th: \"th\",\n thead: \"thead\",\n tr: \"tr\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Screen a person or business against global sanctions and denied-party watchlists.\"\n }), \"\\n\", _jsxs(_components.h3, {\n children: [\"Act on \", _jsx(_components.code, {\n children: \"decision\"\n }), \", not on \", _jsx(_components.code, {\n children: \"topScore\"\n })]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"decision\"\n }), \" is the integration contract. Branch on it and nothing else:\"]\n }), \"\\n\", _jsxs(_components.table, {\n children: [_jsx(_components.thead, {\n children: _jsxs(_components.tr, {\n children: [_jsx(_components.th, {\n children: _jsx(_components.code, {\n children: \"decision\"\n })\n }), _jsx(_components.th, {\n children: \"Meaning\"\n }), _jsx(_components.th, {\n children: \"What you should do\"\n })]\n })\n }), _jsxs(_components.tbody, {\n children: [_jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"clear\"\n })\n }), _jsx(_components.td, {\n children: \"Nothing matched\"\n }), _jsx(_components.td, {\n children: \"Proceed\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"review\"\n })\n }), _jsx(_components.td, {\n children: \"A possible match a human must adjudicate\"\n }), _jsx(_components.td, {\n children: \"Hold the subject\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"blocked\"\n })\n }), _jsx(_components.td, {\n children: \"A confident match to an asset-freeze list\"\n }), _jsx(_components.td, {\n children: \"Hold and escalate\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"unavailable\"\n })\n }), _jsx(_components.td, {\n children: \"Screening could not complete\"\n }), _jsxs(_components.td, {\n children: [_jsx(_components.strong, {\n children: \"Not screened.\"\n }), \" Retry or hold — never treat as clear\"]\n })]\n })]\n })]\n }), \"\\n\", _jsx(_components.h3, {\n children: \"Why not the score\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"topScore\"\n }), \" is a \", _jsx(_components.strong, {\n children: \"name-similarity score, not a risk score\"\n }), \", and it is returned for\\ndiagnostics only — show it to your reviewers to help them triage, but do not build\\nthresholds on it. Four reasons, all measured against live watchlist data:\"]\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: \"It does not separate real from innocent.\"\n }), \" A true OFAC SDN entry scores \", _jsx(_components.code, {\n children: \"0.8122\"\n }), \" on\\nname alone; an innocent person with a common name scores \", _jsx(_components.code, {\n children: \"0.7513\"\n }), \". Six points apart —\\nno threshold sits safely between them.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: \"It is not comparable across subjects.\"\n }), \" The score carries a coverage penalty — a\\nname-only query is structurally capped however perfect the name, while a query with a\\ndate of birth is not. The same SDN entry scores \", _jsx(_components.code, {\n children: \"0.8122\"\n }), \" on name alone and \", _jsx(_components.code, {\n children: \"0.9025\"\n }), \" with\\na date of birth. Same person, same list entry, different number. A threshold applied\\nacross a mixed population applies different standards to different customers.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: \"It is not stable over time.\"\n }), \" That same entry scored \", _jsx(_components.code, {\n children: \"0.8762\"\n }), \" on 2026-07-14 and\\n\", _jsx(_components.code, {\n children: \"0.9025\"\n }), \" on 2026-07-16 — same subject, same query, same software. The watchlists\\nthemselves refresh (OFAC gained 61 entries in those two days) and scores move with the\\ndata. Lists reload every 12 hours. A hard-coded \", _jsx(_components.code, {\n children: \">= 0.90\"\n }), \" can change behaviour twice a\\nday, with no release on your side.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: \"Legal effect follows the list, not the number.\"\n }), \" A \", _jsx(_components.code, {\n children: \"0.95\"\n }), \" match on a sectoral list is\\na transaction restriction; a \", _jsx(_components.code, {\n children: \"0.82\"\n }), \" match on a freeze list is an asset freeze. Ranking\\nthose by score is backwards.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"decision\"\n }), \" absorbs all four. It is the only part of this response we treat as a stable\\ncontract.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"decision\"\n }), \" already folds in the score, the list’s legal effect, how much identity data was\\navailable, and exact government-ID matches — so you do not have to.\"]\n }), \"\\n\", _jsx(_components.h3, {\n children: \"Send more than a name\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A \", _jsx(_components.code, {\n children: \"dateOfBirth\"\n }), \" (people) or \", _jsx(_components.code, {\n children: \"address\"\n }), \" (businesses) is what makes the answer trustworthy.\\n\", _jsx(_components.code, {\n children: \"dataCompleteness\"\n }), \" in the response tells you what you gave us: \", _jsx(_components.code, {\n children: \"full\"\n }), \", \", _jsx(_components.code, {\n children: \"partial\"\n }), \", or\\n\", _jsx(_components.code, {\n children: \"name_only\"\n }), \". A \", _jsx(_components.code, {\n children: \"name_only\"\n }), \" check is deliberately never auto-blocked, because at that\\ncoverage the score cannot carry the weight. If you see \", _jsx(_components.code, {\n children: \"name_only\"\n }), \", your integration is\\nleaving accuracy on the table.\"]\n }), \"\\n\", _jsxs(_components.h3, {\n children: [_jsx(_components.code, {\n children: \"confirmWith\"\n }), \" — the one thing to send next\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"When a check comes back \", _jsx(_components.code, {\n children: \"review\"\n }), \" or \", _jsx(_components.code, {\n children: \"blocked\"\n }), \", \", _jsx(_components.code, {\n children: \"confirmWith\"\n }), \" asks for \", _jsx(_components.strong, {\n children: \"exactly one field\"\n }), \":\\nthe strongest piece of identity data you have not already sent. \", _jsx(_components.code, {\n children: \"key\"\n }), \" is the request field\\nto send it in, so the ask is directly actionable — populate it, POST a new check, and if\\nthat still hits you are asked for the next one. Anything already in hand is never asked for\\ntwice, whatever order it arrived in.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"For a \", _jsx(_components.strong, {\n children: \"person\"\n }), \" the ladder is \", _jsx(_components.code, {\n children: \"dateOfBirth\"\n }), \" → \", _jsx(_components.code, {\n children: \"governmentIds\"\n }), \" → \", _jsx(_components.code, {\n children: \"altNames\"\n }), \" → \", _jsx(_components.code, {\n children: \"address\"\n }), \"; for\\na \", _jsx(_components.strong, {\n children: \"business\"\n }), \", \", _jsx(_components.code, {\n children: \"address\"\n }), \" → \", _jsx(_components.code, {\n children: \"governmentIds\"\n }), \" → \", _jsx(_components.code, {\n children: \"altNames\"\n }), \" → \", _jsx(_components.code, {\n children: \"incorporationDate\"\n }), \". So a check\\ncarrying only a name is asked for a date of birth, while one that already carried a\\ngovernment ID skips straight past it:\"]\n }), \"\\n\", _jsxs(_components.table, {\n children: [_jsx(_components.thead, {\n children: _jsxs(_components.tr, {\n children: [_jsx(_components.th, {\n children: \"Your check carries\"\n }), _jsxs(_components.th, {\n children: [_jsx(_components.code, {\n children: \"confirmWith\"\n }), \" asks for\"]\n })]\n })\n }), _jsxs(_components.tbody, {\n children: [_jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"name\"\n }), _jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"dateOfBirth\"\n })\n })]\n }), _jsxs(_components.tr, {\n children: [_jsxs(_components.td, {\n children: [\"name + \", _jsx(_components.code, {\n children: \"governmentIds\"\n })]\n }), _jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"dateOfBirth\"\n })\n })]\n }), _jsxs(_components.tr, {\n children: [_jsxs(_components.td, {\n children: [\"name + \", _jsx(_components.code, {\n children: \"governmentIds\"\n }), \" + \", _jsx(_components.code, {\n children: \"dateOfBirth\"\n })]\n }), _jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"altNames\"\n })\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"the whole ladder\"\n }), _jsx(_components.td, {\n children: _jsx(_components.em, {\n children: \"(empty — nothing left to send)\"\n })\n })]\n })]\n })]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"label\"\n }), \" is the same wording our compliance desk would use for that field, so it is safe to\\nshow verbatim to whoever supplies the data.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Two things the ordering is honest about. A \", _jsx(_components.strong, {\n children: \"government ID\"\n }), \" is the strongest confirmation\\navailable — an exact match to a listed party’s identifier is not a coincidence — but the\\neffect is one-way: an ID that \", _jsx(_components.em, {\n children: \"doesn’t\"\n }), \" match does not clear anything by itself, it gives a\\nreviewer the grounds to. That is why a \", _jsx(_components.strong, {\n children: \"date of birth\"\n }), \" outranks it for a person: it changes\\nwhat the search returns rather than only how a returned match is judged.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"confirmWith\"\n }), \" is empty on \", _jsx(_components.code, {\n children: \"clear\"\n }), \", and empty on \", _jsx(_components.code, {\n children: \"unavailable\"\n }), \" — that check never ran, so more\\nidentity data does not help; retry it instead. An empty array on a hit means the check is\\nalready as strong as this API can make it and the remaining question needs a human.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Each successful check is billed once on your monthly invoice. \", _jsx(_components.code, {\n children: \"unavailable\"\n }), \" checks are not\\nbilled.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Screen a Subject","openapi":"POST /v1/platform/screening/checks","description":"Screen a person or business against global sanctions and denied-party watchlists.\n\n### Act on `decision`, not on `topScore`\n\n`decision` is the integration contract. Branch on it and nothing else:\n\n| `decision` | Meaning | What you should do |\n|---|---|---|\n| `clear` | Nothing matched | Proceed |\n| `review` | A possible match a human must adjudicate | Hold the subject |\n| `blocked` | A confident match to an asset-freeze list | Hold and escalate |\n| `unavailable` | Screening could not complete | **Not screened.** Retry or hold — never treat as clear |\n\n### Why not the score\n\n`topScore` is a **name-similarity score, not a risk score**, and it is returned for\ndiagnostics only — show it to your reviewers to help them triage, but do not build\nthresholds on it. Four reasons, all measured against live watchlist data:\n\n- **It does not separate real from innocent.** A true OFAC SDN entry scores `0.8122` on\n name alone; an innocent person with a common name scores `0.7513`. Six points apart —\n no threshold sits safely between them.\n- **It is not comparable across subjects.** The score carries a coverage penalty — a\n name-only query is structurally capped however perfect the name, while a query with a\n date of birth is not. The same SDN entry scores `0.8122` on name alone and `0.9025` with\n a date of birth. Same person, same list entry, different number. A threshold applied\n across a mixed population applies different standards to different customers.\n- **It is not stable over time.** That same entry scored `0.8762` on 2026-07-14 and\n `0.9025` on 2026-07-16 — same subject, same query, same software. The watchlists\n themselves refresh (OFAC gained 61 entries in those two days) and scores move with the\n data. Lists reload every 12 hours. A hard-coded `>= 0.90` can change behaviour twice a\n day, with no release on your side.\n- **Legal effect follows the list, not the number.** A `0.95` match on a sectoral list is\n a transaction restriction; a `0.82` match on a freeze list is an asset freeze. Ranking\n those by score is backwards.\n\n`decision` absorbs all four. It is the only part of this response we treat as a stable\ncontract.\n\n`decision` already folds in the score, the list's legal effect, how much identity data was\navailable, and exact government-ID matches — so you do not have to.\n\n### Send more than a name\n\nA `dateOfBirth` (people) or `address` (businesses) is what makes the answer trustworthy.\n`dataCompleteness` in the response tells you what you gave us: `full`, `partial`, or\n`name_only`. A `name_only` check is deliberately never auto-blocked, because at that\ncoverage the score cannot carry the weight. If you see `name_only`, your integration is\nleaving accuracy on the table.\n\n### `confirmWith` — the one thing to send next\n\nWhen a check comes back `review` or `blocked`, `confirmWith` asks for **exactly one field**:\nthe strongest piece of identity data you have not already sent. `key` is the request field\nto send it in, so the ask is directly actionable — populate it, POST a new check, and if\nthat still hits you are asked for the next one. Anything already in hand is never asked for\ntwice, whatever order it arrived in.\n\nFor a **person** the ladder is `dateOfBirth` → `governmentIds` → `altNames` → `address`; for\na **business**, `address` → `governmentIds` → `altNames` → `incorporationDate`. So a check\ncarrying only a name is asked for a date of birth, while one that already carried a\ngovernment ID skips straight past it:\n\n| Your check carries | `confirmWith` asks for |\n|---|---|\n| name | `dateOfBirth` |\n| name + `governmentIds` | `dateOfBirth` |\n| name + `governmentIds` + `dateOfBirth` | `altNames` |\n| the whole ladder | *(empty — nothing left to send)* |\n\n`label` is the same wording our compliance desk would use for that field, so it is safe to\nshow verbatim to whoever supplies the data.\n\nTwo things the ordering is honest about. A **government ID** is the strongest confirmation\navailable — an exact match to a listed party's identifier is not a coincidence — but the\neffect is one-way: an ID that *doesn't* match does not clear anything by itself, it gives a\nreviewer the grounds to. That is why a **date of birth** outranks it for a person: it changes\nwhat the search returns rather than only how a returned match is judged.\n\n`confirmWith` is empty on `clear`, and empty on `unavailable` — that check never ran, so more\nidentity data does not help; retry it instead. An empty array on a hit means the check is\nalready as strong as this API can make it and the remaining question needs a human.\n\nEach successful check is billed once on your monthly invoice. `unavailable` checks are not\nbilled.","href":"/api-reference/screening/create-screening-check"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["screening"],"summary":"Screen a subject","description":"Screen a person or business against global sanctions and denied-party watchlists.\n\n### Act on `decision`, not on `topScore`\n\n`decision` is the integration contract. Branch on it and nothing else:\n\n| `decision` | Meaning | What you should do |\n|---|---|---|\n| `clear` | Nothing matched | Proceed |\n| `review` | A possible match a human must adjudicate | Hold the subject |\n| `blocked` | A confident match to an asset-freeze list | Hold and escalate |\n| `unavailable` | Screening could not complete | **Not screened.** Retry or hold — never treat as clear |\n\n### Why not the score\n\n`topScore` is a **name-similarity score, not a risk score**, and it is returned for\ndiagnostics only — show it to your reviewers to help them triage, but do not build\nthresholds on it. Four reasons, all measured against live watchlist data:\n\n- **It does not separate real from innocent.** A true OFAC SDN entry scores `0.8122` on\n name alone; an innocent person with a common name scores `0.7513`. Six points apart —\n no threshold sits safely between them.\n- **It is not comparable across subjects.** The score carries a coverage penalty — a\n name-only query is structurally capped however perfect the name, while a query with a\n date of birth is not. The same SDN entry scores `0.8122` on name alone and `0.9025` with\n a date of birth. Same person, same list entry, different number. A threshold applied\n across a mixed population applies different standards to different customers.\n- **It is not stable over time.** That same entry scored `0.8762` on 2026-07-14 and\n `0.9025` on 2026-07-16 — same subject, same query, same software. The watchlists\n themselves refresh (OFAC gained 61 entries in those two days) and scores move with the\n data. Lists reload every 12 hours. A hard-coded `>= 0.90` can change behaviour twice a\n day, with no release on your side.\n- **Legal effect follows the list, not the number.** A `0.95` match on a sectoral list is\n a transaction restriction; a `0.82` match on a freeze list is an asset freeze. Ranking\n those by score is backwards.\n\n`decision` absorbs all four. It is the only part of this response we treat as a stable\ncontract.\n\n`decision` already folds in the score, the list's legal effect, how much identity data was\navailable, and exact government-ID matches — so you do not have to.\n\n### Send more than a name\n\nA `dateOfBirth` (people) or `address` (businesses) is what makes the answer trustworthy.\n`dataCompleteness` in the response tells you what you gave us: `full`, `partial`, or\n`name_only`. A `name_only` check is deliberately never auto-blocked, because at that\ncoverage the score cannot carry the weight. If you see `name_only`, your integration is\nleaving accuracy on the table.\n\n### `confirmWith` — the one thing to send next\n\nWhen a check comes back `review` or `blocked`, `confirmWith` asks for **exactly one field**:\nthe strongest piece of identity data you have not already sent. `key` is the request field\nto send it in, so the ask is directly actionable — populate it, POST a new check, and if\nthat still hits you are asked for the next one. Anything already in hand is never asked for\ntwice, whatever order it arrived in.\n\nFor a **person** the ladder is `dateOfBirth` → `governmentIds` → `altNames` → `address`; for\na **business**, `address` → `governmentIds` → `altNames` → `incorporationDate`. So a check\ncarrying only a name is asked for a date of birth, while one that already carried a\ngovernment ID skips straight past it:\n\n| Your check carries | `confirmWith` asks for |\n|---|---|\n| name | `dateOfBirth` |\n| name + `governmentIds` | `dateOfBirth` |\n| name + `governmentIds` + `dateOfBirth` | `altNames` |\n| the whole ladder | *(empty — nothing left to send)* |\n\n`label` is the same wording our compliance desk would use for that field, so it is safe to\nshow verbatim to whoever supplies the data.\n\nTwo things the ordering is honest about. A **government ID** is the strongest confirmation\navailable — an exact match to a listed party's identifier is not a coincidence — but the\neffect is one-way: an ID that *doesn't* match does not clear anything by itself, it gives a\nreviewer the grounds to. That is why a **date of birth** outranks it for a person: it changes\nwhat the search returns rather than only how a returned match is judged.\n\n`confirmWith` is empty on `clear`, and empty on `unavailable` — that check never ran, so more\nidentity data does not help; retry it instead. An empty array on a hit means the check is\nalready as strong as this API can make it and the remaining question needs a human.\n\nEach successful check is billed once on your monthly invoice. `unavailable` checks are not\nbilled.","operationId":"create_check_v1_platform_screening_checks_post","security":["8f17a26f-bfcf-4b66-9c57-3dbecb47921d"],"requestBody":"4ddd58cb-ba11-4e69-b230-174fbee378e1","responses":{"200":"d6fa56e9-c527-475f-8829-a5e7c18730b9","422":"8b446273-051f-4f3d-9b7f-8d80f938c352"},"method":"post","type":"path","servers":["e8e3d206-dddf-4b3a-8686-a8bb8fdad22b","63fefe2c-7a97-42af-996c-e46a872cdae6"],"path":"/v1/platform/screening/checks","baseUrlOptions":["https://api-sandbox.finogates.com","https://api.finogates.com"],"title":"Screen a subject","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"entityType":{"type":"string","enum":["person","business"],"title":"ScreeningEntityType","description":"Whether the subject is a person or a business.","isRequired":true,"uniqueKey":"entityType","typeLabel":"enum\u003cstring>"},"name":{"type":"string","maxLength":500,"minLength":1,"title":"Name","description":"Full name / legal name.","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"dateOfBirth":{"oneOf":[{"type":"string","title":"Dateofbirth","description":"Date of birth (any common format; normalised to YYYY-MM-DD). Supplying it dramatically reduces false positives for people.","uniqueKey":"dateOfBirth.oneOf.0","typeLabel":"string"},{"type":"null","title":"Dateofbirth","description":"Date of birth (any common format; normalised to YYYY-MM-DD). Supplying it dramatically reduces false positives for people.","uniqueKey":"dateOfBirth.oneOf.1","typeLabel":"null"}],"uniqueKey":"dateOfBirth","typeLabel":"string | null"},"gender":{"oneOf":[{"type":"string","title":"Gender","uniqueKey":"gender.oneOf.0","typeLabel":"string"},{"type":"null","title":"Gender","uniqueKey":"gender.oneOf.1","typeLabel":"null"}],"uniqueKey":"gender","typeLabel":"string | null"},"incorporationDate":{"oneOf":[{"type":"string","title":"Incorporationdate","uniqueKey":"incorporationDate.oneOf.0","typeLabel":"string"},{"type":"null","title":"Incorporationdate","uniqueKey":"incorporationDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"incorporationDate","typeLabel":"string | null"},"website":{"oneOf":[{"type":"string","title":"Website","uniqueKey":"website.oneOf.0","typeLabel":"string"},{"type":"null","title":"Website","uniqueKey":"website.oneOf.1","typeLabel":"null"}],"uniqueKey":"website","typeLabel":"string | null"},"altNames":{"items":{"type":"string","uniqueKey":"altNames.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Altnames","uniqueKey":"altNames","typeLabel":"string[]"},"address":{"oneOf":[{"type":"object","title":"ScreeningAddressInput","description":"A structured address; flattened to one line before screening.","properties":{"line1":{"oneOf":[{"type":"string","title":"Line1","uniqueKey":"address.oneOf.0.line1.oneOf.0","typeLabel":"string"},{"type":"null","title":"Line1","uniqueKey":"address.oneOf.0.line1.oneOf.1","typeLabel":"null"}],"uniqueKey":"address.oneOf.0.line1","typeLabel":"string | null"},"line2":{"oneOf":[{"type":"string","title":"Line2","uniqueKey":"address.oneOf.0.line2.oneOf.0","typeLabel":"string"},{"type":"null","title":"Line2","uniqueKey":"address.oneOf.0.line2.oneOf.1","typeLabel":"null"}],"uniqueKey":"address.oneOf.0.line2","typeLabel":"string | null"},"city":{"oneOf":[{"type":"string","title":"City","uniqueKey":"address.oneOf.0.city.oneOf.0","typeLabel":"string"},{"type":"null","title":"City","uniqueKey":"address.oneOf.0.city.oneOf.1","typeLabel":"null"}],"uniqueKey":"address.oneOf.0.city","typeLabel":"string | null"},"state":{"oneOf":[{"type":"string","title":"State","uniqueKey":"address.oneOf.0.state.oneOf.0","typeLabel":"string"},{"type":"null","title":"State","uniqueKey":"address.oneOf.0.state.oneOf.1","typeLabel":"null"}],"uniqueKey":"address.oneOf.0.state","typeLabel":"string | null"},"postalCode":{"oneOf":[{"type":"string","title":"Postalcode","uniqueKey":"address.oneOf.0.postalCode.oneOf.0","typeLabel":"string"},{"type":"null","title":"Postalcode","uniqueKey":"address.oneOf.0.postalCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"address.oneOf.0.postalCode","typeLabel":"string | null"},"country":{"oneOf":[{"type":"string","title":"Country","uniqueKey":"address.oneOf.0.country.oneOf.0","typeLabel":"string"},{"type":"null","title":"Country","uniqueKey":"address.oneOf.0.country.oneOf.1","typeLabel":"null"}],"uniqueKey":"address.oneOf.0.country","typeLabel":"string | null"}},"uniqueKey":"address.oneOf.0","typeLabel":"ScreeningAddressInput · object"},{"type":"null","uniqueKey":"address.oneOf.1","typeLabel":"null"}],"uniqueKey":"address","typeLabel":"ScreeningAddressInput · object | null"},"email":{"oneOf":[{"type":"string","title":"Email","uniqueKey":"email.oneOf.0","typeLabel":"string"},{"type":"null","title":"Email","uniqueKey":"email.oneOf.1","typeLabel":"null"}],"uniqueKey":"email","typeLabel":"string | null"},"phone":{"oneOf":[{"type":"string","title":"Phone","uniqueKey":"phone.oneOf.0","typeLabel":"string"},{"type":"null","title":"Phone","uniqueKey":"phone.oneOf.1","typeLabel":"null"}],"uniqueKey":"phone","typeLabel":"string | null"},"governmentIds":{"items":{"type":"string","uniqueKey":"governmentIds.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Governmentids","uniqueKey":"governmentIds","typeLabel":"string[]"},"externalRef":{"oneOf":[{"type":"string","title":"Externalref","maxLength":255,"uniqueKey":"externalRef.oneOf.0","typeLabel":"string"},{"type":"null","title":"Externalref","uniqueKey":"externalRef.oneOf.1","typeLabel":"null"}],"uniqueKey":"externalRef","typeLabel":"string | null"}},"type":"object","required":["entityType","name"],"title":"ScreeningCheckCreate","description":"Screen one subject on demand. Each successful call is billed once.","uniqueKey":"","typeLabel":"ScreeningCheckCreate · object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","dateOfBirth":"\u003cstring>","gender":"\u003cstring>","incorporationDate":"\u003cstring>","website":"\u003cstring>","altNames":["\u003cstring>"],"address":{"line1":"\u003cstring>","line2":"\u003cstring>","city":"\u003cstring>","state":"\u003cstring>","postalCode":"\u003cstring>","country":"\u003cstring>"},"email":"\u003cstring>","phone":"\u003cstring>","governmentIds":["\u003cstring>"],"externalRef":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"d6fa56e9-c527-475f-8829-a5e7c18730b9":{"description":"The screening result. This example shows a `review` — a real match that a human must confirm, and the shape most genuine hits arrive in. The `topScore` shown is illustrative: do not assert on it, and do not infer a threshold from it (see the endpoint description).","content":{"application/json":{"schema":{"properties":{"status_code":{"type":"integer","title":"Status Code","description":"HTTP status code for the response.","isRequired":true,"uniqueKey":"status_code","typeLabel":"integer"},"data":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","isRequired":true,"uniqueKey":"data.id","typeLabel":"string\u003cuuid>"},"entityType":{"type":"string","title":"Entitytype","isRequired":true,"uniqueKey":"data.entityType","typeLabel":"string"},"decision":{"type":"string","title":"Decision","description":"The value to act on: clear, review, blocked, or unavailable. 'clear' = proceed; 'review'/'blocked' = hold for a human; 'unavailable' means the screening service could not complete — treat it as not-yet-screened, never clear.","isRequired":true,"uniqueKey":"data.decision","typeLabel":"string"},"dataCompleteness":{"type":"string","title":"Datacompleteness","description":"full, partial, or name_only — how much identity data was screened. A name_only check is weaker; supply a date of birth or address to strengthen it.","isRequired":true,"uniqueKey":"data.dataCompleteness","typeLabel":"string"},"createdAt":{"type":"string","format":"date-time","title":"Createdat","isRequired":true,"uniqueKey":"data.createdAt","typeLabel":"string\u003cdate-time>"},"topScore":{"oneOf":[{"type":"number","title":"Topscore","description":"Highest match score among the hits (0.0–1.0), or null if none. DIAGNOSTIC ONLY — a name-similarity score, not a risk score. Do not build thresholds on it: a true watchlist entry scores 0.8122 on name alone while an innocent common name scores 0.7513; the score is not comparable between subjects screened with different amounts of identity data; and it moves as the watchlists refresh (the same entry scored 0.8762 and then 0.9025 two days later, unchanged software). Lists reload every 12h. Act on 'decision', which is a stable contract.","uniqueKey":"data.topScore.oneOf.0","typeLabel":"number"},{"type":"null","title":"Topscore","description":"Highest match score among the hits (0.0–1.0), or null if none. DIAGNOSTIC ONLY — a name-similarity score, not a risk score. Do not build thresholds on it: a true watchlist entry scores 0.8122 on name alone while an innocent common name scores 0.7513; the score is not comparable between subjects screened with different amounts of identity data; and it moves as the watchlists refresh (the same entry scored 0.8762 and then 0.9025 two days later, unchanged software). Lists reload every 12h. Act on 'decision', which is a stable contract.","uniqueKey":"data.topScore.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.topScore","typeLabel":"number | null"},"hits":{"items":{"properties":{"sourceList":{"type":"string","title":"Sourcelist","isRequired":true,"uniqueKey":"data.hits.items.[INDEX].sourceList","typeLabel":"string"},"sourceId":{"type":"string","title":"Sourceid","isRequired":true,"uniqueKey":"data.hits.items.[INDEX].sourceId","typeLabel":"string"},"entityName":{"type":"string","title":"Entityname","isRequired":true,"uniqueKey":"data.hits.items.[INDEX].entityName","typeLabel":"string"},"matchScore":{"type":"number","title":"Matchscore","isRequired":true,"uniqueKey":"data.hits.items.[INDEX].matchScore","typeLabel":"number"},"category":{"type":"string","title":"Category","description":"Legal effect: sanctions_blocking, sanctions_restricting, pep, other.","isRequired":true,"uniqueKey":"data.hits.items.[INDEX].category","typeLabel":"string"},"programs":{"items":{"type":"string","uniqueKey":"data.hits.items.[INDEX].programs.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Programs","uniqueKey":"data.hits.items.[INDEX].programs","typeLabel":"string[]"}},"type":"object","required":["sourceList","sourceId","entityName","matchScore","category"],"title":"ScreeningHitRead","description":"One matched watchlist entity.","uniqueKey":"data.hits.items.[INDEX]","typeLabel":"ScreeningHitRead · object"},"type":"array","title":"Hits","uniqueKey":"data.hits","typeLabel":"ScreeningHitRead · object[]"},"confirmWith":{"items":{"properties":{"key":{"type":"string","title":"Key","description":"The request-body field to send it in — always one this endpoint accepts, so the ask is directly actionable by re-POSTing a check with this field populated. E.g. 'dateOfBirth', 'governmentIds', 'altNames', 'address'.","isRequired":true,"uniqueKey":"data.confirmWith.items.[INDEX].key","typeLabel":"string"},"label":{"type":"string","title":"Label","description":"Human-readable name, for showing to whoever supplies it.","isRequired":true,"uniqueKey":"data.confirmWith.items.[INDEX].label","typeLabel":"string"}},"type":"object","required":["key","label"],"title":"ScreeningConfirmationField","description":"One piece of identity data that would confirm or rule out a match.","uniqueKey":"data.confirmWith.items.[INDEX]","typeLabel":"ScreeningConfirmationField · object"},"type":"array","title":"Confirmwith","description":"The ONE piece of identity data that would most improve this result — the strongest field you have not already sent. At most one entry, so send it and POST a new check; if that still hits, the next check asks for the next field, and nothing already in hand is ever asked for twice. Populated only when there is something to resolve ('review' or 'blocked'); empty on 'clear', and empty on 'unavailable' because nothing was screened. Empty on a hit means the check is already as strong as this API can make it and the remaining question needs a human.","uniqueKey":"data.confirmWith","typeLabel":"ScreeningConfirmationField · object[]"},"subjectName":{"oneOf":[{"type":"string","title":"Subjectname","description":"The name that was screened, as submitted on the check.","uniqueKey":"data.subjectName.oneOf.0","typeLabel":"string"},{"type":"null","title":"Subjectname","description":"The name that was screened, as submitted on the check.","uniqueKey":"data.subjectName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.subjectName","typeLabel":"string | null"},"externalRef":{"oneOf":[{"type":"string","title":"Externalref","uniqueKey":"data.externalRef.oneOf.0","typeLabel":"string"},{"type":"null","title":"Externalref","uniqueKey":"data.externalRef.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.externalRef","typeLabel":"string | null"}},"type":"object","required":["id","entityType","decision","dataCompleteness","createdAt"],"title":"ScreeningCheckRead","description":"Payload or error details.","isRequired":true,"uniqueKey":"data","typeLabel":"ScreeningCheckRead · object"},"query_generated_time":{"type":"integer","title":"Query Generated Time","description":"UTC timestamp (milliseconds since epoch) when response was generated.","isRequired":true,"uniqueKey":"query_generated_time","typeLabel":"integer"}},"type":"object","required":["status_code","data","query_generated_time"],"title":"CommonResponse[ScreeningCheckRead]","uniqueKey":"","typeLabel":"CommonResponse[ScreeningCheckRead] · object"},"example":{"status_code":200,"data":{"id":"3f8a1c2e-9b47-4d51-8e06-1a2b3c4d5e6f","entityType":"person","decision":"review","topScore":0.8762,"dataCompleteness":"full","hits":[{"sourceList":"us_ofac","sourceId":"22790","entityName":"Nicolas MADURO MOROS","matchScore":0.8762,"category":"sanctions_blocking","programs":["VENEZUELA"]}],"confirmWith":[{"key":"governmentIds","label":"Government ID number"}],"externalRef":"order-1043","createdAt":"2026-07-16T10:12:04Z"},"query_generated_time":1784282324000},"examples":{"Example":{"title":"Example","value":{"status_code":200,"data":{"id":"3f8a1c2e-9b47-4d51-8e06-1a2b3c4d5e6f","entityType":"person","decision":"review","topScore":0.8762,"dataCompleteness":"full","hits":[{"sourceList":"us_ofac","sourceId":"22790","entityName":"Nicolas MADURO MOROS","matchScore":0.8762,"category":"sanctions_blocking","programs":["VENEZUELA"]}],"confirmWith":[{"key":"governmentIds","label":"Government ID number"}],"externalRef":"order-1043","createdAt":"2026-07-16T10:12:04Z"},"query_generated_time":1784282324000}}},"exampleType":"examples"}},"exampleType":"examples"},"8b446273-051f-4f3d-9b7f-8d80f938c352":{"description":"Validation Error","content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"oneOf":[{"type":"string","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"detail.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | integer"},"type":"array","title":"Location","isRequired":true,"uniqueKey":"detail.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Message","isRequired":true,"uniqueKey":"detail.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Error Type","isRequired":true,"uniqueKey":"detail.items.[INDEX].type","typeLabel":"string"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError","uniqueKey":"detail.items.[INDEX]","typeLabel":"ValidationError · object"},"type":"array","title":"Detail","uniqueKey":"detail","typeLabel":"ValidationError · object[]"}},"type":"object","title":"HTTPValidationError","uniqueKey":"","typeLabel":"HTTPValidationError · object"},"examples":{"Example":{"title":"Example","value":{"detail":[{"loc":["\u003cstring>"],"msg":"\u003cstring>","type":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"8f17a26f-bfcf-4b66-9c57-3dbecb47921d":{"_AuthenticatedBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"/v1/platform/auth/token"}},"scopes":[]}}},"servers":{"e8e3d206-dddf-4b3a-8686-a8bb8fdad22b":{"url":"https://api-sandbox.finogates.com","description":"Sandbox"},"63fefe2c-7a97-42af-996c-e46a872cdae6":{"url":"https://api.finogates.com","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"/v1/platform/auth/token"}},"scopes":[]},"schema":{"title":"OAuth2 Auth","type":"string","isRequired":true,"description":"The access token received from the authorization server in the OAuth 2.0 flow.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"_AuthenticatedBearer","name":"Authorization"}],"title":"_AuthenticatedBearer"}]},"originalFileLocation":"open-api-collection-test.json"},"subdomain":"finogates","siteName":"Finogates API Documentation","title":"Screen a Subject - Finogates API Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-24T11:03:12.569Z","originalFileLocation":"api-reference/screening/create-screening-check.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Screen a person or business against global sanctions and denied-party watchlists. ### Act on decision, not on topScore decision is the integration contract. Branch on it and nothing else: | decision | Meaning | What you should do | |---|---|---| | clear | Nothing matched | Proceed | | review | A possible match a human must adjudicate | Hold the subject | | blocked | A confident match to an asset-freeze list | Hold and escalate | | unavailable | Screening could not complete | Not screened. Retry or hold — never treat as clear | ### Why not the score topScore is a name-similarity score, not a risk score, and it is returned for diagnostics only — show it to your reviewers to help them triage, but do not build thresholds on it. Four reasons, all measured against live watchlist data: - It does not separate real from innocent. A true OFAC SDN entry scores 0.8122 on name alone; an innocent person with a common name scores 0.7513. Six points apart — no threshold sits safely between them. - It is not comparable across subjects. The score carries a coverage penalty — a name-only query is structurally capped however perfect the name, while a query with a date of birth is not. The same SDN entry scores 0.8122 on name alone and 0.9025 with a date of birth. Same person, same list entry, different number. A threshold applied across a mixed population applies different standards to different customers. - It is not stable over time. That same entry scored 0.8762 on 2026-07-14 and 0.9025 on 2026-07-16 — same subject, same query, same software. The watchlists themselves refresh (OFAC gained 61 entries in those two days) and scores move with the data. Lists reload every 12 hours. A hard-coded \u0026gt;= 0.90 can change behaviour twice a day, with no release on your side. - Legal effect follows the list, not the number. A 0.95 match on a sectoral list is a transaction restriction; a 0.82 match on a freeze list is an asset freeze. Ranking those by score is backwards. decision absorbs all four. It is the only part of this response we treat as a stable contract. decision already folds in the score, the list\u0026#x27;s legal effect, how much identity data was available, and exact government-ID matches — so you do not have to. ### Send more than a name A dateOfBirth (people) or address (businesses) is what makes the answer trustworthy. dataCompleteness in the response tells you what you gave us: full, partial, or name_only. A name_only check is deliberately never auto-blocked, because at that coverage the score cannot carry the weight. If you see name_only, your integration is leaving accuracy on the table. ### confirmWith — the one thing to send next When a check comes back review or blocked, confirmWith asks for exactly one field: the strongest piece of identity data you have not already sent. key is the request field to send it in, so the ask is directly actionable — populate it, POST a new check, and if that still hits you are asked for the next one. Anything already in hand is never asked for twice, whatever order it arrived in. For a person the ladder is dateOfBirth → governmentIds → altNames → address; for a business, address → governmentIds → altNames → incorporationDate. So a check carrying only a name is asked for a date of birth, while one that already carried a government ID skips straight past it: | Your check carries | confirmWith asks for | |---|---| | name | dateOfBirth | | name + governmentIds | dateOfBirth | | name + governmentIds + dateOfBirth | altNames | | the whole ladder | (empty — nothing left to send) | label is the same wording our compliance desk would use for that field, so it is safe to show verbatim to whoever supplies the data. Two things the ordering is honest about. A government ID is the strongest confirmation available — an exact match to a listed party\u0026#x27;s identifier is not a coincidence — but the effect is one-way: an ID that doesn\u0026#x27;t match does not clear anything by itself, it gives a reviewer the grounds to. That is why a date of birth outranks it for a person: it changes what the search returns rather than only how a returned match is judged. confirmWith is empty on clear, and empty on unavailable — that check never ran, so more identity data does not help; retry it instead. An empty array on a hit means the check is already as strong as this API can make it and the remaining question needs a human. Each successful check is billed once on your monthly invoice. unavailable checks are not billed.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Finogates API Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/finogates/7bjhnGVQOX1B_t94/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/finogates/7bjhnGVQOX1B_t94/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/finogates/7bjhnGVQOX1B_t94/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/finogates/7bjhnGVQOX1B_t94/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/finogates/7bjhnGVQOX1B_t94/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/finogates/7bjhnGVQOX1B_t94/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/finogates/7bjhnGVQOX1B_t94/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/finogates/7bjhnGVQOX1B_t94/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/finogates/7bjhnGVQOX1B_t94/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Screen a Subject - Finogates API Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Screen a person or business against global sanctions and denied-party watchlists. ### Act on decision, not on topScore decision is the integration contract. Branch on it and nothing else: | decision | Meaning | What you should do | |---|---|---| | clear | Nothing matched | Proceed | | review | A possible match a human must adjudicate | Hold the subject | | blocked | A confident match to an asset-freeze list | Hold and escalate | | unavailable | Screening could not complete | Not screened. Retry or hold — never treat as clear | ### Why not the score topScore is a name-similarity score, not a risk score, and it is returned for diagnostics only — show it to your reviewers to help them triage, but do not build thresholds on it. Four reasons, all measured against live watchlist data: - It does not separate real from innocent. A true OFAC SDN entry scores 0.8122 on name alone; an innocent person with a common name scores 0.7513. Six points apart — no threshold sits safely between them. - It is not comparable across subjects. The score carries a coverage penalty — a name-only query is structurally capped however perfect the name, while a query with a date of birth is not. The same SDN entry scores 0.8122 on name alone and 0.9025 with a date of birth. Same person, same list entry, different number. A threshold applied across a mixed population applies different standards to different customers. - It is not stable over time. That same entry scored 0.8762 on 2026-07-14 and 0.9025 on 2026-07-16 — same subject, same query, same software. The watchlists themselves refresh (OFAC gained 61 entries in those two days) and scores move with the data. Lists reload every 12 hours. A hard-coded \u0026gt;= 0.90 can change behaviour twice a day, with no release on your side. - Legal effect follows the list, not the number. A 0.95 match on a sectoral list is a transaction restriction; a 0.82 match on a freeze list is an asset freeze. Ranking those by score is backwards. decision absorbs all four. It is the only part of this response we treat as a stable contract. decision already folds in the score, the list\u0026#x27;s legal effect, how much identity data was available, and exact government-ID matches — so you do not have to. ### Send more than a name A dateOfBirth (people) or address (businesses) is what makes the answer trustworthy. dataCompleteness in the response tells you what you gave us: full, partial, or name_only. A name_only check is deliberately never auto-blocked, because at that coverage the score cannot carry the weight. If you see name_only, your integration is leaving accuracy on the table. ### confirmWith — the one thing to send next When a check comes back review or blocked, confirmWith asks for exactly one field: the strongest piece of identity data you have not already sent. key is the request field to send it in, so the ask is directly actionable — populate it, POST a new check, and if that still hits you are asked for the next one. Anything already in hand is never asked for twice, whatever order it arrived in. For a person the ladder is dateOfBirth → governmentIds → altNames → address; for a business, address → governmentIds → altNames → incorporationDate. So a check carrying only a name is asked for a date of birth, while one that already carried a government ID skips straight past it: | Your check carries | confirmWith asks for | |---|---| | name | dateOfBirth | | name + governmentIds | dateOfBirth | | name + governmentIds + dateOfBirth | altNames | | the whole ladder | (empty — nothing left to send) | label is the same wording our compliance desk would use for that field, so it is safe to show verbatim to whoever supplies the data. Two things the ordering is honest about. A government ID is the strongest confirmation available — an exact match to a listed party\u0026#x27;s identifier is not a coincidence — but the effect is one-way: an ID that doesn\u0026#x27;t match does not clear anything by itself, it gives a reviewer the grounds to. That is why a date of birth outranks it for a person: it changes what the search returns rather than only how a returned match is judged. confirmWith is empty on clear, and empty on unavailable — that check never ran, so more identity data does not help; retry it instead. An empty array on a hit means the check is already as strong as this API can make it and the remaining question needs a human. Each successful check is billed once on your monthly invoice. unavailable checks are not billed.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Finogates API Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developer.finogates.com/api-reference/screening/create-screening-check\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://finogates.mintlify.app/_mintlify/api/og/v2?division=Screening\u0026amp;title=Screen+a+Subject\u0026amp;description=Screen+a+person+or+business+against+global+sanctions+and+denied-party+watchlists.%0A%0A%23%23%23+Act+on+%60decision%60%2C+not+on+%60topScore%60%0A%0A%60decision%60+is+the+integration+contr\u0026amp;theme=2379e31403c31344a7ae4b20\u0026amp;signature=d49627af15ac7b22432235dfcdaee72fa8d9a417d425f8d6246e82709014a019\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Screen a Subject - Finogates API Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Screen a person or business against global sanctions and denied-party watchlists. ### Act on decision, not on topScore decision is the integration contract. Branch on it and nothing else: | decision | Meaning | What you should do | |---|---|---| | clear | Nothing matched | Proceed | | review | A possible match a human must adjudicate | Hold the subject | | blocked | A confident match to an asset-freeze list | Hold and escalate | | unavailable | Screening could not complete | Not screened. Retry or hold — never treat as clear | ### Why not the score topScore is a name-similarity score, not a risk score, and it is returned for diagnostics only — show it to your reviewers to help them triage, but do not build thresholds on it. Four reasons, all measured against live watchlist data: - It does not separate real from innocent. A true OFAC SDN entry scores 0.8122 on name alone; an innocent person with a common name scores 0.7513. Six points apart — no threshold sits safely between them. - It is not comparable across subjects. The score carries a coverage penalty — a name-only query is structurally capped however perfect the name, while a query with a date of birth is not. The same SDN entry scores 0.8122 on name alone and 0.9025 with a date of birth. Same person, same list entry, different number. A threshold applied across a mixed population applies different standards to different customers. - It is not stable over time. That same entry scored 0.8762 on 2026-07-14 and 0.9025 on 2026-07-16 — same subject, same query, same software. The watchlists themselves refresh (OFAC gained 61 entries in those two days) and scores move with the data. Lists reload every 12 hours. A hard-coded \u0026gt;= 0.90 can change behaviour twice a day, with no release on your side. - Legal effect follows the list, not the number. A 0.95 match on a sectoral list is a transaction restriction; a 0.82 match on a freeze list is an asset freeze. Ranking those by score is backwards. decision absorbs all four. It is the only part of this response we treat as a stable contract. decision already folds in the score, the list\u0026#x27;s legal effect, how much identity data was available, and exact government-ID matches — so you do not have to. ### Send more than a name A dateOfBirth (people) or address (businesses) is what makes the answer trustworthy. dataCompleteness in the response tells you what you gave us: full, partial, or name_only. A name_only check is deliberately never auto-blocked, because at that coverage the score cannot carry the weight. If you see name_only, your integration is leaving accuracy on the table. ### confirmWith — the one thing to send next When a check comes back review or blocked, confirmWith asks for exactly one field: the strongest piece of identity data you have not already sent. key is the request field to send it in, so the ask is directly actionable — populate it, POST a new check, and if that still hits you are asked for the next one. Anything already in hand is never asked for twice, whatever order it arrived in. For a person the ladder is dateOfBirth → governmentIds → altNames → address; for a business, address → governmentIds → altNames → incorporationDate. So a check carrying only a name is asked for a date of birth, while one that already carried a government ID skips straight past it: | Your check carries | confirmWith asks for | |---|---| | name | dateOfBirth | | name + governmentIds | dateOfBirth | | name + governmentIds + dateOfBirth | altNames | | the whole ladder | (empty — nothing left to send) | label is the same wording our compliance desk would use for that field, so it is safe to show verbatim to whoever supplies the data. Two things the ordering is honest about. A government ID is the strongest confirmation available — an exact match to a listed party\u0026#x27;s identifier is not a coincidence — but the effect is one-way: an ID that doesn\u0026#x27;t match does not clear anything by itself, it gives a reviewer the grounds to. That is why a date of birth outranks it for a person: it changes what the search returns rather than only how a returned match is judged. confirmWith is empty on clear, and empty on unavailable — that check never ran, so more identity data does not help; retry it instead. An empty array on a hit means the check is already as strong as this API can make it and the remaining question needs a human. Each successful check is billed once on your monthly invoice. unavailable checks are not billed.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://finogates.mintlify.app/_mintlify/api/og/v2?division=Screening\u0026amp;title=Screen+a+Subject\u0026amp;description=Screen+a+person+or+business+against+global+sanctions+and+denied-party+watchlists.%0A%0A%23%23%23+Act+on+%60decision%60%2C+not+on+%60topScore%60%0A%0A%60decision%60+is+the+integration+contr\u0026amp;theme=2379e31403c31344a7ae4b20\u0026amp;signature=d49627af15ac7b22432235dfcdaee72fa8d9a417d425f8d6246e82709014a019\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/finogates/7bjhnGVQOX1B_t94/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Finogates API Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0161EF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developer.finogates.com/api-reference/screening/create-screening-check\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/screening/create-screening-check.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developer.finogates.com/#organization\",\"name\":\"Finogates API Documentation\",\"url\":\"https://developer.finogates.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/finogates/XLUrxtJNLX8DNeIV/assets/logo/app-logo-dark.png?fit=max\u0026auto=format\u0026n=XLUrxtJNLX8DNeIV\u0026q=85\u0026s=e00390491535714f472eb3e4ec1edc84\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developer.finogates.com#website\",\"name\":\"Finogates API Documentation\",\"url\":\"https://developer.finogates.com\",\"publisher\":{\"@id\":\"https://developer.finogates.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developer.finogates.com/api-reference/screening/create-screening-check#webpage\",\"url\":\"https://developer.finogates.com/api-reference/screening/create-screening-check\",\"name\":\"Screen a Subject\",\"description\":\"Screen a person or business against global sanctions and denied-party watchlists. ### Act on decision, not on topScore decision is the integration contract. Branch on it and nothing else: | decision | Meaning | What you should do | |---|---|---| | clear | Nothing matched | Proceed | | review | A possible match a human must adjudicate | Hold the subject | | blocked | A confident match to an asset-freeze list | Hold and escalate | | unavailable | Screening could not complete | Not screened. Retry or hold — never treat as clear | ### Why not the score topScore is a name-similarity score, not a risk score, and it is returned for diagnostics only — show it to your reviewers to help them triage, but do not build thresholds on it. Four reasons, all measured against live watchlist data: - It does not separate real from innocent. A true OFAC SDN entry scores 0.8122 on name alone; an innocent person with a common name scores 0.7513. Six points apart — no threshold sits safely between them. - It is not comparable across subjects. The score carries a coverage penalty — a name-only query is structurally capped however perfect the name, while a query with a date of birth is not. The same SDN entry scores 0.8122 on name alone and 0.9025 with a date of birth. Same person, same list entry, different number. A threshold applied across a mixed population applies different standards to different customers. - It is not stable over time. That same entry scored 0.8762 on 2026-07-14 and 0.9025 on 2026-07-16 — same subject, same query, same software. The watchlists themselves refresh (OFAC gained 61 entries in those two days) and scores move with the data. Lists reload every 12 hours. A hard-coded >= 0.90 can change behaviour twice a day, with no release on your side. - Legal effect follows the list, not the number. A 0.95 match on a sectoral list is a transaction restriction; a 0.82 match on a freeze list is an asset freeze. Ranking those by score is backwards. decision absorbs all four. It is the only part of this response we treat as a stable contract. decision already folds in the score, the list's legal effect, how much identity data was available, and exact government-ID matches — so you do not have to. ### Send more than a name A dateOfBirth (people) or address (businesses) is what makes the answer trustworthy. dataCompleteness in the response tells you what you gave us: full, partial, or name_only. A name_only check is deliberately never auto-blocked, because at that coverage the score cannot carry the weight. If you see name_only, your integration is leaving accuracy on the table. ### confirmWith — the one thing to send next When a check comes back review or blocked, confirmWith asks for exactly one field: the strongest piece of identity data you have not already sent. key is the request field to send it in, so the ask is directly actionable — populate it, POST a new check, and if that still hits you are asked for the next one. Anything already in hand is never asked for twice, whatever order it arrived in. For a person the ladder is dateOfBirth → governmentIds → altNames → address; for a business, address → governmentIds → altNames → incorporationDate. So a check carrying only a name is asked for a date of birth, while one that already carried a government ID skips straight past it: | Your check carries | confirmWith asks for | |---|---| | name | dateOfBirth | | name + governmentIds | dateOfBirth | | name + governmentIds + dateOfBirth | altNames | | the whole ladder | (empty — nothing left to send) | label is the same wording our compliance desk would use for that field, so it is safe to show verbatim to whoever supplies the data. Two things the ordering is honest about. A government ID is the strongest confirmation available — an exact match to a listed party's identifier is not a coincidence — but the effect is one-way: an ID that doesn't match does not clear anything by itself, it gives a reviewer the grounds to. That is why a date of birth outranks it for a person: it changes what the search returns rather than only how a returned match is judged. confirmWith is empty on clear, and empty on unavailable — that check never ran, so more identity data does not help; retry it instead. An empty array on a hit means the check is already as strong as this API can make it and the remaining question needs a human. Each successful check is billed once on your monthly invoice. unavailable checks are not billed.\",\"dateModified\":\"2026-08-24T11:03:12.569Z\",\"isPartOf\":{\"@id\":\"https://developer.finogates.com#website\"},\"breadcrumb\":{\"@id\":\"https://developer.finogates.com/api-reference/screening/create-screening-check#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developer.finogates.com/api-reference/screening/create-screening-check#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Finogates API Documentation\",\"item\":\"https://developer.finogates.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Screen a Subject\",\"item\":\"https://developer.finogates.com/api-reference/screening/create-screening-check\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developer.finogates.com/api-reference/screening/create-screening-check#apireference\",\"headline\":\"Screen a Subject\",\"name\":\"Screen a Subject\",\"description\":\"Screen a person or business against global sanctions and denied-party watchlists. ### Act on decision, not on topScore decision is the integration contract. Branch on it and nothing else: | decision | Meaning | What you should do | |---|---|---| | clear | Nothing matched | Proceed | | review | A possible match a human must adjudicate | Hold the subject | | blocked | A confident match to an asset-freeze list | Hold and escalate | | unavailable | Screening could not complete | Not screened. Retry or hold — never treat as clear | ### Why not the score topScore is a name-similarity score, not a risk score, and it is returned for diagnostics only — show it to your reviewers to help them triage, but do not build thresholds on it. Four reasons, all measured against live watchlist data: - It does not separate real from innocent. A true OFAC SDN entry scores 0.8122 on name alone; an innocent person with a common name scores 0.7513. Six points apart — no threshold sits safely between them. - It is not comparable across subjects. The score carries a coverage penalty — a name-only query is structurally capped however perfect the name, while a query with a date of birth is not. The same SDN entry scores 0.8122 on name alone and 0.9025 with a date of birth. Same person, same list entry, different number. A threshold applied across a mixed population applies different standards to different customers. - It is not stable over time. That same entry scored 0.8762 on 2026-07-14 and 0.9025 on 2026-07-16 — same subject, same query, same software. The watchlists themselves refresh (OFAC gained 61 entries in those two days) and scores move with the data. Lists reload every 12 hours. A hard-coded >= 0.90 can change behaviour twice a day, with no release on your side. - Legal effect follows the list, not the number. A 0.95 match on a sectoral list is a transaction restriction; a 0.82 match on a freeze list is an asset freeze. Ranking those by score is backwards. decision absorbs all four. It is the only part of this response we treat as a stable contract. decision already folds in the score, the list's legal effect, how much identity data was available, and exact government-ID matches — so you do not have to. ### Send more than a name A dateOfBirth (people) or address (businesses) is what makes the answer trustworthy. dataCompleteness in the response tells you what you gave us: full, partial, or name_only. A name_only check is deliberately never auto-blocked, because at that coverage the score cannot carry the weight. If you see name_only, your integration is leaving accuracy on the table. ### confirmWith — the one thing to send next When a check comes back review or blocked, confirmWith asks for exactly one field: the strongest piece of identity data you have not already sent. key is the request field to send it in, so the ask is directly actionable — populate it, POST a new check, and if that still hits you are asked for the next one. Anything already in hand is never asked for twice, whatever order it arrived in. For a person the ladder is dateOfBirth → governmentIds → altNames → address; for a business, address → governmentIds → altNames → incorporationDate. So a check carrying only a name is asked for a date of birth, while one that already carried a government ID skips straight past it: | Your check carries | confirmWith asks for | |---|---| | name | dateOfBirth | | name + governmentIds | dateOfBirth | | name + governmentIds + dateOfBirth | altNames | | the whole ladder | (empty — nothing left to send) | label is the same wording our compliance desk would use for that field, so it is safe to show verbatim to whoever supplies the data. Two things the ordering is honest about. A government ID is the strongest confirmation available — an exact match to a listed party's identifier is not a coincidence — but the effect is one-way: an ID that doesn't match does not clear anything by itself, it gives a reviewer the grounds to. That is why a date of birth outranks it for a person: it changes what the search returns rather than only how a returned match is judged. confirmWith is empty on clear, and empty on unavailable — that check never ran, so more identity data does not help; retry it instead. An empty array on a hit means the check is already as strong as this API can make it and the remaining question needs a human. Each successful check is billed once on your monthly invoice. unavailable checks are not billed.\",\"url\":\"https://developer.finogates.com/api-reference/screening/create-screening-check\",\"mainEntityOfPage\":{\"@id\":\"https://developer.finogates.com/api-reference/screening/create-screening-check#webpage\"},\"dateModified\":\"2026-08-24T11:03:12.569Z\",\"publisher\":{\"@id\":\"https://developer.finogates.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developer.finogates.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Finogates API Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Finogates API Documentation","nav":{"global":null,"tabs":[{"tab":"Get Started","icon":"rocket","pages":[{"title":"Get Started","href":"/get-started/overview"}]},{"tab":"API Reference","icon":"square-terminal","groups":[{"group":"Auth","expanded":false,"pages":[{"title":"Exchange Client Token","openapi":"POST /v1/platform/auth/token","href":"/api-reference/auth/exchange-client-token"}]},{"group":"Users","expanded":false,"pages":[{"title":"Create User","openapi":"POST /v1/platform/users","href":"/api-reference/users/create-user"},{"title":"List Users","openapi":"GET /v1/platform/users","href":"/api-reference/users/list-users"},{"title":"Get User","openapi":"GET /v1/platform/users/{user_id}","href":"/api-reference/users/get-user"},{"title":"Activate or Deactivate a User","openapi":"PATCH /v1/platform/users/{user_id}","href":"/api-reference/users/activate-or-deactivate-user"},{"title":"Delete a User","openapi":"DELETE /v1/platform/users/{user_id}","href":"/api-reference/users/deactivate-user"},{"title":"Update a User's Details","openapi":"PATCH /v1/platform/users/{user_id}/details","href":"/api-reference/users/update-user-details"},{"title":"Set a User's Mailing Address","openapi":"PATCH /v1/platform/users/{user_id}/mailing-address","href":"/api-reference/users/set-user-mailing-address"}]},{"group":"Payees","expanded":false,"pages":[{"title":"Create Payee","openapi":"POST /v1/platform/payees","href":"/api-reference/payees/create-payee"},{"title":"List Payees","openapi":"GET /v1/platform/payees","href":"/api-reference/payees/list-payees"},{"title":"Get Payee","openapi":"GET /v1/platform/payees/{payee_id}","href":"/api-reference/payees/get-payee"},{"title":"Update Payee","openapi":"PATCH /v1/platform/payees/{payee_id}","href":"/api-reference/payees/update-payee"},{"title":"Archive Payee","openapi":"DELETE /v1/platform/payees/{payee_id}","href":"/api-reference/payees/archive-payee"},{"title":"Add a Bank Account to a Payee","openapi":"POST /v1/platform/payees/bank-accounts/{payee_id}","href":"/api-reference/payees/create-destination"},{"title":"List a Payee's Bank Accounts","openapi":"GET /v1/platform/payees/bank-accounts/{payee_id}","href":"/api-reference/payees/list-destinations"},{"title":"Delete a Payee's Bank Account","openapi":"DELETE /v1/platform/payees/bank-accounts/{payee_id}/{bank_account_id}","href":"/api-reference/payees/revoke-destination"},{"title":"Set Up a Bank for ACH Payouts (removed)","openapi":"POST /v1/platform/payees/destinations/ach-push","href":"/api-reference/payees/set-up-a-bank-for-ach-payouts-removed"},{"title":"Get ACH push status","openapi":"GET /v1/platform/payees/destinations/ach-push","href":"/api-reference/payees/get-ach-push-status"},{"title":"Disable ACH push","openapi":"DELETE /v1/platform/payees/destinations/ach-push","href":"/api-reference/payees/disable-ach-push"},{"title":"Update a Payee's Bank Account","openapi":"PATCH /v1/platform/payees/bank-accounts/{payee_id}/{bank_account_id}","href":"/api-reference/payees/update-payee-bank-account"},{"title":"Reveal a Payee Bank Account's Full Numbers","openapi":"GET /v1/platform/payees/bank-accounts/{payee_id}/{bank_account_id}/reveal","href":"/api-reference/payees/reveal-payee-bank-account"},{"title":"Add an Address to a Payee","openapi":"POST /v1/platform/payees/addresses/{payee_id}","href":"/api-reference/payees/create-payee-address"},{"title":"List a Payee's Addresses","openapi":"GET /v1/platform/payees/addresses/{payee_id}","href":"/api-reference/payees/list-payee-addresses"},{"title":"Get One of a Payee's Addresses","openapi":"GET /v1/platform/payees/addresses/{payee_id}/{address_id}","href":"/api-reference/payees/get-payee-address"},{"title":"Update a Payee's Address","openapi":"PATCH /v1/platform/payees/addresses/{payee_id}/{address_id}","href":"/api-reference/payees/update-payee-address"},{"title":"Delete a Payee's Address","openapi":"DELETE /v1/platform/payees/addresses/{payee_id}/{address_id}","href":"/api-reference/payees/delete-payee-address"}]},{"group":"Verification","expanded":false,"pages":[{"title":"Get Platform Verification","openapi":"GET /v1/platform/me/verification","href":"/api-reference/verification/get-platform-verification"},{"title":"List KYC Records","openapi":"GET /v1/platform/kyc-records","href":"/api-reference/verification/list-kyc-records"},{"title":"List KYB Records","openapi":"GET /v1/platform/kyb-records","href":"/api-reference/verification/list-kyb-records"},{"title":"Get Platform Verification (status only)","openapi":"GET /v1/platform/verification","href":"/api-reference/verification/get-platform-verification-status-only"},{"title":"Get User Verification Summary","openapi":"GET /v1/platform/users/verification-summary/{user_id}","href":"/api-reference/verification/get-user-verification-summary"},{"title":"Get User Verification","openapi":"GET /v1/platform/users/verification/{user_id}","href":"/api-reference/verification/get-user-verification"},{"title":"List User KYB Records","openapi":"GET /v1/platform/users/kyb-records/{user_id}","href":"/api-reference/verification/list-user-kyb-records"},{"title":"Start User KYC","openapi":"POST /v1/platform/users/kyc/start/{user_id}","href":"/api-reference/verification/start-user-kyc"},{"title":"Sync User KYC","openapi":"POST /v1/platform/users/kyc/sync/{user_id}","href":"/api-reference/verification/sync-user-kyc"},{"title":"Create User KYB Record","openapi":"POST /v1/platform/users/kyb/start/{user_id}","href":"/api-reference/verification/create-user-kyb-record"},{"title":"List Verification Document Requests","openapi":"GET /v1/platform/compliance/document-requests","href":"/api-reference/verification/list-document-requests"},{"title":"Get One Check's Document Requests","openapi":"GET /v1/platform/compliance/checks/{check_id}/document-requests","href":"/api-reference/verification/get-check-document-requests"},{"title":"Send Requested Verification Documents","openapi":"POST /v1/platform/compliance/checks/{check_id}/document-requests/{request_id}/submit","description":"Send the documents and written answers we asked for during a verification review.\n\nSend this as **`multipart/form-data`**.\n\n- **`payload`** (optional) — a JSON object holding your written answers, for the\n items whose `kind` is `text`:\n\n ```json\n {\n \"responses\": [\n { \"key\": \"source_of_funds\", \"text\": \"Retained earnings from 2023 trading.\" }\n ]\n }\n ```\n\n- **One file part per document**, named **`file:\u003ckey>`** — for example\n `file:certificate_of_incorporation`. Use it for the items whose `kind` is\n `file`.\n\nThe `key` values come from the list endpoint. Answering a `text` item with a file, or a `file` item with text, is rejected before anything is stored.\n\n**Partial answers are fine.** Send what you have now and send the rest later — answers accumulate, and the request closes itself once every required item has one. Sending nothing at all is rejected.\n\nAccepted file types: PNG, JPG, JPEG, PDF, HEIF, HEIC.\n\nAnswering does not by itself approve the verification — our reviewer still makes that decision. Watch the `compliance_documents.*` webhooks, or poll the list endpoint, to follow where a request stands.","href":"/api-reference/verification/submit-document-request-response"}]},{"group":"Screening","expanded":false,"pages":[{"title":"Screen a Subject","openapi":"POST /v1/platform/screening/checks","href":"/api-reference/screening/create-screening-check"},{"title":"List Your Screening Checks","openapi":"GET /v1/platform/screening/checks","description":"Your screening checks, newest first. Reading is free — only creating a check is billed.","href":"/api-reference/screening/list-screening-checks"},{"title":"Get a Screening Check","openapi":"GET /v1/platform/screening/checks/{check_id}","href":"/api-reference/screening/get-screening-check"}]},{"group":"Bank Accounts","expanded":false,"pages":[{"title":"Add Bank Account","openapi":"POST /v1/platform/bank/add-bank-manually","href":"/api-reference/bank-accounts/add-bank-account"},{"title":"List Bank Accounts","openapi":"GET /v1/platform/bank-accounts/{user_id}","href":"/api-reference/bank-accounts/list-bank-accounts"},{"title":"Add account Instantly","openapi":"GET /v1/platform/bank/add-account-instantly/{user_id}","href":"/api-reference/bank-accounts/add-account-instantly"},{"title":"Add a Bank Account From an Existing Connection","openapi":"POST /v1/platform/bank/add-account-connected","href":"/api-reference/bank-accounts/add-account-from-connection"},{"title":"Get a Manual Bank Account's Details to Edit","openapi":"GET /v1/platform/bank/update/{bank_account_id}","href":"/api-reference/bank-accounts/get-manual-bank-account-for-edit"},{"title":"Edit a Manually Added Bank Account","openapi":"PATCH /v1/platform/bank/update/{bank_account_id}","href":"/api-reference/bank-accounts/edit-manual-bank-account"},{"title":"Remove Bank Account","openapi":"DELETE /v1/platform/bank/delete/{bank_account_id}","href":"/api-reference/bank-accounts/remove-bank-account"},{"title":"Apply for Virtual Bank Account","openapi":"POST /v1/platform/virtual-bank-accounts","href":"/api-reference/bank-accounts/apply-for-virtual-bank-account"},{"title":"List Virtual Bank Accounts","openapi":"GET /v1/platform/virtual-bank-accounts","href":"/api-reference/bank-accounts/list-virtual-bank-accounts"},{"title":"Refresh Virtual Bank Account Balance","openapi":"POST /v1/platform/virtual-bank-accounts/{account_id}/refresh-balance","href":"/api-reference/bank-accounts/refresh-virtual-bank-account-balance"},{"title":"Get Virtual Bank Account","openapi":"GET /v1/platform/virtual-bank-accounts/{account_id}","href":"/api-reference/bank-accounts/get-virtual-bank-account"},{"title":"List All Bank Accounts","openapi":"GET /v1/platform/bank-accounts","href":"/api-reference/bank-accounts/list-all-bank-accounts"},{"title":"Get a Bank Account Relink Link","openapi":"GET /v1/platform/bank/relink/{bank_account_id}","href":"/api-reference/bank-accounts/get-bank-account-relink-link"}]},{"group":"Card Processing","expanded":false,"pages":[{"title":"List Cards","openapi":"GET /v1/platform/card/cards/{user_id}","href":"/api-reference/card-processing/list-cards"},{"title":"Get One Card's Details","openapi":"GET /v1/platform/card/cards/{user_id}/{payment_method_id}","href":"/api-reference/card-processing/get-one-card-details"},{"title":"Add Card","openapi":"POST /v1/platform/card/add-card","href":"/api-reference/card-processing/add-card"},{"title":"Remove Card","openapi":"DELETE /v1/platform/card/delete/{card_id}","href":"/api-reference/card-processing/remove-card"},{"title":"Apply for Card Processing","openapi":"POST /v1/platform/card-processing","href":"/api-reference/card-processing/create-card-processing-application"},{"title":"Get a Link for the User to Pay by Card","openapi":"POST /v1/platform/card/payment-link","href":"/api-reference/card-processing/get-card-payment-link"},{"title":"Get Card Processing Record(s)","openapi":"GET /v1/platform/card-processing/users/{user_id}","href":"/api-reference/card-processing/get-card-processing-record-s"},{"title":"List All Cards","openapi":"GET /v1/platform/card/cards","href":"/api-reference/card-processing/list-all-cards"},{"title":"Verify an Already-Added Card","openapi":"GET /v1/platform/card/verify-card/{payment_method_id}","href":"/api-reference/card-processing/verify-card"},{"title":"Verify a Saved Card","openapi":"POST /v1/platform/card/verify-token/{payment_method_id}","href":"/api-reference/card-processing/verify-saved-card"},{"title":"Get Card Processing by KYB","openapi":"GET /v1/platform/card-processing/kybs/{kyb_id}","href":"/api-reference/card-processing/get-card-processing-by-kyb"},{"title":"Get Card Processing MID Config","openapi":"GET /v1/platform/card-processing/mid","href":"/api-reference/card-processing/get-card-processing-mid-config"},{"title":"Get a Card Processing Application","openapi":"GET /v1/platform/card-processing/{application_id}","href":"/api-reference/card-processing/get-card-processing-application"},{"title":"Get Card Processing Supporting Documents","openapi":"GET /v1/platform/card-processing/merchants/{card_acquiring_id}/merchant-info","href":"/api-reference/card-processing/get-card-processing-merchant-info"},{"title":"Submit Card Processing Supporting Documents","openapi":"PUT /v1/platform/card-processing/merchants/{card_acquiring_id}/merchant-info","href":"/api-reference/card-processing/submit-card-processing-merchant-info"}]},{"group":"Merchant Onboarding","expanded":false,"pages":[{"title":"Onboard a Merchant for Card Processing","openapi":"POST /v1/platform/merchant-onboarding","href":"/api-reference/merchant-onboarding/onboard-merchant"},{"title":"Update a Pending Card Processing Application","openapi":"PUT /v1/platform/merchant-onboarding","href":"/api-reference/merchant-onboarding/update-merchant-onboarding"}]},{"group":"Card Transfers","expanded":false,"pages":[{"title":"Card Transfers Overview","href":"/api-reference/card-transfers/overview"},{"title":"Enable a Card Transfer Direction","openapi":"POST /v1/platform/card-transfers/enable","href":"/api-reference/card-transfers/enable-card-transfer"},{"title":"Card Transfer Direction Status","openapi":"GET /v1/platform/card-transfers/enable","href":"/api-reference/card-transfers/get-card-transfer-status"},{"title":"Add a Card","openapi":"POST /v1/platform/card-transfers/cards","href":"/api-reference/card-transfers/add-transfer-card"},{"title":"Get a Card","openapi":"GET /v1/platform/card-transfers/cards/{card_id}","href":"/api-reference/card-transfers/get-transfer-card"},{"title":"List Cards","openapi":"GET /v1/platform/card-transfers/cards","href":"/api-reference/card-transfers/list-transfer-cards"}]},{"group":"Digital Assets","expanded":false,"pages":[{"title":"List Digital Asset Catalog","openapi":"GET /v1/platform/digital-assets/assets","href":"/api-reference/digital-assets/list-digital-asset-catalog"},{"title":"List Digital Asset Wallets","openapi":"GET /v1/platform/digital-assets/wallets","href":"/api-reference/digital-assets/list-digital-asset-wallets"},{"title":"Create Digital Asset Wallet","openapi":"POST /v1/platform/digital-assets/wallets","href":"/api-reference/digital-assets/create-digital-asset-wallet"},{"title":"List Digital Asset Balances","openapi":"GET /v1/platform/digital-assets/balances","href":"/api-reference/digital-assets/list-digital-asset-balances"},{"title":"Get Digital Asset Wallet","openapi":"GET /v1/platform/digital-assets/wallets/{wallet_id}","href":"/api-reference/digital-assets/get-digital-asset-wallet"},{"title":"Get Digital Asset Wallet Balance","openapi":"GET /v1/platform/digital-assets/wallets/{wallet_id}/balance","href":"/api-reference/digital-assets/get-digital-asset-wallet-balance"},{"title":"List Digital Asset Transactions","openapi":"GET /v1/platform/digital-assets/transactions","href":"/api-reference/digital-assets/list-digital-asset-transactions"},{"title":"List Digital Asset Vault Requests","openapi":"GET /v1/platform/digital-assets/vault-requests","href":"/api-reference/digital-assets/list-digital-asset-vault-requests"},{"title":"Get Digital Asset Vault Request","openapi":"GET /v1/platform/digital-assets/vault-requests/{request_id}","href":"/api-reference/digital-assets/get-digital-asset-vault-request"}]},{"group":"International","expanded":false,"pages":[{"title":"List Reference Data","openapi":"GET /v1/platform/international/catalogues","href":"/api-reference/international/list-reference-data"},{"title":"Payers","openapi":"GET /v1/platform/international/payers","href":"/api-reference/international/payers"},{"title":"Payer Rules","openapi":"GET /v1/platform/international/payer-rules","href":"/api-reference/international/payer-rules"},{"title":"Branches","openapi":"GET /v1/platform/international/branches","href":"/api-reference/international/branches"},{"title":"Rates","openapi":"GET /v1/platform/international/rates","href":"/api-reference/international/rates"},{"title":"Send an International Payout","openapi":"POST /v1/platform/international/payouts","href":"/api-reference/international/create-an-international-payout"},{"title":"Retry a Failed Payout","openapi":"POST /v1/platform/international/payouts/{intent_id}/retry","href":"/api-reference/international/platform-retry-payout"},{"title":"Platform Payout Status","openapi":"GET /v1/platform/international/payouts/status","href":"/api-reference/international/platform-payout-status"},{"title":"Send an International Payout (Full Payload)","openapi":"POST /v1/platform/international/payouts/global","href":"/api-reference/international/send-an-international-payout-full-payload"}]},{"group":"Pending Applications","expanded":false,"pages":[{"title":"List pending applications","openapi":"GET /v1/platform/pending-applications","href":"/api-reference/pending-applications/list-pending-applications"},{"title":"Get pending application","openapi":"GET /v1/platform/pending-applications/{application_id}","href":"/api-reference/pending-applications/get-pending-application"}]},{"group":"Wallets","expanded":false,"pages":[{"title":"List All Wallets","openapi":"GET /v1/platform/wallets","href":"/api-reference/wallets/list-all-wallets"},{"title":"Create a Wallet","openapi":"POST /v1/platform/wallets","href":"/api-reference/wallets/create-a-wallet"},{"title":"Get the Master Wallet","openapi":"GET /v1/platform/wallets/master","href":"/api-reference/wallets/get-the-master-wallet"},{"title":"List a User's Wallets","openapi":"GET /v1/platform/wallets/by-user/{user_id}","href":"/api-reference/wallets/list-user-wallets"},{"title":"Get a Wallet by ID","openapi":"GET /v1/platform/wallets/by-id/{wallet_id}","href":"/api-reference/wallets/get-wallet-by-id"},{"title":"Get a Wallet's Activity by ID","openapi":"GET /v1/platform/wallets/by-id/{wallet_id}/activity","href":"/api-reference/wallets/get-wallet-activity-by-id"},{"title":"List a Wallet's Incoming-Pending Transfers","openapi":"GET /v1/platform/wallets/by-id/{wallet_id}/pending-incoming","href":"/api-reference/wallets/list-wallet-pending-incoming-transfers"},{"title":"Rename or Promote a Wallet","openapi":"PATCH /v1/platform/wallets/{wallet_id}","href":"/api-reference/wallets/rename-or-promote-wallet"},{"title":"Close a Wallet","openapi":"DELETE /v1/platform/wallets/{wallet_id}","href":"/api-reference/wallets/close-wallet"},{"title":"Get a User's Wallet","openapi":"GET /v1/platform/wallets/{user_id}","href":"/api-reference/wallets/get-wallet"},{"title":"Get a User's Wallet Activity","openapi":"GET /v1/platform/wallets/{user_id}/activity","href":"/api-reference/wallets/get-wallet-activity"},{"title":"Freeze Funds in a Wallet","openapi":"POST /v1/platform/wallets/by-id/{wallet_id}/holds","href":"/api-reference/wallets/create-wallet-hold"},{"title":"List Wallet Holds","openapi":"GET /v1/platform/wallets/by-id/{wallet_id}/holds","href":"/api-reference/wallets/list-wallet-holds"},{"title":"Unfreeze Funds in a Wallet","openapi":"POST /v1/platform/wallets/by-id/{wallet_id}/holds/release","href":"/api-reference/wallets/release-wallet-hold"}]},{"group":"Payments","expanded":false,"pages":[{"title":"Request a Payment Payload","openapi":"POST /v1/platform/payments/request-payload","href":"/api-reference/payments/request-payment-payload"},{"title":"Get a Payment Request","openapi":"GET /v1/platform/payments/request-payload/{reference}","href":"/api-reference/payments/get-payment-request"},{"title":"Create a Payment from a Request","openapi":"POST /v1/platform/payments/create-transaction","href":"/api-reference/payments/create-payment-from-request"},{"title":"List Payments","openapi":"GET /v1/platform/payments","href":"/api-reference/payments/list-payments"},{"title":"Get Payment","openapi":"GET /v1/platform/payments/{payment_id}","href":"/api-reference/payments/get-payment"},{"title":"Cancel a Payment","openapi":"POST /v1/platform/payments/{payment_id}/cancel","href":"/api-reference/payments/cancel-payment"},{"title":"Get Payment Delivery Windows","openapi":"GET /v1/platform/payments/delivery-windows","href":"/api-reference/payments/get-payment-delivery-windows"},{"title":"Get Banking Calendar","openapi":"GET /v1/platform/payments/banking-calendar","href":"/api-reference/payments/get-banking-calendar"},{"title":"Get a Parked Payer-Authentication Attempt","openapi":"GET /v1/platform/payments/charge-attempts/{charge_attempt_id}","href":"/api-reference/payments/get-charge-attempt"}]},{"group":"Payments (Legacy)","expanded":false,"pages":[{"title":"Wallet to Bank (Payout)","openapi":"POST /v1/platform/payments/wallet-to-bank","tag":"LEGACY","href":"/api-reference/payments/submit-payment"},{"title":"Wallet to Wallet (Internal Transfer)","openapi":"POST /v1/platform/payments/wallet-to-wallet","tag":"LEGACY","href":"/api-reference/payments/wallet-to-wallet-internal-transfer"},{"title":"Charge a Saved Card into a Card-Acquiring Merchant","openapi":"POST /v1/platform/payments/card-to-merchant","tag":"LEGACY","href":"/api-reference/payments/card-to-merchant-payment"}]},{"group":"Document Mailing","expanded":false,"pages":[{"title":"Mail a Document to a Saved Payee","openapi":"POST /v1/platform/payments/document-mailing","href":"/api-reference/document-mailing/ship-document"},{"title":"List Mailed Documents","openapi":"GET /v1/platform/payments/document-mailing","href":"/api-reference/document-mailing/list-shipped-documents"},{"title":"Mail a Document (Full Payload)","openapi":"POST /v1/platform/payments/document-mailing/global","href":"/api-reference/document-mailing/ship-document-full-payload"},{"title":"List Document Mailing Services","openapi":"GET /v1/platform/payments/document-mailing/methods","href":"/api-reference/document-mailing/list-document-mailing-methods"},{"title":"Get a Mailed Document","openapi":"GET /v1/platform/payments/document-mailing/{payment_id}","href":"/api-reference/document-mailing/get-shipped-document"},{"title":"Track a Mailed Document","openapi":"GET /v1/platform/payments/document-mailing/{payment_id}/tracking","href":"/api-reference/document-mailing/track-shipped-document"},{"title":"Refresh a Mailed Document's Tracking","openapi":"POST /v1/platform/payments/document-mailing/{payment_id}/tracking/refresh","href":"/api-reference/document-mailing/refresh-shipped-document-tracking"},{"title":"Void a Mailed Document","openapi":"POST /v1/platform/payments/document-mailing/{payment_id}/void","href":"/api-reference/document-mailing/void-shipped-document"}]},{"group":"Fees","expanded":false,"pages":[{"title":"List Your Fee Schedule","openapi":"GET /v1/platform/fees/catalog","href":"/api-reference/fees/list-fee-catalog"},{"title":"Get One Fee by Code","openapi":"GET /v1/platform/fees/catalog/{fee_code}","href":"/api-reference/fees/get-fee-catalog-entry"},{"title":"Quote a Fee for an Amount","openapi":"POST /v1/platform/fees/quote","href":"/api-reference/fees/quote-fee"}]},{"group":"Catalog","expanded":false,"pages":[{"title":"List Products","openapi":"GET /v1/platform/catalog/products","href":"/api-reference/catalog/list-products"},{"title":"Get Product","openapi":"GET /v1/platform/catalog/products/{product_id}","href":"/api-reference/catalog/get-product"},{"title":"List Product Catalog","openapi":"GET /v1/platform/onboarding/products/catalog","href":"/api-reference/catalog/list-product-catalog"},{"title":"List Payment Categories","openapi":"GET /v1/platform/catalog/payment-categories","href":"/api-reference/catalog/list-payment-categories"}]},{"group":"Webhooks","expanded":false,"pages":[{"title":"List Webhook Event Types","openapi":"GET /v1/platform/webhooks/event-types","href":"/api-reference/webhooks/list-webhook-event-types"},{"title":"Create Webhook","openapi":"POST /v1/platform/webhooks","href":"/api-reference/webhooks/create-webhook"},{"title":"List Webhooks","openapi":"GET /v1/platform/webhooks","href":"/api-reference/webhooks/list-webhooks"},{"title":"Delete Webhook","openapi":"DELETE /v1/platform/webhooks/{webhook_id}","href":"/api-reference/webhooks/delete-webhook"},{"title":"Replay Failed Webhook Deliveries","openapi":"POST /v1/platform/webhooks/deliveries/replay-failed","href":"/api-reference/webhooks/replay-failed-webhook-deliveries"}]},{"group":"Phone Numbers","expanded":false,"pages":[{"title":"List All Phone Numbers","openapi":"GET /v1/platform/phone-numbers","href":"/api-reference/phone-numbers/list-all-phone-numbers"},{"title":"Issue Voice Access Token","openapi":"GET /v1/platform/phone-numbers/access-token","href":"/api-reference/phone-numbers/issue-voice-access-token"},{"title":"List Available Numbers","openapi":"GET /v1/platform/phone-numbers/available","href":"/api-reference/phone-numbers/list-available-numbers"},{"title":"Get User Phone Numbers","openapi":"GET /v1/platform/phone-numbers/users/{user_id}","href":"/api-reference/phone-numbers/get-user-phone-numbers"},{"title":"List a User's Devices","openapi":"GET /v1/platform/phone-numbers/users/{user_id}/devices","href":"/api-reference/phone-numbers/list-user-devices"},{"title":"Register a Device for Notifications","openapi":"POST /v1/platform/phone-numbers/users/{user_id}/devices","href":"/api-reference/phone-numbers/register-device-for-notifications"},{"title":"Remove a Device","openapi":"DELETE /v1/platform/phone-numbers/users/{user_id}/devices","href":"/api-reference/phone-numbers/remove-device"},{"title":"Request Phone Number For User","openapi":"POST /v1/platform/phone-numbers/users/{user_id}","href":"/api-reference/phone-numbers/request-phone-number-for-user"},{"title":"Issue Voice Access Token For User","openapi":"GET /v1/platform/phone-numbers/users/{user_id}/access-token","href":"/api-reference/phone-numbers/issue-voice-access-token-for-user"},{"title":"Get Call Status","openapi":"GET /v1/platform/phone-numbers/calls/{call_id}/status","href":"/api-reference/phone-numbers/get-call-status"},{"title":"Update Phone Number Status","openapi":"PUT /v1/platform/phone-numbers/users/{user_id}/{phone_number_id}","href":"/api-reference/phone-numbers/update-phone-number-status"},{"title":"Delete Phone Number","openapi":"DELETE /v1/platform/phone-numbers/users/{user_id}/{phone_number_id}","href":"/api-reference/phone-numbers/delete-phone-number"},{"title":"Turn a Device's Notifications On or Off","openapi":"PATCH /v1/platform/phone-numbers/devices/{device_id}","href":"/api-reference/phone-numbers/update-device-notifications"},{"title":"List Available Messaging Services","openapi":"GET /v1/platform/phone-numbers/messaging-services","href":"/api-reference/phone-numbers/list-messaging-services"},{"title":"List a Phone Number's Messaging Services","openapi":"GET /v1/platform/phone-numbers/{phone_number_id}/messaging-services","href":"/api-reference/phone-numbers/list-phone-number-messaging-services"},{"title":"Link a Phone Number to a Messaging Service","openapi":"POST /v1/platform/phone-numbers/{phone_number_id}/messaging-services","href":"/api-reference/phone-numbers/link-messaging-service"},{"title":"Request Removal of a Messaging Service","openapi":"POST /v1/platform/phone-numbers/{phone_number_id}/messaging-services/{link_id}/removal","href":"/api-reference/phone-numbers/request-messaging-service-removal"},{"title":"Switch a Phone Number's Messaging Service","openapi":"POST /v1/platform/phone-numbers/{phone_number_id}/messaging-services/{link_id}/update","href":"/api-reference/phone-numbers/update-messaging-service"}]},{"group":"Sms","expanded":false,"pages":[{"title":"Send SMS to Number","openapi":"POST /v1/platform/phone-numbers/sms/send-to-number","href":"/api-reference/sms/send-sms-to-number"},{"title":"List SMS Messages","openapi":"GET /v1/platform/phone-numbers/sms/messages","href":"/api-reference/sms/list-phone-sms-messages"},{"title":"List SMS Conversations","openapi":"GET /v1/platform/phone-numbers/sms/messages/conversations","href":"/api-reference/sms/list-sms-conversations"},{"title":"List SMS Thread","openapi":"GET /v1/platform/phone-numbers/sms/messages/thread","href":"/api-reference/sms/list-sms-thread"}]},{"group":"Calls","expanded":false,"pages":[{"title":"List Phone Calls","openapi":"GET /v1/platform/phone-numbers/calls","href":"/api-reference/calls/list-phone-calls"}]},{"group":"Listings","expanded":false,"pages":[{"title":"List Model","openapi":"POST /v1/platform/listings/{model_key}","href":"/api-reference/listings/list-model"}]},{"group":"Embed Tokens","expanded":false,"pages":[{"title":"Mint Embed Token","openapi":"POST /v1/platform/embed-tokens","href":"/api-reference/embed-tokens/mint-embed-token"}]},{"group":"File Scanning","expanded":false,"pages":[{"title":"Submit Files for Scanning","openapi":"POST /v1/platform/file-scans","href":"/api-reference/file-scans/submit-files-for-scanning"},{"title":"List Submitted Files","openapi":"GET /v1/platform/file-scans","href":"/api-reference/file-scans/list-submitted-files"},{"title":"Get a Submitted File","openapi":"GET /v1/platform/file-scans/{file_id}","href":"/api-reference/file-scans/get-submitted-file"}]}]},{"tab":"Webhooks","icon":"webhook","pages":[{"title":"Webhooks","href":"/webhooks/overview"}]},{"tab":"Guidelines","icon":"list-check","pages":[{"title":"Guidelines","href":"/guidelines/url-standards/overview"}]}]},"basePath":"","title":"Screen a Subject - Finogates API Documentation","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CS552b7R.js","utils-DDTCYAF2.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-De8ttokP.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DrwRDvAh.js","snippetPresets-DtAN0nWx.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D5rWArI6.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-O2i12wsz.js","shallow-DV8xABTt.js","getApiPlaygroundDisplay-DBZ0B5Jx.js","CodeSnippet-BVi0tPUX.js","CodeSnippets-CqASbIwY.js","Page-m07pfKpT.js","getPastedJson-DG9vsMS8.js","icon-CXzRSCr8.js","MethodPill-BdKVtEuX.js","DuplicateIcon-CZlmBrJI.js","createIcon-biFEUKPL.js","DynamicMarkdown-B54_zNBF.js","SectionHeading-DwwHK3Pt.js","axios-vUo_bRtp.js","Markdown-DfhCTwyA.js","clsx-xpJZXxdP.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BTZUMDnx.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-DqdKa2R4.js"]}