Layer 1 copy


This is a guide for companies that offer an online wallet which users can deposit funds into to buy other types of currencies or send money to individuals and businesses.

Send User Events

A core integration includes the following (when applicable):

Integrate your website
Integrate your mobile app
Integrate your events
User creates an account
  • When a user creates an account, send a $create_account eventwith custom fields to capture differences between users, such as:
    • 'account_state' : e.g. 'standard'
    • 'sms_verification_status' : '$pending'
    • 'credit_verification_status' : '$pending'
  • When a user updates their account information send an $update_account event with custom fields such as:
    • 'account_state' : e.g. 'standard', 'advanced'
    • 'sms_verification_status' : '$success', '$failure'
    • 'credit_verification_status' : '$success', '$failure'
User deposits money
  • When a user deposits money, send a $transaction event with custom fields such as:
    • 'promo_code_applied' : true
    • 'account_balance' : 100000000 (send after any changes to a user's balance)
    • 'deposit_channel' : e.g 'web', 'bank', 'in-store', etc.
    • 'deposit_point_id' : e.g. 'store_114523', 'bank_549809'
    • 'num_deposit_locations_used' : 2 (if a user has used two different deposit locations)
  • Set the $payment_method to the information for the card/bank account where the money is being moved from.
User withdrawls money
  • When a user withdrawls money, send a $transaction event.
  • Set the $payment_method to the information for the card/bank account where the money is being moved to.
User transfers money to another user's wallet

When user A transfers money into user B's wallet, send the following two custom events:

  • send_money
    • '$user_id' : 'A'
    • 'send_amount' : e.g. 25 for 25 microBitcoin
    • 'recipient_user_id' : 'B'
    • 'account_balance_amount' : 75 (amount after the transfer)
    • 'account_balance_currency_code' : 'BTC'
  • receive_money
    • '$user_id' : 'B'
    • 'receive_amount' : e.g. 25 for 25 microBitcoin
    • 'sender_user_id' : 'A'
    • 'account_balance_amount' : 225 (amount after the transfer)
    • 'account_balance_currency_code' : 'BTC'
All $transaction events
  • The '$amount' field of the $transaction event accepts values in micros, where $49.23 is 49230000. More examples, including handling BTC, are shown here.
  • Set $currency_code to capture the currency being used for the payment.
  • In all events where a user's balance changes, send in micros. If you keep separate bitcoin and cash balances, send two custom fields: btc_balance_amount and cash_balance_amount. Send account_balance_currency_code to capture what currency the wallet stores.
  • When the payment method is through a method with instant money transfer or approval (ex: Credit Card payment), specify '$transaction_status' : '$success' / '$failure'
  • When the payment method is through an offline payment (ex: Cash, bank wire, or in-store payment) or a delayedtransfer (ex: Electronic funds transfer, ACH) specify '$transaction_status' : '$pending'. When you receive notification that the customer completed the payment (i.e. bank notifies you the deposit succeed or failed) send another $transaction evnet with the same '$transaction_id' value as the pending $transaction and set '$transaction_status' : '$success' / '$failure'
Addition Events

The following events can be sent to capture a more complete picture of users when applicable: $login, $logout.

Send Feedback to Sift

One of the key strengths of the Sift Science platform is that as you give it feedback it continues to learn and adapt to patterns. By providing continuous feedback on who your good and bad users are, we will evolve our detection and improve the accuracy of risk scores. You’ll be able to stop bad actors even as they change their attack vectors. In addition to sending an optional historical backfill:

  • Create a Feedback focused Workflow where you review high scoring users and tell us how well we are predicting your fraudsters.
  • If you are already doing manual review in your existing system, just send the outcome of each review to our Labels API

Once you’re up and running with Sift, continuing to send feedback will improve your score accuracy in real-time, catching bad users as soon as they appear. This is an important part of a successful integration.

Make Decisions with Sift

Scores are an indication of how risky a user is for a given abuse type. You can use these scores as a means to block bad users, add friction to users you are unsure about (e.g., SMS verification), and let good users sail right through. You'll want to make this check at your $transaction event when users attempt to deposit and withdrawal money.

The two ways to do this are:

  • Create a Sift Workflow You can build application logic into Sift with our Workflow product. Workflows let you set up criteria that get evaluated whenever specified events occur. Learn more in our Workflows tutorial.
  • Build application logic in your system An alternate approach is to request abuse specific risk scores to be returned in the response of the user events you send. See our API documentation

Any questions? We're happy to talk it through.