How can we help?

Ask a question or search our knowledge base:

How should I send recurring subscription payments?

Each time a user first signs up for a recurring payment, send a $create_order event to capture as much info about the subscription as you can. Then, send a $transaction event for payment gateway interactions. 

When it is time to charge the user for the subscription again, for example 1/3/6/12 months later, there is no need to send a $create_order event. Instead, just send a $transaction with the same $order_id and we'll tie them together. If you're concerned about the fraud risk, you can send a $transaction with "$transaction_status" : "$pending" and get a risk score in the response before determining whether to contact your payment gateway.

If the a charge fails, send a $transaction with "$transaction_status" : "$failure". Do not send subsequent retry failures. Only send another $transaction for this charge if it is successful. 



User initiates service:

  1. $create_account
  2. $create_order (ask for risk score to be returned in response)
    • "$order_id" : “123”
    • If score is not high enough to block, you'll proceed. 
  3. $transaction
    • "$order_id" : "123"
    • "$transaction_status" : "$success" (let's imagine it succeeds the first time. If it didn't you'd follow the same steps as below)

1/3/6/12 months later, when subscription renews:

  1. $transaction (get risk score in response)
    • "$order_id" : “123”
    • "$transaction_status" : "$pending"
    • If you cancel the payment due to our fraud assessment, send another $transaction with all the same values but "$transaction_type" : "$void", "$transaction_status" : "$success" (A successful voiding of the pending transaction).
    • If you proceed with the charge and it succeeds on the first try, send another $transaction with all the same values as the pending $transaction except for "$transaction_status" : "$success"
    • Otherwise, if you proceed and it fails send:
  2. $transaction 
    • "$order_id" : “123”
    • "$transaction_status" : "$failure"
    • (Note that $transaction_id is not a required field as some businesses do not have a $transaction_id unless the charge succeeds.)
  3. If the transaction fails 1 to n more times - do not send a $transaction to Sift for any of these failures. If it ultimately succeeds, send:
  4. $transaction
    • "$order_id" : “123”
    • "$transaction_status" : "$success"
Have more questions? Submit a request