EN

API štatistík SmartBoxu

Všetko, čo Ragnetiq SmartBox zaznamená o otázkach zákazníkov a objednávkach vo vašom e-shope, ako JSON cez HTTPS.

Úvod

API vracia štatistiky SmartBoxu vo vašom e-shope: to, čo vidíte v prehľade na smartbox.ragnetiq.com, a navyše každú jednotlivú otázku zákazníka, odpoveď SmartBoxu a každú objednávku, ktorá sa SmartBoxu pripísala. 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://smartbox.ragnetiq.com/api/stats/v1. Všetky odpovede sú JSON v UTF-8, časy záznamov sú ISO 8601 v UTC. Požiadavky sú iba GET; API nič nemení.

  • Kľúč pokrýva celé obchody alebo len vybrané trhy (jazykové mutácie, napríklad slovenskú a českú doménu obchodu) – podľa toho, čo s nami dohodnete.
  • Obdobie si vyberáte parametrami from a to, najviac 366 dní naraz. Dni sa počítajú v časovom pásme Europe/Bratislava, rovnako ako v administrácii.
  • Agregované prehľady (/summary, /products) sú rovnaké čísla ako v administrácii; surové dáta (/events, /orders) obsahujú všetko, čo sa zaznamenalo.
  • Neukladáme osobné údaje zákazníkov: identifikátory návštevníka a relácie sú náhodné a e-maily či telefónne čísla v otázkach a odpovediach sú nahradené [e-mail] a [telefón].

Autentifikácia

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

Authorization: Bearer sb_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 alebo trhu, 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.
marketdoména trhu, voliteľnýObmedzí dáta na jednu alebo viac jazykových mutácií: ?market=demo-shop.cz. Domény trhov nájdete v /shops. Dá sa kombinovať so shop.
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. Tržby v rôznych menách sa nikdy nesčítavajú, sú rozdelené podľa meny.

Stránkovanie

/events a /orders 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 trhu demo-shop.cz." }
HTTPerrorKedy
400invalid_periodfrom/to nie sú dátumy, to je pred from, alebo obdobie presahuje 366 dní.
400invalid_shop, invalid_market, invalid_paramNesprávny tvar parametra shop, market, after, limit alebo kind, prípadne trh, ktorý nepatrí k vybraným obchodom.
401unauthorizedChýbajúci, neplatný alebo odvolaný kľúč.
403forbiddenKľúč nepokrýva niektorý z obchodov v shop alebo trhov v market.
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 a trhy

GET/api/stats/v1/shops

Obchody a ich trhy, ku ktorým má kľúč prístup. id obchodu používate v parametri shop, website trhu v parametri market; obe nájdete aj pri každom zázname v surových dátach (shop, market).

curl "https://smartbox.ragnetiq.com/api/stats/v1/shops" \
  -H "Authorization: Bearer sb_VAS_KLUC"
Odpoveď
{
  "shops": [
    {
      "id": "demo-shop",
      "name": "Demo Shop",
      "platform": "upgates",
      "access": "shop",
      "markets": [
        { "website": "demo-shop.sk", "language": "sk", "currency": "EUR" },
        { "website": "demo-shop.cz", "language": "cs", "currency": "CZK" }
      ]
    }
  ]
}
PoleTypVýznam
id, nametextId a názov obchodu.
platformtextPlatforma e-shopu (upgates, shoptet, eshop_rychle, custom).
accesstextshop = kľúč pokrýva celý obchod, aj trhy pridané neskôr; markets = iba trhy uvedené v markets.
marketspoleTrhy (jazykové mutácie), ktoré kľúč vidí: website (doména trhu), language, currency. Obchod s jednou doménou má jeden trh.

Súhrn

GET/api/stats/v1/summary

Čísla z prehľadu v administrácii: súčty za obdobie, to isté za rovnako dlhé predchádzajúce obdobie (na porovnanie), hodnoty po dňoch, lievik od otázky k objednávke, rozdelenie podľa trhov a najčastejšie predvolené otázky.

curl "https://smartbox.ragnetiq.com/api/stats/v1/summary?shop=demo-shop&from=2026-10-01&to=2026-10-15" \
  -H "Authorization: Bearer sb_VAS_KLUC"
Odpoveď (skrátená)
{
  "shops": ["demo-shop"],
  "markets": null,
  "from": "2026-10-01",
  "to": "2026-10-15",
  "timezone": "Europe/Bratislava",
  "totals": {
    "users": 805,
    "interactions": 1714,
    "chip_clicks": 1623,
    "custom_inputs": 91,
    "answers": 1702,
    "products": 383,
    "returning_users": 412,
    "custom_users": 74,
    "orders": 139,
    "direct_orders": 100,
    "assisted_orders": 39,
    "converted_users": 137,
    "user_conversion_rate": 0.1702,
    "direct_conversion_rate": 0.1242,
    "revenue": [
      { "currency": "EUR", "total": 5314.2, "direct": 4102.9, "orders": 112, "avg_order": 47.45 },
      { "currency": "CZK", "total": 27838, "direct": 21390, "orders": 27, "avg_order": 1031.04 }
    ]
  },
  "previous": { "from": "2026-09-16", "to": "2026-09-30", "users": 731, "…": "…" },
  "daily": [
    { "day": "2026-10-01", "users": 54, "interactions": 117, "direct_orders": 7, "assisted_orders": 2 },
    { "day": "2026-10-02", "users": 49, "interactions": 98, "direct_orders": 5, "assisted_orders": 3 }
  ],
  "funnel": { "users": 805, "answered": 798, "ordered": 136, "direct": 99 },
  "markets": [
    { "market": "demo-shop.cz", "users": 160, "interactions": 331, "custom_inputs": 17, "orders": 27, "direct_orders": 19,
      "conversion_rate": 0.1625, "currency": "CZK", "revenue": 27838, "avg_order": 1031.04 },
    { "market": "demo-shop.sk", "users": 645, "interactions": 1383, "custom_inputs": 74, "orders": 112, "direct_orders": 81,
      "conversion_rate": 0.1721, "currency": "EUR", "revenue": 5314.2, "avg_order": 47.45 }
  ],
  "top_questions": [
    { "question": "Ako sa používa?", "clicks": 412 },
    { "question": "Je vhodný pre deti?", "clicks": 198 }
  ]
}

totals a previous

PoleTypVýznam
usersčísloRôzni návštevníci, ktorí v SmartBoxe klikli na otázku alebo napísali vlastnú.
interactionsčísloVšetky otázky: chip_clicks (klik na predvolenú otázku) + custom_inputs (vlastná otázka).
answersčísloOdpovede, ktoré SmartBox vygeneroval.
productsčísloRôzne produkty, na ktoré sa zákazníci pýtali.
returning_usersčísloNávštevníci s 2 a viac otázkami.
custom_usersčísloNávštevníci, ktorí položili aspoň jednu vlastnú otázku.
ordersčísloObjednávky pripísané SmartBoxu: zákazník v tom istom prehliadači do 30 dní pred objednávkou použil SmartBox. Každá objednávka sa počíta raz.
direct_ordersčísloPriame objednávky: zákazník objednal produkt, na ktorý sa pýtal.
assisted_ordersčísloAsistované objednávky: po použití SmartBoxu objednal iný produkt.
converted_usersčísloNávštevníci SmartBoxu, ktorí objednali.
user_conversion_rate, direct_conversion_ratečíslo 0 – 1converted_users / users, resp. podiel návštevníkov s priamou objednávkou.
revenuepoleHodnota objednávok po menách: currency, total, direct (z priamych objednávok), orders, avg_order.

previous má tie isté polia a navyše from a to predchádzajúceho obdobia.

daily

Jeden záznam pre každý deň obdobia (aj s nulami): day (YYYY-MM-DD), users, interactions, direct_orders, assisted_orders.

funnel

Lievik návštevníkov: users použili SmartBox → answered dostali odpoveď → ordered z nich objednali → direct objednali produkt, na ktorý sa pýtali.

markets

To isté po trhoch (doménach): market, users, interactions, custom_inputs, orders, direct_orders, conversion_rate, currency, revenue, avg_order.

top_questions

Najviac 50 predvolených otázok s najväčším počtom klikov: question, clicks.

Produkty

GET/api/stats/v1/products

Najviac 100 produktov, na ktoré sa zákazníci v SmartBoxe pýtali, zoradených podľa počtu otázok.

curl "https://smartbox.ragnetiq.com/api/stats/v1/products?market=demo-shop.sk" \
  -H "Authorization: Bearer sb_VAS_KLUC"
Odpoveď (skrátená)
{
  "shops": null,
  "markets": ["demo-shop.sk"],
  "from": "2026-09-16",
  "to": "2026-10-15",
  "timezone": "Europe/Bratislava",
  "products": [
    { "product_id": "1042", "market": "demo-shop.sk", "name": "Bylinný čaj 100 g", "interactions": 96, "chip_clicks": 90,
      "custom_inputs": 6, "users": 51, "ordered_users": 11, "conversion_rate": 0.2157 }
  ]
}
PoleTypVýznam
product_idtextIdentifikátor produktu vo vašej platforme (id alebo kód), takže si ho viete spojiť s vlastným katalógom.
markettextTrh, na ktorom sa na produkt prvýkrát v období pýtali.
nametextNázov produktu (bez variantu).
interactions, chip_clicks, custom_inputsčísloPočet otázok k produktu, z toho predvolené a vlastné.
usersčísloRôzni návštevníci, ktorí sa na produkt pýtali.
ordered_users, conversion_ratečísloKoľkí z nich si tento produkt objednali (priama objednávka) a aký je to podiel z users.

Otázky a odpovede (surové dáta)

GET/api/stats/v1/events

Každá zaznamenaná interakcia so SmartBoxom, od najstaršej, po stranách: klik na predvolenú otázku, vlastná otázka a odpoveď SmartBoxu. Všetko, čo agregované prehľady počítajú, sa dá odvodiť odtiaľto a z /orders.

ParameterHodnotaVýznam
kindchip, custom, answerVoliteľne iba jeden druh záznamu.
afterčísloId posledného záznamu predchádzajúcej strany (next). Predvolene 0.
limit1 – 1000Veľkosť strany. Predvolene 1 000.
curl "https://smartbox.ragnetiq.com/api/stats/v1/events?from=2026-10-01&to=2026-10-15&kind=custom&limit=500" \
  -H "Authorization: Bearer sb_VAS_KLUC"
Odpoveď (skrátená)
{
  "shops": null,
  "markets": null,
  "from": "2026-10-01",
  "to": "2026-10-15",
  "timezone": "Europe/Bratislava",
  "kind": null,
  "items": [
    {
      "id": 48213,
      "shop": "demo-shop",
      "market": "demo-shop.sk",
      "occurred_at": "2026-10-14T08:21:36.412Z",
      "kind": "chip",
      "visitor_id": "6f1c2d5e-…",
      "session_id": "9a7b3e10-…",
      "product_id": "1042",
      "product_code": "CAJ-100",
      "product_name": "Bylinný čaj 100 g",
      "product_url": "https://demo-shop.sk/bylinny-caj-100-g",
      "question": "Ako sa pripravuje?",
      "answer": null,
      "language": "sk",
      "integration": "standalone_script"
    },
    {
      "id": 48214,
      "shop": "demo-shop",
      "market": "demo-shop.sk",
      "occurred_at": "2026-10-14T08:21:39.907Z",
      "kind": "answer",
      "visitor_id": "6f1c2d5e-…",
      "session_id": "9a7b3e10-…",
      "product_id": "1042",
      "product_code": "CAJ-100",
      "product_name": "Bylinný čaj 100 g",
      "product_url": "https://demo-shop.sk/bylinny-caj-100-g",
      "question": "Ako sa pripravuje?",
      "answer": "Jednu lyžičku zalejte 250 ml vody s teplotou 95 °C a nechajte lúhovať 5 až 7 minút.",
      "language": "sk",
      "integration": "standalone_script"
    }
  ],
  "next": null
}

Polia záznamu

PoleTypVýznam
idčísloStále, rastúce id záznamu; slúži na stránkovanie.
shop, markettextId obchodu a doména trhu.
occurred_atčasKedy sa to stalo (UTC).
kindtextchip klik na predvolenú otázku, custom vlastná otázka zákazníka, answer odpoveď SmartBoxu.
visitor_idtext | nullNáhodný identifikátor prehliadača (dlhodobý). Nie je to osoba.
session_idtext | nullNáhodný identifikátor návštevy.
product_id, product_code, product_name, product_urltext | nullProdukt, pri ktorom sa zákazník pýtal.
questiontext | nullOtázka; e-maily a telefónne čísla sú nahradené [e-mail] a [telefón].
answertext | nullOdpoveď SmartBoxu (pri kind=answer), tiež bez osobných údajov.
languagetext | nullJazyk odpovede (sk, cs, …).
integrationtext | nullAko je SmartBox v obchode vložený (napríklad standalone_script, upgates_addon).

Objednávky (surové dáta)

GET/api/stats/v1/orders

Objednávky pripísané SmartBoxu, od najstaršej, po stranách (after, limit ako pri /events). Každá objednávka je tu raz.

curl "https://smartbox.ragnetiq.com/api/stats/v1/orders?from=2026-10-01&to=2026-10-15" \
  -H "Authorization: Bearer sb_VAS_KLUC"
Odpoveď (skrátená)
{
  "shops": null,
  "markets": null,
  "from": "2026-10-01",
  "to": "2026-10-15",
  "timezone": "Europe/Bratislava",
  "items": [
    {
      "id": 931,
      "shop": "demo-shop",
      "market": "demo-shop.sk",
      "occurred_at": "2026-10-14T09:02:11.055Z",
      "order_id": "2026001234",
      "attribution": "direct",
      "value": 42.9,
      "currency": "EUR",
      "items": [{ "sku": "1042", "name": "Bylinný čaj 100 g", "quantity": 2 }],
      "matched_count": 1,
      "ordered_items_count": 3,
      "interactions_count": 4,
      "attribution_window_days": 30,
      "visitor_id": "6f1c2d5e-…",
      "session_id": "9a7b3e10-…",
      "integration": "standalone_script"
    }
  ],
  "next": null
}
PoleTypVýznam
idčísloStále, rastúce id záznamu; slúži na stránkovanie.
shop, markettextId obchodu a doména trhu.
occurred_atčasKedy bola objednávka zaznamenaná (UTC).
order_idtextČíslo objednávky vo vašom e-shope.
attributiontextdirect = zákazník objednal produkt, na ktorý sa pýtal; assisted = objednal po použití SmartBoxu iný produkt.
value, currencyčíslo | null, text | nullHodnota objednávky a jej mena.
itemspoleObjednané produkty, na ktoré sa zákazník pýtal: [{ sku, name, quantity }].
matched_count, ordered_items_countčíslo | nullPočet takých produktov a počet všetkých položiek objednávky.
interactions_countčíslo | nullKoľko otázok zákazník pred objednávkou položil.
attribution_window_daysčíslo | nullOkno pripísania v dňoch (štandardne 30).
visitor_id, session_idtext | nullRovnaké identifikátory ako v /events: podľa nich sa objednávka spája s otázkami.
integrationtext | nullAko je SmartBox v obchode vložený.

Príklady

Odporúčaný postup: raz denne (napríklad ráno) si stiahnite /summary za včerajšok pre denné reporty a /events + /orders 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://smartbox.ragnetiq.com/api/stats/v1";
const headers = { Authorization: `Bearer ${process.env.SMARTBOX_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.users, summary.totals.orders);

// všetky otázky a odpovede po stranách
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://smartbox.ragnetiq.com/api/stats/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['SMARTBOX_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", "market": "demo-shop.cz"})
print(summary["totals"]["users"])

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

Zmeny

DátumVerziaZmena
18. 10. 2026v1Prvé vydanie: /shops, /summary, /products, /events, /orders; kľúče na celé obchody aj jednotlivé trhy.

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.