Documentation technique : lire une plaque minéralogique via API

Cette documentation technique de l'API de lecture de plaque minéralogique rassemble ce qu'un développeur doit avoir sous les yeux pendant l'intégration : l'authentification, l'endpoint unique, les formats de plaque acceptés, la structure exacte de la réponse JSON champ par champ, les codes d'erreur et la conduite à tenir pour chacun, les quotas, et des exemples exécutables en cURL, JavaScript et Python. Elle complète la documentation en ligne et le guide d'intégration développeur en se concentrant sur la référence brute.
Authentification
L'API s'authentifie par clé, transmise en en-tête HTTP. Aucun jeton OAuth, aucune session : chaque requête porte sa propre authentification.
| En-tête | Obligatoire | Valeur |
|---|---|---|
x-rapidapi-key | Oui | Votre clé API |
x-rapidapi-host | Oui | api-de-plaque-d-immatriculation-france.p.rapidapi.com |
Content-Type | Recommandé | application/json |
La clé s'utilise exclusivement côté serveur. Un appel depuis un navigateur ou un binaire mobile expose la clé à quiconque inspecte le trafic. Pour une application mobile, passez par un proxy backend : voir intégrer l'API dans une application mobile.
Endpoint de recherche
Un seul endpoint suffit pour la recherche par plaque.
GET https://api-de-plaque-d-immatriculation-france.p.rapidapi.com/?plaque={PLAQUE}
| Paramètre | Emplacement | Type | Obligatoire | Description |
|---|---|---|---|---|
plaque | Query string | string | Oui | Numéro d'immatriculation, avec ou sans séparateurs |
Appel minimal :
curl --request GET \
--url 'https://api-de-plaque-d-immatriculation-france.p.rapidapi.com/?plaque=FH-034-DD' \
--header 'Content-Type: application/json' \
--header 'x-rapidapi-host: api-de-plaque-d-immatriculation-france.p.rapidapi.com' \
--header 'x-rapidapi-key: VOTRE_CLE_API'Formats de plaque acceptés
Le paramètre plaque accepte les séparateurs ou non : FH-034-DD, FH034DD et fh 034 dd désignent le même véhicule. La normalisation appliquée côté serveur est : passage en majuscules, suppression des espaces et des tirets.
| Format | Motif | Exemple | Période | Note |
|---|---|---|---|---|
| SIV | AA-123-AA | FH-034-DD | Depuis 2009 | Format principal, numéro attribué à vie |
| FNI | 123 ABC 45 | 4521 XY 75 | Avant 2009 | Les deux derniers chiffres codent le département |
| WW provisoire | WW-123-AA | WW-456-BC | — | Immatriculation temporaire, données parfois partielles |
| Cyclomoteurs | Variable | — | — | Couverture partielle |
Motifs de validation à appliquer côté client avant l'appel :
const SIV = /^[A-Z]{2}[0-9]{3}[A-Z]{2}$/;
const FNI = /^[0-9]{1,4}[A-Z]{2,3}[0-9]{2}$/;
const normaliser = (s) => s.toUpperCase().replace(/[\s-]/g, "");
const valide = (s) => SIV.test(normaliser(s)) || FNI.test(normaliser(s));Les règles de composition de chaque format sont expliquées dans comment lire une plaque d'immatriculation française.
Structure de la réponse
Toute réponse — succès comme erreur — partage la même enveloppe. Vos parseurs peuvent donc traiter le cas d'erreur en un seul point.
{
"error": false,
"code": 200,
"message": "Succès",
"query": "FH-034-DD",
"country": "FR",
"data": { }
}| Champ | Type | Description |
|---|---|---|
error | boolean | false en cas de succès. Le premier champ à tester. |
code | integer | Code HTTP dupliqué dans le corps |
message | string | Libellé lisible, en français |
query | string | La plaque telle que reçue, utile pour corréler en logs |
country | string | Code pays ISO du registre interrogé (FR, GB, ES…) |
data | object | Les données du véhicule. Absent ou vide en cas d'erreur. |
L'objet data, champ par champ
L'objet complet contient plus de cent champs. Voici les plus utilisés, regroupés par famille. Attention à un point important : la quasi-totalité des valeurs sont typées string, y compris les valeurs numériques. Convertissez explicitement avant tout calcul.
Identité administrative
| Champ | Type | Exemple | Note |
|---|---|---|---|
immat | string | "FH034DD" | Plaque normalisée, sans séparateurs |
VIN | string | "VF1R9800962986572" | Numéro de série 17 caractères |
date_mise_en_circulation | string | "20-06-2019" | Format JJ-MM-AAAA |
date_mise_en_circulation_us | string | "2019-06-20" | Format ISO — à privilégier |
date_cg / date_derniere_cg | string | "30-06-2021" | Dates de certificat d'immatriculation |
genre / genre_carte_grise | string | "VP" | VP = voiture particulière, CTTE = camionnette |
type_mine | string | "M10RENVP603P733" | Type national |
pays | string | "FR" | Registre d'origine |
Identité commerciale
| Champ | Type | Exemple |
|---|---|---|
marque | string | "RENAULT" |
modele | string | "CLIO IV" |
version | string | "1.5 dCi 90 (90 hp) [2012-2021]" |
label | string | "CLIO IV 1.5 DCI 90 (EURO 6C)" |
nom_commercial | string | "CLIO 4" |
annee_de_debut_modele / annee_de_fin_modele | string | "2018" / "2019" |
Motorisation
| Champ | Type | Exemple | Note |
|---|---|---|---|
energie | string | "GAZOLE" | Valeurs en majuscules |
code_moteur / codes_moteur | string / array | "K9K_638" | Le tableau peut contenir plusieurs codes |
puissance_chevaux | string | "90" | Puissance réelle |
puissance_KW | string | "66" | |
puissance_fiscale | string | "5" | Chevaux fiscaux |
nbr_cylindre_energie | string | "1461" | Cylindrée en cm³ malgré le nom |
type_boite_vites | string | "MECANIQUE" | |
nbr_vitesses | string | "5" |
Environnement
| Champ | Type | Exemple |
|---|---|---|
emission_co_2 | string | "104" (g/km) |
classe_environnement_ce | string | "715/2007 2017/1347ADEURO6" |
code_certificat_qualite_air | string | Classe Crit'Air |
consommation_mixte / _urbaine / _ex_urbaine | string | l/100 km |
depollution | string | "OUI" |
Carrosserie et dimensions
| Champ | Type | Exemple | Unité |
|---|---|---|---|
carrosserie | string | "BERLINE" | |
nbr_portes / nbr_de_places | string | "5" / "5" | |
longueur / largeur / hauteur | string | "406" / "173" / "145" | cm |
empattement | string | "259" | cm |
poids_vide | string | "1160" | kg |
couleur | string | "GRIS" |
Correspondances pièces
| Champ | Type | Usage |
|---|---|---|
k_type | string | Identifiant TecDoc, pivot des catalogues de pièces |
code_sra | string | Référence assurance |
id_version / modele_id / marque_id | string | Identifiants internes de référentiel |
model_image / url_image | string | URL d'illustration du modèle |
Le rôle du k_type dans une chaîne pièces détachées est détaillé dans intégrer le K-Type et TecDoc ; le catalogue exhaustif est dans le guide complet des données SIV.
Convention importante : un champ non renseigné vaut la
chaîne "INCONNU", pas null et pas une chaîne vide.
Testez donc valeur && valeur !== "INCONNU" avant
d'afficher un champ ou de l'utiliser dans un calcul. C'est la source de bug
numéro un sur cette API.
Exemple de réponse complète
{
"error": false,
"code": 200,
"message": "Succès",
"query": "FH-034-DD",
"country": "FR",
"data": {
"immat": "FH034DD",
"VIN": "VF1R9800962986572",
"marque": "RENAULT",
"modele": "CLIO IV",
"version": "1.5 dCi 90 (90 hp) [2012-2021]",
"date_mise_en_circulation_us": "2019-06-20",
"energie": "GAZOLE",
"code_moteur": "K9K_638",
"puissance_chevaux": "90",
"puissance_fiscale": "5",
"emission_co_2": "104",
"carrosserie": "BERLINE",
"nbr_portes": "5",
"couleur": "GRIS",
"poids_vide": "1160",
"k_type": "57281",
"finition": "INCONNU"
}
}Codes d'erreur
| Code | message | Cause | Conduite à tenir |
|---|---|---|---|
200 | Succès | Données renvoyées | — |
400 | Requête invalide | Format de plaque incorrect | Corriger la saisie. Pas de retry |
401 | Non authentifié | Clé manquante ou invalide | Alerter l'exploitation, vérifier le secret |
404 | Véhicule non trouvé | Plaque absente de la base | Message utilisateur, repli manuel. Pas de retry |
429 | Trop de requêtes | Quota mensuel ou débit dépassé | Backoff exponentiel plafonné |
500 | Erreur interne | Incident côté service | Un retry, puis message d'indisponibilité |
Traitement recommandé, en JavaScript :
async function interrogerPlaque(plaque) {
const res = await fetch(
`https://api-de-plaque-d-immatriculation-france.p.rapidapi.com/?plaque=${plaque}`,
{
headers: {
"x-rapidapi-key": process.env.RAPIDAPI_KEY,
"x-rapidapi-host": "api-de-plaque-d-immatriculation-france.p.rapidapi.com",
},
signal: AbortSignal.timeout(8000),
},
);
switch (res.status) {
case 200:
break;
case 400:
throw new Error("FORMAT_INVALIDE");
case 401:
throw new Error("AUTH");
case 404:
throw new Error("INTROUVABLE");
case 429:
throw new Error("QUOTA");
default:
throw new Error("INDISPONIBLE");
}
const json = await res.json();
if (json.error) throw new Error(json.message);
return json.data;
}Ne retentez jamais un 400 ni un 404 : la réponse
sera identique et chaque tentative consomme du quota. Seuls
429 et 5xx justifient un retry.
Quotas et limitation de débit
Le quota est mensuel et dépend de votre offre. Le dépassement déclenche un 429.
| Offre | Requêtes / mois | Usage visé |
|---|---|---|
| Basic | 10 | Test et prototypage |
| Pro | 600 | Production légère |
| Ultra | 5 000 | Production courante |
| Mega | 10 000 | Volume élevé |
Trois pratiques réduisent fortement la consommation réelle :
- Cache de 24 heures minimum sur la paire plaque → réponse. Les caractéristiques d'un véhicule ne changent pas ; c'est la mesure qui a le plus d'effet sur la facture.
- Validation du format avant l'appel, pour ne jamais consommer de quota sur une saisie invalide.
- Déduplication des appels concurrents portant sur la même plaque.
Le calcul du coût par requête utile est détaillé dans combien coûte une API de reconnaissance de plaque ; la grille à jour est sur la page tarifs.
Exemples de code
JavaScript (Node.js)
const plaque = "FH034DD";
const res = await fetch(
`https://api-de-plaque-d-immatriculation-france.p.rapidapi.com/?plaque=${plaque}`,
{
headers: {
"Content-Type": "application/json",
"x-rapidapi-key": process.env.RAPIDAPI_KEY,
"x-rapidapi-host": "api-de-plaque-d-immatriculation-france.p.rapidapi.com",
},
},
);
const json = await res.json();
const v = json.data;
const propre = (val) => (val && val !== "INCONNU" ? val : null);
console.log({
marque: propre(v.marque),
modele: propre(v.modele),
energie: propre(v.energie),
chevaux: Number(v.puissance_chevaux) || null,
co2: Number(v.emission_co_2) || null,
});Python
import os
import requests
BASE = "https://api-de-plaque-d-immatriculation-france.p.rapidapi.com/"
def propre(valeur):
return None if valeur in (None, "", "INCONNU") else valeur
def interroger_plaque(plaque: str) -> dict:
plaque = plaque.upper().replace("-", "").replace(" ", "")
reponse = requests.get(
BASE,
params={"plaque": plaque},
headers={
"Content-Type": "application/json",
"x-rapidapi-key": os.environ["RAPIDAPI_KEY"],
"x-rapidapi-host": "api-de-plaque-d-immatriculation-france.p.rapidapi.com",
},
timeout=10,
)
if reponse.status_code == 404:
raise LookupError("Véhicule introuvable")
if reponse.status_code == 429:
raise RuntimeError("Quota dépassé")
reponse.raise_for_status()
charge = reponse.json()
if charge.get("error"):
raise RuntimeError(charge.get("message", "Erreur inconnue"))
data = charge["data"]
return {
"marque": propre(data.get("marque")),
"modele": propre(data.get("modele")),
"energie": propre(data.get("energie")),
"chevaux": int(data["puissance_chevaux"]) if propre(data.get("puissance_chevaux")) else None,
"co2": int(data["emission_co_2"]) if propre(data.get("emission_co_2")) else None,
}
print(interroger_plaque("FH-034-DD"))PHP
<?php
$plaque = strtoupper(str_replace(['-', ' '], '', 'FH-034-DD'));
$url = 'https://api-de-plaque-d-immatriculation-france.p.rapidapi.com/?plaque=' . urlencode($plaque);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'x-rapidapi-key: ' . getenv('RAPIDAPI_KEY'),
'x-rapidapi-host: api-de-plaque-d-immatriculation-france.p.rapidapi.com',
],
]);
$corps = curl_exec($ch);
$statut = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($statut !== 200) {
throw new RuntimeException("Requête échouée (HTTP $statut)");
}
$charge = json_decode($corps, true);
if (!empty($charge['error'])) {
throw new RuntimeException($charge['message']);
}
$v = $charge['data'];
$propre = fn ($val) => ($val && $val !== 'INCONNU') ? $val : null;
printf("%s %s — %s\n", $propre($v['marque']), $propre($v['modele']), $propre($v['energie']));Exemple interactif — essayez avec votre propre plaque sur notre page de test
Pièges d'intégration à connaître
- Tout est une chaîne.
puissance_chevauxvaut"90", pas90. Convertissez avant tout calcul ou comparaison. "INCONNU"n'est pasnull. Un test de vérité simple laissera passer cette chaîne et l'affichera à vos utilisateurs.- Deux formats de date coexistent.
date_mise_en_circulationest enJJ-MM-AAAA,date_mise_en_circulation_usen ISO. Utilisez la seconde. - Certains noms de champs induisent en erreur.
nbr_cylindre_energiecontient la cylindrée en cm³, pas un nombre de cylindres — celui-ci est dansnbr_cylindres. - Les tableaux peuvent être vides.
KBAS,pneus,codes_moteurpeuvent revenir vides selon le véhicule. - Le schéma peut s'enrichir. De nouveaux champs peuvent apparaître ; parsez de manière tolérante plutôt qu'en mode strict.
Conclusion
L'API tient en un endpoint, deux en-têtes et une enveloppe de réponse constante. La complexité réelle porte sur le traitement des champs — typage en chaînes, valeur "INCONNU", doubles formats de date — et sur la discipline de cache qui détermine votre facture. Pour la mise en œuvre pas à pas, voyez le guide d'intégration développeur ; pour le cas mobile, l'intégration en application mobile ; pour la vue d'ensemble, le guide complet 2026.
Questions fréquentes
Quel endpoint utiliser pour lire une plaque minéralogique via API ?
Quels formats de plaque l'API accepte-t-elle ?
Que signifie la valeur INCONNU dans la réponse JSON ?
Comment gérer les codes d'erreur de l'API ?
Quels sont les quotas et limites de taux de l'API ?
Les valeurs numériques sont-elles renvoyées en nombres ?

Api Plaque Immatriculation
Expert en identification de véhicules et passionné par les technologies API. Api Plaque Immatriculation partage son expertise sur l'intégration des services de données automobiles.
Articles similaires
Restez informé de nos actualités
Recevez les derniers articles et mises à jour directement par email.


