Public API

Integrera din applikation med vår REST API för att hämta statistik, hantera sajter och automatisera arbetsflöden.

Autentisering

Alla API-anrop kräver en API-nyckel som skickas i Authorization-headern:

Authorization: Bearer bk_din_api_nyckel

Läs mer om API-nycklar →

Bas-URL

https://besokskollen.se/api/v1

Typer av API-nycklar

Det finns två typer av API-nycklar med olika behörigheter:

TypÅtkomstAnvändning
User LevelAlla sajter i kontotDashboards, admin-verktyg
Site LevelEndast en sajtISR, frontend-integration

Läs mer om API-nycklar →

Sajter

Hantera sajter i ditt konto. Kräver User Level-nyckel.

Lista sajter

GET/sites
include_statsbooleanInkludera besökarstatistik (senaste 7d)
{
  "data": [
    { "id": "site_abc123", "domain": "example.com", "verified": true, "has_data": true }
  ],
  "meta": { "total": 1 }
}

Skapa sajt

POST/sites
{ "domain": "example.com", "name": "Min sajt" }

Hämta sajt

GET/sites/:siteId

Returnerar detaljer för en specifik sajt.

Statistik

Hämta trafikstatistik för dina sajter.

Översikt

GET/stats/overview
site_idstringSajt-ID *obligatoriskt
periodstring'7d', '30d', '90d', eller 'custom'
from, tostringFör custom period (YYYY-MM-DD)
comparebooleanInkludera jämförelse med föregående period
{
  "data": {
    "period": { "from": "2026-01-01", "to": "2026-01-14" },
    "visitors": 1234,
    "pageviews": 5678,
    "sessions": 2345,
    "bounce_rate": 42,
    "daily": [{ "date": "2026-01-01", "visitors": 100, "pageviews": 300 }, ...]
  }
}

Populära sidor

GET/stats/pages

Trafikkällor

GET/stats/referrers

Returnerar referrers. Använd include_social=true för att inkludera sociala nätverk.

Länder

GET/stats/countries

Event Properties

Registrera och hantera event properties för att spåra anpassade data som product_id, category_slug, etc.

Lista properties

GET/properties?site_id=xxx

Returnerar alla registrerade properties för en sajt med antal unika värden.

{
  "data": [
    { "id": 1, "name": "product_id", "created_at": "2026-01-15T10:00:00Z", "unique_values": 156 },
    { "id": 2, "name": "category_slug", "created_at": "2026-01-15T10:00:00Z", "unique_values": 12 }
  ],
  "meta": { "total": 2 }
}

Skapa property

POST/properties

Registrera en ny event property. Properties måste registreras innan de kan inkluderas i events.

{ "site_id": "xxx", "name": "product_id" }
namestringProperty-namn (lowercase, endast bokstäver, siffror, _ och -)

Ta bort property

DELETE/properties?site_id=xxx&name=product_id

Tar bort en property och alla dess sparade värden.

Mål

Hantera mål och konverteringar.

Lista mål

GET/goals?site_id=xxx

Returnerar alla mål för en sajt med konverteringsstatistik.

Skapa mål

POST/goals
// Pageview-mål
{ "site_id": "xxx", "name": "Checkout", "event_type": "pageview", "match_path": "/checkout" }

// Event-mål
{ "site_id": "xxx", "name": "Köp", "event_type": "event", "match_event": "purchase" }

Ta bort mål

DELETE/goals?site_id=xxx&goal_id=goal_xxx

Tar bort ett mål och all konverteringsdata.

Funnels

Hantera funnels för konverteringsanalys.

Lista funnels

GET/funnels?site_id=xxx

Skapa funnel

POST/funnels
{
  "site_id": "xxx",
  "name": "Checkout-flöde",
  "steps": [
    { "name": "Startsida", "type": "pageview", "match_value": "/" },
    { "name": "Produktsida", "type": "pageview", "match_value": "/produkt", "match_type": "startswith" },
    { "name": "Checkout", "type": "pageview", "match_value": "/checkout" },
    { "name": "Köp", "type": "event", "match_value": "purchase" }
  ]
}

Hämta funnel-statistik

GET/funnels/:funnelId/stats
{
  "data": {
    "funnel": { "id": "...", "name": "Checkout-flöde" },
    "steps": [
      { "name": "Startsida", "sessions": 1000, "dropoff_rate": 0, "conversion_from_start": 100 },
      { "name": "Produktsida", "sessions": 600, "dropoff_rate": 40, "conversion_from_start": 60 },
      { "name": "Checkout", "sessions": 200, "dropoff_rate": 67, "conversion_from_start": 20 },
      { "name": "Köp", "sessions": 50, "dropoff_rate": 75, "conversion_from_start": 5 }
    ],
    "overall_conversion": 5
  }
}

Ta bort funnel

DELETE/funnels?site_id=xxx&funnel_id=funnel_xxx

Tar bort en funnel och alla dess steg.

Affiliate Analytics

Endpoints för att hämta klickdata från affiliate-sajter. Perfekt för att visa populära produkter, trendande items och kategoristatistik.

GET/popular/products

Returnerar de mest klickade produkterna för en sajt.

Query-parametrar

ParameterTypBeskrivning
site_idstringSajt-ID *obligatoriskt
daysnumberAntal dagar att inkludera (default: 30)
limitnumberMax antal produkter (default: 20)
category_slugstringFiltrera på kategori
brand_slugstringFiltrera på varumärke
min_clicksnumberMinimum antal klick

Exempel

curl -H "Authorization: Bearer bk_xxx" \
  "https://besokskollen.se/api/v1/popular/products?site_id=mobildelar-se&days=7&limit=5"
{
  "data": [
    { "product_id": "iphone-15-skal", "product_slug": "iphone-15-skal", "clicks": 47 },
    { "product_id": "samsung-s24-glas", "product_slug": "samsung-s24-glas", "clicks": 35 }
  ],
  "meta": {
    "period": { "from": "2025-01-01T00:00:00Z", "to": "2025-01-07T23:59:59Z" },
    "total_clicks": 523,
    "confidence": "high"
  }
}

Populära kategorier

GET/popular/categories

Returnerar de mest klickade kategorierna för en sajt.

Query-parametrar

site_idstringSajt-ID *obligatoriskt
daysnumberAntal dagar att inkludera (default: 30)
limitnumberMax antal (default: 10)

Svar

{
  "data": [
    { "category_slug": "mobilskal", "clicks": 234 },
    { "category_slug": "skarmskydd", "clicks": 189 }
  ],
  "meta": { ... }
}

Populära partners

GET/popular/partners

Returnerar de mest använda affiliate-partnerna med klickfördelning.

Svar

{
  "data": [
    { "partner_slug": "teknikdelar", "clicks": 156, "share": 0.42 },
    { "partner_slug": "kjell", "clicks": 98, "share": 0.26 }
  ],
  "meta": { ... }
}

Trendande produkter

GET/trending/products

Hitta produkter med ovanligt hög aktivitet jämfört med deras baseline. Perfekt för att visa "Hett just nu"-sektioner.

Query-parametrar

ParameterTypBeskrivning
site_idstringSajt-ID *obligatoriskt
limitnumberMax antal produkter (default: 10)
recent_hoursnumberTimmar att analysera (default: 24)
baseline_daysnumberDagar för baseline (default: 7)
min_growthnumberMinsta tillväxt i procent (default: 100)
min_recent_clicksnumberMinsta antal klick i perioden (default: 3)
category_slugstringFiltrera på kategori
brand_slugstringFiltrera på varumärke

Exempel

curl -H "Authorization: Bearer bk_xxx" \
  "https://besokskollen.se/api/v1/trending/products?site_id=mobildelar-se&min_growth=50"
{
  "data": [
    {
      "product_id": "airpods-pro-2",
      "product_slug": "airpods-pro-2",
      "clicks_recent": 15,
      "clicks_baseline_avg": 3.2,
      "growth_percent": 369
    },
    {
      "product_id": "iphone-16-skal",
      "product_slug": "iphone-16-skal",
      "clicks_recent": 8,
      "clicks_baseline_avg": 2.1,
      "growth_percent": 281
    }
  ],
  "meta": {
    "recent_period": { "hours": 24, "from": "...", "to": "..." },
    "baseline_period": { "days": 7, "from": "...", "to": "..." },
    "total_trending": 12
  }
}

Användningsområden

  • "Hett just nu" - Visa produkter med plötslig popularitetsökning
  • Trending badges - Visa "Trending"-märken på produkter med >200% tillväxt
  • Push-notiser - Skicka notiser om produkter som trendar

Batch-anrop

POST/batch

Kombinera flera API-anrop i en request för att minska latens och antal requests.

Request body

{
  "site_id": "mobildelar-se",
  "requests": [
    { "endpoint": "popular/products", "params": { "limit": 10, "days": 7 } },
    { "endpoint": "popular/categories", "params": { "limit": 5, "days": 30 } },
    { "endpoint": "trending/products", "params": { "min_growth": 50 } }
  ]
}

Svar

{
  "results": [
    { "endpoint": "popular/products", "data": [...], "meta": {...} },
    { "endpoint": "popular/categories", "data": [...], "meta": {...} },
    { "endpoint": "trending/products", "data": [...], "meta": {...} }
  ]
}

Caching och ISR

Alla endpoints returnerar cache-headers som fungerar bra med Next.js ISR (Incremental Static Regeneration).

Cache-Control: public, max-age=1800, stale-while-revalidate=3600, stale-if-error=86400
  • max-age=1800: Data är färsk i 30 minuter
  • stale-while-revalidate=3600: Kan servera gammal data medan ny hämtas (1 timme)
  • stale-if-error=86400: Vid fel, använd gammal data upp till 24 timmar

Viktigt för ISR

Använd revalidate: 1800 i din Next.js-konfiguration för att synka med våra cache-headers.

Konfidensgrad

Affiliate-endpoints returnerar ett confidence-fält i meta som indikerar datakvaliteten:

NivåKriteriumRekommendation
high50+ totala klickVisa som vanligt
medium10-49 klickVisa med varning eller större sample
low<10 klickÖverväg att visa fallback-innehåll

Exempel: Fallback vid låg konfidensgrad

const response = await fetch('/api/v1/popular/products?site_id=xxx');
const data = await response.json();

if (data.meta.confidence === 'low') {
  // Använd fallback: visa senast uppdaterade produkter istället
  return getFallbackProducts();
}

return data.data;

Rate Limiting

API:et har rate limiting för att säkerställa stabil prestanda för alla användare. Nuvarande gränser:

  • 100 requests per minut per API-nyckel (returnerar 429 vid överskridande)
  • Batch-endpoint räknas som 1 request oavsett antal sub-requests
  • Headers inkluderar X-RateLimit-Remaining och X-RateLimit-Reset

Felkoder

KodBeskrivning
400Ogiltig request (saknade parametrar, fel format)
401Saknar eller ogiltig API-nyckel
403API-nyckeln har inte behörighet till resursen
429Rate limit överskriden - vänta och försök igen
500Serverfel - kontakta support om det fortsätter

Tips för bästa prestanda

  • Använd batch-endpoint för att kombinera flera anrop
  • Respektera cache-headers för att undvika onödiga anrop
  • Implementera exponential backoff vid 429-fel
  • Cacha responses på klientsidan när möjligt

MCP / AI-integration

Använd MCP (Model Context Protocol) för att låta AI-assistenter som Claude interagera direkt med din analytics-data.

Vad är MCP?

MCP är ett öppet protokoll som låter AI-modeller ansluta till externa verktyg och datakällor. Med @savri/mcp kan du prata med Claude och be den hantera din analytics - skapa properties, sätta upp funnels, hämta statistik och mer.

Installation

Lägg till följande i din Claude Desktop-konfiguration (claude_desktop_config.json):

{
  "mcpServers": {
    "savri": {
      "command": "npx",
      "args": ["@savri/mcp"],
      "env": {
        "SAVRI_API_KEY": "bk_your_api_key_here"
      }
    }
  }
}

Tillgängliga verktyg

MCP-servern exponerar följande verktyg som Claude kan använda:

VerktygBeskrivning
savri_list_sitesLista alla sajter i ditt konto
savri_get_statsHämta besöksstatistik för en sajt
savri_get_pagesHämta populära sidor
savri_list_propertiesLista registrerade event properties
savri_create_propertyRegistrera en ny event property
savri_delete_propertyTa bort en event property
savri_list_goalsLista mål och konverteringar
savri_create_goalSkapa ett nytt mål
savri_delete_goalTa bort ett mål
savri_list_funnelsLista funnels
savri_create_funnelSkapa en ny funnel
savri_delete_funnelTa bort en funnel
savri_get_funnel_statsHämta funnel-statistik med konverteringsdata

Exempel på användning

Här är ett exempel på hur du kan prata med Claude för att konfigurera din analytics:

User: "Registrera en property för product_id på min sajt"

Claude: Jag registrerar property "product_id" för din sajt.
[savri_create_property: site_id=xxx, name=product_id]

✅ Property "product_id" har skapats! Nu kan du inkludera
denna property i dina affiliate_click events.

Användningsområden

  • Snabb setup - Be Claude konfigurera properties och goals för din nya sajt
  • Funnel-analys - Låt Claude skapa och analysera konverteringsfunnels
  • Dagliga rapporter - Fråga Claude om gårdagens trafik eller trender
  • Felsökning - Be Claude verifiera att din tracking fungerar korrekt