Skip to main content

HTTP Requests: Connect Inrō to Any External API

Use the HTTP request action in a scenario to push data to any external API, CRM, or webhook mid-flow, and branch on the result.

The HTTP request action lets a scenario call any external URL mid-flow: push contact data to your CRM, notify a Slack channel, kick off a Make or Zapier workflow, or talk to any service with an API. If it has a URL you can reach, you can connect it. For a shorter intro, see Integration Actions: Calendly, Shopify, HTTP Requests. This article covers the full setup. The action is available on every plan.

Adding an HTTP request to a scenario

In the flow builder, click + Add a step and go to Integrations → Send HTTP request.

The step picker with 'Send HTTP request' highlighted under Integrations.

Configure the request:

Method: pick what the external API expects.

  • GET reads data from the service.

  • POST sends data (the most common).

  • PUT / PATCH update an existing record.

  • DELETE removes a record.

When in doubt, use POST. Most webhook endpoints and automation tools expect it.

URL: the endpoint to call. Insert contact and trigger variables with the (x) button, for example:

https://api.yourcrm.com/contacts/{{contact.id}}/update

Headers: click Add Header for anything the endpoint requires, like an authentication token or Content-Type: application/json.

Body: for write methods (POST, PUT, PATCH, DELETE), choose how to send the data with the Key/Value vs JSON toggle:

  • Key/Value: click Add Parameter and add each field as a key and a value. Both can use variables, for example contact_id{{contact.id}} and stageLead. Turn on Encode parameter values if the endpoint expects URL-encoded form data.

  • JSON: switch to JSON mode and write the raw body yourself, like { "contact_id": "{{contact.id}}", "stage": "Lead" }. Inrō adds the Content-Type: application/json header for you.

The HTTP request config panel showing the method, URL with a variable inserted, headers, and the Key/Value vs JSON body toggle.

Handling the response

Every HTTP request branches two ways:

  • If request is successful: the service responded with a 2xx status.

  • If request fails: the service returned a 4xx or 5xx, or didn't respond.

The HTTP request node showing the success and failure branches.

Always connect both. At a minimum, add the contact to a folder in the failure branch so you can review which requests didn't go through.

Inrō saves the response (status, headers, and body), so later steps can use the data it returned. Read the response body with {{http_request.response.body}}. For the exact paths to other parts of the response, see Variables & Personalisation Guide.

Practical examples

Update a CRM contact at a key step. After a contact pays, add an HTTP request that POSTs to your CRM's API with {{contact.username}} and a status of "Customer". The CRM updates the record on its own.

Trigger a Make or Zapier workflow. POST to a Make or Zapier webhook URL with whatever data you need. The workflow on the other side handles the rest, like sending an email or creating a task.

Check a contact before sending a link. Send a GET to your backend with {{contact.email}} to see if they're already a customer, then use a condition to branch: one message for existing customers, another for new leads.

🐾 Netsuke's Tips

  • Test with static values first. Confirm the endpoint works and the response looks right, then swap in {{contact.id}} and other variables.

  • Always handle the failure branch. A silent failure means data didn't send and you'd never know. An "HTTP error" folder collects those contacts so you can follow up by hand.

  • For simple one-way notifications like a Slack message or a spreadsheet row, a POST to a Make or Zapier webhook is often faster than a direct integration, and you get those platforms' full power on the receiving end.

  • The action fires once per contact run. If you need to call the same API at different points in a flow, add multiple HTTP request actions where you need them.

What's next?

To start an Inrō scenario from an external app (the reverse direction), see Webhook Triggers: Fire Scenarios from External Apps.

Did this answer your question?