Skip to main content
The Send HTTP request block (Utilities) calls an external URL from a workflow and returns the response. Use it when a workflow needs to reach an outside system. That system might be an enrichment provider (a service that fills in missing company or person details), an internal service, or any tool with a REST API. It is the only block that sends a free-form outbound request. Treat every call as unreliable. The block returns a success flag. Check that flag before you write the returned data back into Attio.

Inputs

Outputs

Reference the response body downstream as {{ steps.send_http_request.response_body }}, the status code as {{ steps.send_http_request.status_code }}, and the success flag as {{ steps.send_http_request.success }}.

Behavior

The block sends a single request and waits for the response before the workflow continues. The request times out after 2 minutes. If the endpoint does not respond within that window, the block fails instead of hanging the run. The response body comes back as text. To use individual fields from it downstream, follow the block with Parse JSON. That block converts the text into typed variables, which are named values you can reuse later in the workflow. The Send HTTP request block does not parse the response for you. The success flag tells you whether the request reached the endpoint and got a response. Check it before you act on the body. The flag does not tell you whether the response was the one you wanted. An endpoint can return a 200 status with an error message in the body, or a 4xx status with a body that explains the problem. So gate any record write on the success flag. Where the API uses status codes meaningfully, gate on the status code as well.

Gotchas

  • The response arrives as raw text, not fields. The block returns the body as a string. On its own, {{ steps.send_http_request.response_body }} cannot be mapped field by field. Add a Parse JSON block after it, then reference the parsed outputs downstream.
  • A request that never returns fails at 2 minutes. A slow or unresponsive endpoint holds the run open until the 2-minute timeout, then fails the block. Point the URL at endpoints that respond quickly. Branch on the success flag so a timeout does not silently skip later writes.
  • Writing the body without checking success corrupts records. A failed call can still return a body. Writing that body back overwrites good data with an error message. Add an If block on {{ steps.send_http_request.success }} and only write when it is true.
  • A missing Content-Type drops the body. Requests that send a payload need a Content-Type header. Without it, the endpoint may ignore or reject the body. Set Content-Type to application/json whenever the Body field is populated.

Examples

Enriching a new company from an external API

This workflow calls an enrichment provider when a company gains a domain. It then parses the response and updates the record. The example sends a GET request with the domain in the path and an API key in the header. The block returns 200 with a JSON body such as {"name":"Acme","employees":240}. A following Parse JSON block extracts employees, and an Update record block writes it to the company.

Posting a deal to an external billing system

This workflow notifies a billing service when a deal reaches closed-won. The example sends a POST request with a JSON body built from deal variables.
The block returns 201 with the new account’s ID in the body, and {{ steps.send_http_request.success }} is true. An If block confirms success before an Update record block stores the returned ID on the deal.

Handling a failed enrichment call

This example shows the edge case. The enrichment endpoint is down and the request times out. The configuration matches the first example, but the endpoint does not respond within 2 minutes. The block fails at the 2-minute timeout and {{ steps.send_http_request.success }} is false. The downstream If branch routes to a Create task block for a manual follow-up, instead of writing an empty enrichment result over the company.

Credit cost worked example

A single Send HTTP request costs 1 credit per run. Say an outbound enrichment workflow fires on each of 500 new companies per month. That spends 500 credits on this block alone. A following Parse JSON block is free, so it adds nothing. An Update record block adds 1 credit per run, which takes the path to 2 credits and 1,000 credits per month. Check that monthly total against your plan’s allowance on Credits & pricing explained.

Source

Attio Workflows block library. Last reviewed against the Attio Help Center, June 2026.

See also