Autovoorraad automatisch aanleveren

Drie keuzes: XML-feed, CSV-feed of voorraad-API. De beheerder maakt een koppeling voor een actief zakelijk account en staat voorraadimport toe. Het bedrijf vindt de koppeling bij Autovoorraad. Maximaal 1.000 auto's en 8 MB per bestand/verzoek. Bestaande gegevens worden automatisch uitgebreid; een aparte database-installatie is niet nodig.

1. CSV

Download voorbeeld. UTF-8, eventueel met BOM. Gebruik komma's of puntkomma's tussen kolommen. Zet teksten met scheidingstekens of regeleinden tussen dubbele aanhalingstekens. Prijs zonder duizendtallen, bijvoorbeeld 23000.50 of 23000,50 in een puntkomma-CSV. Scheid meerdere fotolinks met |.

2. XML

Download voorbeeld. Gebruik <stock> met <vehicle>-elementen. Foto's: <photos><photo>https://...</photo></photos>. Geen DTD, externe entiteiten of namespaces. De veldnamen zijn identiek aan CSV/JSON.

Velden

VeldBetekenis
externalIdVerplicht vast voorraadnummer, uniek binnen dit bedrijf; maximaal 100 tekens (letters, cijfers, . _ -). Wijzig dit niet bij prijswijzigingen.
statusavailable (standaard), sold of withdrawn. Voor sold/withdrawn volstaan externalId en status.
title, description, price, mileageVerplicht voor beschikbaar aanbod. Titel minimaal 3 tekens; omschrijving minimaal 5; prijs minimaal 0; kilometerstand 0–9.999.999.
categoryIdAuto-sub-subcategorie/type. Vind het ID via het imports scherm. Of laat leeg en geef exact de merk- en modelnaam uit de categorieboom mee.
brand, model, plate, yearMerk, model, kenteken en bouwjaar. Kenteken optioneel; voertuigpagina's gebruiken de bestaande RDW-aanvulling. RDW/NAP-registeruitslagen kunnen niet via de feed worden verzonnen.
photosMaximaal 20 HTTPS-fotolinks, maximaal 400 tekens per link. Foto's blijven bij de leverancier gehost; gebruik blijvend bereikbare links. De normale minimumfoto-eis geldt.
fuel, transmission, color, bodyStyle, power, engineSize, trim, doors, seats, emissionClassOptionele kenmerken. power in pk; engineSize in cm³.
location, postcode, showPhone, offersAllowed, websiteUrlContact en voorkeuren. Plaats/postcode vallen terug op het bedrijfsprofiel. showPhone en offersAllowed: true/false of ja/nee. Telefoon komt uit het profiel en blijft als advertentiesnapshot bewaard. Websitevermelding kan betaald zijn.

3. Voorraad-API

Maak zelf een API-sleutel bij de ingeschakelde koppeling. Bewaar de eenmalig getoonde sleutel veilig in het voorraadsysteem. Een nieuwe sleutel trekt de eerdere sleutel in. Een sleutel werkt alleen voor voorraad aanleveren of controleren binnen dit bedrijf.

POST https://JOUW-DOMEIN/api/dealer-stock/preview
POST https://JOUW-DOMEIN/api/dealer-stock/import
Authorization: Bearer JOUW-VOORRAADSLEUTEL
Content-Type: application/json

{
  "complete": false,
  "allowEmpty": false,
  "vehicles": [{
    "externalId": "AUTO-001",
    "title": "Mercedes CLS",
    "description": "Omschrijving van de auto uit onze voorraad.",
    "price": 23000,
    "brand": "Mercedes-Benz", "model": "CLS",
    "mileage": 120000,
    "photos": ["https://images.example.com/auto-001.jpg"]
  }]
}

Ruwe XML of CSV kan ook naar dezelfde endpoints met Content-Type: application/xml of text/csv. Dat werkt als aanvullen/bijwerken; gebruik het JSON-verzoek met complete/allowEmpty voor volledige synchronisatie. Formaat van het antwoord:

{"received":1,"created":1,"updated":0,"unchanged":0,"withdrawn":0,"pendingPayment":0,"preview":true}

400: ongeldige voorraad (niets gedeeltelijk gewijzigd). 401/403: ontbrekende, ingetrokken of niet toegestane toegang. 409: gewijzigde feed of betaald categoriewijziging. 429: verzoeklimiet (maximaal 60 per 15 minuten per bron-IP/endpoint). 502: feed onbereikbaar. Een bron-IP deelt deze limiet met andere koppelingen vanaf diezelfde IP.

Bijwerken en verkochte auto's

Dezelfde externalId houdt hetzelfde advertentie-ID, statistieken, biedingen en promoties. Een volledige voorraad (complete=true) verbergt ontbrekende importadvertenties van deze koppeling. Gewone handmatige advertenties en andere bedrijven worden nooit meegenomen. Lege volledige voorraad vereist allowEmpty=true. sold/withdrawn verbergt de betreffende auto; er wordt niets definitief verwijderd. Komt de auto terug, dan wordt alleen een door deze koppeling verborgen status hersteld. Handmatige moderatie blijft gelden. Ongeldige bestanden worden volledig geweigerd voordat aanbod wordt gewijzigd.

Betaalde plaatsing en websitevermelding worden niet gratis omzeild: advertenties wachten waar nodig op de bestaande betaalstappen. Geen automatische betalingen of toppers. Normale advertentielooptijden blijven gelden. Er is geen betaalde leverancierintegratie vooraf ingebouwd; een leverancier kan dit afgesproken formaat leveren of de API gebruiken.

Automatisch XML/CSV ophalen

Sla een directe, openbare HTTPS-feedlink op, kies XML of CSV en vink automatisch ophalen aan. Redirects, private netwerken en URL-wachtwoorden zijn niet toegestaan. Er moet een geplande taak in de hosting staan:

PHP /ABSOLUUT-PAD/NAAR/private/stock-cron.php

Bij de één-map-installatie is dit public_html/private/stock-cron.php. Bij de bestaande twee-map-installatie is het de private map naast public_html. In Plesk: Geplande taken → PHP-script uitvoeren → dit script, elke 10 minuten. De taak verwerkt per ronde maximaal 5 koppelingen; iedere koppeling komt ongeveer elk uur aan de beurt. Voor meer dan 30 actieve feeds verhoog je de taakfrequentie. PHP moet DOM/XML, mbstring, cURL en PDO MySQL ondersteunen. Er is bewust geen publiek web-cronadres met een geheime URL.

De controleknop haalt de feed op zonder deze te publiceren. Handmatig verwerken weigert een feed die sinds de controle gewijzigd is. Automatische fouten worden in het imports scherm getoond; bestaand aanbod blijft behouden. Feeds met geheime querytokens zijn alleen zichtbaar voor de eigenaar en beheerder; gebruik geen klantgegevens in feeds.