Response mode is permanent
Every bucket is either a Queue bucket or a Proxy bucket. That decision controls which response fields exist and which delivery features are available. Repost rejects any attempt to switch an existing bucket between modes — create a new bucket and update the provider’s webhook URL when the response contract needs to change.Queue bucket
Returns a static acknowledgement immediately after the provider request is received, then delivers to forwarders asynchronously. The provider does not wait for your application.
Proxy bucket
Holds the provider connection open, waits for the single downstream forwarder to respond, and returns that response directly to the provider.
When to use each mode
- Use Queue mode when…
- Use Proxy mode when…
- The webhook provider only requires an acknowledgement that the event was received.
- You need to deliver to more than one destination — Queue mode supports multiple forwarders on the same bucket.
- You need reliability features: retries with backoff, replay, failed-delivery recovery, functions, secrets, or rate limiting.
- Your application processing time would exceed the provider’s HTTP timeout.
Queue mode: configuring the static acknowledgement
Queue buckets respond to the provider before any forwarder receives the event. You control every part of that static response.integer
required
The HTTP status Repost returns to the sender. Must be an integer from
100 to 599. Defaults to 200.string
Set to
json or text. When set to json, a non-empty body must parse as valid JSON. Set to text for plain strings or provider-specific formats.string
The exact response body Repost returns with every acknowledgement. Optional. The dashboard pre-fills
{"status":"received"} — replace it with any string or valid JSON object that satisfies your provider.Example queue acknowledgement body
Queue mode: fan-out to multiple forwarders
One of the key advantages of Queue mode is that a single bucket can deliver the same event to many destinations in parallel. You add forwarders independently and each one gets its own retry, rate-limit, and failure configuration.One bucket
A single provider-facing URL captures every event from that stream.
Many forwarders
Each forwarder delivers independently to its own destination — production, staging, data pipelines, or local dev.
Independent reliability
Retries, backoff, rate limits, and failure handling are configured per forwarder, not per bucket.
Proxy mode: configuring the synchronous timeout
Proxy buckets expose only the timeout because the downstream forwarder owns the response body, headers, and status code. Repost acts as a transparent pass-through.integer
required
A positive integer in milliseconds. Controls how long Repost holds the provider connection open while waiting for the downstream forwarder. Defaults to
30000 ms. If the forwarder does not respond within this window, Repost returns a gateway error to the provider.One response owner
The downstream forwarder’s response — status, headers, and body — is returned verbatim to the provider.
Exactly one forwarder
Proxy mode supports exactly one forwarder per bucket. You cannot fan out in proxy mode.
No async recovery
Runtime retries, rate limits, functions, secrets, and failed-delivery recovery are not available for proxy forwarders.
Validation: why a save might be rejected
Invalid status code
Invalid status code
The queue acknowledgement status must be an integer from
100 to 599. Values outside that range are rejected.Invalid JSON body
Invalid JSON body
When body format is set to JSON, a non-empty body must parse as valid JSON. Malformed JSON is rejected on save.
Invalid proxy timeout
Invalid proxy timeout
The proxy timeout must be a positive integer in milliseconds. Zero, negative values, and non-numeric input are rejected.
Changing modes: create a new bucket
If you need to move a bucket from Queue to Proxy mode — or the reverse — you cannot do it in place. The migration path is straightforward:1
Create a new bucket with the correct mode
Go through the creation flow and choose the mode you need. Configure the response contract for the new mode.
2
Add a forwarder to the new bucket
Set up the destination that should receive events from the new bucket.
3
Update the provider's webhook URL
In your provider’s settings (Stripe, GitHub, Clerk, etc.), replace the old bucket domain with the new one.
4
Verify delivery on the new bucket
Confirm events are arriving and being forwarded correctly before decommissioning the old bucket.
Related pages
Bucket domains
Change the generated Repost endpoint label and understand how paths are preserved.
Bucket settings
Edit identity, status, response behavior, domains, and deletion guardrails.
Forwarder configuration
Tune destination delivery behavior after the bucket accepts the webhook.