Teknisk specifikation

Bilbetyg Feed v1

Ett JSON-dokument per anläggning med hela det aktuella lagret. Levereras som en URL vi hämtar (pull) eller som en POST till oss (push). Registrera på /anslut.

Grundregler

  • Snapshot. Dokumentet är hela lagret. En bil som saknas i nästa dokument markeras som borttagen hos oss. Inga deltan, inga sålt-events.
  • Stabila id:n. items[].id är samma för samma bil varje gång. Nytt id = ny bil (prishistorik nollställs).
  • Regnr på allt. licence_plate är nyckeln för dubblettskydd och prishistorik.
  • Enheter. Kilometer (inte mil), SEK inkl. moms, hästkrafter, ISO 8601-datum.
  • Storlek. Max 5000 bilar och 4 MB per dokument. Större lager delas per anläggning.
  • Frekvens. Pull hämtas var 12:e timme. Push tas emot när som helst, max 30 anrop per minut; vi läser senaste dokumentet vid nästa körning (inom en timme).
  • Versionering. Inom v1 läggs fält bara till. Okända fält ignoreras.

Dokument

FältTypKravBeskrivning
versionstringobligatorisktAlltid "1".
t.ex. "1"
generated_atdateobligatorisktNär dokumentet skapades (ISO 8601 med tidszon).
t.ex. "2026-09-05T06:00:00+02:00"
dealerobjectobligatorisktAnläggningen bilarna står hos. Se Dealer nedan. Flera anläggningar = flera feeds (en per anläggning).
itemsobjectobligatorisktHela det aktuella lagret som en lista av Item (max 5000). Tom lista = handlaren har inget till salu.

Dealer

FältTypKravBeskrivning
namestringobligatorisktAnläggningens namn som kunden ser det.
t.ex. "Bosses Bil & Motor AB"
orgnrstringobligatorisktOrganisationsnummer, 10 siffror med eller utan bindestreck. Nyckeln som kopplar feeden till rätt handlarsida.
t.ex. "556123-4567"
streetstringvalfrittGatuadress.
t.ex. "Industrivägen 4"
zipstringobligatorisktPostnummer, 5 siffror.
t.ex. "572 35"
citystringobligatorisktOrt.
t.ex. "Oskarshamn"
websiteurlvalfrittHandlarens egen webbplats.
t.ex. "https://www.bossesbil.se"
phonestringvalfrittTelefon till försäljningen.
emailstringvalfrittE-post till försäljningen (visas inte publikt, används för kontaktformulär).

Item (en bil)

FältTypKravBeskrivning
idstringobligatorisktStabilt id i partnerns system. Samma bil ska ha samma id i varje snapshot; byts id:t räknas bilen som ny.
t.ex. "19363711"
urlurlvalfrittLänk till bilen hos handlaren (egen sajt). Saknas den länkar vi till handlarens webbplats, och saknas även den visas bilen på en Bilbetyg-sida med kontaktformulär.
t.ex. "https://www.bossesbil.se/bil/subaru-outback-2-5/"
licence_platestringobligatorisktRegistreringsnummer utan mellanslag. Används för dubblettskydd mellan källor och för prishistorik.
t.ex. "ABC123"
vinstringvalfrittChassinummer, 17 tecken.
brandstringobligatorisktMärke som handlaren skriver det.
t.ex. "Subaru"
modelstringobligatorisktModell/serie utan märke.
t.ex. "Outback"
variantstringvalfrittUtförande, motor, paket — resten av titeln.
t.ex. "2.5 Adventure Xfuel E85"
model_yearintegerobligatorisktÅrsmodell.
t.ex. 2021
first_registrationdatevalfrittDatum i trafik första gången (YYYY-MM-DD). Slår årsmodell för ålder och generation.
t.ex. "2021-03-12"
priceintegerobligatorisktFast kontantpris i SEK inkl. moms. 0 eller null = pris på begäran (bilen visas utan pris och ingår inte i jämförelser).
t.ex. 289900
odometer_kmintegerobligatorisktMiltal i KILOMETER (inte mil).
t.ex. 48200
fuelstringobligatorisktDrivmedel.
bensin | diesel | el | elhybrid | laddhybrid | etanol | gas | vätgas
t.ex. "bensin"
transmissionstringvalfrittVäxellåda.
automat | manuell
t.ex. "automat"
bodystringvalfrittKaross.
halvkombi | kombi | sedan | suv | coupe | cabriolet | minibuss | pickup | skåpbil | annan
t.ex. "kombi"
drivestringvalfrittDrivning.
fwd | rwd | awd
t.ex. "awd"
power_hpintegervalfrittEffekt i hästkrafter.
t.ex. 169
colorstringvalfrittFärg som handlaren anger den.
t.ex. "Grå metallic"
towbarbooleanvalfrittDragkrok. Utelämna om okänt.
co2_g_per_kmintegervalfrittCO2 blandad körning, WLTP.
electric_range_kmintegervalfrittElräckvidd WLTP (el/laddhybrid).
battery_kwhnumbervalfrittBatterikapacitet netto.
equipmentstring[]valfrittUtrustningslista, en post per rad.
t.ex. ["Dragkrok", "Navigation", "Värmare"]
descriptionstringvalfrittSäljtext. Visas men används inte för jämförelser. Max 5 000 tecken.
imagesstring[]obligatorisktBild-URL:er, första bilden = huvudbild. Minst 1, max 30. HTTPS, minst 800 px bred rekommenderas.
vehicle_history_urlurlvalfrittLänk till fordonshistorik (Carfax e.d.).
warrantystringvalfrittGaranti i klartext.
t.ex. "MRF-garanti 12 mån"
published_atdatevalfrittNär bilen lades ut till försäljning. Saknas den räknas dagar-på-marknaden från första gången vi ser bilen.

Exempel

{
  "version": "1",
  "generated_at": "2026-09-05T06:00:00+02:00",
  "dealer": {
    "name": "Bosses Bil & Motor AB",
    "orgnr": "556123-4567",
    "street": "Industrivägen 4",
    "zip": "572 35",
    "city": "Oskarshamn",
    "website": "https://www.bossesbil.se",
    "phone": "0491-123 45"
  },
  "items": [
    {
      "id": "19363711",
      "url": "https://www.bossesbil.se/bil/subaru-outback-2-5-adventure/",
      "licence_plate": "ABC123",
      "brand": "Subaru",
      "model": "Outback",
      "variant": "2.5 Adventure Xfuel E85",
      "model_year": 2021,
      "first_registration": "2021-03-12",
      "price": 289900,
      "odometer_km": 48200,
      "fuel": "bensin",
      "transmission": "automat",
      "body": "kombi",
      "drive": "awd",
      "power_hp": 169,
      "color": "Grå metallic",
      "towbar": true,
      "equipment": [
        "Dragkrok",
        "Navigation",
        "Motorvärmare"
      ],
      "images": [
        "https://www.bossesbil.se/bilder/19363711-1.jpg",
        "https://www.bossesbil.se/bilder/19363711-2.jpg"
      ],
      "warranty": "MRF-garanti 12 mån",
      "published_at": "2026-08-31T15:51:37+02:00"
    }
  ]
}

Endpoints

POST/api/feed/v1/registerRegistrera en feed. Body: partner, contact_email, dealer_name, dealer_orgnr, dealer_website, mode (pull|push), feed_url, feed_auth_header. Svar: slug, token (visas en gång), push_url, status_url.
POST/api/feed/v1/push/{slug}Push av hela lagret. Header Authorization: Bearer {token}. Body: dokumentet. 200 = sparat, 422 = valideringsfel per fält (inget sparas), 401 = fel token, 413 = för stort.
GET/api/feed/v1/status/{slug}Status. Header Authorization: Bearer {token}. Svar: status (pending|review|approved|rejected|paused), intake-rapport, antal aktiva annonser, senaste fel.
GET/api/feed/v1/schemaJSON Schema (draft 2020-12) för dokumentet.

Validering och godkännande

Varje dokument valideras mot fälten ovan. Därefter matchas bilarna mot vår modellkatalog och feeden får en rapport: andel matchade bilar, fyllnadsgrad för pris, miltal och bilder, median km/år, och hur många regnr som redan finns aktiva från andra källor. Grindar: minst 60 % matchade, 70 % med pris, 80 % med miltal och bild, median 3 000–40 000 km/år. En feed som passerar godkänns normalt inom en arbetsdag. Rapporten syns alltid i status-endpointen, även när något fallerar, så att ni kan rätta och skicka igen.

Snabbstart (push)

curl -X POST https://bilbetyg.se/api/feed/v1/register \
  -H 'Content-Type: application/json' \
  -d '{"partner":"Mitt system","contact_email":"dev@exempel.se","dealer_name":"Bosses Bil & Motor AB","dealer_orgnr":"556123-4567","mode":"push"}'
# → {"slug":"bosses-bil-motor-ab","token":"…","push_url":"…"}

curl -X POST https://bilbetyg.se/api/feed/v1/push/bosses-bil-motor-ab \
  -H 'Authorization: Bearer <token>' -H 'Content-Type: application/json' \
  --data-binary @lager.json

curl https://bilbetyg.se/api/feed/v1/status/bosses-bil-motor-ab -H 'Authorization: Bearer <token>'