If you send a $create_order or a $transaction and get an error about $payment_method(s), such as

it's likely due to this common confusion:
One $create_order can have multiple $transactions (someone might use two payment methods to pay for an order). As a result, $create_order takes a list of multiple Payment Method objects while $transaction only takes a single Payment Method object. So, you'll send
'$payment_methods : [ { } ]' in $create_order, but
'$payment_method : { }' in $transaction.
Here is a simplified example for when a user places an order and uses both a gift card and credit card to pay for it. You would send the following events to Sift:
$create_order:
$order_id : "123"
$payment_methods : [ {gift card}, {credit card} ]
$transaction
$transaction_id : "A"
$order_id : "123"
$payment_method : {gift card}
$transaction
$transaction_id : "B"
$order_id : "123"
$payment_method : {credit card}