Public API

Hämta populära produkter, kategorier och partners baserat på faktisk besöksdata.

Autentisering

Alla anrop till Public API kräver en giltig API-nyckel. Skicka nyckeln som en Bearer-token i Authorization-headern:

Authorization: Bearer bk_din_api_nyckel

Läs mer om hur du skapar API-nycklar →

Base URL

https://besokskollen.se/api/v1

Popular Products

GET/popular/products

Hämta de mest populära produkterna baserat på antal klick.

Query Parameters

ParameterTypBeskrivning
site_idstringSajt-ID *krävs
daysnumberAntal dagar bakåt (default: 7)
limitnumberMax antal resultat (default: 10, max: 100)
category_slugstringFiltrera på kategori
brand_slugstringFiltrera på varumärke
min_clicksnumberMinsta antal klick (default: 1)

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"
  }
}

Popular Categories

GET/popular/categories

Hämta de mest populära kategorierna baserat på antal klick.

Query Parameters

site_idstringSajt-ID *krävs
daysnumberAntal dagar bakåt (default: 30)
limitnumberMax antal resultat (default: 10)

Response

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

Popular Partners

GET/popular/partners

Hämta statistik över vilka partners som får mest trafik.

Response

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

Trending Products

GET/trending/products

Hämta produkter som ökar i popularitet just nu. Jämför senaste perioden mot en baseline för att hitta trending-produkter.

Query Parameters

ParameterTypBeskrivning
site_idstringSajt-ID *krävs
limitnumberMax antal resultat (default: 10, max: 50)
recent_hoursnumberSenaste perioden i timmar (default: 24)
baseline_daysnumberBaseline-period i dagar (default: 7)
min_growthnumberMinsta tillväxt i % (default: 0)
min_recent_clicksnumberMinsta klick i recent period (default: 2)
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

  • "Heta just nu" - Visa trending-produkter på startsidan
  • Trending-badges - Markera produkter som ökar i popularitet
  • Push-notiser - Notifiera om produkter med plötslig tillväxt

Batch Endpoint

POST/batch

Hämta flera endpoints i ett enda anrop för att minska latens.

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 } }
  ]
}

Response

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

Caching

API-svaren inkluderar cache-headers för optimal prestanda:

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 i upp till 1 timme medan ny hämtas
  • stale-if-error=86400: Vid fel kan gammal data serveras i upp till 24 timmar

Viktigt för ISR

stale-if-error=86400 säkerställer att din sajt fortsätter fungera även om Besökskollen-API:t tillfälligt är nere - gammal cache kan serveras i upp till 24 timmar.

Confidence-nivåer

API:t för populära produkter returnerar en confidence-nivå som indikerar datakvalitet. Använd detta för att avgöra om du ska visa "Populära produkter" eller en fallback.

NivåKriterierRekommendation
high≥100 events OCH ≥10 produkterVisa "Populära produkter" med förtroende
medium≥20 events ELLER ≥5 produkterVisa med varning eller blanda med fallback
low<20 events OCH <5 produkterAnvänd fallback (t.ex. senast uppdaterade)

Exempel: Fallback-logik

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:t har en rate limit på 1000 anrop per timme per API-nyckel.

  • Vid överskridning returneras 429 Too Many Requests
  • Rate limit-headers returneras i varje svar
  • Implementera exponential backoff vid 429-fel

Felkoder

KodBeskrivning
400Ogiltig förfrågan (saknar site_id, etc.)
401Saknar eller ogiltig API-nyckel
403API-nyckeln har inte access till angiven sajt
429Rate limit överskriden
500Internt serverfel

Tips för implementation

  • Använd batch-endpointen när du behöver flera typer av data
  • Respektera cache-headers för bästa prestanda
  • Implementera exponential backoff vid 429-fel
  • Cacha resultat på klientsidan när möjligt