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/productsHämta de mest populära produkterna baserat på antal klick.
Query Parameters
| Parameter | Typ | Beskrivning |
|---|---|---|
site_id | string | Sajt-ID *krävs |
days | number | Antal dagar bakåt (default: 7) |
limit | number | Max antal resultat (default: 10, max: 100) |
category_slug | string | Filtrera på kategori |
brand_slug | string | Filtrera på varumärke |
min_clicks | number | Minsta 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/categoriesHämta de mest populära kategorierna baserat på antal klick.
Query Parameters
site_id | string | Sajt-ID *krävs |
days | number | Antal dagar bakåt (default: 30) |
limit | number | Max antal resultat (default: 10) |
Response
{
"data": [
{ "category_slug": "mobilskal", "clicks": 234 },
{ "category_slug": "skarmskydd", "clicks": 189 }
],
"meta": { ... }
}Popular Partners
GET/popular/partnersHä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/productsHämta produkter som ökar i popularitet just nu. Jämför senaste perioden mot en baseline för att hitta trending-produkter.
Query Parameters
| Parameter | Typ | Beskrivning |
|---|---|---|
site_id | string | Sajt-ID *krävs |
limit | number | Max antal resultat (default: 10, max: 50) |
recent_hours | number | Senaste perioden i timmar (default: 24) |
baseline_days | number | Baseline-period i dagar (default: 7) |
min_growth | number | Minsta tillväxt i % (default: 0) |
min_recent_clicks | number | Minsta klick i recent period (default: 2) |
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
- "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/batchHä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å | Kriterier | Rekommendation |
|---|---|---|
| high | ≥100 events OCH ≥10 produkter | Visa "Populära produkter" med förtroende |
| medium | ≥20 events ELLER ≥5 produkter | Visa med varning eller blanda med fallback |
| low | <20 events OCH <5 produkter | Anvä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
| Kod | Beskrivning |
|---|---|
400 | Ogiltig förfrågan (saknar site_id, etc.) |
401 | Saknar eller ogiltig API-nyckel |
403 | API-nyckeln har inte access till angiven sajt |
429 | Rate limit överskriden |
500 | Internt 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