POST/v1/predict/fraud
Score a transaction
Send the transaction before executing it: the response gives the decision, the score and its reasons. Send transaction, with the standard field names, or raw_transaction, with your system’s own. Right needed: send transactions.
API key required
Request body (JSON)
raw_transactionobject · optional- The transaction with your system’s field names, instead of
transaction. The mapping is set when you go live. request_idstring · optional- Identifier of the analysis: yours, or one YARDA generates. An identifier already used is refused (409).
transactionobject · optional- The transaction, with the standard field names. It or
raw_transactionis required. transaction.amountnumber · required- Amount, zero or more, in the stated currency.
transaction.receiver_idstring · required- The receiver’s identifier in your system. Pseudonymised on arrival.
transaction.sender_idstring · required- The sender’s identifier in your system. Pseudonymised on arrival.
transaction.transaction_idstring · required- Your reference for the transaction, unique within your institution (100 characters at most).
transaction.agent_idstring · optional- The agent who handled the operation. Pseudonymised on arrival.
transaction.cash_point_idstring · optional- The agent’s till or pick-up point. Pseudonymised on arrival.
transaction.channelstring · optional- Channel of the operation: agent, app, USSD or web, for example.
transaction.corridorstring · optional- The transaction’s corridor, as named in your profile.
transaction.currencystring · optional- ISO 4217 currency code, or a stablecoin ticker such as EURC or USDC.
transaction.device_changed_atstring (date-time) · optional- Date of the sender’s last change of device.
transaction.device_idstring · optional- The sender’s device or app installation. Pseudonymised on arrival.
transaction.fee_amountnumber · optional- Fee charged to the sender, in the operation’s currency; compared with your tariff grid.
transaction.funding_methodstring · optional- How the sender paid:
cash,mobile_money,bank_account,card,cryptoorother. transaction.ip_addressstring · optional- IP address of a remote operation (IPv4 or IPv6). Kept under pseudonym.
transaction.kyc_tierstring · optional- The sender’s customer due diligence tier in your system.
transaction.locationstring · optional- Accepted for compatibility, never stored.
transaction.merchant_idstring · optional- The merchant paid. Pseudonymised on arrival.
transaction.metadataobject · optional- Additional information from your system; the analysis does not use it.
transaction.original_transaction_idstring · optional- For a refund or a reversal, the reference of the operation it undoes.
transaction.payout_amountnumber · optional- Amount paid to the receiver, when it differs from the amount sent (another currency, fees deducted).
transaction.payout_currencystring · optional- Currency paid to the receiver.
transaction.payout_methodstring · optional- How the receiver was paid:
cash,mobile_money,bank_account,card,cryptoorother. transaction.pin_reset_atstring (date-time) · optional- Date of the sender’s last PIN or password reset.
transaction.receiver_countrystring · optional- The receiver’s country, as an ISO code (for example CI).
transaction.receiver_namestring · optional- The receiver’s name. Required by law on every transfer and screened against your sanctions lists. Compared in memory, never stored.
transaction.receiver_phonestring · optional- The receiver’s phone number. Pseudonymised on arrival.
transaction.sender_addressstring · optional- The sender’s address, one of the ways the law requires to identify them. Only its presence is checked; never stored.
transaction.sender_balancenumber · optional- Balance of the sender’s account or wallet before the operation.
transaction.sender_birth_datestring (date) · optional- The sender’s date of birth; with the place of birth, it identifies them. Only its presence is checked; never stored.
transaction.sender_birth_placestring · optional- The sender’s place of birth. Only its presence is checked; never stored.
transaction.sender_countrystring · optional- The sender’s country, as an ISO code (for example SN).
transaction.sender_declared_monthly_amountnumber · optional- Monthly amount the sender declared at onboarding.
transaction.sender_id_numberstring · optional- Number of the sender’s official identity document. Only its presence is checked; never stored.
transaction.sender_namestring · optional- The sender’s name. Required by law on every transfer (uniform law, article 39; Regulation (EU) 2023/1113) and screened against your sanctions lists. Compared in memory, never stored.
transaction.sender_phonestring · optional- The sender’s phone number. Pseudonymised on arrival.
transaction.sender_sincestring (date) · optional- When the relationship with the sender started.
transaction.sender_typestring · optional- Natural person (
person) or legal entity (legal_entity). transaction.sim_swap_atstring (date-time) · optional- Date of the sender’s last SIM swap, if you know it.
transaction.statusstring · optional- Status of the operation:
completed,pending,failed,cancelledorreversed. The usual words of your exports are recognised (success,refunded,annulé...). transaction.timestampstring (date-time) · optional- Date and time of the transaction, in ISO 8601 format.
transaction.transaction_typestring · optional- Type of operation:
cash_in,cash_out,p2p,merchant_payment,bill_paymentorremittance, for example. transaction.wallet_idstring · optional- The sender’s wallet, when distinct from the sender. Pseudonymised on arrival.
Response 200
anomaly_scorenumber · required- Score of the unusual behaviour model, from 0 to 1.
client_idstring · required- Your institution’s identifier at YARDA.
client_phasestring · required- The learning phase of your space.
decisionstring · required- The decision.
blockappears only if you have allowed blocking.Values:allow,review,alert,block explanationsarray of object · required- Each model’s contribution to the final score.
explanations[].scorenumber · required- Its score, from 0 to 1.
explanations[].sourcestring · required- The model concerned.
explanations[].weightnumber · required- Its weight.
explanations[].weighted_scorenumber · required- Its score multiplied by its weight.
explanations[].detailsarray of string · optional- Details specific to the model.
final_scorenumber · required- Final score, from 0 to 1: the transaction’s rank within your own traffic.
inference_time_msnumber · required- The time the analysis took on the server, in milliseconds.
ml_scorenumber · required- Score of the supervised model, from 0 to 1, when such a model is in service.
request_idstring · required- Identifier of the analysis: yours, or one YARDA generates. An identifier already used is refused (409).
thresholdsobject · required- The review, alert and block thresholds applied to this analysis.
timestampstring (date-time) · required- Date and time of the response.
transaction_idstring · required- Your reference for the transaction.
weightsobject · required- Weight of each model in the final score.
decision_causeobject · optional- The decisive cause of the decision.
decision_cause.decisionstring · required- The decision this cause explains.
decision_cause.kindstring · required- Kind of cause:
score_band,score_rules,detection_cap,typology,list_entry,declarative,on_errororblocking_disabled. decision_cause.reason_enstring · required- The cause, written in English.
decision_cause.reason_frstring · required- The cause, written in French.
decision_cause.detailsobject · optional- The values quoted in the cause: score, threshold, version.
decision_cause.originalobject · optional- For
blocking_disabled, the cause that asked for the block. decision_cause.rulestring · optional- The rule that decided, when it is a rule.
decision_policyobject · optional- Present when your policy changed the decision: a block returned as an alert, for example.
decision_policy.codestring · required- Kind of adjustment, today
blocking_disabled. decision_policy.decisionstring · required- The decision after the adjustment.
decision_policy.original_decisionstring · required- The decision before the adjustment.
decision_policy.reason_enstring · required- The adjustment, explained in English.
decision_policy.reason_frstring · required- The adjustment, explained in French.
degradedboolean · optional- True when a model could not answer: the decision then follows the floor set by your policy.Default:
false legalobject · optional- The legal floor, apart from the decision: the sender and the receiver screened against your sanctions lists when you send their names (
sender_name,receiver_name). legal.holdboolean · required- True when a party resembles an entry of a sanctions list, or when screening failed: do not execute the transfer until a person has ruled in the console. The hold changes neither the score nor the decision. You are told when it ends by webhook (
legal.hold.updated) and can follow each hold withGET /v1/legal-holds. legal.screeningstring · requiredscreened: the named parties were screened;names_absent: no name was sent, nothing could be screened;unavailable: none of your lists is loaded;failed: screening failed and the transfer is held.Values:screened,names_absent,unavailable,failedlegal.cashobject · optional- The parties’ cash of the day, for a customer answering to the UEMOA: for each party that handed in or received cash, the local day, the total in FCFA (this operation included) and the number of operations, with the thresholds of 9,000,000 FCFA (identification, uniform law art. 17 i) and 15,000,000 FCFA (report to the CENTIF, art. 72). Null for an operation without cash.
legal.dutiesarray of string · optional- What your institution must do, never a hold:
cash_identification, identify the customer whose cash of the day goes beyond 9,000,000 FCFA;cash_report, report the cash to the CENTIF from 15,000,000 FCFA. legal.list_setstring · optional- The versions of the lists the parties were screened against.
legal.partiesarray of object · optional- For each named party: its role, its pseudonym, its status (
clear,potential,confirmed,dismissed), the references of the entries raised and the best score. legal.reasonsarray of string · optional- The reasons for the hold:
sanctions_potential_sender,sanctions_potential_receiver,sanctions_confirmed_sender,sanctions_confirmed_receiver,screening_failed,transfer_information_incomplete. legal.transfer_informationobject · optional- Whether the transfer carries the information the law requires on its parties: status (complete, incomplete, not_applicable, or attested when your institution carries out the analysis of its alerts and keeps this information itself), what is missing (payer_name, payee_name, payer_identification) and the regimes applied (uemoa, eu). When incomplete, the transfer is held: do not execute it before obtaining the information.
model_version_idinteger · optional- The version of the supervised model that scored the transaction, if any.
reasonsarray of object · optional- The behaviour variables that explain the score.
reasons[].directionstring · requiredhighif the value is unusually high,lowif it is low.reasons[].featurestring · required- The variable concerned.
reasons[].typicalnumber · required- The usual value.
reasons[].valuenumber · required- The value for this transaction.
reasons[].weightnumber · required- The reason’s weight: rarity for the behaviour model, contribution towards fraud for the supervised model.
reasons[].sourcestring · optional- The model giving the reason:
anomalyorsupervised. triggered_rulesarray of object · optional- The rules and typologies that acted on the transaction.
triggered_rules[].rule_namestring · required- The rule’s name.
triggered_rules[].rule_typestring · requiredtypology(built-in typology or block list) ordeclarative(your rule).triggered_rules[].scorenumber · required- The score increase asked for, 1 when it asks for none.
triggered_rules[].descriptionstring · optional- Why the rule acted, in English.
triggered_rules[].severitystring · optional- The minimum decision imposed (
review,alert,block), orflag.Default:low triggered_rules[].versioninteger · optional- The version of your rule.
warningsarray of object · optional- What the transaction holds that its model did not learn: a field filled in nearly every training transaction and absent here, or a value never seen. The transaction may look unusual for that reason alone: check what your integration sends. These warnings never change the decision; an empty list when there are none.
warnings[].codestring · requiredfield_absent(missing field) orunknown_value(value unknown to the model).warnings[].fieldstring · required- The transaction field concerned.
warnings[].message_enstring · required- The warning, written in English.
warnings[].message_frstring · required- The warning, written in French.
warnings[].training_sharenumber · required- Share of the training transactions in which the field is filled, from 0 to 1.
warnings[].valuestring · optional- For
unknown_value, the value received.
422 Request does not match the schema.