/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 puis lance le moteur. Réponse 201 avec le projet et son calcul.
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://app.hesiasun.example/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", "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.