1. Authentification
Pas d'authentification requise pour la version publique. Les endpoints sont en acces libre depuis n'importe quel domaine (CORS Access-Control-Allow-Origin: *).
Un systeme de cles API privees sera disponible pour les usages commerciaux a forte volumetrie (quotas etendus, support, SLA). Voir quotas.
Limites par defaut
- 60 requetes / minute par adresse IP.
- 1 000 requetes / jour par adresse IP.
- Au-dela : reponse
HTTP 429 Too Many Requests avec header Retry-After.
Chaque reponse inclut le compteur restant via le header X-RateLimit-Remaining et le champ _meta.rate_limit_remaining.
2. Endpoints
GET/api/public/v1/cities
Liste des villes
Retourne les villes qualifiees (population ≥ 1 000, ≥ 5 transactions DVF, au moins une donnee de marche).
Query params (optionnels)
dept - code departement INSEE (42, 2A, 75...).minYield - rendement brut minimum, en pourcentage. Ex : 5 pour ≥ 5%.limit - taille de la page (defaut 50, max 200).
Cache
Cache-Control: public, max-age=3600 (1 heure).
GET/api/public/v1/cities/{slug}
Detail d'une ville
Detail enrichi pour une ville : prix, loyer, rendement, tension, indice RentaImmo (score 0-100). 404 si le slug est inconnu ou la ville non qualifiee.
Path param
slug - identifiant URL de la ville (ex : lyon, saint-etienne, rennes-35).
Cache
Cache-Control: public, max-age=3600.
GET/api/public/v1/regions
Aggregats par region
Retourne les 13 regions metropolitaines avec moyennes ponderees par population (prix m2, loyer m2, rendement brut, tension).
Cache
Cache-Control: public, max-age=21600 (6 heures).
Headers communs
X-RentaImmo-Source: https://renta-immo.frX-Attribution-Required: trueX-RateLimit-RemainingAccess-Control-Allow-Origin: *
3. Exemples
cURL - toutes les villes du Rhone (69) avec rendement ≥ 5%
curl "https://renta-immo.fr/api/public/v1/cities?dept=69&minYield=5&limit=20" \
-H "Accept: application/json"
cURL - detail Lyon
curl "https://renta-immo.fr/api/public/v1/cities/lyon"
cURL - moyennes par region
curl "https://renta-immo.fr/api/public/v1/regions"
JavaScript / fetch
const res = await fetch(
"https://renta-immo.fr/api/public/v1/cities?dept=42&minYield=6"
);
if (!res.ok) throw new Error("HTTP " + res.status);
const { data, _meta } = await res.json();
console.log(data); // [{ slug, name, grossYield, ... }, ...]
console.log(_meta.license); // "CC BY 4.0 - Mention obligatoire 'Source: RentaImmo'"
Node.js / TypeScript
interface PublicCity {
slug: string;
name: string;
department: string;
region: string;
population: number;
avgPricePerSqm: number;
avgRentPerSqm: number;
grossYield: number;
tension: number;
lastUpdated: string;
}
async function getCities(dept?: string): Promise<PublicCity[]> {
const url = new URL("https://renta-immo.fr/api/public/v1/cities");
if (dept) url.searchParams.set("dept", dept);
const r = await fetch(url, { headers: { Accept: "application/json" } });
if (!r.ok) throw new Error(`API error: ${r.status}`);
const json: { data: PublicCity[] } = await r.json();
return json.data;
}
4. Schema des reponses
GET /cities (200)
{
"data": [
{
"slug": "lyon",
"name": "Lyon",
"department": "69",
"region": "Auvergne-Rhone-Alpes",
"population": 522969,
"avgPricePerSqm": 4800,
"avgRentPerSqm": 15.0,
"grossYield": 3.8,
"tension": 85,
"lastUpdated": "2026-04-30T08:00:00.000Z"
}
],
"count": 1,
"_meta": {
"source": "RentaImmo",
"attribution_url": "https://renta-immo.fr",
"license": "CC BY 4.0 - Mention obligatoire 'Source: RentaImmo'",
"rate_limit_remaining": 59,
"doc_url": "https://renta-immo.fr/developpeurs"
}
}
GET /cities/{slug} (200)
{
"data": {
"slug": "lyon",
"name": "Lyon",
"department": "69",
"region": "Auvergne-Rhone-Alpes",
"population": 522969,
"avgPricePerSqm": 4800,
"avgRentPerSqm": 15.0,
"grossYield": 3.8,
"tension": 85,
"priceEvolution": "+1.5% sur 1 an",
"marketTrend": "hausse",
"dvfTransactionCount": 1240,
"indice": {
"score": 67,
"tier": "bon",
"breakdown": {
"yield": 16.6,
"tension": 21.3,
"priceEvolution": 13.0,
"populationGrowth": 5.0,
"economicStability": 10.0,
"transports": 5.0
}
},
"lastUpdated": "2026-04-30T08:00:00.000Z"
},
"_meta": { ... }
}
Codes d'erreur
400 Bad Request - slug invalide.404 Not Found - ville inconnue ou non qualifiee.429 Too Many Requests - quota atteint, voir Retry-After.500 Internal Server Error - erreur serveur (pas de payload metier).
5. License et attribution
Les donnees exposees par cette API sont publiees sous license Creative Commons Attribution 4.0 (CC BY 4.0). Vous etes libre de :
- Partager - copier et redistribuer les donnees sur tout support.
- Adapter - modifier, transformer et utiliser les donnees, y compris a des fins commerciales.
Sous condition d'attribution
Toute publication, application, etude ou article qui reutilise ces donnees DOIT :
- Citer textuellement « Source : RentaImmo ».
- Inclure un lien dofollow vers
https://renta-immo.fr. - Indiquer si les donnees ont ete modifiees.
Exemple d'attribution conforme
Source : RentaImmo (https://renta-immo.fr) - License CC BY 4.0
Garanties
Les donnees sont fournies « en l'etat », sans garantie d'exactitude ni de completude. Elles agregent des sources publiques (DVF, INSEE, observatoires loyer) et un calcul proprietaire. Ne constituent pas un conseil en investissement.
6. Quotas et plans Pro
Le plan public gratuit propose 60 requetes / minute et 1 000 requetes / jour par IP. C'est suffisant pour la plupart des prototypes, sites editoriaux et integrations widgets.
Pour des usages plus intensifs (production, analytics, white label), nous proposons :
- Cles API personnelles (non-partagees, identification claire).
- Quotas eleves (jusqu'a 100 000 req/jour).
- SLA et support dedie.
- Acces a des endpoints additionnels (DVF brut, alertes, comparateur).
Demander une cle API ProChangelog
- v1.0 - Lancement avec 3 endpoints publics : cities, cities/[slug], regions.
Une question, un bug, une idee d'endpoint ? Ecrivez-nous sur /contact ou ouvrez une issue publique.