Every response, in one table
Every JSON error body getrequest returns has the same shape —{ "error": "<message>" } — with two exceptions noted below.
Async API never returns
504 to the caller, and never returns 502 for a slow or failing destination either — that’s exactly what its retry schedule exists to absorb instead. The one 502 Async API can still return is immediate and configuration-related (no destination URL set, or an invalid one), not a delivery failure. See Sync vs. Async endpoints for the retry schedule and delivery-status states.
502 can also come from causes unrelated to your destination, on any action type: a Redis cache miss/error resolving the endpoint ("Invalid cache payload" or "Cache unavailable") or an unexpected error inside the handler itself ("Handler error"). These are infrastructure-level failures, not something your destination or configuration caused.Timeouts and size caps at a glance
The Async API cap is lower than Sync API’s because the request body has to fit through the delivery queue (SQS) on the way to your destination, with headroom meant to be left for headers and metadata.
What actually gets forwarded to your destination
Sync API and Async API don’t forward every header verbatim. getrequest forwards:- A fixed allow-list:
Content-Type,Authorization,Accept,Accept-Language,Accept-Encoding,User-Agent,Cache-Control,If-None-Match,If-Modified-Since,X-Request-Id - Any header starting with
X-(case-insensitive) — this is how most custom and provider headers make it through, includingX-Hub-Signature-256 - Query string parameters, appended to the destination URL
Connection, Keep-Alive, Transfer-Encoding, TE, Trailer, Upgrade, Proxy-Authenticate, Proxy-Authorization, Content-Length), the Host header, or any header not on the allow-list and not X-prefixed.
On the way back, getrequest strips a handful of upstream response headers that would otherwise conflict with how the response body is already decoded (Content-Encoding, Transfer-Encoding, Content-Length, Connection) — everything else your destination returns passes through to the caller unchanged.
One endpoint, multiple methods
An endpoint isn’t limited to a single HTTP method. When you create or edit one, you choose fromGET, POST, PUT, PATCH, DELETE — and you can select more than one. All selected methods share the same slug, action, destination, and authentication settings; getrequest just accepts any of them at that URL.
Authentication mechanics
- All credential comparisons (Bearer, API Key, Basic Auth, HMAC) use a constant-time comparison — never a plain
==="check — so response timing can’t leak how much of a secret an attacker guessed correctly. - HMAC verification runs over the raw request body bytes, before any parsing — this matches how every major webhook provider computes its own signature, so pointing Authentication’s HMAC type at a provider’s documented header and secret works without any transformation on your side.
- An unrecognized or misconfigured auth type fails closed (rejected), never open (allowed) — a broken auth configuration can never accidentally turn into no auth at all.