EN

API štatistík vyhľadávania

Všetko, čo Ragnetiq Smart Search zaznamená o vyhľadávaní vo vašom e-shope, ako JSON cez HTTPS.

Úvod

API vracia štatistiky vyhľadávania vášho e-shopu: to, čo vidíte v prehľade na search.ragnetiq.com, a navyše každú jednotlivú zaznamenanú udalosť (hľadanie, preklik, pridanie do košíka) a každú objednávku, ktorú vyhľadávanie zachytilo. Dáta sú vaše: môžete si ich stiahnuť do vlastného reportingu, dátového skladu alebo BI nástroja.

Základná adresa je https://search.ragnetiq.com/api/stats/v1. Všetky odpovede sú JSON v UTF-8, všetky časy sú ISO 8601 v UTC. Požiadavky sú iba GET; API nič nemení.

  • Jeden kľúč pokrýva všetky vaše obchody (napríklad slovenskú aj českú verziu).
  • Obdobie si vyberáte parametrami from a to, najviac 366 dní naraz.
  • Agregované prehľady (/summary, /queries, /products) sú rovnaké čísla ako v administrácii; surové dáta (/events, /purchases) obsahujú všetko, čo sa zaznamenalo.
  • Neukladáme žiadne osobné údaje zákazníkov: identifikátory návštevníka a relácie sú náhodné, číslo objednávky je uložené len ako odtlačok (hash).

Autentifikácia

Kľúč vám vystaví Ragnetiq. Má tvar ss_ a 64 hexadecimálnych znakov. Posielajte ho v hlavičke Authorization pri každej požiadavke:

Authorization: Bearer ss_9f2c1a7e…

Kľúč je tajný ako heslo. Používajte ho len zo servera (cron, backend, ETL), nikdy nie v prehliadači ani v mobilnej aplikácii. Ak unikne, napíšte nám: starý kľúč odvoláme a vystavíme nový; odvolaný kľúč prestane fungovať okamžite.

Neplatný, chýbajúci alebo odvolaný kľúč dostane odpoveď 401 unauthorized. Kľúč, ktorý nemá prístup k požadovanému obchodu, dostane 403 forbidden.

Pravidlá spoločné pre všetky API Ragnetiq (kľúče, stránkovanie, limity, chyby, verzie) sú aj na jednej stránke: Základy API.

Spoločné parametre a pravidlá

Parametre v adrese

ParameterHodnotaVýznam
shopid obchodu, voliteľnýObmedzí dáta na jeden alebo viac obchodov: ?shop=a, ?shop=a&shop=b alebo ?shop=a,b. Bez parametra dostanete všetky obchody kľúča spolu. Id nájdete v /shops.
fromYYYY-MM-DD, voliteľnýPrvý deň obdobia (vrátane). Predvolene 29 dní pred to.
toYYYY-MM-DD, voliteľnýPosledný deň obdobia (vrátane). Predvolene dnes. Obdobie môže mať najviac 366 dní.
after, limitcelé číslaStránkovanie surových dát, pozri nižšie.

Deň začína a končí o polnoci v Bratislave (Europe/Bratislava), rovnako ako v administrácii; každá odpoveď to uvádza v poli timezone. Keď sčítate dáta jednotlivých obchodov, dostanete to isté, čo vráti požiadavka bez shop, okrem tržieb v rôznych menách, ktoré sa nesčítavajú.

Stránkovanie

/events a /purchases vracajú najviac 1 000 záznamov naraz, zoradených od najstaršieho. Odpoveď obsahuje next: id posledného záznamu strany, alebo null, keď už ďalšia strana nie je. Ďalšiu stranu si vyžiadate parametrom after=<next>. Veľkosť strany určuje limit (1 – 1 000, predvolene 1 000).

Id záznamov sú stále a rastú s časom, takže after môžete použiť aj na prírastkové sťahovanie: zapamätajte si posledné id a nabudúce začnite od neho.

Limity

  • Najviac 120 požiadaviek za minútu na jeden kľúč; pri prekročení dostanete 429 rate_limited.
  • Obdobie najviac 366 dní; dlhšiu históriu stiahnete po častiach.
  • Dáta sú dostupné do niekoľkých sekúnd po tom, čo sa udalosť stala, takže čísla za dnešný deň sa priebežne menia. Pre uzavreté čísla sťahujte včerajší deň a staršie.

Chyby

Chybová odpoveď má vždy rovnaký tvar: HTTP stavový kód, pole error so strojovým kódom a message s vysvetlením.

HTTP/1.1 403 Forbidden
Content-Type: application/json; charset=utf-8

{ "error": "forbidden", "message": "Kľúč nemá prístup k niektorému z požadovaných obchodov." }
HTTPerrorKedy
400invalid_periodfrom/to nie sú dátumy, to je pred from, alebo obdobie presahuje 366 dní.
400invalid_shop, invalid_paramNesprávny tvar parametra shop, after, limit alebo type.
401unauthorizedChýbajúci, neplatný alebo odvolaný kľúč.
403forbiddenKľúč nepokrýva niektorý z obchodov v shop.
429rate_limitedViac ako 120 požiadaviek za minútu. Počkajte a skúste znova.
502, 503upstream, unavailableDočasný výpadok na našej strane. Zopakujte požiadavku neskôr.

Obchody

GET/api/stats/v1/shops

Obchody, ku ktorým má kľúč prístup. Ich id používate v parametri shop a nájdete ho pri každom zázname v surových dátach.

curl "https://search.ragnetiq.com/api/stats/v1/shops" \
  -H "Authorization: Bearer ss_VAS_KLUC"
Odpoveď
{
  "shops": [
    { "id": "demo-shop", "name": "Demo Shop", "domains": ["www.demo-shop.example", "demo-shop.example"] }
  ]
}

Súhrn

GET/api/stats/v1/summary

Čísla z prvej obrazovky prehľadu: súčty za obdobie, to isté za rovnako dlhé predchádzajúce obdobie (pre porovnanie), hodnoty po dňoch, cesta od hľadania k objednávke a rozdelenie podľa zariadení.

curl "https://search.ragnetiq.com/api/stats/v1/summary?shop=demo-shop&from=2026-10-01&to=2026-10-15" \
  -H "Authorization: Bearer ss_VAS_KLUC"
Odpoveď (skrátená)
{
  "shops": ["demo-shop"],
  "from": "2026-10-01",
  "to": "2026-10-15",
  "timezone": "Europe/Bratislava",
  "totals": {
    "searches": 10638,
    "searchers": 6489,
    "zero": 457,
    "not_confident": 638,
    "serp": 5851,
    "with_click": 4681,
    "clicks": 7215,
    "carts": 655,
    "latency_p50": 412,
    "orders": 465,
    "orders_search": 186,
    "revenue_search": 34782.4,
    "currency": "EUR",
    "revenue_by_currency": [{ "currency": "EUR", "value": 34782.4 }]
  },
  "previous": { "searches": 9574, "…": "…" },
  "daily": [
    { "day": "2026-10-01", "searches": 712, "clicks": 486, "carts": 41 },
    { "day": "2026-10-02", "searches": 698, "clicks": 471, "carts": 44 }
  ],
  "flow": {
    "zero":     { "total": 457,  "ordered": 4 },
    "no_click": { "total": 5500, "ordered": 15 },
    "click":    { "total": 4026, "ordered": 65 },
    "cart":     { "total": 655,  "ordered": 102 }
  },
  "devices": { "desktop": 4468, "mobile": 6170 },
  "recommendations": {
    "current": {
      "views": 18420, "clicks": 1104, "carts": 196, "orders": 61, "revenue": 11240, "currency": "EUR",
      "blocks": [
        { "block": "picks", "views": 9120, "clicks": 471, "carts": 72, "orders": 24, "revenue": 4310 },
        { "block": "similar", "views": 5410, "clicks": 402, "carts": 68, "orders": 21, "revenue": 3980 }
      ]
    },
    "previous": { "views": 16900, "clicks": 980, "carts": 171, "orders": 52, "revenue": 9870, "currency": "EUR", "blocks": [] }
  }
}

totals a previous

PoleTypVýznam
searchesčísloPočet hľadaní. Jedno hľadanie = jeden zámer: našepkávač a následný Enter s rovnakými slovami sa počítajú raz.
searchersčísloPočet rôznych návštevníkov, ktorí hľadali.
zeročísloHľadania bez jediného výsledku.
not_confidentčísloHľadania, pri ktorých vyhľadávanie nenašlo presnú zhodu a ukázalo najpodobnejšie produkty.
serpčísloHľadania, ktoré sa dostali až na stránku výsledkov (nielen do našepkávača).
with_clickčísloHľadania, po ktorých zákazník otvoril aspoň jeden produkt.
clicksčísloVšetky prekliky na produkty z výsledkov a z našepkávača.
cartsčísloPridania do košíka priamo zo zoznamu výsledkov alebo z našepkávača.
latency_p50číslo | nullMedián odpovede vyhľadávania v milisekundách (čas na serveri).
ordersčísloVšetky objednávky, ktoré vyhľadávanie zachytilo na stránke s poďakovaním (aj bez hľadania).
orders_searchčísloObjednávky z návštev, v ktorých zákazník počas 24 hodín pred objednávkou hľadal.
revenue_searchčísloHodnota objednávok z orders_search, s DPH, v mene obchodu.
currencytext | nullMena tržieb. null, keď obchody v požiadavke používajú rôzne meny; vtedy čítajte revenue_by_currency.
revenue_by_currencypoleTržby po menách: [{ currency, value }].

daily

Jeden záznam pre každý deň obdobia (aj s nulami): day (YYYY-MM-DD), searches, clicks, carts.

flow

Každé hľadanie obdobia patrí do jednej vetvy podľa toho, čo zákazník so zoznamom výsledkov urobil: zero (nič sa nenašlo), no_click (výsledky boli, neklikol), click (otvoril produkt), cart (pridal do košíka priamo zo zoznamu). Pri každej vetve je total (počet hľadaní) a ordered (koľko objednávok z tej istej návštevy sa k týmto hľadaniam pripísalo). Súčet ordered je orders_search.

devices

Počet hľadaní podľa zariadenia: desktop, mobile, prípadne unknown (obchody, kde sa zariadenie nezaznamenáva).

recommendations

Bloky odporúčaní v obchode (ak ich obchod používa; inak null). current je za zvolené obdobie, previous za rovnako dlhé predchádzajúce obdobie.

PoleTypVýznam
viewsčísloKoľkokrát sa blok odporúčaní zobrazil (raz na zobrazenie stránky a blok).
clicksčísloOtvorenia produktu z bloku odporúčaní.
cartsčísloPridania do košíka priamo z bloku odporúčaní.
ordersčísloObjednávky z návštev, v ktorých zákazník počas 24 hodín pred objednávkou klikol na odporúčanie.
revenue, currencyčíslo, text | nullHodnota týchto objednávok s DPH a ich mena.
blockspoleTo isté po blokoch: block (picks hlavná stránka, similar podobné na detaile, cart košík, recent naposledy prezerané), views, clicks, carts, orders, revenue (objednávka sa pripíše bloku posledného kliku pred ňou).

Hľadané výrazy

GET/api/stats/v1/queries

Tri zoznamy, každý najviac 100 výrazov. Výrazy sú normalizované (malé písmená, bez diakritiky, jedna medzera), aby sa „Vŕtačka“ a „vrtacka“ počítali spolu.

curl "https://search.ragnetiq.com/api/stats/v1/queries?from=2026-10-01&to=2026-10-15" \
  -H "Authorization: Bearer ss_VAS_KLUC"
Odpoveď (skrátená)
{
  "shops": null,
  "from": "2026-10-01",
  "to": "2026-10-15",
  "timezone": "Europe/Bratislava",
  "top": [
    { "query": "vrtacka", "searches": 1912, "zero": 0, "with_click": 1190, "carts": 64 }
  ],
  "zero_results": [
    { "query": "vrtackaa", "searches": 64 }
  ],
  "no_click": [
    { "query": "nahradny diel 1234", "searches": 38 }
  ]
}
ZoznamPoliaVýznam
topquery, searches, zero, with_click, cartsNajhľadanejšie výrazy: počet hľadaní, koľko z nich bolo bez výsledku, koľko skončilo preklikom a koľko pridaní do košíka zo zoznamu.
zero_resultsquery, searchesVýrazy, pri ktorých sa nenašlo nič: kandidáti na synonymá alebo doplnenie sortimentu.
no_clickquery, searchesVýrazy, pri ktorých sa produkty zobrazili, ale nikto na žiadny neklikol. searches počíta len hľadania s výsledkami.

Produkty

GET/api/stats/v1/products

Najviac 100 produktov, na ktoré zákazníci z vyhľadávania klikli alebo ich pridali do košíka, zoradených podľa preklikov.

curl "https://search.ragnetiq.com/api/stats/v1/products?shop=demo-shop" \
  -H "Authorization: Bearer ss_VAS_KLUC"
Odpoveď (skrátená)
{
  "shops": ["demo-shop"],
  "from": "2026-09-16",
  "to": "2026-10-15",
  "timezone": "Europe/Bratislava",
  "products": [
    { "id": "demo-shop:a1b2c3d4-…", "shop": "demo-shop", "product_id": "a1b2c3d4-…", "name": "Aku vŕtačka 18 V", "clicks": 412, "carts": 61 }
  ]
}

product_id je identifikátor produktu vo vašej platforme (napríklad GUID alebo kód produktu), takže si ho viete spojiť s vlastným katalógom. name je názov v čase posledného prekliku.

Udalosti (surové dáta)

GET/api/stats/v1/events

Každá zaznamenaná udalosť vyhľadávania, od najstaršej, po stránkach. Toto je úplný záznam: všetko, čo agregované prehľady počítajú, sa dá odvodiť odtiaľto.

ParameterHodnotaVýznam
typesearch, click, cart, article, error, reco_view, reco_click, reco_cartVoliteľne iba jeden typ udalosti.
afterčísloId posledného záznamu predchádzajúcej strany (next). Predvolene 0.
limit1 – 1000Veľkosť strany. Predvolene 1 000.
curl "https://search.ragnetiq.com/api/stats/v1/events?from=2026-10-01&to=2026-10-15&type=search&limit=500" \
  -H "Authorization: Bearer ss_VAS_KLUC"
Odpoveď (skrátená)
{
  "shops": null,
  "from": "2026-10-01",
  "to": "2026-10-15",
  "timezone": "Europe/Bratislava",
  "type": null,
  "items": [
    {
      "id": 48213,
      "shop": "demo-shop",
      "occurred_at": "2026-10-14T08:21:36.412Z",
      "type": "search",
      "surface": "autocomplete",
      "visitor_id": "6f1c2d5e-…",
      "session_id": "9a7b3e10-…",
      "search_id": "c2a4f8d1-…",
      "query": "aku vŕtačka",
      "query_norm": "aku vrtacka",
      "result_count": 42,
      "confident": true,
      "corrected": null,
      "filters": null,
      "product_id": null,
      "product_name": null,
      "position": null,
      "server_ms": 184,
      "client_ms": 412,
      "device": "desktop",
      "extra": null
    },
    {
      "id": 48214,
      "shop": "demo-shop",
      "occurred_at": "2026-10-14T08:21:41.907Z",
      "type": "click",
      "surface": "autocomplete",
      "visitor_id": "6f1c2d5e-…",
      "session_id": "9a7b3e10-…",
      "search_id": "c2a4f8d1-…",
      "query": "aku vŕtačka",
      "query_norm": "aku vrtacka",
      "result_count": null,
      "confident": null,
      "corrected": null,
      "filters": null,
      "product_id": "a1b2c3d4-…",
      "product_name": "Aku vŕtačka 18 V",
      "position": 1,
      "server_ms": null,
      "client_ms": null,
      "device": "desktop",
      "extra": null
    }
  ],
  "next": null
}

Polia udalosti

PoleTypVýznam
idčísloStále, rastúce id záznamu; slúži na stránkovanie.
shoptextId obchodu.
occurred_atčasKedy sa udalosť stala (UTC).
typetextsearch hľadanie, click otvorenie produktu zo zoznamu, cart pridanie do košíka zo zoznamu, article otvorenie článku z výsledkov, error chyba vyhľadávania (len niektoré platformy), reco_view zobrazenie bloku odporúčaní, reco_click otvorenie produktu z odporúčaní, reco_cart pridanie do košíka z odporúčaní.
surfacetextautocomplete našepkávač, results stránka výsledkov, reco blok odporúčaní.
visitor_iduuidNáhodný identifikátor prehliadača (dlhodobý). Nie je to osoba.
session_iduuidNáhodný identifikátor návštevy (karta prehliadača, prípadne 30 minút nečinnosti).
search_iduuid | nullSpája udalosti jedného hľadania: hľadanie, jeho prekliky a košíky majú rovnaké search_id.
querytext | nullHľadaný výraz, ako ho zákazník napísal (do 200 znakov).
query_normtext | nullNormalizovaný výraz (malé písmená, bez diakritiky).
result_countčíslo | nullPočet nájdených produktov (pri search).
confidentboolean | nullfalse = presná zhoda sa nenašla, zobrazili sa najpodobnejšie produkty.
correctedtext | nullOprava preklepu, ktorú vyhľadávanie použilo.
filtersobjekt | nullFiltre aktívne pri hľadaní (značka, kategória, cena, skladom…).
product_id, product_nametext | nullProdukt pri click a cart.
positiončíslo | nullPoradie produktu v zozname (od 1), pri click a cart.
server_ms, client_msčíslo | nullTrvanie hľadania na serveri a v prehliadači, v milisekundách.
devicetext | nulldesktop, mobile, alebo null, keď sa nezaznamenáva.
extraobjekt | nullDoplnkové polia špecifické pre platformu obchodu (napríklad trh, režim vyhľadávania, množstvo pri pridaní do košíka, adresa článku, pri odporúčaniach blok, algoritmus a produkt, pre ktorý bolo odporúčanie vytvorené). Štruktúra sa môže líšiť podľa obchodu.

Objednávky (surové dáta)

GET/api/stats/v1/purchases

Objednávky, ktoré vyhľadávanie zachytilo na stránke s poďakovaním, od najstaršej, po stránkach (after, limit ako pri udalostiach). Každá objednávka je tu raz.

curl "https://search.ragnetiq.com/api/stats/v1/purchases?from=2026-10-01&to=2026-10-15" \
  -H "Authorization: Bearer ss_VAS_KLUC"
Odpoveď (skrátená)
{
  "shops": null,
  "from": "2026-10-01",
  "to": "2026-10-15",
  "timezone": "Europe/Bratislava",
  "items": [
    {
      "id": 931,
      "shop": "demo-shop",
      "occurred_at": "2026-10-14T09:02:11.055Z",
      "order_hash": "7d2dd5fa939d8b5a…",
      "visitor_id": "6f1c2d5e-…",
      "session_id": "9a7b3e10-…",
      "value": 606.32,
      "currency": "EUR",
      "items": [{ "id": "a1b2c3d4-…", "quantity": 1, "price": 606.32 }],
      "extra": null,
      "after_search": true
    }
  ],
  "next": null
}
PoleTypVýznam
idčísloStále, rastúce id záznamu; slúži na stránkovanie.
shoptextId obchodu.
occurred_atčasKedy bola objednávka zachytená (UTC).
order_hashtextOdtlačok čísla objednávky (SHA-256). Samotné číslo neukladáme; na spárovanie s vaším systémom použite items a čas.
visitor_id, session_iduuidRovnaké identifikátory ako pri udalostiach: podľa nich sa objednávka spája s hľadaním.
valuečíslo | nullHodnota objednávky s DPH.
currencytext | nullMena objednávky.
itemspolePoložky objednávky: [{ id, quantity, price }], kde id je identifikátor produktu ako v udalostiach. Niektoré platformy posielajú len produkt, ktorý prišiel z vyhľadávania.
after_searchbooleantrue, keď v tej istej návšteve zákazník počas 24 hodín pred objednávkou hľadal. Práve tieto objednávky tvoria orders_search v súhrne.
extraobjekt | nullDoplnkové polia špecifické pre platformu.

Príklady

Odporúčaný postup: raz denne (napríklad ráno) si stiahnite /summary za včerajšok pre denné reporty a /events + /purchases prírastkovo od posledného id, ktoré ste spracovali. Kľúč držte v premennej prostredia, nie v kóde.

Node.js 18+ (fetch)
const BASE = "https://search.ragnetiq.com/api/stats/v1";
const headers = { Authorization: `Bearer ${process.env.SMARTSEARCH_API_KEY}` };

async function get(path, params = {}) {
  const url = new URL(BASE + path);
  for (const [k, v] of Object.entries(params)) if (v != null) url.searchParams.set(k, String(v));
  const res = await fetch(url, { headers });
  if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
  return res.json();
}

// súhrn za september
const summary = await get("/summary", { from: "2026-09-01", to: "2026-09-30" });
console.log(summary.totals.searches, summary.totals.orders_search);

// všetky udalosti po stránkach
let after = 0;
do {
  const page = await get("/events", { from: "2026-09-01", to: "2026-09-30", after, limit: 1000 });
  for (const e of page.items) store(e); // vaša logika
  after = page.next;
} while (after);
Python (requests)
import os, requests

BASE = "https://search.ragnetiq.com/api/stats/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['SMARTSEARCH_API_KEY']}"}

def get(path, **params):
    r = requests.get(BASE + path, headers=HEADERS, params=params, timeout=30)
    r.raise_for_status()
    return r.json()

summary = get("/summary", **{"from": "2026-09-01", "to": "2026-09-30"})
print(summary["totals"]["searches"])

after = 0
while after is not None:
    page = get("/events", **{"from": "2026-09-01", "to": "2026-09-30", "after": after, "limit": 1000})
    for event in page["items"]:
        ...  # vaša logika
    after = page["next"]

Zmeny

DátumVerziaZmena
18. 10. 2026v1Dni sa počítajú v časovom pásme Europe/Bratislava (predtým UTC), rovnako ako v administrácii; odpovede majú pole timezone. Bez from sa obdobie začína 29 dní pred to.
16. 10. 2026v1/summary má recommendations (bloky odporúčaní); /events pozná typy reco_view, reco_click, reco_cart.
16. 10. 2026v1Prvé vydanie: /shops, /summary, /queries, /products, /events, /purchases.

Verzia je v adrese (/v1). Nové polia môžeme pridávať kedykoľvek; existujúce polia a ich význam v rámci verzie nemeníme. O prípadnej novej verzii vás vopred informujeme.