Use screening observations to send Karsa the verification, fraud, AML, transaction-monitoring, and
blockchain-screening results that BlindPay receives from providers such as AiPrise, SEON, and
Chainalysis. For those three providers, use the provider-native routes below: BlindPay supplies the
Karsa subject binding and the untouched provider response, and Karsa owns transport normalization.
The generic endpoint remains available for other providers and already-normalized historical data.
What the two records mean
POST /api/ingestion/screening-observations records what a provider reported at a particular time.
The observation is immutable and has exactly one primary Customer, Account, or Transaction subject.
Additional implicated subjects may be included in relatedSubjects.
Each provider-native route writes that same immutable record after applying a versioned Karsa
adapter. Additive provider fields are retained in bounded providerDetails.nativeResponse; unknown
provider states normalize to UNKNOWN, not CLEAR. AiPrise related-person and related-company
objects are retained as evidence and are not automatically asserted as canonical Karsa links.
POST /api/ingestion/screening-dispositions records what a BlindPay reviewer or source system later
did with one observation. It is a separate immutable event tied to an observation uploaded by the
same authenticated source.
A provider result is evidence, not a Karsa finding. Uploading REVIEW, MATCH, or an OPEN
alert does not automatically decide its action class, queue, priority, or disposition. Routine 6
applies the released policy and rule mapping separately.
Preserve identity and provenance
- Use
externalId as the stable BlindPay event identity for the authenticated source.
- On the generic endpoint, put the provider’s alert, verification, transaction, or screening ID in
providerRecordId. The native routes extract it when the provider response exposes it;
Chainalysis requires it in the envelope because the exact contracted product schema varies.
- Supply
ruleVersion when the provider exposes it; otherwise BlindPay may use an immutable
configuration hash that it captured when the provider ran.
- Use
artifactHash for the SHA-256 of retained canonical provider detail. Upload supporting
evidence first and place its immutable Document version references in documents.
- Native routes retain the validated provider response in bounded
providerDetails. Do not include
credentials, biometric media, document binaries, or signed URLs.
For Routine 4.10, bind every applicable blockchain-screening result to the Account or Transaction
it screened. Include providerProduct, providerApiVersion, providerRecordId, and
providerObservedAt; a missing result, missing provenance, UNKNOWN, or ERROR remains
inconclusive. Chainalysis category, service, direct/indirect exposure, hop attribution, transaction
hash, direction, and other product-specific evidence may remain in the validated bounded native
response.
Declare feed completeness
After all records for a bounded range have been delivered, submit a source checkpoint with
dataset equal to SCREENING_OBSERVATIONS or SCREENING_DISPOSITIONS. This lets Routine 6 tell the
difference between a complete feed with no alerts and a feed that may simply be missing records.
Use completeFrom for the earliest complete instant, or null only when the attestation covers the
source’s full retained history, and completeThrough for the exclusive upper bound.
The checkpoint is your source’s attestation. Karsa never infers completeness merely because it
received some observations.
Result, recommendation, and disposition stay separate
sourceStatus, normalizedResult, and alertLifecycle describe the provider observation.
- Routine 6 produces a cited recommendation only after the observation has enough policy and rule
context.
normalizedDisposition describes BlindPay’s later reviewer or source-system action.
- A Karsa Finding disposition, if one exists, remains part of the Karsa Finding lifecycle.
This separation prevents a provider score or status from silently becoming an automated customer
decision.