getdialed__http__request sends one HTTPS request and puts the response into your flow. You choose the method, the address, the headers, the query parameters and the body. You authenticate by selecting a stored credential, which the platform applies to the request for you.
status, headers and body — see the response.
When to reach for it
This is the long-tail fallback. Where a provider has purpose-built steps, use those: they know the provider’s quirks, they are paced against that provider’s published rate budget, and they report per-row outcomes. Browse them in the catalog. Reach for this step when the endpoint you need has no purpose-built action — an internal-facing SaaS API, a customer’s own service, a provider nobody has integrated yet. It is one request per step, not one per record: if you need a request per row, put this step inside a flow that the platform already runs per record.Because the platform cannot know the rate limits of an address you typed, requests from this step are not rate-paced by GetDialed. Respecting the provider’s own limits is yours to arrange — space the work out with schedules, or reduce the set first with a record transform.
Authentication is selection, never a pasted secret
The step never names a header and never holds a token. It carries aconnection_id — the id of a credential — and the platform applies that credential to the request when it runs.
The consequence is worth stating plainly, because the first instinct is to reach for a header:
Every other header name is yours, and a header value may use variables and expressions freely:
The credential is optional
A public API that needs no authentication needs no credential. Leaveconnection_id off and the request goes out unauthenticated. This is the one action where a missing credential is a legitimate configuration rather than a 422 — but a credential you do supply is still checked for compatibility when you save.
The address
Two rules, and the second reads stricter than it is. Onlyhttps is accepted. A plain http:// address is refused when you save, and refused again if one is ever reached at run time. A credential sent over an unencrypted connection is exposed by definition, so there is no carve-out — not for an unauthenticated call, not for a host on your own network. Any port may be named (https://api.example.com:8443/v2/orders is fine).
The scheme, host and port must be written out literally. They cannot come from a variable, an earlier step or a record field. That is what makes a saved flow auditable: reading it tells you every address it can reach.
The path and the query string may template freely — which is what makes pagination and per-record resource ids work:
https://user:pass@host/) is refused — that is a pasted secret wearing a different hat.
Query and header names must be literal too, for the same auditability reason. A templated name (
{ "{{ input.header_name }}": "..." }) and a wholesale-templated headers object are both refused when you save, because a name that cannot be read off the definition cannot be checked against the names a credential claims. Values template freely in both.What can be reached, and what cannot
Any address on the public internet may be called. There is no allow-list to maintain and no request to file before pointing a flow at a new provider. An address that resolves into private space is refused before anything is sent. That covers private ranges, loopback, link-local, unique-local, carrier-grade NAT, multicast and reserved space, over both IPv4 and IPv6. The check runs on the address the hostname actually resolves to, and the connection is then pinned to that address — so a name that resolves to something public during the check and something internal a moment later still cannot be reached. Every redirect is re-checked the same way, on every hop. The reason is short: a step that can call any address is a door into the platform’s own network unless that door is closed, so it is closed. An endpoint inside your network, or inside ours, is not reachable from a flow.An address refusal does not tell you what the address resolved to, and every address refusal reports the same reason. That is deliberate rather than unhelpful: a message that distinguished “that host does not exist” from “that host resolves to something internal” would be a network scanner with an audit trail. If a call you expect to work is refused, check the address from outside — the answer is in DNS, not in the message.
Two things that are deliberately absent
The response
The step reports three things:
Read them like any other step output:
How the body is parsed
The body is parsed from the response’s own content type. Names are matched on the media type alone, soapplication/json; charset=utf-8 and APPLICATION/JSON take the same path.
A parse failure falls back to the text. If a provider claims JSON and returns an HTML error page, you get the page as text and the step carries on — you can look at what actually arrived and pipe it, rather than losing the step to somebody else’s header.
Responses that are refused
The limits
The 60-second ceiling exists so that a slow provider produces a clear failure from this step, naming the timeout, rather than an unexplained platform timeout further out with nothing in it to act on.
To work with a response larger than the cap, ask the provider for less of it: page it, filter it server-side, or request fewer fields.
When the status is not 2xx
Any status outside 200–299 fails the step by default. The failure names the status code.The response body is never included in a failure message, and this is not a bug to report. A failure is read in logs and stored in run records, both of which outlive whatever retention rule governed the payload — and a provider’s error body routinely quotes the request that caused it, including the parts a credential was applied to. If you need to see an error body, use
fail_on_error_status below and read body as data.fail_on_error_status to false when the status is information you want. The step then succeeds, and status and body are both available to branch on — which is what a “404 means no such record” flow needs:
Sending a body
body is text, and body_format says how to label and interpret it:
Set
content_type to override the label without changing how the body is built — for a vendor JSON variant, or a versioned media type.
Redirects and retries
Redirects are followed up to 5 hops. Each hop’s address is resolved and checked again, so a redirect toward private space is refused exactly like a first request would be. A chain longer than 5 hops fails rather than being followed further. Retry safety is decided by the method.GET, HEAD, PUT and DELETE are safe to repeat by definition, so a transient network failure on one is retried. POST and PATCH are attempted once: a repeated POST can charge a card, send a message or enrol somebody twice.
Set idempotent to true to allow a POST or PATCH to be retried — but only if the endpoint takes an idempotency key and you are sending one. That key is what makes the repeat safe; the setting on its own only removes the protection.
What is refused when you save
These are caught when the flow is saved, so you never discover them at 2 a.m. from a run. Each is a422 naming the field and the step, and none of them echoes the value:
Next steps
Credentials
Create the credential this step selects, and declare where its key goes.
Expressions
The templates and pipes that build a path, a query and a body.
Integration catalog
The purpose-built steps to prefer where they exist, and this step’s full parameter reference.
Record transforms
Turn a text response into a record set, and reduce a set before calling per record.