Skip to content
On this page

Transaction Monitoring

foo

Not all transaction monitoring tools are created equal; they do not all perform the same function. Some are primarily built for e-commerce platforms to reduce losses and chargebacks. Others are built to help fintech companies determine the likelihood of users defaulting on payments, which can create program losses for the business. Our tool is designed to keep fintech founders from going to federal prison for enabling criminal and terrorist financing, to reduce the likelihood of money laundering, and to detect anomalies in transaction patterns that may be due to fraud and theft.

We use a scoring model to score each transaction in realtime, a score similar to the FICO scoring model which starts at 850 and drops all the way to 100 for the most risky transactions. We also provide the factors that were involved in our scoring so that you are also aware of them and can make an informed decision on your own.

While we provide a pretty accurate risk score, scoring factor and result on each transaction, as a fintech platform, you are also able to set rule based actions and decide what happens when a certain rule is triggered, allowing you to tweak our model to basically almost any type of fraud you are facing.

Once a rule based action is set, subsequent API responses will include an action body parameter and you can use that to make your transaction decisions.

There are two major parts to using Stack's Transaction monitoring;

  • Linking an entity
  • Reporting (scoring) a transaction

Before you link an entity, ensure that you have already created either an individual entity or a business entity

Endpoint

{BASE_URL}/transactions/monitor/entity

Method: POST.

ParameterDescriptionRequired
entity_idThe individual or business' entity idTrue

Sample Request

curl --location --request POST 'https://api.stack-ft.com/transactions/monitor/entity' \
--header 'Authorization: API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "entity_id": "i_uuid_5b240456-ff05-4d9c-908c-241525a6ca36"
}'

Sample Response

json
{
    "status": "success",
    "entity": {
        "entity_id": "i_uuid_5b240456-ff05-4d9c-908c-241525a6ca36"
    },
    "request_id": "89a0948f-9dfa-4d5e-9aab-f35ff8cb29e7"
}

INFO

In order to avoid duplicate records of the same entity, when we identify that an entity id has already been linked, we simply respond with that linked entity id and skip the link request.

Report / Score a transaction

This is a very important step as it is where we determing, in real-time how risky a transaction is based on data, history and patterns. Our system uses a scoring model similar to the FICO scoring which starts at 850 for less risky transactions and drops all the way to 100 for transactions with the highest risk.

We require a set of data points to be provided in the request in order to make the most accurate decision on a transaction. The less information provided, the less accurate the system will be in scoring the transaction's risk.

Endpoint

{BASE_URL}/transactions/monitor/report

Method: POST.

ParameterDescriptionRequired
entity_idA linked entity id stringTrue
amountThe amount of the transaction. This can not be a negative value. floatTrue
directionThe direction of the transaction. credit or debit enumTrue
originThe origin of the transaction, if it's a credit. objectFalse
destinationThe destination of the transaction, if it's a debit. objectFalse
currencyThe transaction currency in ISO-4217 format. Defaults to USD stringFalse
entity_ip_addressThe IP Address of the entity at the time of the transaction. stringFalse

origin object

ParameterDescriptionRequired
entity_nameorigin.entity_name The name of the entity sending money in if available stringFalse
countryorigin.country The country of the entity sending money in, in ISO 3166-2 format stringTrue

destination object

ParameterDescriptionRequired
entity_namedestination.entity_name The name of the entity receiving the money if available stringFalse
countrydestination.country The country of the entity receiving the money, in ISO 3166-2 format stringTrue

Sample Request

curl --location --request POST 'https://api.stack-ft.com/transactions/monitor/report' \
--header 'Authorization: API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "entity_id": "i_uuid_5b240456-ff05-4d9c-908c-241525a6ca36",
    "amount": 5000.25,
    "direction": "debit",
    "entity_ip_address": "146.70.53.35",
    "destination": {
        "entity_name": "Example Company Inc",
        "country": "RU"
    }
}'

Sample Response

json
{
    "status": "success",
    "entity_id": "i_uuid_5b240456-ff05-4d9c-908c-241525a6ca36",
    "transaction_report": {
        "score": 395,
        "scoring_factors": [
            "entity_sanctioned",
            "amount_over_individual_threshold",
            "deceptive_location_risk",
            "transaction_destination_sanctioned"
        ],
        "result": "high_risk",
        "transaction_amount": 5000.25,
        "transaction_direction": "debit"
    },
    "request_id": "3a7af4f0-361e-4c3a-a819-7ac79074cbe9"
}

WARNING

When a request is received, it undergoes many checks, depending on the entity's transaction history, entity type, and other real-time determined factors. The factors considered in scoring the transactions are then returned as scoring_factors. If a rule based action is provided on a program level, an action will also be returned.

Supported Currencies

WARNING

If you provide an invalid currency, the request will fail with a request_error.

countrycountry codecurrency
United StatesUSUSD