Screenings

Screen a transaction of your end customer

Screens one transaction of one of your end customers and returns allow, review or deny with the rules that fired. The rules look at this transaction and at the history you sent for the same customer_reference (in the same environment):

rulefires wheneffectscore
high_risk_countrycounterparty_country is KP, IR, SY or CUdeny100
large_amountamount_usd is 10,000 or morereview40
velocity_24hmore than 10 transactions of the customer in the 24 hours ending at occurred_atreview30
structuring_24hthis transaction is between 9,000 and 10,000 USD and is the 3rd or more of the customer in that band within those 24 hoursreview50
volume_spikethe customer's 24-hour volume (at least 1,000 USD) is more than 5 times its daily average of the 29 days before, with at least 5 transactions in those daysreview30

| prior_confirmed_risk | you reported a transaction of this customer as confirmed_risk in the last 90 days | review | 50 |

effect is the worst rule (deny over review over allow); score is the sum, capped at 100. rule_version names the rule set. The result is advice: OZAV never blocks the transaction.

It learns from your outcomes. Report how a transaction ended with POST /transaction-screenings/{transaction_screening_id}/outcome. A false_positive clears the rules that fired on it (large_amount, velocity_24h, volume_spike) for that customer for 90 days, up to the size you labeled (the amount, the 24-hour count or the 24-hour volume of that transaction): above it the rule counts again. A cleared rule still shows in reasons with cleared_by and score 0, and no longer counts; a cleared rule never clears the next one. A confirmed_risk flags every next transaction of that customer for 90 days. A sanctioned country and structuring are never cleared, and your outcomes never affect another organization. Your outcomes tune the advice you receive; each one is your statement, kept with the screening.

customer_reference is your own id for the end customer. OZAV never stores it in clear, only a keyed hash of it with your organization, so do not send a document number or an email there: any stable id of yours works.

Send external_id (your transaction id) to make each transaction count once: a second call with the same external_id is 409 DUPLICATE_TRANSACTION and is not charged. Send an Idempotency-Key to retry the same call safely.

occurred_at (default: now) must be within the last 30 days and not in the future. A transaction is judged against the ones already sent with an earlier or equal occurred_at, so send each customer's transactions in chronological order.

post/transaction-screenings

Request

  • Base URL
    https://developers.ozav.io/v2
  • Auth
    • API key in header X-API-Key
    • or HTTP bearer

Headers

Idempotency-Keystring

Optional idempotency key (16-256 characters of [A-Za-z0-9_-]); same semantics as on money-moving operations.

Request body

customer_referencestring required

Your own stable id for the end customer. Stored only as a keyed hash; do not send a document number or an email.

external_idstring

Your transaction id. A second call with the same one is 409 and not charged.

direction'inbound' | 'outbound' required
amount_usdstring required

The value in US dollars, as a decimal string greater than zero. The rules use this value.

currencystring

The original currency or token, for your record. Optional.

amountstring

The value in the original currency, for your record. Optional.

counterparty_countrystring

The country of the other side (ISO 3166-1 alpha-2). Optional.

occurred_atstring date-time

When the transaction happened. Default: now. Within the last 30 days, not in the future.

Response

The screened transaction.

object'transaction_screening' required
idstring required

The transaction screening id (ozav_txs_...).

livemodeboolean required
external_idstring nullable
direction'inbound' | 'outbound' required
amount_usdstring required
currencystring nullable
amountstring nullable
counterparty_countrystring nullable
occurred_atstring date-time required
effect'allow' | 'review' | 'deny' required

The worst rule that fired; allow when none did. Advice only: OZAV never blocks the transaction, the decision is yours.

scoreinteger required

The sum of the rules' scores, capped at 100.

rule_versionstring required
outcome'confirmed_risk' | 'false_positive' | 'completed' | 'reversed' | 'chargeback' | 'null' nullable

How the transaction ended, as you reported it with POST /transaction-screenings/{transaction_screening_id}/outcome; null until then.

outcome_notestring nullable
outcome_atstring date-time nullable
created_atstring date-time required

Changes

No recorded changes to this operation across all 1 revision of this API.