Transaction Monitoring
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
Link an entity
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.
Parameter | Description | Required |
---|---|---|
entity_id | The individual or business' entity id | True |
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
{
"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.
Parameter | Description | Required |
---|---|---|
entity_id | A linked entity id string | True |
amount | The amount of the transaction. This can not be a negative value. float | True |
direction | The direction of the transaction. credit or debit enum | True |
origin | The origin of the transaction, if it's a credit. object | False |
destination | The destination of the transaction, if it's a debit. object | False |
currency | The transaction currency in ISO-4217 format. Defaults to USD string | False |
entity_ip_address | The IP Address of the entity at the time of the transaction. string | False |
origin object
Parameter | Description | Required |
---|---|---|
entity_name | origin.entity_name The name of the entity sending money in if available string | False |
country | origin.country The country of the entity sending money in, in ISO 3166-2 format string | True |
destination object
Parameter | Description | Required |
---|---|---|
entity_name | destination.entity_name The name of the entity receiving the money if available string | False |
country | destination.country The country of the entity receiving the money, in ISO 3166-2 format string | True |
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
{
"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
.
country | country code | currency |
---|---|---|
United States | US | USD |