API d'import
Gardez votre inventaire Driv.one synchronisé avec votre DMS ou votre système de stock. Créez et mettez à jour des véhicules, envoyez des inventaires complets, gérez les photos — via une API REST versionnée limitée à votre garage.
L'API s'adresse aux vendeurs professionnels, groupes de concessionnaires, éditeurs de DMS et partenaires d'intégration. Les fiches que vous créez apparaissent sur driv.one sous votre garage, exactement comme les voitures ajoutées à la main.
Démarrage rapide
1. Créez une clé API
Connectez-vous à {link}, choisissez le garage, nommez la clé et copiez-la. La clé n'est affichée qu'une fois ; si vous la perdez, révoquez-la et créez-en une autre.
2. Testez l'authentification
curl https://api.driv.one/v1/me \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json"
3. Créez un véhicule
curl -X POST https://api.driv.one/v1/vehicles \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"external_id": "STOCK-4821",
"external_updated_at": "2026-09-05T08:30:00Z",
"make": "Volkswagen",
"model": "Golf",
"year": 2022,
"vin": "WVWZZZAUZNW123456",
"license_plate": "1-ABC-123",
"mileage": 41200,
"first_registration": "2022-03-15",
"fuel_type": "petrol",
"gearbox_type": "dct",
"body_type": "hatchback",
"power_hp": 150,
"num_doors": 5,
"num_seats": 5,
"color": "gray",
"interior_material": "fabric",
"vehicle_condition": "used",
"asking_price": 24950,
"is_tax_vehicle": true,
"short_description": "Golf 1.5 TSI Life, first owner, full history",
"seller_description": "Serviced at the dealership, two keys, winter tyres included.",
"features": [
"appleCarplay",
"androidAuto",
"adaptiveCruiseControl",
"ledHeadlights",
"alloyWheels"
],
"parking_assist": [
"sens_front",
"sens_rear",
"cam_rear"
],
"image_urls": [
"https://cdn.example-dealer.be/stock/4821/front.jpg",
"https://cdn.example-dealer.be/stock/4821/interior.jpg"
]
}'
La réponse est le véhicule enregistré avec son uuid, public_url, currency et ses photos, plus un tableau warnings lorsqu'un incident non bloquant s'est produit (une photo introuvable, un modèle créé).
URL de base et versions
https://api.driv.one/v1
La version majeure fait partie du chemin. Les changements incompatibles reçoivent une nouvelle version majeure ; /v1 conserve son comportement. Les ajouts (nouveaux champs optionnels, nouvelles valeurs d'énumération) peuvent apparaître dans v1 — lisez GET /v1/options plutôt que de figer des listes.
Les chemins sont indiqués sans barre finale ; elle est acceptée.
Authentification
Authentification par jeton Bearer avec une clé API du garage. Les clés commencent par wsk_.
Authorization: Bearer wsk_…
X-API-Key: wsk_… est accepté comme en-tête alternatif. Une clé est en lecture-écriture ou en lecture seule ; une clé en lecture seule reçoit 403 read_only_key à toute écriture.
En-têtes de requête
| En-tête | Valeur | Rôle |
|---|---|---|
Authorization | Bearer wsk_… | Authentifie le garage. |
Content-Type | application/json | Pour les corps JSON. Les envois de fichiers photo utilisent multipart/form-data. |
Accept | application/json | Les réponses sont toujours en JSON. |
Modèle de données du véhicule
Champs acceptés en POST, PUT et PATCH. Les réponses renvoient les mêmes noms, plus les champs en lecture seule uuid, status (published / unlisted), public_url, currency, images, for_sale_since et created_at.
GET /v1/options ; rien d'autre n'est accepté.| Champ | Type | À la création | Description |
|---|---|---|---|
| Identité | |||
external_id | string ≤120 | recommandé | Votre propre id stable du véhicule (numéro de stock, id DMS). Permet d'adresser la voiture par cet id et active l'upsert et la synchronisation. |
external_updated_at | datetime | non | Dernière modification du véhicule dans votre système. Un horodatage plus ancien que celui enregistré est refusé avec 409 stale_update. |
license_plate | string ≤20 | non | Doit être unique sur toute la plateforme. |
vin | string (17) | non | Numéro de châssis, unique sur toute la plateforme. Enregistré en majuscules. |
| Marque, modèle & immatriculation | |||
make / make_id | string / integer | oui | Marque, par nom (insensible à la casse) ou id. GET /v1/makes. |
model / model_id | string / integer | oui | Modèle au sein de la marque. Les noms inconnus sont refusés sauf si create_missing_model vaut true. |
create_missing_model | boolean | non | Ajoute un nom de modèle inconnu sous la marque au lieu d'échouer. Par défaut false. |
vehicle_type / vehicle_type_id | string / integer | non | Car, Motorcycle, SUV, Truck, Van. Par défaut Car. |
year | integer | oui | Année-modèle, 1990–2027. |
first_registration | date | non | AAAA-MM-JJ. |
color | string ≤50 | non | Utilisez une valeur de l'énumération des couleurs pour obtenir la traduction ; les autres mots sont affichés tels quels. |
mileage | integer | non | Kilométrage, en mileage_unit. |
mileage_unit | enum | non | km (par défaut) ou mi. Utilisez mi pour les véhicules américains/britanniques vendus à l'étranger ; le site affiche l'unité telle qu'envoyée. |
| Moteur & transmission | |||
motor_type | string ≤100 | non | Désignation du moteur, p. ex. "2.0 TDI 150hp". |
fuel_type | enum | non | Voir énumérations.petroldieselelectrichybrid_petrolhybrid_dieselphev_petrolphev_diesellpgcnghydrogenmild_hybridotherlibellés ↓ |
power_hp / power_kw | integer | non | Envoyez l'un des deux ; l'autre est déduit. |
cylinder_capacity | integer cc | non | Cylindrée en cm³, p. ex. 1998. |
gearbox_type | enum | non | Manuelle, automatique, semi-automatique, CVT ou rapport unique (électrique). |
drivetrain | enum | non | front, rear ou 4wd. |
emission_standard | enum | non | Norme Euro. |
co2_gkm | integer | non | CO₂ en g/km. |
battery_capacity_kwh | decimal kWh | non | Véhicules électriques : capacité utile de la batterie, p. ex. 77.4. Affichée à la place de la norme Euro lorsque fuel_type est electric. |
battery_soh_pct | integer 0–100 | non | État de santé de la batterie (SOH) en %. |
battery_certificate_url | url | non | Lien vers le certificat de batterie ; affiché comme lien cliquable sur l'annonce. |
| Carrosserie, dimensions & roues | |||
body_type | enum | non | Type de carrosserie, comme dans les filtres du site. |
num_doors / num_seats | integer | non | Portes 1–9, sièges 1–99. |
weight | integer kg | non | Poids à vide. |
steering_position | enum | non | lhd ou rhd. |
tyre_size / bolt_pattern / et_offset | string | non | p. ex. "225/45R17", "5x112", "+35". |
| Intérieur & confort | |||
interior_color | string ≤50 | non | Texte libre, p. ex. « noir ». |
interior_material | enum | non | Garniture. |
air_conditioning | enum | non | Aucune, manuelle ou climatisation automatique (1–4 zones). |
airbags | enum | non | Nombre d'airbags. |
| Équipements | |||
features | array[string] | non | Slugs d'équipement du catalogue ci-dessous. Les slugs inconnus sont refusés. Envoyer [] vide la liste. |
parking_assist | array[string] | non | Slugs d'aide au stationnement du catalogue ci-dessous. |
| Vente & état | |||
is_for_sale | boolean | non | Par défaut true à la création. false retire la voiture de la place de marché mais la conserve. |
asking_price | decimal | non | Dans la devise du garage (renvoyée comme `currency`). Nombre simple, pas des centimes. |
is_margin_vehicle / is_tax_vehicle | boolean | non | Traitement TVA : régime de la marge ou TVA déductible. |
vehicle_condition | enum | non | Neuf, démo, occasion, accidenté… |
num_owners | integer | non | Propriétaires précédents, 0–99. |
maintenance_history | enum | non | État du carnet d'entretien. |
carpass_url | url | non | Lien vers le document Car-Pass (Belgique). |
short_description | string ≤120 | non | Une ligne sur les fiches de liste. |
seller_description | text | non | Description complète. |
| Photos | |||
image_urls | array[url] ≤30 | non | Photos à télécharger depuis vos serveurs, dans l'ordre d'affichage. Si présent, remplace tout le jeu de photos ; omettez-le pour ne pas toucher aux photos. |
external_id — jamais une position de stock ni un ordre d'affichage. C'est ce qui fait fonctionner l'upsert, GET /v1/vehicles/{ref} par votre id et la synchronisation de l'inventaire.Endpoints
Compte
Référence (sans clé)
Véhicules
Photos
Schémas complets des requêtes et réponses, avec toutes les énumérations : Swagger UI · ReDoc · openapi.json.
Réponse de liste
{
"count": 37, "limit": 50, "offset": 0, "next_offset": null,
"results": [ { "uuid": "…", "external_id": "STOCK-4821", "status": "published", … } ]
}
Upsert et mises à jour obsolètes
POST /v1/vehicles avec un external_id que votre garage utilise déjà met à jour ce véhicule (HTTP 200) au lieu d'en créer un second (HTTP 201). Une intégration naïve « tout envoyer chaque nuit » devient ainsi idempotente.
Si vous envoyez aussi external_updated_at, une mise à jour dont l'horodatage est plus ancien que celui enregistré est refusée avec 409 stale_update : un événement en retard ne peut jamais écraser un plus récent. Dans une synchronisation, ce véhicule est signalé skipped_stale et le reste continue.
PATCH ne change que les champs envoyés. PUT est un remplacement complet : les champs optionnels omis sont vidés. Les deux acceptent le même corps que la création.
Synchronisation de l'inventaire
POST /v1/vehicles/sync fait l'upsert d'un inventaire entier en un appel (≤200 véhicules ; répétez pour davantage). Chaque véhicule a besoin d'un external_id.
{
"complete": true,
"vehicles": [
{
"external_id": "STOCK-4821",
"make": "Volkswagen",
"model": "Golf",
"year": 2022,
"asking_price": 24950,
"fuel_type": "petrol",
"mileage": 41200
},
{
"external_id": "STOCK-4835",
"make": "Audi",
"model": "A4",
"year": 2021,
"asking_price": 28900,
"fuel_type": "diesel",
"body_type": "estate"
}
]
}
- Validation tout ou rien. L'ensemble est validé d'abord. Un véhicule invalide rejette l'appel avec
422et une cartevehiclespar véhicule ; rien n'est écrit. complete: truedéclare que l'envoi est votre stock entier. Les véhicules gérés par l'API (portant un de vos ids externes) qui en sont absents sont retirés de la vente, jamais supprimés — ils restent dans votre tableau de bord et reviennent si vous les renvoyez.- Protection contre le vide. Une synchronisation complète sans véhicule nécessite
allow_empty: true, sinon409 empty_snapshot. dry_run: truerenvoiewould_create,would_update,would_unlistet n'écrit rien.- Emplacements. Les véhicules au-delà de vos emplacements de vente sont enregistrés non publiés avec un avertissement
sale_limit_reachedau lieu de faire échouer la synchronisation.
Les véhicules ajoutés à la main sur le site ne sont jamais touchés par une synchronisation.
Emplacements de vente
Chaque compte garage dispose d'un nombre de véhicules pouvant être en vente en même temps (niveau gratuit, abonnements, ou un nombre attribué par Driv.one). GET /v1/me renvoie slots.used, slots.limit et slots.available.
Une création ou mise à jour qui dépasserait ce nombre échoue avec 403 sale_limit_reached. Pour libérer un emplacement, faites PATCH {"is_for_sale": false} sur un véhicule — il reste enregistré et peut être remis en vente. Des emplacements supplémentaires s'achètent sur {link}.
Photos
Les photos sont ordonnées ; l'ordre 0 est la photo principale affichée sur les fiches. Les grandes images sont réduites à 2560 px sur le grand côté et réencodées ; tout ce qui dépasse 15 Mo ensuite est refusé.
Avec le véhicule
Envoyez image_urls à la création ou à la mise à jour. Les photos sont téléchargées depuis vos serveurs dans l'ordre donné et remplacent tout le jeu de photos. Omettez le champ pour ne pas toucher aux photos. Si aucune URL n'est accessible, les photos existantes sont conservées et un avertissement est renvoyé.
Une par une
curl -X POST https://api.driv.one/v1/vehicles/STOCK-4821/images \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://cdn.example-dealer.be/stock/4821/rear.jpg", "order": 1}'
curl -X POST https://api.driv.one/v1/vehicles/STOCK-4821/images \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "image=@rear.jpg" -F "order=1"
Réordonner
curl -X PUT https://api.driv.one/v1/vehicles/STOCK-4821/images/order \
-H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"ids": [912, 910, 911]}'
http(s) publiques. Les destinations locales, privées et réservées sont refusées à chaque redirection. Le contenu est vérifié comme une vraie image, quel que soit le Content-Type annoncé.Équipements (106 valeurs)
Envoyez les équipements sous forme de slugs dans features et les aides au stationnement dans parking_assist. Seules les valeurs ci-dessous sont acceptées ; les slugs inconnus renvoient 422 en les nommant. Omettre le champ en PATCH conserve les équipements ; envoyer [] les efface. Libellés dans chaque langue : GET /v1/options.
Aides au stationnement parking_assist
6cam_360Caméra 360° · 360° Cameracam_frontCaméra avant · Front cameracam_rearCaméra arrière · Rear cameraself_steeringSystèmes à direction automatique · Self-steering systemssens_frontCapteurs avant · Front parking sensorssens_rearCapteurs arrière · Rear parking sensorsExtérieur features 78
Électronique
10absABS · ABSespESP · ESPimmobiliserAntidémarrage électronique · Electronic immobilisercentralLockingVerrouillage centralisé · Central lockingkeylessVerrouillage centralisé sans clé · Keyless central lockingrainSensorCapteur de pluie · Rain sensorlightSensorCapteur de lumière · Light sensortyrePressureMonitorContrôle pression des pneus · Tyre pressure monitoringstartStopSystème Start/Stop · Start/stop systemelectricTailgateHayon électrique · Electric tailgateÉclairage
6fogLightsPhares antibrouillard · Fog lightsledDrlFeux de jour LED · LED daytime running lightsdrlFeux de jour · Daytime running lightscorneringLightFeux de virage · Cornering lightheadlightWasherLave-phares · Headlight washerdynamicIndicatorsClignotants dynamiques / séquentiels / glissants · Dynamic / sweeping / sliding indicatorsPhares
7biXenonHeadlightsPhares bi-xénon · Bi-xenon headlightsxenonHeadlightsPhares au xénon · Xenon headlightsledHeadlightsPhares LED · LED headlightslaserLightFeux laser · Laser lighthighBeamAssistAssistant feux de route · High beam assistnightVisionAssistant vision nocturne · Night vision assistantmatrixLightsPhares intelligents / matriciels · Intelligent / matrix lightsAssistants de conduite
12distanceWarnerAvertisseur de distance · Distance warninghillStartAssistAide au démarrage en côte · Hill start assistspeedLimiterLimiteur de vitesse · Speed limiteremergencyBrakeAssistAide au freinage d'urgence · Emergency brake assistlaneAssistAide au maintien de voie · Lane assistblindSpotMonitorAide aux angles morts · Blind spot monitortractionControlContrôle de traction · Traction controltrafficSignRecognitionReconnaissance des panneaux · Traffic sign recognitionadaptiveCorneringFeux de virage adaptatifs · Adaptive cornering lightcruiseControlRégulateur de vitesse · Cruise controladaptiveCruiseControlRégulateur de vitesse adaptatif · Adaptive cruise controlfatigueWarnerAssistant de fatigue · Fatigue warning systemConfort & autres
43tintedWindowsVitres teintées · Tinted windowsadaptiveSuspensionSuspension adaptative · Adaptive suspensionallWeatherTyresPneus toutes saisons · All-weather tyresheatedWindscreenPare-brise chauffant · Heated windscreendisabledAccessAccès handicapés · Disabled accessroofRailsRails de toit · Roof railsairSuspensionSuspension pneumatique · Air suspensionspareWheelRoue de secours · Spare wheeltyreSealantKit anti-crevaison · Tyre sealant kitfullSizeSpareRoue de secours complète · Full-size spare wheelpowerSteeringDirection assistée · Power steeringsummerTyresPneus d'été · Summer tyressportSuspensionSuspension sport · Sport suspensionsportPackagePack sport · Sport packagesteelWheelsJantes en acier · Steel wheelsalloyWheelsJantes en alliage · Alloy wheelswinterPackagePack hiver · Winter packagewinterTyresPneus d'hiver · Winter tyrespanoramicRoofToit panoramique · Panoramic roofslidingRoofToit ouvrant · Sliding rooffoldingRoofToit pliant · Folding rooftowHitchAttelage · Tow hitchalarmSystemSystème d'alarme · Alarm systemambientLightingÉclairage d'ambiance · Ambient lightingelectricWindowsVitres électriques · Electric windowshandsFreeKit mains libres · Hands-free systemcargoPartitionSéparation de coffre · Cargo area partitionisofixIsofix · IsofixisofixPassengerIsofix siège passager · Isofix passenger seatemergencyCallSystemSystème d'appel d'urgence · Emergency call systemsmokersPackagePack fumeur · Smoker's packagerightHandDriveConduite à droite · Right-hand driveskiStorageSac à skis · Ski storageauxiliaryHeatingChauffage auxiliaire · Auxiliary heatingusbUSB · USBheatedSteeringWheelVolant chauffant · Heated steering wheelleatherSteeringWheelVolant en cuir · Leather steering wheelmultifunctionSteeringWheelVolant multifonction · Multifunction steering wheelpaddleShiftersPalettes au volant · Paddle shifterselectricMirrorsRétroviseurs électriques · Electric mirrorselectricFoldingMirrorsRétroviseurs électriques rabattables · Electric folding mirrorsautoGlareFreeMirrorRétroviseur intérieur antiéblouissement · Auto-dimming interior mirrorvirtualMirrorsRétroviseurs latéraux virtuels · Virtual side mirrorsIntérieur features 28
Infodivertissement
17androidAutoAndroid Auto · Android AutoappleCarplayApple CarPlay · Apple CarPlaybluetoothBluetooth · BluetoothboardComputerOrdinateur de bord · On-board computercdPlayerLecteur CD · CD playerheadUpDisplayAffichage tête haute · Head-up displayinductiveChargingChargement inductif pour smartphones · Inductive charging for smartphonesmusicStreamingStreaming musical intégré · Integrated music streamingnavigationSystème de navigation · Navigation systemradioDabRadio DAB · DAB radiosoundSystemSystème audio · Sound systemtouchscreenÉcran tactile · TouchscreentunerRadioAutoradio · Tuner/RadiotvTV · TVvoiceControlCommande vocale · Voice controlwifiHotspotPoint d'accès Wi-Fi · Wi-Fi hotspotdigitalInstrumentClusterTableau de bord entièrement numérique · Fully digital instrument clusterSièges
11armrestAccoudoir · ArmrestelectricSeatAdjustRéglage électrique des sièges · Electric seat adjustmentelectricSeatAdjustMemoryRéglage électrique avec mémoire · Electric seat adjustment with memoryelectricSeatAdjustRearRéglage électrique sièges arrière · Electric rear seat adjustmentlumbarSupportSoutien lombaire · Lumbar supportmassageSeatsSièges massants · Massage seatsseatVentilationVentilation des sièges · Seat ventilationseatHeatingSièges chauffants · Seat heatingseatHeatingRearSièges arrière chauffants · Rear seat heatingsportSeatsSièges sport · Sport seatsfoldablePassengerSeatSiège passager rabattable · Foldable passenger seatÉnumérations
Libellés dans la langue choisie ; toutes les langues sont dans GET /v1/options. Les valeurs inconnues sont refusées, jamais devinées.
vehicle_type
year
1990 – 2027
fuel_type
12| Valeur | Libellé | English |
|---|---|---|
petrol | Essence | Petrol / Gasoline |
diesel | Diesel | Diesel |
electric | Électrique | Electric |
hybrid_petrol | Hybride (Essence) | Hybrid (Petrol) |
hybrid_diesel | Hybride (Diesel) | Hybrid (Diesel) |
phev_petrol | PHEV (Essence) | PHEV (Petrol) |
phev_diesel | PHEV (Diesel) | PHEV (Diesel) |
lpg | GPL | LPG |
cng | GNV | CNG |
hydrogen | Hydrogène | Hydrogen |
mild_hybrid | Hybride léger | Mild Hybrid |
other | Autre | Other |
gearbox_type
5| Valeur | Libellé | English |
|---|---|---|
manual | Manuelle | Manual |
automatic | Automatique | Automatic |
cvt | CVT | CVT |
dct | Double embrayage (DCT) | Dual-Clutch (DCT) |
semi_auto | Semi-automatique | Semi-automatic |
body_type
11| Valeur | Libellé | English |
|---|---|---|
sedan | Berline | Sedan |
hatchback | Hatchback | Hatchback |
estate | Break | Estate / Break |
coupe | Coupé | Coupé |
convertible | Cabriolet | Cabriolet / Convertible |
suv | SUV | SUV |
crossover | Crossover | Crossover |
mpv | MPV / Monospace | MPV / Minivan |
pickup | Pick-up | Pickup |
van | Utilitaire | Van |
other | Autre | Other |
drivetrain
3| Valeur | Libellé | English |
|---|---|---|
4wd | Transmission intégrale | 4 wheel drive |
front | Traction avant | Front drive |
rear | Propulsion arrière | Rear drive |
steering_position
2| Valeur | Libellé | English |
|---|---|---|
lhd | Conduite à gauche | Left-hand drive |
rhd | Conduite à droite | Right-hand drive |
emission_standard
12| Valeur | Libellé | English |
|---|---|---|
euro0 | Euro 0 | Euro 0 |
euro1 | Euro 1 | Euro 1 |
euro2 | Euro 2 | Euro 2 |
euro3 | Euro 3 | Euro 3 |
euro4 | Euro 4 | Euro 4 |
euro5 | Euro 5 | Euro 5 |
euro6 | Euro 6 | Euro 6 |
euro6b | Euro 6b | Euro 6b |
euro6c | Euro 6c | Euro 6c |
euro6d | Euro 6d | Euro 6d |
euro6d_temp | Euro 6d-temp | Euro 6d-temp |
other | Autre | Other |
color
15color est un texte libre ; ces valeurs sont celles que le site traduit.
| Valeur | Libellé | English |
|---|---|---|
white | Blanc | White |
black | Noir | Black |
silver | Argenté | Silver |
gray | Gris | Gray |
blue | Bleu | Blue |
red | Rouge | Red |
green | Vert | Green |
yellow | Jaune | Yellow |
orange | Orange | Orange |
brown | Marron | Brown |
beige | Beige | Beige |
gold | Or | Gold |
purple | Violet | Purple |
pink | Rose | Pink |
other | Autre | Other |
interior_material
6| Valeur | Libellé | English |
|---|---|---|
alcantara | Alcantara | Alcantara |
fabric | Tissu | Fabric |
artificial_leather | Similicuir | Artificial leather |
partial_leather | Semi-cuir | Partial leather |
full_leather | Cuir intégral | Full leather |
velour | Velours | Velour |
vehicle_condition
6| Valeur | Libellé | English |
|---|---|---|
factory_new | Neuf d'usine | Factory New |
new_condition | Comme neuf | New Condition |
new_with_damage | Comme neuf avec dommages | New Condition with Damage |
used | Occasion | Used |
used_with_damage | Occasion avec dommages | Used with Damage |
parts | Pour pièces | Used for Parts |
maintenance_history
4| Valeur | Libellé | English |
|---|---|---|
none | Non | No |
dealership | Oui, chez le concessionnaire | Yes, with dealership |
platform | Oui, via the platform | Yes, with the platform |
both | Oui, chez le concessionnaire et via the platform | Yes, with dealership and the platform |
airbags
4| Valeur | Libellé | English |
|---|---|---|
airbagDriver | Airbag conducteur | Driver airbag |
airbagFront | Airbags frontaux | Front airbags |
airbagFrontSide | Airbags frontaux et latéraux | Front & side airbags |
airbagFull | Airbags frontaux, latéraux et arrière | Front, side & rear airbags |
air_conditioning
5| Valeur | Libellé | English |
|---|---|---|
acNone | Sans climatisation | None |
acManual | Manuelle | Manual |
ac2Zone | Automatique 2 zones | 2-zone automatic |
ac3Zone | Automatique 3 zones | 3-zone automatic |
ac4Zone | Automatique 4 zones | 4-zone automatic |
Erreurs
Les erreurs sont en JSON avec un code error stable et un message lisible ; certaines portent des clés supplémentaires.
{
"error": "validation_error",
"message": "One or more fields are invalid.",
"fields": {
"fuel_type": [
"\"gasoline\" is not a valid choice."
],
"features": [
"Unknown features: sunroof. GET /v1/options lists the accepted values."
]
}
}
| HTTP | error | Signification |
|---|---|---|
| 401 | invalid_api_key | Clé absente, inconnue ou révoquée. |
| 403 | read_only_key | La clé ne peut que lire. |
| 403 | workshop_blocked / workshop_inactive | Le garage ne peut pas publier pour le moment. |
| 403 | sale_limit_reached | Tous les emplacements de vente sont utilisés. Le corps contient used, limit, available. |
| 404 | vehicle_not_found / image_not_found / make_not_found | Introuvable dans ce garage. |
| 409 | duplicate_vin / duplicate_license_plate | Un autre véhicule porte déjà cet identifiant. |
| 409 | stale_update | Le external_updated_at enregistré est plus récent que celui envoyé. |
| 409 | empty_snapshot | Une synchronisation complète sans véhicule nécessite allow_empty: true. |
| 422 | validation_error | Erreurs par champ sous `fields` (ou `vehicles` pour une synchronisation). Rien n'a été écrit. |
| 422 | image_url_* / image_too_large / image_unreadable | Une photo n'a pas pu être récupérée. À la création ou à la mise à jour, ce sont des avertissements, pas des échecs. |
| 429 | — | Limite d'utilisation. Réessayez après l'en-tête `Retry-After`. |
Réponses réussies : 200 lecture ou mise à jour, 201 créé, 204 supprimé.
Limites d'utilisation
Chaque clé peut faire 3 000 requêtes par heure. Au-delà, l'API répond 429 avec un en-tête Retry-After. Une synchronisation nocturne complète de quelques centaines de voitures utilise une poignée d'appels ; s'il vous en faut plus, contactez Driv.one.
Les téléchargements de photos comptent dans le même budget via les appels qui les déclenchent, pas par image.