Everything here uses a public endpoint that needs no key, so you can finish without setting up a single credential. The data is real, and the workflow you end up with is a real workflow — the same one you would build for a paid API, minus the connector.
What you will build
A workflow called Exchange rate check with two pieces:
- a Scheduled trigger that fires every 15 minutes, and
- an HTTP Request step that calls
https://api.frankfurter.dev/v1/latest?base=USD&symbols=EURand returns today's euro rate.
You will save it, activate it, and watch its first run finish in Monitor. The last step is optional: keep every result as a record in the warehouse so it builds a history you can chart.
Before you start
- Sign in and check the top bar. Everything you create belongs to the organization and workspace named there. If you have more than one, pick the one you are happy to experiment in.
- No connector, service account, or API key is needed. You will not be asked for one.
- The endpoint is a free, public currency API run by a third party. If it is unreachable when you try, any URL that returns a JSON object works the same way — the procedure does not change.
1. Create the workflow and pick a schedule
Open Workflows in the sidebar and choose New Workflow.
A new workflow opens on the trigger wizard, because a workflow with nothing to start it can never run. Step 1 of 2 offers four cards. Choose Scheduled — Run on a recurring interval (cron-like).
Step 2 of 2 opens on the Interval tab with three boxes, Hours, Minutes, and Seconds. Set them to:
| Box | Value |
|---|---|
| Hours | 0 |
| Minutes | 15 |
| Seconds | 0 |
Press Done.
Checkpoint: the canvas shows one trigger node, and the toolbar shows Unsaved changes.
The minimum interval is one minute. Anything shorter is refused with Interval must be at least 1 minute. There is no Run now button anywhere in Hodoflow — a run happens because a trigger fired, which is what makes the run history a true record of what your systems did.
2. Add the step that fetches data
Click the + under the Start here — add the first step card. The step
palette opens as a search box, not a drag-and-drop tray.
Type http and pick HTTP Request. The step lands on the canvas already
wired to the trigger.
Click the new step to open the inspector on the right, and fill in:
| Field | Value |
|---|---|
| Name | Fetch rate |
| API Name | fx |
| Method | GET |
| URL | https://api.frankfurter.dev/v1/latest?base=USD&symbols=EUR |
API Name is the identifier the rest of the workflow uses to reach this
step's output. Set it now rather than later: everything downstream refers to
this step as fx, so renaming it afterwards means revisiting whatever already
points at it.
Leave Query Params, Headers, and Body alone.
Checkpoint: the step card no longer shows a validation warning, and the toolbar's invalid nodes count is zero.
3. Discover the fields with Test Request
Scroll to the bottom of the inspector and press Test Request.
Hodoflow calls the URL once, right now, and reads the shape of what comes back. It does not create a run and it saves nothing. After a second or two you get 4 fields discovered and the list beneath it:
amount
base
date
rates.EUR
Those four names are what every step below this one can now offer you. Without this step they would have nothing to work from, which is why testing is part of building rather than an optional check.
Two things to know about Test Request:
- It sends exactly what is in the inspector. If the step has a Connector
selected, the test does not apply that connector's credentials — a test
against an authenticated endpoint will come back
401even though the real run would succeed. Test with a public endpoint, or send the credential as a header for the test. - The discovered fields are not stored until you save. That is why the toolbar goes back to Unsaved changes after a successful test.
Checkpoint: 4 fields discovered, with rates.EUR in the list.
4. Save the version
Press Save in the toolbar.
The workflow is written for the first time as version v1, shown beside its
name in the header. Unsaved changes disappears.
Saving does not start anything. A saved workflow is a design, not a running one; nothing fires until you activate it. That separation is deliberate — it lets you save an unfinished workflow at the end of the day without it doing anything overnight.
Checkpoint: the header reads Exchange rate check v1 and the toolbar
shows no pending changes.
5. Activate the workflow
Press Activate.
Hodoflow now checks the version properly, and refuses with a message naming the first problem it finds. A workflow like this one — one trigger, one fully configured step, connected — passes.
Checkpoint: the workflow's state reads Active, and the Workflows list shows it as active with a Published date.
If the button is greyed out, hover it: the tooltip names what is missing. If the press is refused with a message, Activation errors lists every message the check can produce, with the fix for each.
6. Watch the first run
Open Workflows → Monitor, or press Monitor in the builder toolbar to arrive pre-filtered to this workflow.
Turn on Live Tail and wait. The first run appears within 15 minutes of activation — usually sooner, since the schedule is anchored to activation time. It shows up with Time, Workflow, Status, Duration, and Source.
Click the run to see its steps. Fetch rate should read completed with a
duration in the low hundreds of milliseconds.
Checkpoint: one run with status completed, containing one completed step.
The steps table shows each step's name, type, status, duration, and error. It does not show the payload the step was holding — to see the values, use Test Request in the builder, or persist them with the next step.
7. Optional: keep every result as a record
So far the workflow fetches a number and discards it. This step gives it somewhere to land, so 15 minutes later there are two, and by tomorrow there are ninety-six.
First, describe what you want to keep. Open Warehouse → New Data Model and choose Create manually:
| Wizard step | What to enter |
|---|---|
| Name & Description | Name it Exchange rate. |
| Add Fields | base — type string, Required, Primary Key |
rate — type float, Required |
|
rate_date — type string |
|
| Review | Check the three fields, then create. |
Now go back to the workflow. Add a Map to Data Model step below
Fetch rate, select it, and choose Exchange rate in Data Model. Press
the Map to Exchange rate button to open the mapping panel.
Mapping is click-then-click. Click a field in Available fields on the left to arm it, then click the destination row on the right:
| Click on the left | Then click on the right |
|---|---|
fx.base |
base |
fx.rates.EUR |
rate |
fx.date |
rate_date |
The counter in the inspector reads 3 of 3 mapped. Close the panel, press Save, then Activate again — a workflow that changed has to be re-activated for the new version to be the live one.
Checkpoint: after the next run, Warehouse → Exchange rate lists one
record. Open it and you get its change history: every version ever written for
USD, with a date picker to scrub back. Nothing is overwritten, so the
timeline grows by one entry every 15 minutes.
8. Deactivate the workflow when you are done
A scheduled workflow keeps running until you stop it. Open the workflow and press Deactivate, or use Deactivate on its row in the Workflows list.
Its schedule is cancelled immediately. Runs already in progress finish. Deactivating never forks a version and is always allowed, so it is the safe way to pause anything.
Checkpoint: the workflow reads Inactive, and no new runs appear in Monitor.
Verify the result
You are done when all of these are true:
- Workflows lists Exchange rate check at
v1with a Published date. - Monitor holds at least one run with status completed.
- Opening that run shows
Fetch rateas completed with a duration. - If you did step 7: Warehouse → Exchange rate holds at least one record
for
USD, and opening it shows a change history. - The workflow now reads Inactive, so nothing is still running.
Common problems
The workflow will not activate. The refusal message names the first problem found. The usual first-time causes are a step that is not fully configured and a step with no arrow into it. Every message is listed on Activation errors.
Test Request returns an error instead of fields. Check the URL for a typo —
it must start with https://. A 403 or 401 from a public endpoint usually
means the URL is right but the endpoint wants a header; a timeout means the
host is unreachable from Hodoflow.
No run appears in Monitor. Confirm the workflow reads Active, not Inactive — saving does not activate. Then confirm the interval: 15 minutes means up to 15 minutes of waiting. Check the Time filter on Monitor is wide enough to include now.
The run failed. Open it and read the Error column on the failing step. A failed run gets a Run again from the failure panel with a Retry Run button that keeps every step that already finished. See Recover a failed run.
The mapping panel's left column is empty. Nothing upstream has been sampled
yet. Go back to Fetch rate and press Test Request, then reopen the panel.
Activation is refused with a limit message. Your plan caps how many workflows can be active at once. Deactivate one you are not using, or contact support to raise the limit.
Next steps
- Choose a trigger — swap the schedule for a webhook so an external system starts the run instead.
- Credentials and connections — call an API that needs a key, without pasting the key into a step.
- Build a dashboard — chart the history the optional step started collecting.