1. Authentification
Pas d'authentification requise pour la version publique. Les endpoints sont en accès libre depuis n'importe quel domaine (CORS Access-Control-Allow-Origin: *).
Un système de clés API privées sera disponible pour les usages commerciaux à forte volumétrie (quotas étendus, support, SLA). Voir quotas.
Limites par défaut
- 60 requêtes / minute par adresse IP.
- 1 000 requêtes / jour par adresse IP.
- Au-delà : réponse
HTTP 429 Too Many Requests avec header Retry-After.
Chaque réponse 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 qualifiées (population ≥ 1 000, ≥ 5 transactions DVF, au moins une donnée de marché).
Query params (optionnels)
dept - code département INSEE (42, 2A, 75...).minYield - rendement brut minimum, en pourcentage. Ex : 5 pour ≥ 5%.limit - taille de la page (défaut 50, max 200).
Cache
Cache-Control: public, max-age=3600 (1 heure).
GET/api/public/v1/cities/{slug}
Détail d'une ville
Détail enrichi pour une ville : prix, loyer, rendement, tension, indice RentaImmo (score 0-100). 404 si le slug est inconnu ou la ville non qualifiée.
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
Agrégats par région
Retourne les 13 régions métropolitaines avec moyennes pondérées par population (prix m², loyer m², 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 Rhône (69) avec rendement ≥ 5%
curl "https://renta-immo.fr/api/public/v1/cities?dept=69&minYield=5&limit=20" \
-H "Accept: application/json"
cURL - détail Lyon
curl "https://renta-immo.fr/api/public/v1/cities/lyon"
cURL - moyennes par région
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. Schéma des réponses
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 qualifiée.429 Too Many Requests - quota atteint, voir Retry-After.500 Internal Server Error - erreur serveur (pas de payload métier).
5. Licence et attribution
Les données exposées par cette API sont publiées sous licence Creative Commons Attribution 4.0 (CC BY 4.0). Vous êtes libre de :
- Partager - copier et redistribuer les données sur tout support.
- Adapter - modifier, transformer et utiliser les données, y compris à des fins commerciales.
Sous condition d'attribution
Toute publication, application, étude ou article qui réutilise ces données DOIT :
- Citer textuellement « Source : RentaImmo ».
- Inclure un lien dofollow vers
https://renta-immo.fr. - Indiquer si les données ont été modifiées.
Exemple d'attribution conforme
Source : RentaImmo (https://renta-immo.fr) - Licence CC BY 4.0
Garanties
Les données sont fournies « en l'état », sans garantie d'exactitude ni de complétude. Elles agrègent des sources publiques (DVF, INSEE, observatoires loyer) et un calcul propriétaire. Ne constituent pas un conseil en investissement.
6. Quotas et plans Pro
Le plan public gratuit propose 60 requêtes / minute et 1 000 requêtes / jour par IP. C'est suffisant pour la plupart des prototypes, sites éditoriaux et intégrations widgets.
Pour des usages plus intensifs (production, analytics, white label), nous proposons :
- Clés API personnelles (non partagées, identification claire).
- Quotas élevés (jusqu'à 100 000 req/jour).
- SLA et support dédié.
- Accès à des endpoints additionnels (DVF brut, alertes, comparateur).
Demander une clé API ProChangelog
- v1.0 - Lancement avec 3 endpoints publics : cities, cities/[slug], regions.
Une question, un bug, une idée d'endpoint ? Écrivez-nous sur /contact ou ouvrez une issue publique.