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
Bas-URL
https://besokskollen.se/api/v1
Typer av API-nycklar
Det finns två typer av API-nycklar med olika behörigheter:
| Typ | Åtkomst | Användning |
|---|---|---|
| User Level | Alla sajter i kontot | Dashboards, admin-verktyg |
| Site Level | Endast en sajt | ISR, frontend-integration |
Sajter
Hantera sajter i ditt konto. Kräver User Level-nyckel.
Lista sajter
GET/sitesinclude_stats | boolean | Inkludera 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/:siteIdReturnerar detaljer för en specifik sajt.
Statistik
Hämta trafikstatistik för dina sajter.
Översikt
GET/stats/overviewsite_id | string | Sajt-ID *obligatoriskt |
period | string | '7d', '30d', '90d', eller 'custom' |
from, to | string | För custom period (YYYY-MM-DD) |
compare | boolean | Inkludera 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/pagesTrafikkällor
GET/stats/referrersReturnerar referrers. Använd include_social=true för att inkludera sociala nätverk.
Länder
GET/stats/countriesEvent 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=xxxReturnerar 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/propertiesRegistrera en ny event property. Properties måste registreras innan de kan inkluderas i events.
{ "site_id": "xxx", "name": "product_id" }name | string | Property-namn (lowercase, endast bokstäver, siffror, _ och -) |
Ta bort property
DELETE/properties?site_id=xxx&name=product_idTar bort en property och alla dess sparade värden.
Mål
Hantera mål och konverteringar.
Lista mål
GET/goals?site_id=xxxReturnerar 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_xxxTar bort ett mål och all konverteringsdata.
Funnels
Hantera funnels för konverteringsanalys.
Lista funnels
GET/funnels?site_id=xxxSkapa 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_xxxTar 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/productsReturnerar de mest klickade produkterna för en sajt.
Query-parametrar
| Parameter | Typ | Beskrivning |
|---|---|---|
site_id | string | Sajt-ID *obligatoriskt |
days | number | Antal dagar att inkludera (default: 30) |
limit | number | Max antal produkter (default: 20) |
category_slug | string | Filtrera på kategori |
brand_slug | string | Filtrera på varumärke |
min_clicks | number | Minimum 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/categoriesReturnerar de mest klickade kategorierna för en sajt.
Query-parametrar
site_id | string | Sajt-ID *obligatoriskt |
days | number | Antal dagar att inkludera (default: 30) |
limit | number | Max antal (default: 10) |
Svar
{
"data": [
{ "category_slug": "mobilskal", "clicks": 234 },
{ "category_slug": "skarmskydd", "clicks": 189 }
],
"meta": { ... }
}Populära partners
GET/popular/partnersReturnerar 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/productsHitta produkter med ovanligt hög aktivitet jämfört med deras baseline. Perfekt för att visa "Hett just nu"-sektioner.
Query-parametrar
| Parameter | Typ | Beskrivning |
|---|---|---|
site_id | string | Sajt-ID *obligatoriskt |
limit | number | Max antal produkter (default: 10) |
recent_hours | number | Timmar att analysera (default: 24) |
baseline_days | number | Dagar för baseline (default: 7) |
min_growth | number | Minsta tillväxt i procent (default: 100) |
min_recent_clicks | number | Minsta antal klick i perioden (default: 3) |
category_slug | string | Filtrera på kategori |
brand_slug | string | Filtrera 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/batchKombinera 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å | Kriterium | Rekommendation |
|---|---|---|
| high | 50+ totala klick | Visa som vanligt |
| medium | 10-49 klick | Visa 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
429vid överskridande) - Batch-endpoint räknas som 1 request oavsett antal sub-requests
- Headers inkluderar X-RateLimit-Remaining och X-RateLimit-Reset
Felkoder
| Kod | Beskrivning |
|---|---|
400 | Ogiltig request (saknade parametrar, fel format) |
401 | Saknar eller ogiltig API-nyckel |
403 | API-nyckeln har inte behörighet till resursen |
429 | Rate limit överskriden - vänta och försök igen |
500 | Serverfel - 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:
| Verktyg | Beskrivning |
|---|---|
savri_list_sites | Lista alla sajter i ditt konto |
savri_get_stats | Hämta besöksstatistik för en sajt |
savri_get_pages | Hämta populära sidor |
savri_list_properties | Lista registrerade event properties |
savri_create_property | Registrera en ny event property |
savri_delete_property | Ta bort en event property |
savri_list_goals | Lista mål och konverteringar |
savri_create_goal | Skapa ett nytt mål |
savri_delete_goal | Ta bort ett mål |
savri_list_funnels | Lista funnels |
savri_create_funnel | Skapa en ny funnel |
savri_delete_funnel | Ta bort en funnel |
savri_get_funnel_stats | Hä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