Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the DonanımHaber API page →
Media, Film & Knowledge

DonanımHaber API & Scraper

The DonanımHaber API returns forum topics, posts and sections from Turkey's largest technology forum as clean JSON, with the Turkish text intact and no login.

4 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

The primary search endpoint runs a keyword query across every post and returns message_id, topic_id, title, excerpt, matched_words, the section it lives in, posted_at and the thread URL, alongside total_matches and pagination. From there, topic expands a thread into its opening post, author, dates, view and reply counts and its replies; section pages a single board; and sections lists the board directory so you can pick what to ingest. Reach for it when you need Turkish consumer-technology discussion — buying advice, fault and RMA threads, price talk, second-hand posts — as structured data instead of scraping a forum that has been running since 2001. One ReefAPI key, one shared credit pool, the standard { ok, data, meta, error } envelope.

Reference

DonanimHaber ids, URL shapes, and what the timestamps really are

The forum has run since 2001 and its ids, URLs and dates carry that history. Two things surprise people. A message id and a topic id are the same number on an opening post and different on a reply, and section names are not unique, so a section has to be resolved by id. Measured on 2026-08-27 against the search, topic, section and sections actions.

FieldFormatMeasured
topic_id9 digits163852334; the full URL, the '<slug>--<id>' slug and the bare number all resolve
message_id9 digits; equals topic_id on an opening postidentical on every is_opening_post row measured, different on the reply rows
section_id1 to 4 digits, but the JSON type changes by actionan integer (265) on search results, a string ("189") on topic.section_id
section URL'<slug>--f<id>' - note the fseo-arama-motoru-optimizasyonu--f2770
topic URL'<slug>--<id>' - no fsearch returns the slugless form, forum.donanimhaber.com/--163959616, which resolves the same
posted_atISO 8601 with the +03:00 Istanbul offset2026-08-26T19:57:26.104155+03:00; null when the site's own label is unusable
posted_labelthe site's own Turkish relative string, passed through"5 saat once", "2 gun once", "Bugun; 19:53:15"
post_count vs reply_countpost_count includes the opening posta measured thread reported post_count 5 and reply_count 4
section directory sizesections action, total_available692 public sections

Section names are not unique. Hits for one graphics-card query landed in both section 265 named "Ekran Karti" and section 296 named "Ekran karti" - a capitalization difference and nothing else. Always resolve a section by id, never by matching its name.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/donanimhaber/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "ekran kartı",
    "search_in": "title",
    "limit": 10
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "donanimhaber",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 2679.3,
    "record_count": 10,
    "bytes": 7568,
    "cache_hit": false,
    "method": "own_search_api_and_ldjson_bare_dc",
    "upstream_pages": 1,
    "stop_reason": "limit_reached"
  },
  "data": {
    "results": [
      {
        "message_id": 163939433,
        "topic_id": 163939433,
        "is_opening_post": true,
        "title": "Satılık Arc B580 ekran kartı",
        "excerpt": "Arc B580 ekran kartını satıyorumSistem Notu : Bu ilan her türlü yoruma açıktır....",
        "matched_words": [
          "ekran",
          "kartı"
        ],
        "section_id": 265,
        "section": "Ekran Kartı",
        "posted_at": "[redacted-phone]T15:16:[redacted-phone]+03:00",
        "posted_label": "6 saat önce",
        "image": null,
        "url": "https://forum.donanimhaber.com/--[redacted-phone]",
        "topic_url": "https://forum.donanimhaber.com/--[redacted-phone]"
      },
      {
        "message_id": 163931473,
        "topic_id": 163931473,
        "is_opening_post": true,
        "title": "Ekran kartı ısınması",
        "excerpt": "...e götürmüştüm ilk önce anakart sonra işlemci en son da power supply değiştirdim ama her şeyi değiştirdikten sonra en basit oyunlar da bile GPU Sıcaklığı 90 üstü Gpu hotspot sıcaklığı ise 100 dereceyi buluyor ve birden inanılmaz bir şekilde ekran kartı aşırı sıcak oluyor bunun sebebi ne olabilir sizce daha önce böyle bir problem yoktu Ekran kartı - AMD Radeon RX 6700 XT\nCPU - AMD Ryzen 5 7500x3d\nAnakart - Asus Prime a620m-k\nRam - T-FORCE 8X2\nSupply - Gamepower 650...",
        "matched_words": [
          "Ekran",
          "kartı"
        ],
        "section_id": 183,
        "section": "Teknik Yardım",
        "posted_at": "[redacted-phone]T17:26:[redacted-phone]+03:00",
        "posted_label": "2 gün önce",
        "image": null,
        "url": "https://forum.donanimhaber.com/--[redacted-phone]",
        "topic_url": "https://forum.donanimhaber.com/--[redacted-phone]"
      },
      {
        "message_id": 163929780,
        "topic_id": 163929780,
        "is_opening_post": true,
        "title": "iki ekran kartı laptop oyun oynayamıyorum",
        "excerpt": "ikinci el laptop aldım bilgisayarda iki ekran kartı var driverlar yüklü görünüyor ama oyun açılmıyor \nekran kartı amd mobility radeon hd 5000 intel hd graphics ne yapmam gerekir...",
        "matched_words": [
          "ekran",
          "kartı"
        ],
        "section_id": 183,
        "section": "Teknik Yardım",
        "posted_at": "[redacted-phone]T11:58:[redacted-phone]+03:00",
        "posted_label": "2 gün önce",
        "image": null,
        "url": "https://forum.donanimhaber.com/--[redacted-phone]",
        "topic_url": "https://forum.donanimhaber.com/--[redacted-phone]"
      }
    ],
    "total_matches": 93154,
    "returned": 10,
    "page": 1,
    "pages_available": 1000,
    "did_you_mean": null,
    "query": "ekran kartı",
    "source": "donanimhaber"
  }
}
Actions

What the DonanımHaber API does

ActionDescriptionConcrete use caseKey params
searchKeyword-search every post on DonanımHaber Forum — the site's own search index, not a page scrape. Returns the matching post's title, excerpt, section, author-visible timestamp and a deep link to the exact message. Filter to opening posts only (topic search), to one section, or to one thread; sort by recency or relevance. Ideal for Turkish-market demand signals, product mentions and support chatter.Content platforms call search to get keyword-search every post on DonanımHaber Forum.query, search_in, match, sort, first_post_only, ...
topicFull detail for one DonanımHaber Forum thread: title, the complete opening post as clean text, the author (public handle, profile, staff title, lifetime post count), published/last-updated timestamps, the section it lives in, view / post / like counts, and the replies on the requested page with their own authors, timestamps and like counts.Research tools call topic to get full detail for one DonanımHaber Forum thread.topic, page
sectionList the topics in one DonanımHaber Forum section, newest activity first, with pagination (65 topics per page). Each row carries the title, the site's own opening-post teaser, the thread starter, reply and view counts, and the last-post timestamp — enough to monitor a section without opening a single thread.Community analysts call section to list the topics in one DonanımHaber Forum section, newest activity first, with pagination (65….section, page, limit, query, posted_within, ...
sectionsThe DonanımHaber Forum section directory — every public section with its numeric id, name and URL, optionally filtered by name. Use it to resolve a topic area ('SEO', 'yazılım', 'ekran kartı') to the `section` id that `search` and `section` take.Media monitors call sections to get the DonanımHaber Forum section directory.query, limit
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/donanimhaber/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"ekran kartı","search_in":"title","limit":10}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.donanimhaber.search with {"query":"ekran kartı","search_in":"title","limit":10}.
Use cases

Who uses this API and why

  • Brand and support teams call search to find every Turkish forum thread mentioning a model number or a recurring fault.
  • Market researchers page a board with section to see what buyers in a category (graphics cards, motherboards) are actually asking.
  • Dataset and community tools use topic to pull a thread's opening post plus its full reply chain in one call.
  • Ingestion pipelines use sections first to map the board directory before deciding which sections to poll.
FAQ

Questions developers ask before integrating

Does this return the actual post text or just titles?

The topic action returns the complete opening post as clean plain text in topic.body, plus replies[] carrying each reply's full text, author, timestamp and like count. Search is different: it returns an excerpt around the match rather than the whole post, along with matched_words showing which of your terms hit. If you need the body, take topic_id off a search hit and call topic.

How much does search_in=title actually narrow a search?

Dramatically, because the site stems Turkish words and searches bodies very loosely. The query 'ekran karti' reported 697,597 total_matches with search_in set to all, and 93,154 with it set to title - under fourteen percent. If you are hunting topics rather than mentions, title is the setting you want, optionally with first_post_only to restrict to opening posts.

Why is posted_at sometimes null?

Because the forum itself printed a date that cannot be trusted. One measured row carried the label "2026 yil once" - 2026 years ago - and posted_at came back null rather than a fabricated timestamp. posted_label always preserves whatever the site said, so you can see the raw value and decide. Timestamps that do resolve are ISO 8601 with the +03:00 Istanbul offset, sometimes to the second and sometimes with microseconds, depending on which surface the row came from.

How do I find the section id for a topic area?

Call sections, optionally with a name filter. The directory holds 692 public sections; filtering on 'seo' returned exactly one, id 2770, "SEO (Arama Motoru Optimizasyonu)". Do not match on names, because they repeat: search results for a graphics-card query spanned section 265 "Ekran Karti" and section 296 "Ekran karti", which differ only in capitalization.

What is the difference between message_id and topic_id?

topic_id is the thread, message_id is one post inside it. On an opening post they are the same number, which held on every measured opening-post row; on a reply they differ, and the reply's own URL is the topic URL with #<message_id> appended. is_opening_post tells you which kind of row you are holding without comparing the two ids yourself.

How many replies does one topic call return?

One page of the thread. The measured thread had 5 posts in total and returned all 3 replies present on page 1, with pages_available 1 and meta.replies_on_page 3 confirming it. Long threads have many pages, so page the topic action until you reach pages_available. The topic object also carries view_count, like_count, the section breadcrumb and the author's lifetime total_posts.

Are pinned topics included when I list a section?

Yes by default, and they are flagged so you can drop them. A measured listing of section 2770 returned 10 topics of which 1 had sticky: true. Sticky topics are not sorted by recency, so if you are monitoring a board for new activity, either set include_sticky to false or filter on the flag, otherwise an announcement from years ago sits at the top of your feed.

Does posted_within filter at the source?

No, and the response is explicit about that. The forum's own date-range field measures as a no-op, so the window is applied on our side over a newest-first stream. The consequence to plan for is that total_matches keeps reporting the unfiltered upstream total while returned reports how many rows survived the window, so those two numbers will not agree when you use it.

What is the DonanımHaber API?

DonanımHaber API is a ReefAPI endpoint group for forum topics, posts and sections from turkey's biggest technology forum. It returns live JSON through POST requests under /donanimhaber/v1.

Is the DonanımHaber API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. DonanımHaber calls use the same shared credit balance as every other ReefAPI engine.

Do I need a DonanımHaber login or account?

No login to DonanımHaber is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the DonanımHaber data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the DonanımHaber API use?

DonanımHaber actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call DonanımHaber from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call donanimhaber actions with the same key, credit pool and JSON envelope used by normal REST requests.

docs / donanimhaber

DonanımHaber

Forum topics, posts and sections from Turkey's biggest technology forum.

base /donanimhaber/v14 endpoints
post/donanimhaber/v1/topic1 credit

Full detail for one DonanımHaber Forum thread: title, the complete opening post as clean text, the author (public handle, profile, staff title, lifetime post count), published/last-updated timestamps, the section it lives in, view / post / like counts, and the replies on the requested page with their own authors, timestamps and like counts.

ParameterAllowed / rangeDescription
topicrequiredThe topic: numeric topic id (163852334), the full topic URL, or the '<slug>--<id>' slug. All three resolve to the same thread.
page = 1optional1–50001-based page number (1–5000).
Try in playground →
post/donanimhaber/v1/section1 credit

List the topics in one DonanımHaber Forum section, newest activity first, with pagination (65 topics per page). Each row carries the title, the site's own opening-post teaser, the thread starter, reply and view counts, and the last-post timestamp — enough to monitor a section without opening a single thread.

ParameterAllowed / rangeDescription
sectionrequiredA forum section: the numeric id (2770), 'f2770', the section URL, or the '<slug>--f2770' slug. Use the `sections` action to find ids by name, or read `section_id` off any `search` hit.
page = 1optional1–50001-based page number (1–5000).
limit = 65optional1–65How many topics to return (1–65, default 65).
queryoptionalOptional client-side keyword filter over the titles/teasers on this page.
posted_withinoptional1d · 3d · 7d · 30d · 90d · 365dKeep only posts newer than this. NOTE: the upstream search's own date-range field is a no-op (measured: identical totals for every value), so this filter is applied by us over a newest-first result stream — `total_matches` still reports the unfiltered upstream total, and `returned` reports what survived.
include_sticky = trueoptionalInclude the section's pinned/announcement topics (they are not sorted by recency).
Try in playground →
post/donanimhaber/v1/sections1 credit

The DonanımHaber Forum section directory — every public section with its numeric id, name and URL, optionally filtered by name. Use it to resolve a topic area ('SEO', 'yazılım', 'ekran kartı') to the `section` id that `search` and `section` take.

ParameterAllowed / rangeDescription
queryoptionalFilter sections whose name or slug contains this text (accent/case-insensitive). Omit for the full directory.
limit = 120optional1–800How many sections to return (1–800, default 120).
Try in playground →