Démarrage rapide
Authentification
Requête
Réponse
Facturation
Erreurs
Limites
Exemples de code
Référence des champs
Bonnes pratiques
Démarrage rapide
Générez une clé dans Clés API . Elle n'est affichée qu'une seule fois : conservez-la en lieu sûr.
Appelez l'API avec la plaque recherchée :
curl -H "X-API-Key: VOTRE_CLE" \
"https://siv.ckd.agency/api/v1/plaque?immat=AA-123-BC"
Vous recevez les caractéristiques du véhicule au format JSON (marque, modèle, motorisation, VIN, dimensions, pneumatiques…).
Authentification
Chaque requête doit porter votre clé API, au choix :
en-tête X-API-Key: pk_live_… (recommandé) ;
ou en-tête Authorization: Bearer pk_live_….
Vous pouvez créer plusieurs clés (une par application ou par environnement) et révoquer une clé à tout moment ; elle est alors refusée immédiatement. Toutes les clés d'un compte partagent la même consommation et la même facturation.
Ne placez jamais votre clé dans du code exécuté dans le navigateur (JavaScript côté client, application mobile). Appelez l'API depuis votre serveur.
Requête
GET https://siv.ckd.agency/api/v1/plaque
Paramètres (query string)
Paramètre Obligatoire Description
immatoui Plaque d'immatriculation. Espaces, tirets et minuscules acceptés : AA-123-BC, aa 123 bc et AA123BC désignent le même véhicule. Alias accepté : immatriculation.
paysnon Code pays ISO à 2 lettres. Par défaut FR. Valeurs acceptées : FR, ES, UK, DE, IT, PT, NL.
Réponse
Réponse 200 au format JSON, composée de deux blocs :
data : les caractéristiques du véhicule (voir référence des champs ) ;
meta : les informations sur votre requête et votre consommation.
Bloc meta
Champ Type Description
request_identier Identifiant unique de la requête. À conserver de votre côté et à nous communiquer en cas de question.
platetexte Plaque normalisée (majuscules, sans séparateur).
countrytexte Pays utilisé pour la recherche.
sourcetexte Information technique sur l'origine de la donnée ; n'a aucun impact sur le contenu ni sur la facturation.
billedbooléen true si cette requête est facturée, false sinon.
unit_price_httexte décimal Prix HT appliqué à cette requête ("0.0000" si non facturée).
usage.periodtexte Mois en cours (AAAA-MM).
usage.requestsentier Nombre total de vos requêtes ce mois-ci, celle-ci incluse (toutes clés, tous résultats).
usage.billed_requestsentier Nombre de requêtes facturées ce mois-ci.
usage.amount_httexte décimal Montant HT cumulé du mois.
Exemple de réponse complète
{
"data": {
"erreur": "",
"immat": "AA123BC",
"pays": "FR",
"marque": "RENAULT",
"modele": "MEGANE III",
"modele_en": "MEGANE III Coupe",
"version": "1.9 dCi",
"debut_modele": "2008-11",
"fin_modele": "2015-08",
"date1erCir_us": "2009-04-18",
"date1erCir_fr": "18-04-2009",
"co2": "",
"energie": "2",
"energieNGC": "DIESEL",
"type_moteur": "Diesel",
"genreVCG": "1",
"genreVCGNGC": "VP",
"puisFisc": "7",
"carrosserieCG": "COUPE",
"code_carrosserie": "29",
"carrosserie": "Coupé",
"code_type_transmission": "1",
"type_transmission": "Traction avant",
"capacite_litres": "1.90",
"code_systeme_alimentation": "11",
"systeme_alimentation": "Injection directe",
"valves": "2",
"puisFiscReelKW": "96 KW",
"puisFiscReelCH": "131 CH",
"collection": "",
"vin": "VF1DZ0N0641118804",
"variante": "DZ0N06",
"boite_vitesse": "M",
"code_boite_vitesse": "",
"nr_passagers": "",
"nb_portes": "0",
"type_mine": "MRE5531A0421",
"cnit": "MRE5531A0421",
"couleur": "",
"poids": "",
"ptac": "",
"ccm": "1870 CM3",
"cylindres": "4",
"propulsion": "",
"type_compression": "",
"longueur": "",
"largeur": "",
"hauteur": "",
"empattement": "",
"sra_id": "",
"sra_group": "",
"sra_commercial": "1.9 dCi (DZ0N, DZ0J, DZ1J, DZ1K)",
"numero_serie": "41118804",
"prix_estime": "",
"logo_marque": "https://siv.ckd.agency/media/vehicules/marques/93.png",
"photo_modele": "https://siv.ckd.agency/media/vehicules/modeles/31164.jpg",
"k_type": "31164",
"tecdoc_manu_id": "93",
"tecdoc_model_id": "7867",
"tecdoc_car_id": "31164",
"tecdoc_vehicules_compatible": "",
"code_moteur": "F9Q_870,F9Q_872",
"codes_platforme": "DZ0/1_",
"liste_sra_commercial": null,
"pneus": [
{
"name": "205/50 R 17",
"width": 205,
"height": 50,
"diameter": 17,
"load_index": 89,
"speed_index": "V"
},
{
"name": "205/55 R 16",
"width": 205,
"height": 55,
"diameter": 16,
"load_index": 91,
"speed_index": "H"
}
]
},
"meta": {
"request_id": 18342,
"plate": "AA123BC",
"country": "FR",
"source": "upstream",
"billed": true,
"unit_price_ht": "0.0600",
"usage": {
"period": "2026-11",
"requests": 152,
"billed_requests": 98,
"amount_ht": "5.88"
}
}
}
Formats des valeurs
Toutes les valeurs de data sont des chaînes, sauf les listes pneus et liste_sra_commercial.
Une valeur inconnue est une chaîne vide "" ; certaines valeurs numériques inconnues valent "0".
Dates : date1erCir_fr au format JJ-MM-AAAA, date1erCir_us au format AAAA-MM-JJ. debut_modele / fin_modele au format AAAA-MM.
Certaines valeurs incluent leur unité ("1995 CM3", "200 KW", "2472 KG") : pensez à les nettoyer si vous les traitez comme des nombres.
De nouveaux champs peuvent être ajoutés à data sans préavis : ignorez les champs que vous ne connaissez pas.
Facturation
Chaque véhicule est facturé une seule fois par compte , lors de votre première consultation (0,06 € HT au tarif actuel).
Les consultations suivantes du même véhicule par votre compte sont gratuites , quelle que soit la clé utilisée.
Les véhicules introuvables (404), les requêtes invalides (422) et les erreurs ne sont jamais facturés .
Le prix appliqué est celui en vigueur au moment de la requête ; il est indiqué dans meta.unit_price_ht.
La facturation est mensuelle. Le détail de chaque requête est consultable et exportable (CSV) dans Requêtes .
Erreurs
En cas d'erreur, la réponse contient un bloc error et, dès que la clé est reconnue, le bloc meta :
{
"error": { "code": "not_found", "message": "Véhicule introuvable" },
"meta": { "request_id": 18343, "plate": "ZZ999ZZ", "country": "FR", "source": "not_found",
"billed": false, "unit_price_ht": "0.0000",
"usage": { "period": "2026-11", "requests": 153, "billed_requests": 98, "amount_ht": "5.88" } }
}
HTTP error.codeSignification Facturé Que faire
401 unauthorizedClé absente, invalide ou révoquée non Vérifier la clé envoyée
403 forbiddenCompte en attente de validation ou suspendu non Nous contacter
404 not_foundAucun véhicule pour cette plaque non Vérifier la saisie ; ne pas réessayer en boucle
422 invalid_requestPlaque vide ou mal formée, pays non pris en charge non Corriger les paramètres
429 rate_limitedPlus de 60 requêtes par minute sur votre compte non Patienter puis réessayer
429 quota_exceededProtection du compte : quota quotidien de nouveaux véhicules atteint, ou trop de plaques introuvables en peu de temps. Les véhicules déjà consultés restent accessibles. non Réessayer plus tard ou nous contacter pour relever le quota
502 upstream_errorService temporairement indisponible non Réessayer quelques secondes plus tard
Limites
60 requêtes par minute par compte, toutes clés confondues (limite ajustable sur demande). Au-delà : réponse 429. Les en-têtes X-RateLimit-Limit, X-RateLimit-Remaining et Retry-After indiquent où vous en êtes.
Temps de réponse : quelques millisecondes pour un véhicule déjà connu, jusqu'à quelques secondes pour une première recherche. Prévoyez un délai d'attente (timeout) d'au moins 20 secondes.
Volume mensuel : illimité.
Exemples de code
cURL
curl -s -H "X-API-Key: $PLAQUE_API_KEY" \
"https://siv.ckd.agency/api/v1/plaque?immat=AA-123-BC&pays=FR"
PHP (Guzzle / Laravel HTTP)
// Laravel
$response = Http::withHeaders(['X-API-Key' => env('PLAQUE_API_KEY')])
->timeout(20)
->get('https://siv.ckd.agency/api/v1/plaque', ['immat' => 'AA-123-BC', 'pays' => 'FR']);
if ($response->successful()) {
$vehicule = $response->json('data'); // marque, modele, vin…
$facture = $response->json('meta.billed');
} elseif ($response->status() === 404) {
// véhicule introuvable (non facturé)
}
// PHP natif
$ch = curl_init('https://siv.ckd.agency/api/v1/plaque?' . http_build_query(['immat' => 'AA-123-BC']));
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ['X-API-Key: ' . getenv('PLAQUE_API_KEY')],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 20,
]);
$json = json_decode(curl_exec($ch), true);
JavaScript (Node.js 18+)
const url = new URL('https://siv.ckd.agency/api/v1/plaque');
url.searchParams.set('immat', 'AA-123-BC');
const res = await fetch(url, {
headers: { 'X-API-Key': process.env.PLAQUE_API_KEY },
signal: AbortSignal.timeout(20000),
});
const body = await res.json();
if (res.ok) {
console.log(body.data.marque, body.data.modele, body.meta.billed);
} else {
console.error(res.status, body.error.code, body.error.message);
}
Python (requests)
import os, requests
r = requests.get(
"https://siv.ckd.agency/api/v1/plaque",
params={"immat": "AA-123-BC", "pays": "FR"},
headers={"X-API-Key": os.environ["PLAQUE_API_KEY"]},
timeout=20,
)
body = r.json()
if r.ok:
print(body["data"]["marque"], body["data"]["modele"], body["meta"]["billed"])
else:
print(r.status_code, body["error"]["code"])
Référence des champs data
Liste des champs renvoyés, avec un exemple réel. Les champs vides ne sont pas renseignés pour tous les véhicules.
Identification
Champ Description Exemple
immatImmatriculation AA123BC
paysPays FR
date1erCir_fr1ʳᵉ mise en circulation 18-04-2009
vinVIN VF1DZ0N0641118804
numero_serieN° de série 41118804
type_mineType mine MRE5531A0421
cnitCNIT MRE5531A0421
genreVCGNGCGenre (carte grise) VP
couleurCouleur —
prix_estimePrix neuf estimé —
Modèle
Champ Description Exemple
marqueMarque RENAULT
modeleModèle MEGANE III
modele_enModèle (international) MEGANE III Coupe
versionVersion 1.9 dCi
sra_commercialDésignation commerciale 1.9 dCi (DZ0N, DZ0J, DZ1J, DZ1K)
varianteVariante DZ0N06
collectionCollection —
debut_modeleDébut de commercialisation 2008-11
fin_modeleFin de commercialisation 2015-08
codes_platformePlateforme DZ0/1_
Motorisation
Champ Description Exemple
energieNGCÉnergie DIESEL
type_moteurType de moteur Diesel
puisFiscPuissance fiscale (CV) 7
puisFiscReelCHPuissance réelle (ch) 131 CH
puisFiscReelKWPuissance réelle (kW) (kW) 96 KW
ccmCylindrée (cm³) 1870 CM3
capacite_litresCylindrée (litres) (L) 1.90
cylindresCylindres 4
valvesSoupapes par cylindre 2
systeme_alimentationAlimentation Injection directe
type_compressionCompression —
code_moteurCode moteur F9Q_870,F9Q_872
co2Émissions CO₂ (g/km) —
Transmission et carrosserie
Champ Description Exemple
boite_vitesseBoîte de vitesses M
type_transmissionTransmission Traction avant
propulsionPropulsion —
carrosserieCarrosserie Coupé
carrosserieCGCarrosserie (carte grise) COUPE
nb_portesPortes 0
nr_passagersPlaces —
Dimensions et poids
Champ Description Exemple
longueurLongueur (cm) —
largeurLargeur (cm) —
hauteurHauteur (cm) —
empattementEmpattement (cm) —
poidsPoids à vide (kg) —
ptacPTAC (kg) —
Références techniques
Champ Description Exemple
k_typeK-Type 31164
tecdoc_manu_idTecDoc constructeur 93
tecdoc_model_idTecDoc modèle 7867
tecdoc_car_idTecDoc véhicule 31164
tecdoc_vehicules_compatibleTecDoc compatibles —
sra_idCode SRA —
sra_groupGroupe SRA —
date1erCir_us1ʳᵉ circulation (format ISO) 2009-04-18
energieCode énergie 2
genreVCGCode genre 1
code_carrosserieCode carrosserie 29
code_type_transmissionCode transmission 1
code_systeme_alimentationCode alimentation 11
code_boite_vitesseCode boîte —
Visuels et listes
Champ Description Exemple
logo_marqueURL du logo de la marque (PNG) https://siv.ckd.agency/media/vehicules/marques/93.png
photo_modeleURL d'une photo du modèle (JPG) https://siv.ckd.agency/media/vehicules/modeles/31164.jpg
pneus[]Montes de pneumatiques : name, width, height, diameter, load_index, speed_index [{"name":"255/70 R 18", …}]
liste_sra_commercial[]Versions commerciales SRA : sra_id, sra_commercial [{"sra_id":"JP08005", …}]
erreurToujours vide quand le véhicule est trouvé —
Bonnes pratiques
Normalisez et validez la plaque côté client avant l'appel pour éviter les 422.
Enregistrez meta.request_id avec vos données : il permet de retrouver chaque requête dans votre relevé.
En cas de 429 ou 502, réessayez avec un délai croissant (1 s, 2 s, 4 s…), au maximum 3 fois.
Ne réessayez pas automatiquement un 404 : le résultat sera le même.
Utilisez une clé par application ; révoquez immédiatement une clé compromise et générez-en une nouvelle.
Les URL logo_marque et photo_modele sont stables : vous pouvez les afficher directement ou les mettre en cache.