/projectsscope projects:writeCrée le projet, consomme 1 unité du quota projets, géocode l’adresse si lat/lon sont absents (Base Adresse Nationale), interroge PVGIS (5.3) puis lance le moteur. Réponse 201 avec le projet et son calcul. La version de PVGIS et la base de rayonnement qui ont fourni la production sont renvoyées dans production.pvgis_version et production.pvgis_radiation_db.
Exemple : maison à Gaillac (81600), 40 m² de toiture en tuiles orientée sud, pente 30 %, 6 000 kWh/an en tarif base à 0,25 €/kWh, sans batterie.
curl -X POST https://solaire-eric-pudebats-projects.vercel.app/api/v1/projects \
-H "Authorization: Bearer bk_live_…" \
-H "Content-Type: application/json" \
-d '{
"client": {
"name": "Marie Dupont",
"email": "marie.dupont@example.fr",
"phone": "+33 6 12 34 56 78"
},
"location": {
"address": "12 rue de la République",
"postal_code": "81600",
"city": "Gaillac"
},
"roof": {
"type": "tuiles",
"tilt_percent": 30,
"orientation": "S",
"surface_m2": 40
},
"consumption": {
"annual_kwh": 6000,
"profile": "RES1",
"contract": "base",
"price_kwh": 0.25
},
"battery": {
"wanted": false
},
"objective": "autoconso_max",
"financing": null,
"pipeline": {
"status": "prospect",
"estimated_amount": 8900,
"follow_up_date": "2026-09-22",
"notes": "Rappeler après devis"
}
}'Réponse (extrait) :
{
"api_version": "2026-09-01",
"data": {
"id": "8f1c0f2e-…",
"reference": "SOL-2026-0042",
"status": "prospect",
"client_name": "Marie Dupont",
"city": "Gaillac",
"lat": 43.9015, "lon": 1.8975,
"input": { … },
"calculation": {
"id": "c2a7…",
"engine_version": "1.4.0+calc.1.0.0",
"created_at": "2026-09-08T09:12:44.120Z",
"result": {
"sizing": { "selected_kwc": 3, "modules": { "count": 6, "power_wc": 500 }, "scenarios": [ … ] },
"production": { "source": "pvgis", "pvgis_version": "5.3", "pvgis_radiation_db": "PVGIS-SARAH3", "annual_kwh": 3915, "monthly_kwh": [ … ] },
"variants": {
"without_battery": {
"energy": { "autoconso_rate": 0.62, "autarky_rate": 0.4 },
"economics": { "capex": 7200, "savings_year1": 606, "payback_years": 10.8, "irr": 0.071 }
},
"with_battery": null
},
"warnings": []
}
}
}
}Si le calcul échoue (toiture trop petite, par exemple), le projet est tout de même créé : la réponse reste 201 aveccalculation: null et calculation_error: { code, message }. Corrigez les entrées dans l’application ou relancezPOST /projects/{id}/calculate. Émet le webhook project.created.