How To: Send Payer Events for Chargeback Protection

Why Sharing Payer Events Matters

Merchants can improve the chargeback protection model’s decisions by sending major events that payers take throughout the lifespan of the customer on your app. Anytime the customer makes a significant action on your app that allows you to collect information that identifies them, you may call our /events endpoints to share data with the chargeback model.

Implementing this endpoint is a critical step for any customer—especially those with:

  • High transaction volumes (>=$500K)
  • Those aiming to improve the accuracy of chargeback protection decisions

How It Helps with Chargeback Approval Rates

Our chargeback protection engine learns from both successful and failed user actions. When you provide lifecycle data like logins, verification steps, or sign-in failures, our models can:

  • Increase approval rates by identifying legitimate users more accurately (reducing false positives)
  • Prevent fraud by recognizing suspicious or automated behavior earlier (reducing false negatives)
  • Reduce your risk profile with card networks, minimizing the chance of being flagged for excessive chargebacks

Understanding Which Events to Pass

We’ve included some examples below to help your team determine when and how to trigger events. As a rule of thumb: if your system has enough confidence to identify the user or verify intent, it’s a good time to share an event. Engineering teams should ensure this data is sent automatically as part of your user workflows. This requires minimal engineering effort but can yield substantial returns in both revenue and risk mitigation.

Event

Description

Example Scenario of When to Call

SignUpEvent

Sign up event - Call this event when your customer signs up for your service.

A user creates an account by entering their email and setting a password. Upon successful registration, call `/events` and pass sign up data collected.

SignInEvent

Sign in event - Call this event when your customer signs into your service.

A user logs into your app from a known device and location. Each time user logs in successfully, call /events and pass the data referenced on your service to identify who the user is.

SignInFailureEvent

Sign In Failure event - Call this event when a customer attempts to sign into your service, but sign in attempt is unsuccessful.

A user attempts to log in with incorrect credentials or from a suspicious device. If the user cannot successfully login, call /events and pass their identification data and failure reason.

BuyerChallengeEvent

The Buyer Challenge Event type is for reporting any type of verification on the buyer.
ex: Email verification link, SMS 2FA text, buyer is KYC’d

Some merchants may require their users to complete additional verification prior to taking further actions on their site. Lets say you require the user to complete verification during registration through a 3rd party service. After verification, call /events and pass the results of the verification along with user identification data.

Example Requests for Events

SignUpEvent
1curl --request POST \
2 --url https://api-sandbox.coinflow.cash/api/events \
3 --header 'Authorization: YOUR_API_KEY' \
4 --header 'content-type: application/json' \
5 --data '
6{
7 "eventType": "SignUp",
8 "customerId": "user-123-abc",
9 "country": "US",
10 "username": "therock72",
11 "email": "dwaynejohnson@gmail.com",
12 "firstName": "Dwayne",
13 "lastName": "Johnson"
14}
15'
SignInEvent
1curl --request POST \
2 --url https://api-sandbox.coinflow.cash/api/events \
3 --header 'Authorization: YOU_API_KEY' \
4 --header 'content-type: application/json' \
5 --data '
6{
7 "eventType": "SignIn",
8 "customerId": "user-123-abc",
9 "country": "US",
10 "email": "dwaynejohnson@gmail.com"
11}
12'
SignInFailureEvent
1curl --request POST \
2 --url https://api-sandbox.coinflow.cash/api/events \
3 --header 'Authorization: YOUR_API_KEY' \
4 --header 'content-type: application/json' \
5 --data '
6{
7 "eventType": "SignInFailure",
8 "customerId": "user-123-abc",
9 "country": "US",
10 "email": "dwaynejohnson@gmail.com",
11 "failureReason": "Password Failed"
12}
13'
BuyerChallengeEvent
1curl --request POST \
2 --url https://api-sandbox.coinflow.cash/api/events \
3 --header 'Authorization: YOUR_API_KEY' \
4 --header 'content-type: application/json' \
5 --data '
6{
7 "eventType": "BuyerChallenge",
8 "type": "thirdPartyKyc",
9 "status": "successfullyFulfilled",
10 "customerId": "user-123-abc",
11 "country": "US",
12 "email": "dwaynejohnson@gmail.com"
13}
14'