DocsIntegration

Fetch exchange rates in a Make scenario

Request USD rates for EUR and JPY with the HTTP module

30 Oct 2026 · 3 min read

Add the HTTP app's Make a request module to your Make scenario and request EUR and JPY with USD as the base. Set Parse response to Yes so later modules can map the rate fields. Use data_updated_at to check when the oldest contributing rate observation was recorded. The rates are indicative mid-market figures, not for settlement or trading.

Set the URL and method

Use GET with the URL https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,JPY in the HTTP app's Make a request module. The base is USD, and the symbols query parameter selects EUR and JPY. Both requested rates are returned in the response's rates object.

Set Parse response to Yes in the module. This makes the response fields mappable in later modules. The fields you will use for the rates are rates.EUR and rates.JPY; data_updated_at is the observation time field to check alongside them.

Add your API key

Put your key in a Make connection or variable, then use that value in the request header. Add a header named Authorization with the value Bearer followed by a space and your key. This keeps the key in a connection or variable instead of requiring you to type it into every module.

For a keyless request, omit the authorization header. The URL and method stay the same. Keyless access allows 10 requests a minute and 100 an hour per IP, with rates 15 minutes late. A free key also has delayed rates, with separate monthly and per-minute allowances.

Run the module once

Run the configured module once and check its output bundle against the sample response. Check that the base is USD and that the rates object contains EUR and JPY. These are the fields that later modules will map.

The curl request uses the same URL and authorization header as the Make request. Its key comes from EXCHANGERATE_API_KEY; your Make module uses the key stored in your connection or variable. Compare the request settings if you need to check how the module corresponds to the curl example.

Request
curl -H "Authorization: Bearer $EXCHANGERATE_API_KEY" \  "https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,JPY"

Map the rates into later modules

Select rates.EUR for the EUR rate and rates.JPY for the JPY rate in later modules. Both belong to the USD base in this request. Keep that base in mind when you use either value elsewhere in the scenario.

The sample response includes result and base, along with source and sources. The sources object has a source value for each symbol. It also includes market_session, timestamp and effective_at. The stale field is an object with an entry per symbol, while derived_symbols and notice are separate response fields.

Response
{  "result": "success",  "base": "USD",  "source": "live",  "sources": {    "EUR": "live",    "JPY": "live"  },  "market_session": "open",  "timestamp": "2026-10-23T17:00:04Z",  "data_updated_at": "2026-10-23T16:44:59Z",  "effective_at": {    "EUR": "2026-10-23T16:44:59Z",    "JPY": "2026-10-23T16:44:59Z"  },  "rates": {    "EUR": 0.89315,    "JPY": 156.954  },  "stale": {    "EUR": false,    "JPY": false  },  "derived_symbols": [],  "notice": "Indicative rates, not for settlement."}

Check when the rates were observed

Read data_updated_at as the oldest contributing observation in the response. It tells you when the rate was observed. With multiple symbols in the request, this field gives you the oldest contributing observation across those rates.

Keep data_updated_at available alongside the mapped rate fields when observation time matters to your scenario. The response also contains timestamp and per-symbol effective_at values. When you compare the output bundle with the sample, check these fields by name so you can distinguish the observation field from the other time fields in the response.

Account for limits and rate delays

A free key has 5,000 requests a month and 10 requests a minute. Its rates are 15 minutes late. Paid plans have live rates. Keyless requests have their own per-IP limits, so use the allowances for the access method configured in your HTTP module.

Banks, cards and transfer services apply their own spread and fees. The values mapped from the response are indicative mid-market rates, so they can differ from the rate used for a payment or transfer. They are not for settlement or trading.

Questions

Can I make this request without a key?

Yes. Leave out the authorization header and use the same GET URL. Keyless access allows 10 requests a minute and 100 an hour per IP. The rates are 15 minutes late.

How do I make the rate fields mappable?

Set `Parse response` to `Yes` in the HTTP module, then run it once. Later modules can map `rates.EUR` and `rates.JPY` from the parsed response. Check the output bundle against the sample response.

Which field tells me when the rates were observed?

Use `data_updated_at`, which is the oldest contributing observation. The response also has `timestamp` and per-symbol `effective_at` values. Check `data_updated_at` alongside the rates when you need the observation time.

Does a free API key give me live rates?

A free key has rates 15 minutes late, with 5,000 requests a month and 10 requests a minute. Paid plans have live rates. The same request URL selects USD as the base and EUR and JPY as the symbols.

Keep reading

Get a free API key

Free has 5,000 requests a month and 10 requests a minute. No credit card is required.

Get a free key