Stripe webhooks failing (status 400)
Hi,
I am using this template, followed the guide and added a Stripe webhook with all events being sent to /api/webhooks on my install.
When users on the site take certain actions that are NOT on the list of relevantEvents they trigger the /api/webhooks endpoint. All of the NON relevantEvents return status 400 (error) because they are "Unsupported event type".
Events that I have seen that return errors: customer.created billing_portal.session.created balance.available setup_intent.canceled payment_intent.payment_failed checkout.session.expired invoice.finalized invoice.payment_failed charge.failed payment_intent.created checkout.session.expired
Code: File: route.ts
// api/webhooks/route.ts
// relevant events are handled nicely, they return 200 response code
const relevantEvents = new Set([
'product.created',
'product.updated',
'product.deleted',
'price.created',
'price.updated',
'price.deleted',
'checkout.session.completed',
'customer.subscription.created',
'customer.subscription.updated',
'customer.subscription.deleted'
]);
...
if (relevantEvents.has(event.type)) {
...
} else {
return new Response(`Unsupported event type: ${event.type}`, {
status: 400
});
}
Why are the non relevant events returned as an error? Those events are retried multiple times by Stripe. Should not they return a 200 response instead?
I'm seeing the same thing
FYI I only found this to be an issue if you haven't set up your customer portal in Stripe before attempting to open customer portal. Once I did that, then subscribed, then open customer portal, no event errors.
Yeah, there are some server actions that handle the customer portal instead. Also the customer portal is not in the relevant events. Mainly I am asking is because i feel it does not make any sense to throw errors for those event. It is very hard to spot any real errors when ~90% of the non relevant events throws errors for no reason.
I'm also having this issue, please let me know if anyone figures it out
Same thing here.
Customer events aren't handled in the example
Updating email or name with the /account forms causes a de-sync between supabase and stripe
Also facing this exact issue
Same, for someone who is unfamiliar with Stripe I'm not sure what the correct approach is here.
At the end I have done this:
} else {
return new Response(`Unsupported event type: ${event.type}`, {
status: 269 // was 400 and was giving errors
});
}
I have changed the status code to 2## to avoid it falling into the "error" category and chose a random 69 number to identify the hooks in the future.
I just had this, I think this is an issue when you haven't clicked save on the customer portal via Stripe. That's what worked for me anyway. Hope this helps.
@RheSou Can you clarify what you mean by 'haven't clicked save on the customer portal via Stripe'?
@treyg https://dashboard.stripe.com/settings/billing/portal