Your Paddle Webhook Is Signed. The Seat Count Is Not.
Paddle custom_data can come from browser checkout code. Verify the signature, then grant seats from paid line items, not client metadata.

Search for a command to run...
Articles tagged with #fetchsandbox
Paddle custom_data can come from browser checkout code. Verify the signature, then grant seats from paid line items, not client metadata.

A timeout makes your app retry a PayPal refund. The second call returns 422, even though the money is already back. Test that branch before launch.

An AI agent "fixed" a Stripe webhook that double-granted seats. CI went green. Paying customers got nothing. The check only asked whether the count stopped growing

You'd think webhook events fire in order. Paddle disagrees. Here's what happens and how to handle it.
Okta group renames can arrive through WorkOS directory sync as partial webhook events. If feature gates trust the payload, users split by cache state. Re-fetch the group and users before gating.

A narrow Clerk auth bug: server-side JWT verification can fail with 401 when your publishable key, secret key, and issuer come from different Clerk instances.