Skip to content
The Reel — swipe today’s market
Nukoud

Content API

Put Nukoud’s GCC ETF news, analysis and fund coverage inside your own platform. REST over HTTPS, JSON in and out, one header to authenticate. Everything is read-only.

Version 2026-09-30 · base URL https://www.nukoud.com/api/v1

Getting started

Get a key

We issue it. It is shown once and stored only as a hash.

Send one header

X-API-Key on every request. No OAuth dance, no tokens to refresh.

Check it works

GET /meta echoes your key’s name, scopes and rate limit.

Authentication

Every request carries your key in the X-API-Key header. Keys look like nk_live_…, or nk_test_… while you are integrating, so a test key is obvious on sight. Treat it as a password: it belongs on your server, never in a browser bundle or a mobile app.

curl -H "X-API-Key: nk_live_your_key_here" \
  "https://www.nukoud.com/api/v1/meta"

Conventions

  • Every timestamp is ISO-8601 in UTC.
  • Every list endpoint returns { items, meta } with the same meta: page, page_size, total_items, total_pages, has_next.
  • Fields are added, never removed or renamed, without a version change. Ignore fields you do not recognise.
  • Funds are identified by ticker and ISO-2 listing country. A cross-listed strategy appears once per listing and the two are never merged.

Polling for new articles

Store the published_at of the newest article you have, then pass it back as since. You get only what is new, so a five-minute poll costs one small request.

curl -H "X-API-Key: $NUKOUD_API_KEY" \
  "https://www.nukoud.com/api/v1/articles?since=2026-09-30T00:00:00Z"

Articles

List endpoints return headlines, images and metadata — everything needed to render a card, and no body. Fetch the body from the detail or batch endpoint when a reader opens the piece.

GET/articles

Latest articles

Newest first by default. Filter by section, tag, ticker or publication date.

ParameterTypeNotes
pageintegerDefaults to 1.
page_sizeintegerDefaults to 20, maximum 100.
sectionstringnews, analysis, education, research, opinion, tools.
tagstringTag slug — see /tags.
tickerstringOnly articles naming this fund, e.g. CHADX15.
sinceISO-8601Only articles published after this instant. Use this to poll.
sortstringnewest (default), oldest or title.

Request

curl -H "X-API-Key: $NUKOUD_API_KEY" \
  "https://www.nukoud.com/api/v1/articles?section=analysis&page_size=5"

Response

{
  "items": [
    {
      "id": "1482",
      "slug": "gold-etfs-explained-8-different-ways-to-invest-in-gold",
      "title": "Gold ETFs Explained: 8 Different Ways to Invest in Gold",
      "excerpt": "Gold ETFs offer exposure without the vault...",
      "url": "https://www.nukoud.com/etf-education/gold-etfs-explained",
      "image": { "url": "https://media.nukoud.com/gold_hero.avif", "alt": "Gold ETFs Explained" },
      "author": { "name": "Anthony Sassine", "slug": "anthony-sassine" },
      "section": "education",
      "category": "etf-education",
      "tags": [{ "name": "Commodities / Gold", "slug": "commodities-gold" }],
      "tickers": [{ "ticker": "9405", "country": "SA", "name": "Albilad Gold ETF", "display_ticker": "9405" }],
      "published_at": "2026-09-01T06:00:00Z",
      "updated_at": "2026-09-02T11:14:00Z",
      "reading_time_minutes": 7,
      "is_premium": false
    }
  ],
  "meta": { "page": 1, "page_size": 5, "total_items": 464, "total_pages": 93, "has_next": true }
}
GET/articles/search

Search articles

Matches the query against title and excerpt. Same response shape as the list endpoint.

ParameterTypeNotes
qrequiredstringAt least 2 characters.
pageintegerDefaults to 1.
page_sizeintegerDefaults to 20, maximum 100.
sectionstringNarrow to one section.
sortstringnewest (default), oldest or title.

Request

curl -H "X-API-Key: $NUKOUD_API_KEY" \
  "https://www.nukoud.com/api/v1/articles/search?q=sukuk&page_size=10"

Response

{ "items": [ /* same shape as /articles */ ], "meta": { "total_items": 39, "...": "" } }
GET/articles/{slug}

One full article

Everything in the list shape, plus the body as HTML and as plain text, a word count, and the SEO block.

Request

curl -H "X-API-Key: $NUKOUD_API_KEY" \
  "https://www.nukoud.com/api/v1/articles/gold-etfs-explained-8-different-ways-to-invest-in-gold"

Response

{
  "id": "1482",
  "slug": "gold-etfs-explained-8-different-ways-to-invest-in-gold",
  "title": "Gold ETFs Explained: 8 Different Ways to Invest in Gold",
  "url": "https://www.nukoud.com/etf-education/gold-etfs-explained",
  "body_html": "<p>Gold ETFs offer exposure without the vault...</p>",
  "body_text": "Gold ETFs offer exposure without the vault...",
  "word_count": 1620,
  "seo": {
    "meta_title": "Gold ETFs Explained",
    "meta_description": "Eight ways to hold gold through an ETF.",
    "canonical_url": "https://www.nukoud.com/etf-education/gold-etfs-explained",
    "og_image_url": "https://media.nukoud.com/gold_hero.avif"
  }
}
GET/articles/batch

Several full articles

Up to twenty full articles in one round trip. For backfilling a watchlist without twenty requests.

ParameterTypeNotes
slugsrequiredstringComma-separated, maximum 20.

Request

curl -H "X-API-Key: $NUKOUD_API_KEY" \
  "https://www.nukoud.com/api/v1/articles/batch?slugs=first-article,second-article"

Response

[ { "slug": "first-article", "body_html": "...", "...": "" } ]

Tickers

Every fund on Nukoud is identified by ticker plus ISO-2 listing country. Cross-listings are separate entries — AGIX-US and AGIX-AE are the same strategy on two exchanges, and they are never collapsed.

GET/tickers

Funds we cover

Every fund on the site, each with how many articles name it and when the most recent one ran.

ParameterTypeNotes
pageintegerDefaults to 1.
page_sizeintegerDefaults to 20, maximum 100.
countrystringISO-2 listing country, e.g. AE.
with_articlesbooleanOnly funds that have coverage.

Request

curl -H "X-API-Key: $NUKOUD_API_KEY" \
  "https://www.nukoud.com/api/v1/tickers?country=AE&page_size=50"

Response

{
  "items": [
    {
      "ticker": "CHADX15",
      "country": "AE",
      "name": "Chimera FTSE ADX 15 ETF",
      "display_ticker": null,
      "currency": "AED",
      "exchange": "Abu Dhabi Securities Exchange",
      "issuer": "Chimera Capital",
      "asset_class": "Equity",
      "url": "https://www.nukoud.com/etf/CHADX15-AE",
      "article_count": 7,
      "latest_article_at": "2026-09-28T13:00:00Z"
    }
  ],
  "meta": { "page": 1, "page_size": 50, "total_items": 339, "total_pages": 7, "has_next": true }
}
GET/tickers/search

Search funds

Matches against ticker and fund name.

ParameterTypeNotes
qrequiredstringTicker fragment or part of a fund name.
pageintegerDefaults to 1.
page_sizeintegerDefaults to 20, maximum 100.

Request

curl -H "X-API-Key: $NUKOUD_API_KEY" "https://www.nukoud.com/api/v1/tickers/search?q=gold"

Response

{ "items": [ /* same shape as /tickers */ ], "meta": { "...": "" } }
GET/tickers/with-coverage

Which funds have articles

Only funds we have written about, busiest first. The direct answer to "which of my instruments have news".

ParameterTypeNotes
pageintegerDefaults to 1.
page_sizeintegerDefaults to 20, maximum 100.

Request

curl -H "X-API-Key: $NUKOUD_API_KEY" "https://www.nukoud.com/api/v1/tickers/with-coverage"

Response

{
  "items": [
    { "ticker": "AGIX", "country": "US", "article_count": 23, "latest_article_at": "2026-09-15T09:00:00Z", "...": "" },
    { "ticker": "QUANTM", "country": "AE", "article_count": 10, "latest_article_at": "2026-09-15T09:00:00Z", "...": "" }
  ],
  "meta": { "total_items": 68, "...": "" }
}
GET/tickers/{ticker}/articles

Articles about one fund

Every article naming this fund, newest first. Same shape as /articles.

ParameterTypeNotes
pageintegerDefaults to 1.
page_sizeintegerDefaults to 20, maximum 100.

Request

curl -H "X-API-Key: $NUKOUD_API_KEY" "https://www.nukoud.com/api/v1/tickers/CHADX15/articles"

Response

{ "items": [ /* same shape as /articles */ ], "meta": { "...": "" } }

Reference

Small, slow-moving lists you can cache for a day.

GET/meta

Who this key is

Confirms a key works and reports its scopes and rate limit. The first endpoint to hit when wiring up.

Request

curl -H "X-API-Key: $NUKOUD_API_KEY" "https://www.nukoud.com/api/v1/meta"

Response

{
  "name": "Acme Trading",
  "key_prefix": "nk_test_a1b2c3d4",
  "scopes": ["content:read"],
  "rate_limit_per_minute": 120,
  "api_version": "2026-09-30",
  "docs_url": "https://www.nukoud.com/developers"
}
GET/sections

Editorial sections

The six sections an article can belong to.

Request

curl -H "X-API-Key: $NUKOUD_API_KEY" "https://www.nukoud.com/api/v1/sections"

Response

[ { "slug": "news", "name": "News", "url": "https://www.nukoud.com/news" } ]
GET/tags

Editorial tags

Every tag in use, for the `tag` filter on /articles.

Request

curl -H "X-API-Key: $NUKOUD_API_KEY" "https://www.nukoud.com/api/v1/tags"

Response

[ { "name": "Commodities / Gold", "slug": "commodities-gold" } ]

Errors

Errors return the matching HTTP status and a body shaped { "detail": { "code", "message" } }. Branch on code, never on the message text.

StatusCodeMeaning
401MISSING_API_KEYNo X-API-Key header was sent.
401INVALID_API_KEYThe key is not recognised. One answer for unknown and wrong, so probing tells you nothing.
403KEY_REVOKEDThe key was disabled. Contact us.
403KEY_EXPIREDThe key passed its expiry date.
403INSUFFICIENT_SCOPEThe key does not carry the scope this endpoint needs.
404ARTICLE_NOT_FOUNDNo article with that slug.
429RATE_LIMITEDOver your per-minute limit. A Retry-After header says how long to wait.

Rate limits

Limits are per key, not per IP — running more servers does not buy you more requests, and sitting behind one NAT does not cost you any. The default is 120 requests a minute; GET /meta reports yours. Over the limit you get 429 with a Retry-After header. Ask us if you need more.

Need a key?

Email hello@nukoud.com with what you are building and roughly how much traffic you expect. We issue a test key the same day.

Contact us