You can use n8n with Narwhal API to pull holidays, release dates, economics, commodities, FX and prediction-market odds into a workflow. An HTTP Request node gets the data with your API key, and a Schedule Trigger can start the workflow on an interval.
What you'll set up
n8n connects workflow nodes, and this setup gives you a data request that can feed a destination such as a sheet or email. You will store your Narwhal API key in a credential, configure an HTTP Request node for the data you want, and split a response list into an item for each row. REST and MCP share the key, so your n8n requests use the same key as those interfaces.
Set your API key
- Create a free key Create your account at narwhalapi.com/signup and get a free API key. Narwhal API uses one account and one key across its data APIs, so use that key for each area you connect in n8n.
- Store the key Keep the key in an environment variable called
NARWHAL_API_KEY. When you configure the n8n credential, use the key as theYOUR_KEYpart ofBearer YOUR_KEY. - Configure Header Auth In the HTTP Request node, set Authentication to Generic Credential Type and use Header Auth. Set the name to
Authorizationand the value toBearer YOUR_KEY; the credential stores the key.Header Auth credentialAuthentication: Generic Credential Type > Header Auth (name Authorization, value Bearer YOUR_KEY)
Pull data without code
The base URL is https://api.narwhalapi.com; each sample includes the full URL to enter in the node. Use a separate HTTP Request node for each area you connect, with its matching URL and response handling. The Header Auth settings stay the same across these nodes.
- Add an HTTP Request node Set the method to GET and enter the URL for the area you want to pull. Use the Header Auth credential for the request; the area samples below use the same authentication setting.
- Add the query parameters Put query parameters in the node’s query parameter list; for release dates, use the calendar URL with
countries,start_date,end_dateandlimitfor the November 2026 release calendar. EnterUSAforcountries,2026-11-01forstart_date,2026-11-30forend_dateand100forlimit. - Split a response list Add a Split Out node after HTTP Request when the response contains a list. Set its field to
holidays,releases,observations,ratesormeetings, according to the request, to get one item per row. - Connect your destination Connect the resulting items to a destination node such as a sheet or email, depending on your setup. Read the fields shown in the matching sample; for Brent, read
{{ $json.price }}from the single response object.
Run it on a schedule
Add a Schedule Trigger node to start the workflow on an interval, for example every day at 07:00. Place it before HTTP Request so the trigger starts the data request. For a list response, the chain is Schedule Trigger, HTTP Request, Split Out, then your destination node.
Use the Split Out field that matches the area you are requesting. The Brent response is a single object, so pass its price field to the destination. For more on scheduled requests, see schedule a daily data pull.
Holidays in n8n
Request USA holidays for 2026, then split the holidays list. Each holiday has a date and name; read those fields from each item when you connect your destination. The URL includes both the country and the year, while the Split Out node uses the list field returned by the request. For a sheet destination, use {{ $json.date }} for the holiday date and {{ $json.name }} for its name.
Authentication: Generic Credential Type > Header Auth (name Authorization, value Bearer YOUR_KEY)
Holidays GET https://api.narwhalapi.com/v1/calendars/holidays/USA/2026
Split Out field: holidays read: {{ $json.date }}, {{ $json.name }}Release dates in n8n
Pull USA economic release dates for November 2026 with the calendar request and its query parameters. Split the releases list to read an item for each release. The response fields include at, period, topic and status; the sample reads at and topic for your destination. Use {{ $json.at }} for the release time and {{ $json.topic }} for the topic after Split Out.
Authentication: Generic Credential Type > Header Auth (name Authorization, value Bearer YOUR_KEY)
Releases GET https://api.narwhalapi.com/v1/economics/calendar
query: countries=USA, start_date=2026-11-01, end_date=2026-11-30, limit=100
Split Out field: releases read: {{ $json.at }}, {{ $json.topic }}Economics in n8n
Narwhal’s economics data includes CPI, inflation, GDP and yields. Use the CPI observations request for USA economics data, with start=2025-09 in the query parameter list. Split observations to get an item for each observation, then read its period and value. Keep the period with the value in your destination so each observation retains its date reference.
Authentication: Generic Credential Type > Header Auth (name Authorization, value Bearer YOUR_KEY)
Economics GET https://api.narwhalapi.com/v1/economics/USA/cpi/observations
query: start=2025-09
Split Out field: observations read: {{ $json.period }}, {{ $json.value }}Commodities in n8n
Request the Brent spot price in USD with the commodity URL. This response is a single object: read price directly with the expression in the sample. Commodity spot codes include, for example, XAU, XAG, XPT, XPD, XCU, BRENT and WTI. The request here uses BRENT and USD in the URL.
Authentication: Generic Credential Type > Header Auth (name Authorization, value Bearer YOUR_KEY)
Commodity GET https://api.narwhalapi.com/v1/commodities/spot/BRENT/USD
read: {{ $json.price }}FX in n8n
Pull exchange rates with USD in the URL and currencies=EUR,IDR in the query parameter list. Split the returned rates list, then read currency and rate from each item. Send both fields to your destination if you want the currency alongside its rate in each row. The requested currencies are EUR and IDR, with USD as the base currency.
Authentication: Generic Credential Type > Header Auth (name Authorization, value Bearer YOUR_KEY)
FX GET https://api.narwhalapi.com/v1/fx/rates/USD
query: currencies=EUR,IDR
Split Out field: rates read: {{ $json.currency }}, {{ $json.rate }}Predictions in n8n
Pull Federal Reserve policy-path predictions, then split the meetings list into separate items. Each meeting has resolves_at, p_cut, p_hold and p_hike. The sample reads resolves_at and p_hold; use those expressions to pass the meeting’s resolution time and hold probability to your destination. Read p_cut for the cut probability and p_hike for the hike probability if you want those fields at the destination.
Authentication: Generic Credential Type > Header Auth (name Authorization, value Bearer YOUR_KEY)
Predictions GET https://api.narwhalapi.com/v1/predictions/policy-paths/federal-reserve
Split Out field: meetings read: {{ $json.resolves_at }}, {{ $json.p_hold }}Can I put the API key in the URL?
Keep the key in the Header Auth credential. The request URL is for the endpoint, and the credential supplies Authorization: Bearer YOUR_KEY as a header. Query parameters go in the node’s query parameter list for each request.
How do I handle a 429?
Turn on retry on fail in the HTTP Request node and respect the Retry-After value. For more on this response and caching, see cache responses and handle 429 errors.
Published .
