Een volgende auto begint met overzicht. Auto’s & meer / Nederland
AutoKern voor ontwikkelaars · API v1

Jouw voorraad.
Direct verbonden.

Koppel je eigen voorraadsysteem aan AutoKern. Beheer voertuigen, foto’s en publicatie vanuit één serverkoppeling, met toegang tot uitsluitend de voorraad van je eigen bedrijf.

Eigen voorraad · beveiligde verbinding
GET /api/v1/stock.php
Authorization: Bearer $AUTOKERN_API_KEY

{
  "ok": true,
  "vehicles": [],
  "offset": 0,
  "limit": 50,
  "total": 0
}

● Eén koppeling. Jouw bedrijf als vaste grens.

600aanvragen per rollend uur, per bedrijf
3 rechtenlezen, schrijven en publiceren apart
90 dagenmaximale geldigheid per sleutel
01 · Snelstart

Van sleutel naar eerste voertuig.

  1. Log in met je bedrijfsaccount. Maak hieronder een sleutel voor jouw koppeling. Begin met alleen lezen; voeg schrijven en publiceren alleen toe als je toepassing die rechten nodig heeft.
  2. Bewaar de sleutel op je server. Gebruik een secret manager of een afgeschermde omgevingsvariabele. Zet de sleutel nooit in browsercode, een app, URL, log, e-mail of een openbaar repository.
  3. Lees eerst je voorraad uit. Gebruik HTTPS en stuur de sleutel in de Authorization-header. Upload eerst een eigen foto, maak je eerste voertuig als concept aan en controleer de gegevens in je account.
Shell · voorraad lezen
curl --fail-with-body 'https://autokern.nl/api/v1/stock.php?offset=0&limit=50' \
  -H "Authorization: Bearer $AUTOKERN_API_KEY" \
  -H 'Accept: application/json'

De sleutel bepaalt het bedrijf. Je stuurt geen bedrijfs-ID mee en krijgt geen gegevens van andere bedrijven. Dit is een server-naar-server-API; rechtstreekse databaseverbindingen, tabellen, wachtwoorden en interne accountgegevens worden niet beschikbaar gesteld.

02 · Mijn koppeling

API-sleutels beheren.

Beschikbaar voor geverifieerde bedrijfsaccounts met bevestigd publicatierecht. Maak een sleutel voor je eigen systeem, bekijk het gebruik en trek een sleutel direct in als je de koppeling stopt of misbruik vermoedt.

Je bedrijfsaccount wordt gecontroleerd…

03 · Endpoints

Lezen, opslaan en foto’s toevoegen.

Basisadres: https://autokern.nl/api/v1/stock.php. Alle antwoorden zijn JSON. POST vereist Content-Type: application/json. Eén aanvraag verwerkt één voertuig of één foto.

GET?offset=0&limit=50

Lees uitsluitend je via deze API gekoppelde voorraad. Voertuigen uit andere imports hebben geen API-externalId en worden niet teruggegeven. Standaard 50, maximaal 100 voertuigen per pagina. Verhoog offset met limit totdat je total bereikt. Vereist inventory:read.

GET?externalId=dms-1042

Zoek binnen je eigen bedrijf op het vaste nummer uit je bronsysteem. URL-encode deze waarde. Een ontbrekend voertuig geeft 404. Het antwoord bevat vehicle.

POST{ "action": "upsert", … }

Maak een voertuig of vervang de bestaande gegevens. Vereist inventory:write. Voor publiceren is bovendien inventory:publish nodig. Stuur bij een wijziging de laatst gelezen version mee.

Upload vooraf een foto met action: "photo" (zie hieronder). Vervang in het voorbeeld de fotoplaatsaanduiding door de volledige ontvangen image-waarde.

Shell · een concept opslaan na foto-upload
curl --fail-with-body 'https://autokern.nl/api/v1/stock.php' \
  -H "Authorization: Bearer $AUTOKERN_API_KEY" \
  -H 'Content-Type: application/json' \
  --data '{
    "action": "upsert",
    "externalId": "dms-1042",
    "state": "DRAFT",
    "channels": [],
    "data": {
      "brand": "Volvo", "model": "XC60",
      "year": 2021, "km": 64000, "price": 34950,
      "priceOnRequest": false,
      "fuel": "Benzine", "gear": "Automaat",
      "description": "Voertuigomschrijving van het autobedrijf.",
      "images": ["VUL_HIER_DE_ONTVANGEN_IMAGE_REFERENTIE_IN"],
      "features": ["Cruisecontrol"]
    }
  }'
JSON · antwoord (verkort)
{
  "ok": true,
  "vehicle": {
    "externalId": "dms-1042",
    "id": "0123456789abcdef0123456789abcdef",
    "version": 1,
    "state": "DRAFT",
    "channels": [],
    "data": { "brand": "Volvo", "model": "XC60" }
  },
  "unchanged": false
}

Herhalen zonder dubbele voertuigen

Houd externalId blijvend gelijk voor dezelfde auto. De combinatie van jouw bedrijf en dit nummer is uniek. Een identieke herhaling retourneert unchanged: true. Dit is geen gedeeltelijke PATCH: stuur bij iedere wijziging het volledige data-object, de gewenste status en alle kanalen. Weggelaten optionele velden worden niet behouden.

Lees vóór aanpassen de huidige version, stuur die mee en bewaar de nieuwe versie uit het antwoord. Bij 409 lees je opnieuw, vergelijk je de gegevens en beslis je welke wijziging moet blijven. Laat version bij een nieuw voertuig weg. Tekstvelden die je weglaat worden leeg, getalvelden null, priceOnRequest false en features leeg. Foto’s zijn altijd vereist.

Foto’s: uploaden, daarna koppelen

Verklein iedere foto naar een JPEG van maximaal 800 × 800 pixels en 512 KiB. Upload eerst met onderstaande JSON. Gebruik de geretourneerde image-waarde ongewijzigd in data.images van je voertuig. Minimaal 1 en maximaal 40 eigen foto’s per voertuig, ook voor een concept. Gebruik alleen eigen foto’s waarvoor je publicatierechten hebt.

JSON · POST met inventory:write
{ "action": "photo", "image": "data:image/jpeg;base64,/9j/…" }

{ "ok": true, "image": "/api/account.php?action=photo&id=…" }

De voorbeeldfoto is ingekort en niet uitvoerbaar. Externe foto-URL’s, HTML, SVG en fotoverwijzingen van een ander account worden niet aangenomen. Er worden geen externe URL’s opgehaald. Bewaar de fotoverwijzing voor hergebruik; upload dezelfde foto niet bij iedere synchronisatie opnieuw.

04 · Gegevenswoordenboek

Dit mag je koppeling versturen.

De API wisselt een afgebakend JSON-gegevensmodel uit. Onbekende velden worden geweigerd. Gebruik JSON-getallen zonder valuta- of duizendtalscheiding; een prijs van € 34.950 schrijf je als 34950. Tekst is platte tekst. Tekstlimieten gelden in UTF-8-bytes: een letter zoals é gebruikt 2 bytes.

Envelop van een upsert-aanvraag
VeldType / verplichtBetekenis
actionstring · jaAltijd upsert.
externalIdstring · ja1–80 bytes: start met letter of cijfer; daarna letters, cijfers, _ . : en -. Stabiel en uniek binnen je bedrijf.
versioninteger · bij wijzigenLaatst ontvangen versie; voorkomt overschrijven van een gelijktijdige wijziging.
statestring · jaDRAFT, PREPARATION, AVAILABLE, RESERVED, SOLD of ARCHIVED.
channelsarray · ja[], ["autokern"], ["dealer_website"] of beide.
dataobject · jaVolledige voertuiggegevens volgens de tabel hieronder.
Voertuigvelden in data
VeldTypeGebruik
brand, modelstring · verplichtMerk en model van het voertuig, maximaal 90 bytes per veld.
trimstring · optioneelUitvoering, maximaal 150 bytes.
plate, stockNumberstring · optioneelKenteken maximaal 20, voorraadnummer maximaal 80 bytes. Geen toegangssleutels of klantgegevens.
yearinteger · optioneelBouwjaar: 1900 t/m volgend kalenderjaar, of null indien onbekend.
kminteger · optioneelKilometerstand: 0–10.000.000, of null indien onbekend.
pricenumber · optioneelVraagprijs in euro’s: 0–5.000.000, of null. Publicatie vereist een geldige prijs of prijs op aanvraag.
priceOnRequestboolean · optioneeltrue voor prijs op aanvraag; stuur dan price: null.
fuel, gearstring · optioneelVrije tekst, maximaal 40 bytes per veld; bijvoorbeeld Benzine en Automaat.
body, colorstring · optioneelVrije tekst voor carrosserie en kleur, maximaal 60 bytes per veld.
descriptionstring · optioneelOpenbare voertuigomschrijving, maximaal 10.000 bytes; zonder HTML of persoonsgegevens.
imagesarray van strings · verplichtVerplicht: 1–40 eigen fotoverwijzingen uit action photo, ook voor concepten. Eerste foto is hoofdfoto.
featuresarray van strings · optioneelMaximaal 100 uitrustingsitems van elk maximaal 150 bytes.

Het antwoord voegt een interne id en version toe. Behandel de ID als ondoorzichtige waarde; gebruik jouw externalId voor synchronisatie. De API geeft geen gebruikersprofielen, leads, wachtwoorden, handelsprijzen, VIN of interne importbronnen terug.

05 · Status & zichtbaarheid

Opslaan is nog geen publiceren.

Een nieuw voertuig begint in je koppeling met state: "DRAFT" en channels: []. Zo kun je eerst rustig controleren. Een kanaal vraagt expliciete publicatierechten en blijft afhankelijk van de bestaande bedrijfsverificatie, pakketafspraken en inhoudscontrole.

Voorraadstatussen
StatusBetekenis
DRAFTConcept voor controle; niet publiek.
PREPARATIONIn voorbereiding; niet publiek.
AVAILABLEBeschikbaar. Kan op opgegeven kanalen verschijnen wanneer aan alle voorwaarden is voldaan.
RESERVEDGereserveerd; kan net als AVAILABLE op de opgegeven kanalen worden gepubliceerd.
SOLDVerkocht; stuur channels: [] om de actieve publicatie te verwijderen.
ARCHIVEDBewaren in eigen voorraadgeschiedenis; niet actief publiceren.

Om te publiceren stuur je de volledige gegevens, de huidige version, state: "AVAILABLE" en de gewenste channels. Kanalen zijn alleen toegestaan voor AVAILABLE en RESERVED. Bij alle andere statussen stuur je channels: []. Ook wijzigen of intrekken van eerder gepubliceerd aanbod vereist inventory:publish. Voor publicatie zijn merk, model, bouwjaar, kilometerstand, brandstof, transmissie, carrosserie, minimaal één eigen foto en een geldige prijs of prijs op aanvraag nodig. Een succesvolle conceptopslag bewijst niet dat een advertentie openbaar staat; controleer de publicatiestatus in je bedrijfsaccount.

Jouw bedrijfsgegevens blijven afgeschermd.

Iedere sleutel is aan één bedrijf gekoppeld. Geef een leverancier uitsluitend de rechten die hij nodig heeft. Een ingetrokken of verlopen sleutel werkt niet meer. Geen enkele internetdienst kan absolute bescherming tegen ieder mogelijk misbruik beloven; zorgvuldig sleutelbeheer en controle van je koppeling blijven nodig.

06 · Betrouwbaar synchroniseren

Een helder budget voor je koppeling.

  • 600 aanvragen per rollend uur en 60 per minuut, gedeeld door alle sleutels van één bedrijf. Nieuwe sleutels maken dit budget niet opnieuw vrij.
  • Maximaal 2 actieve sleutels; geldigheid 1–90 dagen. Draai een sleutel door eerst een vervanger aan te maken, je systeem om te zetten en daarna de oude in te trekken.
  • Maximaal 2.000 voertuigen per account; pakket- en publicatiegrenzen blijven gelden.
  • Maximaal 64 KiB JSON per voertuigaanvraag; 768 KiB voor een fotoaanvraag. Foto zelf maximaal 512 KiB en 800 × 800 pixels.
  • Maximaal 4.096 fotobestanden en 256 MiB foto-opslag per account. Hergebruik bestaande fotoverwijzingen.

Plan kleine gespreide synchronisaties. Stuur alleen gewijzigde voertuigen, haal voorraad gepagineerd op en wacht bij 429 minstens het aantal seconden in de Retry-After-header. Gebruik daarna oplopende wachttijden met willekeurige spreiding. Probeer een inhoudsfout niet eindeloos opnieuw.

HTTP-fouten en herstel
StatusWat je doet
400 / 415Controleer JSON, aanvraagvorm en Content-Type.
401Sleutel ontbreekt, is verlopen of ingetrokken. Controleer Authorization; vraag zo nodig een vervanger aan.
403Recht, bedrijfsverificatie of publicatietoegang ontbreekt. Controleer scopes en account; herhaal niet blind.
404Voertuig of verwijzing is niet beschikbaar binnen jouw eigen bedrijf.
409Versieconflict of bereikt sleutelmaximum. Lees de actuele gegevens en verwerk het conflict.
413Aanvraag of foto is te groot, of technische voorraadlimiet bereikt. Verklein de inhoud; neem bij de technische voorraadlimiet contact op met AutoKern. Archiveren maakt deze technische ruimte niet vrij.
422Gegevens of foto voldoen niet. Herstel de genoemde velden of publicatievoorwaarden.
429Budget bereikt. Respecteer Retry-After en spreid nieuwe aanvragen.
503Dienst tijdelijk niet beschikbaar. Bewaar de wijziging in je eigen wachtrij en probeer later opnieuw.
JSON · voorbeeld van een fout
{ "ok": false, "error": "…", "message": "…" }

Antwoorden bevatten requestId; de header X-Request-Id helpt support de aanvraag terug te vinden. Geldige geauthenticeerde aanvragen geven X-RateLimit-Limit en X-RateLimit-Remaining; ook geweigerde inhoud kan budget verbruiken. Er gelden aanvullende misbruikgrenzen per bron-IP. Gebruik de HTTP-status voor je herstelstrategie en toon het serverbericht aan de beheerder. Log status, tijdstip en je eigen voertuigreferentie; verwijder Authorization en andere geheimen uit logbestanden.

Hulp bij je koppeling ↗