Shell Python Node PHP C# Ruby

Chargebacks and Rejects


curl "https://api.payload.co/transactions/?status=rejected&rejected_on=>2023-02-01" \
    -u secret_key_3bW9JMZtPVDOfFNzwRdfE:
rejected_payments = pl.Payment.filter_by(
    pl.attr.status=='rejected',
    pl.attr.rejected_date>=datetime.date(2023,1,1)
)

for payment in rejected_payments:
    print(payment.status_code)
rejected_payments = Payload::Payment.
    filter_by(
        status: 'rejected',
        rejected_date: '>2023-01-01'
    ).
    all()

for payment in rejected_payments
    puts payment.status_code
end
<?php
$rejected_payments = Payload\Transaction::filter_by(
    pl::attr()->status->eq('rejected'),
    pl::attr()->rejected_date->gt('2023-01-01')
);

foreach( $rejected_payments as $payment ) {
    echo $payment->status_code;
}
?>
const rejectedPayments = await pl.select(Payment).filterBy(
    pl.Payment.status.eq('rejected'),
    pl.Payment.rejected_date.gt(new Date(2023,1,1))
)

rejectedPayments.forEach((payment)=>{
    console.log(payment.status_code)
})
var rejected_payments = await pl.Payment
    .FilterBy(
        pl.Attr.status.eq("rejected"),
        pl.Attr.rejected_on.ge(new DateTime(2020,1,1))
    )
    .AllAsync();

foreach(var payment in rejected_payments)
    Console.WriteLine(payment.status_code);

Both chargebacks and bank account rejects will result in a transaction's status updating from processed to rejected. The code example shows how to query for any rejected payments on a specific date. You can also register a reject webhook to get an instant alert of any transaction that rejects. For more information, see the section on webhooks.

A rejected payment will result in the original funds being reversed. If a dispute is submitted and won, the funds will be returned.

See below for a more information on both bank account rejects and chargebacks.

Bank Account Rejects

Bank account payments can be rejected by the bank for reasons like insufficient funds or incorrect account number a few days after they were originally processed.

Payload provides a few options to mitigate rejects but they can still occur. By default, Payload validates the banking information with various banking networks to confirm the account is open, active, and in good standing. Even if a bank validates the account number, they may still block incoming transactions which would result in a "Non-Transaction Account" rejection.

You can also use the built-in Plaid integration to capture and validate bank account details, and confirm available balance. See our section on integrating with Plaid.


Chargebacks

A chargeback can result if a customer disputes a payment initiated with a card. This can happen for reasons like suspected fraud, a claim of services not rendered, or unauthorized payment.