Recommended Free Tools
Stripe treats an HTTP 302 redirect from a webhook endpoint as a failed delivery. Google Apps Script’s Content Service redirects returned content to a one-time URL at script.googleusercontent.com, which explains why a Content Service webhook can trigger repeated Stripe retries. Stripe recommends changing the registered destination to the URL resolved by the redirect. But because Google describes that destination as one-time, confirm it remains usable for later deliveries before relying on it in production.
Why Apps Script returns 302 and Stripe retries
An Apps Script web app handles HTTP POST requests with a doPost(e) function. The request body is available as e.postData.contents, and the function can return an HtmlOutput or TextOutput. Google’s Content Service is intended for serving raw text such as JSON, but Google says it redirects that content to a one-time URL at script.googleusercontent.com for security. Google Apps Script Content Service documentation.
As an Amazon Associate I earn from qualifying purchases.
Google advises ordinary HTTP clients consuming Content Service to follow redirects. Stripe’s webhook behavior is different: Stripe says it considers redirect responses failures. A browser or client that follows the redirect can therefore make the endpoint look as if it works while Stripe records the initial 302 as an unsuccessful webhook attempt. Stripe’s webhook guide.
Free tools Windows power users keep installed
One-click scans. No signup required.
Stripe documents setting the endpoint destination to the URL resolved by the redirect as its remedy for redirect responses. However, the documentation cited here does not guarantee that Google’s one-time URL is durable as a registered webhook endpoint. Treat it as a candidate to verify, not a production guarantee.
#1 Best Overall
Diagnose the 302 in Stripe and at the endpoint
- Check Stripe’s delivery record. In Stripe Workbench, open the webhook endpoint and its Event deliveries view. Inspect the attempt’s HTTP status and any scheduled retry. Stripe identifies 3xx responses, including 302, as delivery failures. Stripe’s webhook guide.
- Inspect the first HTTP response. Send a POST to the exact registered URL and examine the initial status and
Locationheader. Do not rely only on a browser or test client that silently follows redirects. If the response is 302, record the resolved target and test whether it stays valid for later Stripe deliveries. - Check the receiver’s response. A webhook receiver should accept the POST and return a successful 2xx response promptly. Stripe’s guide describes HTTP 200 as a successful delivery response and recommends a quick acknowledgement. Stripe’s webhook guide.
Choose a repair that can handle later deliveries
| Approach | URL behavior | Signature and response handling | Operational trade-off |
|---|---|---|---|
| Register the redirect-resolved Apps Script URL | Stripe recommends using the resolved target for a redirecting destination. Google describes the Content Service target as one-time, so persistence for future deliveries is not guaranteed in the cited documentation. | Confirm that the receiver can verify the Stripe signature from the untouched request body and return 2xx quickly. | May avoid changing the architecture, but requires checking whether the registered target remains valid across subsequent attempts. |
| Use a dedicated webhook receiver | Use a stable, publicly accessible HTTPS URL that accepts POST without redirecting. | Implement raw-body signature verification and prompt 2xx acknowledgement; queue slower work if needed. | Requires hosting and operational setup, but avoids relying on a one-time redirect target. |
| Use a cloud event destination | Stripe names Amazon EventBridge and Azure Event Grid as options for consuming events in cloud infrastructure. | Choose an event integration that fits the required verification, acknowledgement, and processing flow. | Changes the integration design; Stripe’s documentation identifies these as alternatives but does not establish which is preferable for a particular deployment. Stripe’s webhook guide. |
For a production integration, the most straightforward target is generally a stable HTTPS receiver that does not redirect. If you keep Apps Script and register the resolved Googleusercontent URL, verify that it continues to accept Stripe’s later retries rather than assuming that the one-time URL is permanent.
Verify Stripe signatures without changing the request body
Stripe signature verification requires the original, unmodified request body, the Stripe-Signature header, and the endpoint’s signing secret. Parsing the body and then serializing it again before verification can change the bytes and cause verification to fail. Stripe signature verification documentation.
Rank #2
After validating the signature, acknowledge the event with a 2xx response promptly. Put slower downstream work in a queue or other asynchronous process where appropriate, instead of delaying the acknowledgement while the endpoint performs complex processing. Stripe signature verification documentation; Stripe’s webhook guide.
Plan for retries, duplicates, and event order
Stripe says it retries failed live-mode deliveries for up to three days with exponential backoff. In sandbox mode, it makes three retry attempts over a few hours. Stripe’s Workbench Event deliveries view shows delivery status and pending future delivery times. These are Stripe-documented behaviors checked on October 7, 2026, and may change. Stripe’s webhook guide.
Once the endpoint returns 2xx, monitor its later delivery records to confirm that new attempts are succeeding. A successful manual resend does not cancel the automatic retry schedule for that event, so check for pending attempts after resending. Stripe’s webhook guide.
A 2xx response does not mean an event is delivered exactly once or in generation order. Stripe may deliver events more than once and does not guarantee their order. Keep track of processed event IDs to make handling idempotent, and avoid logic that depends on events arriving in sequence. Stripe’s webhook guide.
Quick Recap
Rank #4
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




