Verify a FaucetPay v2 payout webhook
payout.sent and payout.failed arrive signed. Check the HMAC, dedupe on the event id, and let the webhook correct a payout your send call never heard about.
6 entries
payout.sent and payout.failed arrive signed. Check the HMAC, dedupe on the event id, and let the webhook correct a payout your send call never heard about.
Generate the key and save it on the claim row before you call send, then reuse it on every retry. Generating it at call time is the same as having none.
Dedupe on the transaction id, answer 200 to everything, and treat a reversal as the full chain — user credit and referral commission both.
A caller-supplied key with a unique index turns every retry, refresh and double-click into a no-op. The single most valuable column in a payments schema.
A unique index on your own reference turns duplicate callbacks, browser refreshes and manual replays into no-ops instead of free balance.
Signature check, unique constraint, credit inside a transaction. Networks retry postbacks, so the same completion will arrive more than once.