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.
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.
Van sleutel naar eerste voertuig.
- 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.
- 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.
- 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.
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.
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…
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.
?offset=0&limit=50Lees 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.
?externalId=dms-1042Zoek binnen je eigen bedrijf op het vaste nummer uit je bronsysteem. URL-encode deze waarde. Een ontbrekend voertuig geeft 404. Het antwoord bevat vehicle.
{ "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.
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"]
}
}'{
"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.
{ "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.
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.
| Veld | Type / verplicht | Betekenis |
|---|---|---|
action | string · ja | Altijd upsert. |
externalId | string · ja | 1–80 bytes: start met letter of cijfer; daarna letters, cijfers, _ . : en -. Stabiel en uniek binnen je bedrijf. |
version | integer · bij wijzigen | Laatst ontvangen versie; voorkomt overschrijven van een gelijktijdige wijziging. |
state | string · ja | DRAFT, PREPARATION, AVAILABLE, RESERVED, SOLD of ARCHIVED. |
channels | array · ja | [], ["autokern"], ["dealer_website"] of beide. |
data | object · ja | Volledige voertuiggegevens volgens de tabel hieronder. |
| Veld | Type | Gebruik |
|---|---|---|
brand, model | string · verplicht | Merk en model van het voertuig, maximaal 90 bytes per veld. |
trim | string · optioneel | Uitvoering, maximaal 150 bytes. |
plate, stockNumber | string · optioneel | Kenteken maximaal 20, voorraadnummer maximaal 80 bytes. Geen toegangssleutels of klantgegevens. |
year | integer · optioneel | Bouwjaar: 1900 t/m volgend kalenderjaar, of null indien onbekend. |
km | integer · optioneel | Kilometerstand: 0–10.000.000, of null indien onbekend. |
price | number · optioneel | Vraagprijs in euro’s: 0–5.000.000, of null. Publicatie vereist een geldige prijs of prijs op aanvraag. |
priceOnRequest | boolean · optioneel | true voor prijs op aanvraag; stuur dan price: null. |
fuel, gear | string · optioneel | Vrije tekst, maximaal 40 bytes per veld; bijvoorbeeld Benzine en Automaat. |
body, color | string · optioneel | Vrije tekst voor carrosserie en kleur, maximaal 60 bytes per veld. |
description | string · optioneel | Openbare voertuigomschrijving, maximaal 10.000 bytes; zonder HTML of persoonsgegevens. |
images | array van strings · verplicht | Verplicht: 1–40 eigen fotoverwijzingen uit action photo, ook voor concepten. Eerste foto is hoofdfoto. |
features | array van strings · optioneel | Maximaal 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.
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.
| Status | Betekenis |
|---|---|
DRAFT | Concept voor controle; niet publiek. |
PREPARATION | In voorbereiding; niet publiek. |
AVAILABLE | Beschikbaar. Kan op opgegeven kanalen verschijnen wanneer aan alle voorwaarden is voldaan. |
RESERVED | Gereserveerd; kan net als AVAILABLE op de opgegeven kanalen worden gepubliceerd. |
SOLD | Verkocht; stuur channels: [] om de actieve publicatie te verwijderen. |
ARCHIVED | Bewaren 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.
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.
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.
| Status | Wat je doet |
|---|---|
400 / 415 | Controleer JSON, aanvraagvorm en Content-Type. |
401 | Sleutel ontbreekt, is verlopen of ingetrokken. Controleer Authorization; vraag zo nodig een vervanger aan. |
403 | Recht, bedrijfsverificatie of publicatietoegang ontbreekt. Controleer scopes en account; herhaal niet blind. |
404 | Voertuig of verwijzing is niet beschikbaar binnen jouw eigen bedrijf. |
409 | Versieconflict of bereikt sleutelmaximum. Lees de actuele gegevens en verwerk het conflict. |
413 | Aanvraag 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. |
422 | Gegevens of foto voldoen niet. Herstel de genoemde velden of publicatievoorwaarden. |
429 | Budget bereikt. Respecteer Retry-After en spreid nieuwe aanvragen. |
503 | Dienst tijdelijk niet beschikbaar. Bewaar de wijziging in je eigen wachtrij en probeer later opnieuw. |
{ "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.
