Scam Detect – 676x308px

Scam Detect Schema

Scam Detect's Position in the Overall Payment Flow

Scam Detect is intended to be used by a specific financial institution (FI), or processor offering services to a number of FIs, to assess scam risk at the level of an individual payment. This solution has been primarily designed to risk assess payments inbound in and outbound from the FI or processor. For outbound payments Scam Detect is positioned as the last step before the FI sends a payment through the applicable rails to the payee’s FI. Any other checks done by the FI (e.g. policy checks) should be done by the FI prior to sending the payment message to Scam Detect, with only approved payments being sent to Scam Detect.

An example, for an FI working with Featurespace processing faster outbound payments via a real-time payment (RTP) system, can be found below.

For inbound payments, Scam Detect would be called when the payment request is received by the payee FIs/processor, as shown in the diagram below.

Payment Event Types

This section describes the event types that are included within Scam DetectScam Detect uses a single monetary event type (paymentRT) to represent different types of payments to be assessed for scam. All payment events sent to Scam Detect will receive a synchronous response.

The table below lists the two event types which are required by Scam Detect along with a description of their intended use:

Event Description
paymentRT A generic payment event (either inbound or outbound).
transactionReturn An event used to send scam confirmations to Scam Detect in order to attach “labels” back to the original payments. It is mandatory to send fraud and scam confirmations for all payments integrated with Scam Detect. For more details see the Fraud Markings Section.

Scam Detect Steering Fields

The following table explains the key attributes within Scam Detect that identify the scenario that the event is representing.

Field Name Description Example
msgStatus Identifies the status of a transaction during its flow. For Scam Detect, this is always set to New.
eventType Identifies the type of event as defined in the Event API Schema. paymentRT for a payment, transactionReturn for fraud/scam confirmations
direction In which direction are funds flowing outbound represents when the FI working with Featurespace is sending money out to other FIs. Scam Detect supports profiling and risk assessing payments inbound to the FI, by setting this attribute to inbound.
For transactionReturn events the originalTransactionDirection field should be set to the same value as for the original payment.

Parties involved in a Payment

Outbound

A number of different parties are involved in making a payment. The following table explains, from the perspective of a payment outbound from the FI integrating Scam Detect, who those parties are and how that is represented in the Scam Detect Schema

Field Name: Payer Field Name: Payee Description Example
accountAgentId counterpartyAgentId A unique identifier for the FI (at a global level) at which the account is held UK: One id for Barclays, another id for NatWest etc. US: One id for JPMorgan Chase, another id for Citi etc.
accountBranchId counterpartyBranchId A unique identifier for the FI (at a more granular level than the *AgentId fields) at which the account is held UK: sort code, US: routing number
accountId counterpartyId A unique identifier for the accounts that the payment is sent from (accountId) and to (counterpartyId) N/A

Inbound

For an inbound payment (e.g. someone getting paid their salary), the accountIdaccountBranchId and accountAgentId should still represent the individual registered with the FI sending the event to Scam Detect, who, in the case of an inbound payment, will be the beneficiary. Therefore, in the case of an inbound payment, the counterpartyIdcounterpartyBranchId, and the counterpartyAgentId represent the payer. For more details please look at the On-us and Inbound Payments Section.

Key Scenarios

The section describes how to use the events and steering fields described in previous sections to represent specific scenarios.

Payment

Outbound Payment

Below we describe the process for sending a payment to Scam Detect and Scam Detect returning real-time response for that payment. Note that in all cases it is the FI/Processor’s responsibility to use that response to make the appropriate decision to accept, hold, or decline the payment within their payment engine.

Example

  • Alice sends Bob some money for his birthday via bank transfer. Alice’s bank, Bank of Alice, offers real-time payments for existing payees. This outbound real-time payment (paymentRT) event undergoes all of Bank of Alice’s internal policy checks. Additionally, the payment may undergo additional checks from within the institution before being sent to Scam Detect.
  • Alice’s paymentRT message is sent to Scam Detect for risk assessment
  • In this example, the scam detect score is low and so when the FI combines that with their existing risk strategy they decide to approve the payment, and it is sent through the relevant rails
  • Bob receives Alice’s payment in real-time.

Note that no additional completion or declined message is required to be sent to the Scam Detect.

Inbound Payments

Inbound payments are dealt in a similar way; when considering the same scenario above, the processing flow would look as follows:

Example

  • Alice sends Bob some money for his birthday via bank transfer. Both Alice’s and Bob’s banks, participate in the real time payment network. This inbound real-time payment (paymentRT) is received by Bob’s bank from the RTP system.
  • Bob’s inbound paymentRT message is sent to Scam Detect for risk assessment
  • In this example, the scam detect score is high and, combined with existing information, leads to Bank of Bob freezing Bob’s account.

If the system is only processing outbound payments, only send a single event per payment for processing.

In case fraud or scam was reported, two transactionReturn event should be sent.

Fraud Markings

Scam confirmations are of critical importance for the correct functioning of Scam Detect analytics; this can also include confirmation of fraudulent cases (e.g. account take over) but these won’t be included in the performance reporting. Scam Detect requires fraud and scam confirmations to be sent for both fraud/scams reported by customers on payments that are let through and payments that are blocked before leaving the FI/Processor and later confirmed as fraud/scam. We expect transactionReturn events to be sent at least once a day in batch and no later than 48 hours after they were reported.

An event must be sent in for each instance of confirmed fraud. The confirmedRisk attribute must be set to “true”. The originalTransactionId field in the transactionReturn event must also match the transactionId field of the corresponding payment event. Similarly, the originalTransactionDirection attribute must match the direction of the original payments that the fraud report relates to. The returnType attribute should indicate whether this is reporting a Fraud or a Scam.
The returnSubType field shall be used to provide more granularity around the type of scam; we recommend using one of the following values: advance fee scaminvestment scaminvoice and mandate scamphising/smishingpurchase scamromance scamvishing, and other.

Example:

  • In this example, Sandy has been the victim of a scam. He then contacts Bank X to report it.
  • After the bank has confirmed this is a scam, a transactionReturn message is sent to ARIC.

On-us and Inbound Payments

This section describes how to deal with inbound payments for On-us payments.

On-us payments are where both the payer and the payee are banking with the same FI/Processor; in other words, the payment is issued and received by the same bank or credit union.

If both inbound and outbound payments are in scope for processing by Scam Detecttwo different events should be sent per on-us payment in for profiles to be fully updated; this is because account and counterparty are two different entity types and states are not shared between the two.

Consider a solution that processes both inbound and outbound payments for Bank of Alice. Alice sends Bob some money for his birthday via bank transfer; both Alice and Bob are banking with Bank of Alice. For this single payment between Bob and Alice, both the inbound and the outbound messages must be sent to ARIC Risk Hub for processing.

events

Events

/events

REQUEST BODY SCHEMA: application/json

One of 

accountAgentId

required
string

Unique identifier of the financial institution (at the global level) providing the account in accountId. In the UK you would have one id for Barclays, another id for NatWest etc. In the US you would have one id for JPMorgan Chase, another id for Citi etc.

accountBranchId

required
string

Unique identifier for the branch the account is associated with, if any (at a more granular level than the accountAgentId field). In the UK this would typically be populated by a sort code, In the US this would typically be populated by a routing number.

accountId

required
string

Examples: “591610/78956437”

Unique identification of the account involved in the event. In the UK, it would be typically be an IBAN or defined as “sortCode” + “accountNumber”. In the US it would be defined as “routingNumber” + “accountNumber”.

required
object (money)

Actual amount of the transaction (excluding fees)

channel

required
string

Examples: “online”

Channel through which the action was made. Permitted values are “online”, “mobile”, “atm”, “branch”, “lockbox”, “mailed check”, “telephone”, and “call center”, “other”.

For the Payments solution, further free text examples can be added to fit the use case.

counterpartyAgentId

required
string

Unique identifier of the financial institution (at the global level) providing the account for the counterparty, should one exist.

counterpartyBranchId

required
string

Unique identifier for the specific FI’s branch (at a more granular level than the agentId fields) at which the counterparty’s account is held. In the UK this would typically be populated by a sort code, In the US this would typically be populated by a routing number.

counterpartyId

required
string

Identification of the counterparty. In the UK, it would be typically be an IBAN or defined as “sortCode” + “accountNumber”. In the US it would be defined as “routingNumber” + “accountNumber”.

direction

required
string
Enum: “outbound” “inbound”

The direction of the message. Valid values are “outbound” (for transactions being sent from the FI) or “inbound” (for transactions received by the FI). This should match the direction of the flow of funds.

eventId

required
string

Examples: “8465142137”

A unique reference for the event. This reference string should be fully unqiue across the entire system. If the same eventId appears multiple times, this is interpreted as duplicate events. Please note that we advise against sequential numbering.

eventTime

required
string <date-time>

Examples: “2021-08-21T14:41:23Z”

The date-time the event happened in the real world, defined by ISO 8601 and validated against RFC 3339. The eventTime should be prior (or equal to) the time the event was sent to ARIC. In the scenario where events are being backfilled into ARIC after an outage (to update profiles) the eventTime should reflect the time the event happened, not the time it was sent to ARIC (which may be days late).

eventType

required
string
Value: “paymentRT”
localDateTime

required
string <date-time>

Examples: “2021-10-12T10:30:00”

Local date and time the transaction takes place at the payer location. Should not have any associated timezone.

msgStatus

required
string

Examples: “New”

This attribute Identifies the status of a transaction during its flow. This should be set to “New” for a payment that needs to be risk-assessed, but other options are possible; please refer to the Schema Guide for more information.

The “Setup” value can be used to denote setting up a future-dated-payment.

transactionId

required
string

A unique identifier for the transaction, used to link different messages as part of the same transaction (e.g. payment request and confirmation messages) as well as to link transactions to confirmed fraud events sent through the transactionReturn event

object (money)

The account (pertaining to the account defined in the accountId) balance before the current transaction.

accountOpenDate
string <date>

The date the account was opened

accountType
string

The type of account, e.g “current”, “savings”, “checking” etc.

deviceId
string

Examples: “FG9834YY82”

A unique identifier of the device performing the event, such as the laptop/mobile phone used to log into the online banking.

verificationResult
string

This is the final result of the verification, whether the customer was successful in verifiying themselves. The verificationType determines whether any specific verifications were failed or were successful (see description of verificationType). This attribute rolls that up into a single value such that if the customer was eventually successfully verified, such that they could proceed with the action, this should be set to “verificationResult”: “SUCC”. If the customer was trying to verify themselves and failed, such that they could not proceed with the action, you can set “verificationResult”: “FAIL”. Typically this wouldn’t result in an event being sent to ARIC at all. However, if it’s possible to feed this information into ARIC, this can be accommodated, and should be accompanied with an appropriate msgStatus value like “Verification Failed” to differentiate it from a request to score a payment that is due to be executed

object (verificationType)

This is a derived type that allows you to track multiple verifications required to perform the designated events. For example, for a payments where a customer failed in some biometric verification (e.g. fingerprint scanning) but then successfully entered their password to complete the payment, we would expect to see “verificationType”: {“biometry” : “FAIL”, “password”: “SUCC”}.

Responses

Sync: Real-time response from the engine

RESPONSE SCHEMA: application/json

required
object (Model)

The output of the Scam Detect model.

originatingEvent

required
object

Full event data payload of the event which triggered the response.

outputTime

required
string <date-time>

The time that the response was output by ScamDetect.

object (Model)

The output of the additional Scam Detect model, if any.

Async: Event received, no content

Bad event, failed schema validation

paymentRT Event Type

accountAgentId

required
string

Unique identifier of the financial institution (at the global level) providing the account in accountId. In the UK you would have one id for Barclays, another id for NatWest etc. In the US you would have one id for JPMorgan Chase, another id for Citi etc.

accountBranchId

required
string

Unique identifier for the branch the account is associated with, if any (at a more granular level than the accountAgentId field). In the UK this would typically be populated by a sort code, In the US this would typically be populated by a routing number.

accountId

required
string

Examples: “591610/78956437”

Unique identification of the account involved in the event. In the UK, it would be typically be an IBAN or defined as “sortCode” + “accountNumber”. In the US it would be defined as “routingNumber” + “accountNumber”.

required
object (money)

Actual amount of the transaction (excluding fees)

channel

required
string

Examples: “online”

Channel through which the action was made. Permitted values are “online”, “mobile”, “atm”, “branch”, “lockbox”, “mailed check”, “telephone”, and “call center”, “other”.

For the Payments solution, further free text examples can be added to fit the use case.

counterpartyAgentId

required
string

Unique identifier of the financial institution (at the global level) providing the account for the counterparty, should one exist.

counterpartyBranchId

required
string

Unique identifier for the specific FI’s branch (at a more granular level than the agentId fields) at which the counterparty’s account is held. In the UK this would typically be populated by a sort code, In the US this would typically be populated by a routing number.

counterpartyId

required
string

Identification of the counterparty. In the UK, it would be typically be an IBAN or defined as “sortCode” + “accountNumber”. In the US it would be defined as “routingNumber” + “accountNumber”.

direction

required
string
Enum: “outbound” “inbound”

The direction of the message. Valid values are “outbound” (for transactions being sent from the FI) or “inbound” (for transactions received by the FI). This should match the direction of the flow of funds.

eventId

required
string

Examples: “8465142137”

A unique reference for the event. This reference string should be fully unqiue across the entire system. If the same eventId appears multiple times, this is interpreted as duplicate events. Please note that we advise against sequential numbering.

eventTime

required
string <date-time>

Examples: “2021-08-21T14:41:23Z”

The date-time the event happened in the real world, defined by ISO 8601 and validated against RFC 3339. The eventTime should be prior (or equal to) the time the event was sent to ARIC. In the scenario where events are being backfilled into ARIC after an outage (to update profiles) the eventTime should reflect the time the event happened, not the time it was sent to ARIC (which may be days late).

eventType

required
string
Value: “paymentRT”
localDateTime

required
string <date-time>

Examples: “2021-10-12T10:30:00”

Local date and time the transaction takes place at the payer location. Should not have any associated timezone.

msgStatus

required
string

Examples: “New”

This attribute Identifies the status of a transaction during its flow. This should be set to “New” for a payment that needs to be risk-assessed, but other options are possible; please refer to the Schema Guide for more information.

The “Setup” value can be used to denote setting up a future-dated-payment.

transactionId

required
string

A unique identifier for the transaction, used to link different messages as part of the same transaction (e.g. payment request and confirmation messages) as well as to link transactions to confirmed fraud events sent through the transactionReturn event

object (money)

The account (pertaining to the account defined in the accountId) balance before the current transaction.

accountOpenDate
string <date>

The date the account was opened

accountType
string

The type of account, e.g “current”, “savings”, “checking” etc.

deviceId
string

Examples: “FG9834YY82”

A unique identifier of the device performing the event, such as the laptop/mobile phone used to log into the online banking.

verificationResult
string

This is the final result of the verification, whether the customer was successful in verifiying themselves. The verificationType determines whether any specific verifications were failed or were successful (see description of verificationType). This attribute rolls that up into a single value such that if the customer was eventually successfully verified, such that they could proceed with the action, this should be set to “verificationResult”: “SUCC”. If the customer was trying to verify themselves and failed, such that they could not proceed with the action, you can set “verificationResult”: “FAIL”. Typically this wouldn’t result in an event being sent to ARIC at all. However, if it’s possible to feed this information into ARIC, this can be accommodated, and should be accompanied with an appropriate msgStatus value like “Verification Failed” to differentiate it from a request to score a payment that is due to be executed

object (verificationType)

This is a derived type that allows you to track multiple verifications required to perform the designated events. For example, for a payments where a customer failed in some biometric verification (e.g. fingerprint scanning) but then successfully entered their password to complete the payment, we would expect to see “verificationType”: {“biometry” : “FAIL”, “password”: “SUCC”}.

transactionReturn Event Type

accountAgentId

required
string

Unique identifier of the financial institution providing the account in accountId. It refers to the FI involved in the original transaction and not the one involved in the reporting. This field will only be typically populated for payment fraud.

accountBranchId

required
string

Unique identifier for the branch the account is associated with, if any. It refers to the branch id for the account involved in the original transaction and not the one involved in the reporting.

accountId

required
string

Examples: “CA13771612318”

Unique identification of the account involved in the event. It refers to the account involved in the original transaction and not the one involved in the reporting.

confirmedRisk

required
boolean

Set this to true if the original event is confirmed as risk (i.e. marked as a fraud or scam). This should be set to true even if a chargeback wasn’t raised (e.g. if the transaction was declined before it was authorized). In cases where non-fradulent chargebacks are also sent to ARIC, set this to false so that ARIC can determine what is and isn’t risk.

counterpartyAgentId

required
string

Unique identifier of the financial institution providing the account for the counterparty, should one exist. It refers to the FI involved in the original transaction and not the one involved in the reporting. This field will only be typically populated for payment fraud.

counterpartyBranchId

required
string

Unique identifier for the specific FI’s branch (at a more granular level than the agentId fields) at which the counterparty’s account is held. It refers to the branch id for the counterparty involved in the original transaction and not the one involved in the reporting.

counterpartyId

required
string

Identification of the counterparty, should one exist. It refers to the counterparty involved in the original transaction and not the one involved in the reporting. This field will only be typically populated for payment fraud.

eventId

required
string

Examples: “8465142137”

A unique reference for the event. This reference string should be fully unqiue across the entire system. If the same eventId appears multiple times, this is interpreted as duplicate events. Please note that we advise against sequential numbering.

eventTime

required
string <date-time>

Examples: “2021-08-21T14:41:23Z”

The date-time at which the event was reported by the customer or risk analyst (and not the time the original transaction took place – please see originalEventTime). The eventTime should be prior (or equal to) the time the event was sent to ARIC.

eventType

required
string
Value: “transactionReturn”
msgStatus

required
string

Examples: “Risk”

This attribute identifies the status of the action; e.g. set this value to “Risk” when the transactionReturn represents a fraud/scam report. Other free text values may be used (e.g. “Chargeback”) that may primarily help with investigation in the UI.

required
object (money)

Amount of money, as provided in the original transaction (excluding fees).

originalEventTime

required
string <date-time>

Indicates the time at which the original transaction took place (and not the time at which the event was reported by the customer or risk analyst – see eventTime).

originalTransactionDirection

required
string
Enum: “outbound” “inbound”

The direction of the original message. Valid values are “outbound” (for transactions being sent from the FI) or “inbound” (for transactions received by the FI). This should only be populated for the payments solution.

originalTransactionId

required
string

A unique identifier for the transaction, used to link confirmed fraud events sent through the transactionReturn event back to the original transaction.

returnType

required
string

Type of risk label. Some examples are: Scam/Fraud or 1st/2nd/3rd party.

deviceId
string

Examples: “FG9834YY82”

A unique identifier of the device performing the event, such as the mobile/cell phone used for a transaction. It refers to the device involved in the original transaction and not the one involved in the reporting.

returnSubType
string

The subtype of risk label. For card fraud, examples are lost and stolen / card cloned. For payments, examples are investment scam, or romance scam etc.

money Definition

baseCurrency

required
string = 3 characters

Examples: “EUR”

3 letter ISO 4217 currency code, such as GBP, USD or EUR. A complete list of codes can be found at “https://www.iso.org/iso-4217-currency-codes.html” The baseCurrency (the currency the baseValue is expressed in) should be consistent across the system.

baseValue

required
number

Examples: 6000

Value of transaction expressed in the currency defined in the baseCurrency field.

currency

required
string = 3 characters

Examples: “DNK”

3 letter ISO 4217 currency code, such as GBP, USD or EUR. A complete list of codes can be found at “https://www.iso.org/iso-4217-currency-codes.html” This is typically the currency in which the card/account is issued.

value

required
number

Examples: 44702

Value of transaction expressed in the currency defined in the currency field.

merchantCurrency
string = 3 characters

Examples: “USD”

3 letter ISO 4217 currency code, such as GBP, USD or EUR. A complete list of codes can be found at “https://www.iso.org/iso-4217-currency-codes.html”. This is the currency in which the transaction takes place.

merchantValue
number

Examples: 6504

Value of transaction expressed in the currency defined in the merchantCurrency field.

verificationType Definition

aa
string

Examples: “FAIL”

The Accountholder Authentication Value {AAV} is a secure code specific token that uses the Universal Cardholder Authentication Field™ (UCAF) field for transport within MasterCard authorization messages. For Visa Secure, the AAV is named the CAVV.

accountDigitalSignature
string

Examples: “FAIL”

Account-based digital signature authentication.

authenticationToken
string

Examples: “FAIL”

A token is used to verify an already performed authentication.

avs
string

Examples: “FAIL”

Address Verification Service (AVS)

biometry
string

Examples: “FAIL”

Biometric authentication of the customer.

cardholderIdentificationData
string

Examples: “FAIL”

Cardholder data provided for verification, for instance social security number, driver license number, passport number.

cryptogramVerification
string

Examples: “FAIL”

Verification of a cryptogram generated by a chip card or another device, for instance ARQC (Authorisation Request Cryptogram)

cvv
string

Examples: “FAIL”

The CVV (also referred to as CVC, CSC, CVV2, or CCID) is the three- or four-digit number printed directly on the credit card, usually on the signature strip or the front of the car. The number provided by the user is compared with the one on the issuer’s records. Should be set to true if the verification was successfull, false otherwise. If no CVV data was available, it should not be populated.

offlinePIN
string

Examples: “SUCC”

Off-line PIN authentication (Personal Identification Number).

oneTimePassword
string

Examples: “SUCC”

Verification of a one-time password.

onlinePIN
string

Examples: “SUCC”

On-line PIN authentication (Personal Identification Number).

paperSignature
string

Examples: “FAIL”

Handwritten paper signature.

passiveAuthentication
string

Examples: “FAIL”

Authentication based on statistical cardholder behaviour.

password
string

Examples: “FAIL”

Authentication by a password.

simSwapCheck
string

Examples: “SUCC”

When using a third party provider to detected whether a sim swap took place. Use FAIL if a sim swap was detected otherwise set this value to SUCC

threeDS
string

Examples: “FAIL”

Authentication performed during a secure electronic commerce transaction

tokenAuthentication
string

Examples: “FAIL”

Cryptogram generated by the token requestor or a customer device to validate the authorised use of a token.