APITube Help Center

How to connect APITube to n8n

Use n8n's HTTP Request node with a Header Auth credential to poll the News API on a schedule — no code required

Jacob Partington

Written by Jacob Partington

July 4, 2026

Open this example in the API Playground ↗

How to connect APITube to n8n

To connect APITube to n8n, add a Header Auth credential that sends your API key in the X-API-Key header, then use an HTTP Request node to GET https://api.apitube.io/v1/news/everything. APITube has no dedicated n8n node — you call the plain News API over HTTPS, so any n8n workflow can pull articles on a schedule and route them wherever you like.

There is nothing else to install. The News API returns JSON, n8n reads JSON, and a Schedule Trigger decides how often to poll. Once the HTTP Request node works, you can hang a Slack, Telegram, Google Sheets, email, or AI node off the end.

How do you set up the APITube credential in n8n?

APITube authenticates every request by an API key. In n8n, store the key once as a credential so you never paste it into a node:

  1. Open Credentials → Add credential and pick Header Auth.
  2. Set Name to X-API-Key.
  3. Set Value to your live API key from the dashboard.
  4. Save it as APITube API.

The API key is read from the X-API-Key request header (the api_key query parameter also works, but a header keeps the key out of logs and URLs). Grab your key from where to find and create your API key, and see how to authenticate your API requests for the full auth options.

How do you configure the HTTP Request node?

Add an HTTP Request node after your trigger and point it at the News API. In the node, set Authentication to Generic Credential Type, choose Header Auth, and select your APITube API credential. Then set the method to GET, the URL to the endpoint, turn on Send Query Parameters, and add each News API filter as a name/value row.

A minimal monitoring node looks like this:

{
  "url": "https://api.apitube.io/v1/news/everything",
  "authentication": "genericCredentialType",
  "genericAuthType": "httpHeaderAuth",
  "sendQuery": true,
  "queryParameters": {
    "parameters": [
      { "name": "title", "value": "artificial intelligence" },
      { "name": "language.code", "value": "en" },
      { "name": "source.domain", "value": "bbc.com" },
      { "name": "published_at.start", "value": "={{ $now.minus(15, 'minutes').toISO() }}" },
      { "name": "per_page", "value": "50" },
      { "name": "sort.by", "value": "published_at" },
      { "name": "sort.order", "value": "desc" }
    ]
  }
}

Every name here is a real News API parameter: title searches article titles, language.code takes a two-letter code such as en, source.domain limits results to one publisher, and published_at.start sets the earliest publish time. sort.by accepts published_at (the default) or relevance, and sort.order accepts asc or desc. Add any other filter — country, category, sentiment — the same way; see how to combine multiple filters in one request for stacking them.

How do you loop over the returned articles?

The News API wraps articles in a results array alongside pagination fields like page, limit, has_next_pages, and next_page. Add a Split Out node after the HTTP Request and set Field To Split Out to results — each article then flows through the rest of the workflow one item at a time.

Read fields off each item with the exact names the API returns. The article link is href (not url), the publisher label is source.domain (there is no source.name), and the overall tone is sentiment.overall.score. A Slack or Telegram message might use title, href, source.domain, and published_at.

Field names matter. In n8n expressions, use {{ $json.href }} for the article link and {{ $json.source.domain }} for the source. The object has href and source.domain — not url or source.name — so referencing the wrong name returns an empty value with no error.

What can you build once the connection works?

With one HTTP Request node in place, common n8n workflows are:

  • News monitoring: a Schedule Trigger every 15 minutes → HTTP Request → an IF node that keeps only items where sentiment.overall.score is above a threshold → append to Google Sheets.
  • Team alerts: Schedule Trigger → HTTP Request → Split Out → a Slack or Telegram node that posts title, source.domain, and href.
  • AI digest: a daily Schedule Trigger → HTTP Request to /v1/news/top-headlines → a Code node that formats the list → an LLM node that summarizes → an email node.

Common Questions

Does APITube have an official n8n node?

No. There is no dedicated APITube node in n8n. You use the generic HTTP Request node against the REST API, which is why the same setup works in Make, Zapier, or any tool with an HTTP step. This is the same plain-HTTPS contract described in how to call the News API from Python, Java, Go and more — n8n is just one more client.

How do I avoid fetching the same article twice?

Two ways, used together. Set published_at.start to the time of your last poll — the n8n expression ={{ $now.minus(15, 'minutes').toISO() }} fetches only articles published since the previous run. As a safety net, add n8n’s built-in Remove Duplicates node and key it on href, which is unique per article.

How often can n8n poll the API?

The rate limit is 50 requests per minute on paid plans (the Free plan is capped at 10 per minute, and test keys at 15). A Schedule Trigger that runs every few minutes stays well under it; if you fan out many HTTP Request nodes in one run, space them out. See understanding rate limits for what happens when you exceed the limit.

Can I pull more than 250 articles per run?

per_page maxes out at 250 — a larger value returns a 400 error, not a silent trim. To page further, add the page parameter and increment it (the response includes has_next_pages and a ready-built next_page URL). For a bulk export instead of item-by-item processing, add export=csv or export=xlsx to the request and n8n receives a file rather than JSON.


Related Articles