Sync and Static API are covered in Handle backend downtime and Launch APIs without a backend. This guide covers Async API — when to use it, and exactly how delivery and retries work.
When to use Async API instead of Sync
Sync API is a transparent, synchronous proxy: the caller waits while getrequest calls your destination and hands back its real response. That’s the right model when the caller needs your actual response — a login request, a payment call, anything where the response body drives what happens next. Async API is built for the opposite case: you don’t need the caller to wait, and you don’t want a slow or unavailable destination to become the caller’s problem. The classic example is a webhook — Stripe, GitHub, or any provider firing an event at you. The provider doesn’t care what your backend returns; it just wants a fast acknowledgement so it doesn’t mark the delivery as failed and retry on its own schedule.What the caller gets back
The moment an Async API endpoint receives a request, getrequest responds immediately:502 or a timeout on delivery attempt one is invisible to the caller, since they already got their 202 and moved on. (The one exception: if the endpoint has no destination URL configured at all, or an invalid one, the caller gets a 502 immediately — that’s a configuration problem, not a delivery failure, so there’s nothing to retry.)
See Limits, timeouts & error responses for the exact status code and body of every response getrequest can return.
How delivery works
After responding to the caller, getrequest queues the actual call to your destination and delivers it out of band:- The first delivery attempt fires essentially immediately.
- getrequest waits up to 10 seconds for your destination to respond (longer than Sync API’s 3-second window, since nothing is waiting on it).
- If your destination responds with any
2xx, delivery is marked delivered and stops. - If it doesn’t — timeout, connection error, or a non-2xx status — getrequest retries on a backoff schedule.
Retry schedule
That’s up to 6 attempts over roughly 36 minutes before getrequest gives up and marks the delivery failed. Every attempt re-reads your endpoint’s current destination and auth configuration — if you fix your handler or rotate a credential mid-retry, the next attempt uses the update, not a stale snapshot from the first attempt.
Delivery status
Every request to an Async API endpoint is logged immediately with adelivery_status that updates as retries happen:
Open the log entry to see every individual attempt — status returned, duration, and any error — the same per-attempt history bulk and manual retries use (see Bulk retry & recovering many requests). A
failed delivery is a normal candidate for a manual Replay once you’ve fixed whatever caused it — see Recover from production failures.
Sync, Async, and Static at a glance
You can switch an endpoint’s action at any time with zero downtime — see Handle backend downtime for switching Sync ⇄ Static during planned maintenance; the same edit works for Async.
If you’re not sure which one fits your endpoint, ask one question: does the caller need to see what your backend actually returns? If yes, use Sync. If no — it just needs to know you got it — use Async and let getrequest handle the rest.