Skip to content

Build Your First Workflow

Build a webhook that accepts a city and returns its current weather. You need a QuickFlo workspace and a terminal. The two public weather endpoints require no account.

Request
curl -X POST https://run.quickflo.app/w/@your-org/weather-lookup \
-H "Authorization: Bearer YOUR_WEBHOOK_SECRET" \
-H "Content-Type: application/json" \
-d '{"city": "Austin"}'
Copy, paste, run

Start with the finished steps

Copy the workflow, create a blank workflow, then paste it onto the canvas. Add the webhook trigger in step 2.

3 configured steps

Open a blank canvas in QuickFlo and paste. The configured steps appear immediately.

  1. Open Workflows and select New Workflow.

  2. Name it Weather Lookup API.

  3. The builder opens with the step library on the left and your canvas on the right.

    An empty QuickFlo workflow canvas beside the step library
  1. Select New Trigger, then Webhook.

  2. Set the name to weather-lookup, choose POST, and keep Authentication on.

  3. Create the trigger. Copy its webhook URL and secret; you will use both when you test the workflow.

    New Webhook Trigger dialog with a weather-lookup name, POST method, and authentication enabled

The request body is available as {{ initial.* }}. For this example, {{ initial.city }} resolves to the city sent by the caller.

Add an HTTP step and configure it:

FieldValue
Step IDgeocode
MethodGET
URLhttps://geocoding-api.open-meteo.com/v1/search

Add these query parameters:

KeyValue
name{{ initial.city }}
count1

Run a test with {"city": "Austin"}. The response should include latitude, longitude, and country.

Geocode HTTP step with a successful response containing latitude and longitude

Every step output is available to the steps that follow it. Here, Austin’s latitude becomes {{ geocode.body.results[0].latitude }}.

Add a second HTTP step:

FieldValue
Step IDforecast
MethodGET
URLhttps://api.open-meteo.com/v1/forecast

Add these query parameters:

KeyValue
latitude{{ geocode.body.results[0].latitude }}
longitude{{ geocode.body.results[0].longitude }}
currenttemperature_2m,wind_speed_10m,weather_code
temperature_unitfahrenheit
wind_speed_unitmph

QuickFlo suggests earlier step outputs when you type {{. Run another test and confirm the response includes a current object.

Forecast HTTP step using coordinates from the geocode step

Add a Return step. Set the status to 200 and use this JSON body:

{
"city": "{{ initial.city }}",
"country": "{{ geocode.body.results[0].country }}",
"temperatureF": "{{ forecast.body.current.temperature_2m }}",
"windMph": "{{ forecast.body.current.wind_speed_10m }}",
"weatherCode": "{{ forecast.body.current.weather_code }}"
}
Return step configured with a JSON response assembled from earlier step outputs

The Return step makes the webhook respond with this body. Without one, the webhook accepts the run asynchronously and returns an execution ID.

Save the workflow, then replace the URL and secret below with the values from your trigger:

Request
curl -X POST https://run.quickflo.app/w/@your-org/weather-lookup \
-H "Authorization: Bearer YOUR_WEBHOOK_SECRET" \
-H "Content-Type: application/json" \
-d '{"city": "Austin"}'
Response
{
"city": "Austin",
"country": "United States",
"temperatureF": 72.3,
"windMph": 8.4,
"weatherCode": 0
}
A terminal showing the weather webhook request and JSON response
  • Learn the small set of ideas behind every workflow in Core Concepts.
  • Browse working recipes and paste one onto a canvas.
  • Open Flo Agent with Cmd+I or Ctrl+I and describe the next workflow you want.