Bli med i Kassalapp-fellesskapet på Discord

Kassalapp API

Spørsmål og svar

Svar på det folk oftest spør om før de tar i bruk API-et: hva som er lov på Hobby, hva Bedrift koster, hvilke butikker som dekkes og hvordan dataene oppdateres. Hvert spørsmål har sin egen lenke du kan dele.

Kom i gang

Hvordan får jeg tilgang til API-et?

  1. Opprett en brukerkonto på Kassalapp.
  2. Gå til API-siden under profilen din og opprett en API-nøkkel.
  3. Send nøkkelen som Bearer-token i Authorization-headeren på alle kall.

Hobby-tilgang er gratis og aktiveres med en gang. Du trenger ikke avtale eller godkjenning for å komme i gang.

curl https://kassal.app/api/v1/products?search=melk \
  -H "Authorization: Bearer DIN_API_NØKKEL"

Hobby eller Bedrift

Hva er forskjellen på Hobby og Bedrift?

Begge nivåene har tilgang til alle endepunkter og de samme produktene og prisene. Forskjellen er hva du har lov til å bruke dataene til, hvor mye du kan hente, og om du får support.

Hobby Bedrift
Pris Gratis 750 kr/mnd eller 9 000 kr/år eks. mva
Kommersiell bruk Nei Ja
Rate limit 60 kall per minutt Ingen
Prishistorikk i prices-bulk Inntil 90 dager Inntil 365 dager
Support Ingen E-post

Hva regnes som kommersiell bruk?

Enkelt forklart: tjener du penger på det, er det kommersielt. Det inkluderer betalte apper og abonnementer, annonsefinansierte tjenester, betalt rådgivning eller analyse, og bruk internt i en bedrift. Da trenger du Bedrift.

En gratis app eller nettside uten inntekter, et hobbyprosjekt, et privat verktøy eller et studentprosjekt kan bruke Hobby, også når det er offentlig tilgjengelig. Begynner prosjektet å tjene penger, bytter du til Bedrift.

Jeg er student eller forsker. Hva gjelder for meg?

Bruk Hobby, det er gratis og dekker bachelor- og masteroppgaver, forskningsprosjekter og hackathons. Trenger du et større historisk datauttrekk enn API-et gir, se datauttrekk. Kassalapp er brukt som datakilde i publisert forskning, og vi setter pris på å bli nevnt i referanselisten.

Pris og betaling

Hva koster Bedrift?

750 kr per måned eller 9 000 kr per år. Prisene er eksklusive merverdiavgift. Med 25 % mva blir månedsprisen 937,50 kr. Mva beregnes automatisk i kassen.

Hvordan betaler jeg?

Gå til kassal.app/subscribe. Der ser du prisene og hva som er inkludert, oppretter konto eller logger inn, godtar avtalen, velger månedlig eller årlig og betaler med kort via Stripe. Abonnementet fornyes automatisk. Betalingen starter først når avtalen er godtatt.

Kan bedriften din ikke betale med kort? Årlig abonnement kan faktureres via EHF på forespørsel. Send organisasjonsnummer og fakturareferanse til epost@kassal.app.

Hvilke vilkår gjelder for Bedrift?

Vilkårene vises i sin helhet når du bestiller, og du får en signert avtale som PDF etter kjøpet. Avtalepart er Liseth Solutions, som eier og drifter Kassalapp. Kort oppsummert: pris som over, fri e-postsupport, ingen rate limit, 30 dagers oppsigelsestid, og konfidensialitet rundt avtalen.

Kan dere bygge noe spesielt for oss?

Ja, skreddersøm, integrasjonshjelp og support utover e-post faktureres med 1 300 kr per time eks. mva, med estimat på forhånd. Fysisk oppmøte er bare tilgjengelig i Bergen.

Bruksvilkår

Kan jeg bruke produktbildene fra API-et?

API-et returnerer bilde-URL-er som peker til kildene vi henter data fra, typisk kjedenes egne nettbutikker. Kassalapp eier ikke rettighetene til bildene og kan ikke gi deg bruksrett til dem. Du er selv ansvarlig for at bruken din er i orden, og bruker dem på egen risiko.

Du kan lenke direkte til bilde-URL-ene, men vær forberedt på at de endres eller forsvinner når kjedene oppdaterer sortimentet.

Data og dekning

Hvilke butikker og kjeder dekkes?

Prisene hentes daglig fra disse kjedene:

  • Meny, Spar og Joker
  • Oda
  • Bunnpris
  • Europris
  • Engrosnett
  • Havaristen og Holdbart
  • Fudi, Leske og FastCandy

I tillegg dekkes bøker fra Norli, Ark og Adlibris. Rema 1000, Kiwi og Coop-kjedene er ikke med, se eget spørsmål.

Har dere priser fra Rema 1000, Kiwi og Coop?

Nei. Disse kjedene har ingen nettbutikk med åpne priser, og vi har ikke funnet en lovlig måte å hente prisene deres på. Vi jobber med en løsning, men kan ikke love når eller om den kommer.

Du vil likevel finne eldre produkter fra Rema 1000, Kiwi og Coop i API-et. Produkter slettes aldri, så disse viser den siste prisen vi registrerte, ofte fra 2024. Sjekk alltid når prisen sist ble kontrollert før du stoler på den.

Hvor ofte oppdateres prisene?

Én gang i døgnet. Innhentingen starter rundt klokken 09:00 norsk tid og tar et par timer. Prishistorikken har derfor dagsoppløsning. Du kan også trigge en oppdatering av ett produkt manuelt fra produktsiden på kassal.app.

Hvordan ser jeg om en pris er fersk?

Hver gang vi kontrollerer en pris, lagres den som en ny rad i prishistorikken, også når prisen ikke har endret seg. Datoen på den nyeste prisen er derfor tidspunktet for siste kontroll:

  • GET /api/v1/products/ean/{ean}: current_price.date for hver butikk.
  • GET /api/v1/products og /products/id/{id}: datoen på første element i price_history.
  • POST /api/v1/products/prices-bulk: feltet last_checked per butikk.

Bruk ikke updated_at til dette. Det endres også når navn, bilde eller andre felt oppdateres. På kassal.app regnes en pris som utdatert når den ikke er kontrollert på 14 dager.

Hvor kommer dataene fra, og stemmer prisene med butikkhylla?

Prisene hentes fra kjedenes nettbutikker og andre åpne datakilder. Produkter med samme strekkode (EAN) slås sammen på tvers av butikker, slik at du kan sammenligne. Stikkprøver viser at nettbutikkprisen vanligvis stemmer med hyllepris, men vi kan ikke garantere at den gjør det i hver enkelt butikk. Priser føres ikke manuelt.

Inneholder API-et tilbud, kampanjer eller medlemspriser?

Nei. Det finnes ingen kampanjepriser fra kundeaviser og ingen medlemspriser fra Trumf, Æ eller Coop Medlem. «Tilbudene» på kassal.app er produkter som nylig har gått ned i pris, utledet fra prishistorikken. Trenger du kundeavis-data, finnes det egne leverandører for det.

Hvor lang prishistorikk får jeg?

  • Produktendepunktene returnerer de siste 25 prisregistreringene i price_history.
  • POST /api/v1/products/prices-bulk tar en days-parameter. Standard er 30 dager, maks 90 dager på Hobby og 365 dager på Bedrift.

Historikken går tilbake til da produktet først ble registrert. For et produkt som er nytt i databasen finnes det naturlig nok lite historikk.

Inneholder API-et produktkategorier?

Ja. Hvert produkt har et category-felt med hele kategoristien fra toppnivå og ned, og /api/v1/categories lister alle kategoriene. Noen produkter mangler fortsatt kategori, da er feltet null.

Jeg fant feil i et produkt. Hva gjør jeg?

Send en e-post til epost@kassal.app med URL til produktet på kassal.app og hva som er galt. Feil i navn, vekt, bilde eller kategori kan vi ofte rette. Feil pris skyldes nesten alltid at nettbutikken har endret pris etter siste innhenting, eller at varen er utgått.

Teknisk

Hva er rate limit, og gjelder den per nøkkel eller per IP?

Hobby: 60 kall per minutt per konto. Grensen følger kontoen, ikke nøkkelen eller IP-adressen, så flere nøkler på samme konto deler på de 60 kallene. Bedrift har ingen rate limit, innenfor rimelighetens grenser.

Hvert svar har X-RateLimit-Limit og X-RateLimit-Remaining-headere. Ved overskridelse får du HTTP 429 med en Retry-After-header som sier hvor mange sekunder du må vente.

Hvorfor får jeg HTTP 429?

Du har sendt mer enn 60 kall på ett minutt. Legg inn en pause mellom kallene, cache svarene, eller bruk prices-bulk for å hente mange produkter i ett kall. Trenger du mer, er det Bedrift som fjerner grensen.

Hvordan sammenligner jeg priser på tvers av butikker?

Bruk GET /api/v1/products/ean/{ean} for å få samme vare fra alle butikker som fører den, eller GET /api/v1/products/find-by-url/compare?url=… om du har en produkt-URL fra en nettbutikk. Det siste passer for nettleserutvidelser.

Hvorfor er store null på noen produkter i søket?

GET /api/v1/products returnerer én rad per produktoppføring, ikke én rad per vare. Noen oppføringer kommer fra leverandørdata og hører ikke til en butikk. De har store: null og som regel ingen pris. Vil du ha prisen i hver kjede, slå opp strekkoden med GET /api/v1/products/ean/{ean}, se sammenligne priser. Du kan også begrense søket til én kjede med store=MENY_NO.

Kan jeg få beskjed når en pris endrer seg?

Ja. Registrer en webhook med POST /api/v1/webhooks og en liste over EAN-er eller produkt-id-er du vil følge. Når prisen på et av produktene endres under daglig innhenting, sender vi et price.updated-kall til URL-en din med ny og gammel pris.

Hva logger API-et, og hvor står serverne?

API-kall logges med endepunkt, parametere og tidspunkt for drift, feilsøking og for å oppdage misbruk. Søkeord og strekkoder inngår i loggen. Posisjonsparametere til /physical-stores (lat, lng, km) logges ikke. Loggene brukes ikke til annet og deles ikke med tredjeparter.

Serverne står hos Hetzner i Helsinki, Finland, innenfor EU/EØS.

Annet