Use the Narwhal API in n8n

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

  1. 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.
  2. Store the key Keep the key in an environment variable called NARWHAL_API_KEY. When you configure the n8n credential, use the key as the YOUR_KEY part of Bearer YOUR_KEY.
  3. Configure Header Auth In the HTTP Request node, set Authentication to Generic Credential Type and use Header Auth. Set the name to Authorization and the value to Bearer YOUR_KEY; the credential stores the key.
    Header Auth credential
    Authentication: 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.

  1. 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.
  2. 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_date and limit for the November 2026 release calendar. Enter USA for countries, 2026-11-01 for start_date, 2026-11-30 for end_date and 100 for limit.
  3. 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, rates or meetings, according to the request, to get one item per row.
  4. 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.

Holiday request and fields
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.

Release date request and fields
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.

CPI request and fields
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.

Brent request and field
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.

FX request and fields
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.

Prediction request and fields
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 .