Kaqir API

Base URL https://api.kaqir.com · read-only · JSON · rate limit 10 requests/second per IP. No key is needed for verification. Screening endpoints are open during the pilot; contact admin@nodiumtech.com for a key and terms.

1. Verify a record (Kaqir Verify)

Every certificate carries a blob_sha256 — the SHA-256 of the exact list snapshot a result came from. Anyone can check it was recorded on the stated day and anchored to Bitcoin, without trusting this server.

GET /api/dogrula?sha=<blob_sha256>
GET /api/dogrula?gun=YYYY-MM-DD          # a whole day's anchor
GET /kanit/YYYY-MM-DD.jsonl              # the day's ledger slice (append-only lines)
GET /kanit/YYYY-MM-DD.jsonl.ots          # OpenTimestamps proof → Bitcoin block
GET /kanit/YYYY-MM-DD.jsonl.tsr          # RFC 3161 timestamp (freetsa.org)
GET /kanit/kokler.txt                    # day → record count → root sha256

Human page: /dogrula. The response lists the steps to repeat locally (sha256sum, ots info, a public block explorer).

2. Screen names (Kaqir Screen)

GET  /api/tarama?isimler=Rosneft,Huawei[&tarih=2026-09-01]
POST /api/tarama        Content-Type: application/json
     {"isimler": ["Rosneft", "Acme Widgets LLC"], "tarih": "2026-09-01"}   # ≤ 5000 names, 2 MB
GET  /api/tarama-durum   # index status (lists, names, versions)

Response (abridged):

{
  "sorgu_tarihi": "2026-09-01",        // "en son" when no date was given
  "kaynak_sayisi": 84,
  "kesin_eslesme": 1, "olasi_inceleme": 1, "temiz": 0,
  "indeks_disi": [],                    // sources whose version for that date is still being indexed
  "tekrar_dene_sn": null,               // retry hint when indeks_disi is non-empty
  "vurusler": [{
    "isim": "Rosneft", "listede": true, "incelenecek": true,
    "kesin": [{"yargi": "ABD — Consolidated Screening List", "ad": "Rosneft",
               "blob_sha256": "7cf431f6…", "snapshot": "2026-09-18T22:20:41Z", "lisans": "birincil"}],
    "olasi": [{"yargi": "UK — OFSI", "ad": "Rosneft Trading S.A.", "yontem": "alt-küme",
               "blob_sha256": "4d3103bf…", "snapshot": "…", "lisans": "birincil"}]
  }],
  "kanit_zinciri": "…/api/dogrula?sha=<blob_sha256>"
}
FieldMeaning
kesinExact normalised-name match. Treat as listed.
olasiPartial (alt-küme: all query tokens appear in the name) or phonetic (fonetik(0.87): Soundex + similarity ≥ 0.82). Needs a human decision. False negatives are possible for heavily transliterated variants.
lisansbirincil: primary government source (US CSL, EU FSF, UN, UK OFSI, Canada, Switzerland, Japan, Australia) — usable commercially. research: sourced via OpenSanctions (CC BY-NC 4.0) — a signal only, until a reseller licence is in place.
tarih / as-ofScreens against the list versions that were current on that day. First historical query for a day may return some sources as indeks_disi; retry after tekrar_dene_sn.

3. MCP (for AI agents)

The same capabilities are exposed as MCP tools over stdio: kure_tarama, kure_dogrula, plus the archive tools kure_beslemeler, kure_simdi, kure_gecmis, kure_degisim, kure_kanit, kure_ara. Ask for the endpoint.

4. What is archived

380 public feeds every 15 minutes (or at the source's own cadence): sanctions, PEP and debarment lists, company registries (UK Companies House PSC, US states), security advisories, status pages, ships, aircraft, earthquakes, news, provider pricing and terms pages. Raw bodies are content-addressed; each day's ledger is anchored to Bitcoin at 00:30 UTC. Raw data is not redistributed; certificates and derived answers are.

Kaqir runs on küre (Turkish for “globe”), our archive engine.