{"openapi":"3.1.0","info":{"title":"Leading Edge Power — Renewable Energy Prediction API","description":"Free, open API estimating annual wind and solar generation at any location from ERA5 reanalysis blended with the Global Wind Atlas. No API key required (rate limited per IP). See /llms.txt for an agent-readable guide, or /api for human docs.","contact":{"name":"Leading Edge Power","url":"https://www.leadingedgepower.com/"},"version":"1.0"},"paths":{"/login":{"get":{"summary":"Login Form","operationId":"login_form_login_get","parameters":[{"name":"next","in":"query","required":false,"schema":{"type":"string","default":"","title":"Next"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Login Submit","operationId":"login_submit_login_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_login_submit_login_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/logout":{"get":{"summary":"Logout","operationId":"logout_logout_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/solar":{"get":{"summary":"Solar Page","operationId":"solar_page_solar_get","parameters":[{"name":"embed","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Embed"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/solar/calculate":{"post":{"summary":"Solar Calculate","operationId":"solar_calculate_solar_calculate_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_solar_calculate_solar_calculate_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/turbine":{"get":{"summary":"Turbine Page","operationId":"turbine_page_turbine_get","parameters":[{"name":"turbine","in":"query","required":false,"schema":{"type":"string","default":"H1","title":"Turbine"}},{"name":"embed","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Embed"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/turbine/calculate":{"post":{"summary":"Turbine Calculate","operationId":"turbine_calculate_turbine_calculate_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_turbine_calculate_turbine_calculate_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/find-a-wind-turbine":{"get":{"summary":"Find Page","operationId":"find_page_find_a_wind_turbine_get","parameters":[{"name":"embed","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Embed"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/find":{"get":{"summary":"Find Page","operationId":"find_page_find_get","parameters":[{"name":"embed","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Embed"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/designer":{"get":{"summary":"Designer Page","operationId":"designer_page_designer_get","parameters":[{"name":"embed","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Embed"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/designer/unlock":{"post":{"summary":"Designer Unlock","operationId":"designer_unlock_designer_unlock_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_designer_unlock_designer_unlock_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/designer/calculate":{"post":{"summary":"Designer Calculate","operationId":"designer_calculate_designer_calculate_post","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/tool":{"get":{"summary":"Tool Page","operationId":"tool_page_tool_get","parameters":[{"name":"embed","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Embed"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/embed/tool":{"get":{"summary":"Embed Tool","description":"Public embeddable sizing tool (website User 1) — no login.","operationId":"embed_tool_embed_tool_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/find-turbine":{"get":{"summary":"Find Turbine","description":"Guided 'find your turbine' wizard (website User 2) — public, no login.","operationId":"find_turbine_find_turbine_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/embed/turbine/{model}":{"get":{"summary":"Embed Turbine","description":"Tiny per-turbine widget for a Shopify product page (website User 3):\nlocation in, yearly + monthly production out. Turbine fixed by the URL.","operationId":"embed_turbine_embed_turbine__model__get","parameters":[{"name":"model","in":"path","required":true,"schema":{"type":"string","title":"Model"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tool/enquire":{"post":{"summary":"Enquire","description":"Capture a quote request: contact + quote answers + the configured system,\nrecompute the prediction server-side (so the figures are trustworthy), save\na local copy, and forward to the sales webhook if configured.","operationId":"enquire_tool_enquire_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/health":{"get":{"tags":["api"],"summary":"Health","operationId":"health_api_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/turbines":{"get":{"tags":["api"],"summary":"Turbines","operationId":"turbines_api_v1_turbines_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/resolve":{"get":{"tags":["api"],"summary":"Resolve","description":"Resolve a location string to (lat, lon, label): pasted coordinates ->\nUK postcode -> worldwide place name. Cached 24 h; rate-limited per IP.","operationId":"resolve_api_v1_resolve_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":120,"title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/predict":{"get":{"tags":["api"],"summary":"Predict","operationId":"predict_api_v1_predict_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"title":"Lon"}},{"name":"turbine","in":"query","required":true,"schema":{"type":"string","maxLength":32,"title":"Turbine"}},{"name":"hub_height_m","in":"query","required":false,"schema":{"type":"number","maximum":10.0,"exclusiveMinimum":0,"default":10.0,"title":"Hub Height M"}},{"name":"num_turbines","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":0,"default":1,"title":"Num Turbines"}},{"name":"use_gwa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Use Gwa"}},{"name":"area_overview","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Area Overview"}},{"name":"panel_kw","in":"query","required":false,"schema":{"type":"number","maximum":10000,"minimum":0,"default":0.0,"title":"Panel Kw"}},{"name":"tilt","in":"query","required":false,"schema":{"type":"number","maximum":90,"minimum":0,"title":"Tilt"}},{"name":"azimuth","in":"query","required":false,"schema":{"type":"string","maxLength":8,"default":"South","title":"Azimuth"}},{"name":"product","in":"query","required":false,"schema":{"type":"string","maxLength":20,"default":"","title":"Product"}},{"name":"compare_load","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Compare Load"}},{"name":"load_basis","in":"query","required":false,"schema":{"type":"string","maxLength":16,"default":"continuous_w","title":"Load Basis"}},{"name":"load_profile","in":"query","required":false,"schema":{"type":"string","maxLength":10,"default":"flat","title":"Load Profile"}},{"name":"load_value","in":"query","required":false,"schema":{"type":"number","maximum":10000000.0,"minimum":0,"default":0.0,"title":"Load Value"}},{"name":"load_summer","in":"query","required":false,"schema":{"type":"number","maximum":10000000.0,"minimum":0,"title":"Load Summer"}},{"name":"load_winter","in":"query","required":false,"schema":{"type":"number","maximum":10000000.0,"minimum":0,"title":"Load Winter"}},{"name":"load_day","in":"query","required":false,"schema":{"type":"number","maximum":10000000.0,"minimum":0,"title":"Load Day"}},{"name":"load_night","in":"query","required":false,"schema":{"type":"number","maximum":10000000.0,"minimum":0,"title":"Load Night"}},{"name":"generator","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Generator"}},{"name":"gen_tank_l","in":"query","required":false,"schema":{"type":"number","maximum":10000.0,"exclusiveMinimum":0,"default":40.0,"title":"Gen Tank L"}},{"name":"grid_status","in":"query","required":false,"schema":{"type":"string","maxLength":8,"default":"off","title":"Grid Status"}},{"name":"battery_kwh","in":"query","required":false,"schema":{"type":"number","maximum":100000.0,"minimum":0,"default":0.0,"title":"Battery Kwh"}},{"name":"cost","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Cost"}},{"name":"diesel_price","in":"query","required":false,"schema":{"type":"number","maximum":100,"minimum":0,"default":0.8,"title":"Diesel Price"}},{"name":"elec_price","in":"query","required":false,"schema":{"type":"number","maximum":100,"minimum":0,"default":0.245,"title":"Elec Price"}},{"name":"export_rate","in":"query","required":false,"schema":{"type":"number","maximum":100,"minimum":0,"default":0.15,"title":"Export Rate"}},{"name":"allow_export","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Allow Export"}},{"name":"carbon","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Carbon"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/recommend":{"get":{"tags":["api"],"summary":"Recommend","description":"Score every turbine against the stated load at a site and pick the best fit\nfor the 'find your turbine' wizard. Recommends the smallest turbine that hits a\ngood reliability score (avoids over-speccing); falls back to the strongest.","operationId":"recommend_api_v1_recommend_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"title":"Lon"}},{"name":"load_basis","in":"query","required":false,"schema":{"type":"string","maxLength":16,"default":"continuous_w","title":"Load Basis"}},{"name":"load_value","in":"query","required":false,"schema":{"type":"number","maximum":10000000.0,"minimum":0,"default":0.0,"title":"Load Value"}},{"name":"load_profile","in":"query","required":false,"schema":{"type":"string","maxLength":10,"default":"flat","title":"Load Profile"}},{"name":"grid_status","in":"query","required":false,"schema":{"type":"string","maxLength":8,"default":"off","title":"Grid Status"}},{"name":"battery_kwh","in":"query","required":false,"schema":{"type":"number","maximum":100000.0,"minimum":0,"default":0.0,"title":"Battery Kwh"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/report":{"get":{"tags":["api"],"summary":"Report","description":"Branded PDF report for a site. Same inputs as /predict, plus `sections`\n(comma-separated subset of the report blocks) so the caller chooses what\nappears. Recomputes server-side so the figures are trustworthy.\nTeam/partner login required (PDF generation is internal).","operationId":"report_api_v1_report_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"title":"Lon"}},{"name":"turbine","in":"query","required":true,"schema":{"type":"string","maxLength":32,"title":"Turbine"}},{"name":"hub_height_m","in":"query","required":false,"schema":{"type":"number","maximum":10.0,"exclusiveMinimum":0,"default":10.0,"title":"Hub Height M"}},{"name":"num_turbines","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":0,"default":1,"title":"Num Turbines"}},{"name":"use_gwa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Use Gwa"}},{"name":"panel_kw","in":"query","required":false,"schema":{"type":"number","maximum":10000,"minimum":0,"default":0.0,"title":"Panel Kw"}},{"name":"tilt","in":"query","required":false,"schema":{"type":"number","maximum":90,"minimum":0,"title":"Tilt"}},{"name":"azimuth","in":"query","required":false,"schema":{"type":"string","maxLength":8,"default":"South","title":"Azimuth"}},{"name":"product","in":"query","required":false,"schema":{"type":"string","maxLength":20,"default":"","title":"Product"}},{"name":"compare_load","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Compare Load"}},{"name":"load_basis","in":"query","required":false,"schema":{"type":"string","maxLength":16,"default":"continuous_w","title":"Load Basis"}},{"name":"load_profile","in":"query","required":false,"schema":{"type":"string","maxLength":10,"default":"flat","title":"Load Profile"}},{"name":"load_value","in":"query","required":false,"schema":{"type":"number","maximum":10000000.0,"minimum":0,"default":0.0,"title":"Load Value"}},{"name":"load_summer","in":"query","required":false,"schema":{"type":"number","maximum":10000000.0,"minimum":0,"title":"Load Summer"}},{"name":"load_winter","in":"query","required":false,"schema":{"type":"number","maximum":10000000.0,"minimum":0,"title":"Load Winter"}},{"name":"load_day","in":"query","required":false,"schema":{"type":"number","maximum":10000000.0,"minimum":0,"title":"Load Day"}},{"name":"load_night","in":"query","required":false,"schema":{"type":"number","maximum":10000000.0,"minimum":0,"title":"Load Night"}},{"name":"generator","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Generator"}},{"name":"gen_tank_l","in":"query","required":false,"schema":{"type":"number","maximum":10000.0,"exclusiveMinimum":0,"default":40.0,"title":"Gen Tank L"}},{"name":"grid_status","in":"query","required":false,"schema":{"type":"string","maxLength":8,"default":"off","title":"Grid Status"}},{"name":"battery_kwh","in":"query","required":false,"schema":{"type":"number","maximum":100000.0,"minimum":0,"default":0.0,"title":"Battery Kwh"}},{"name":"cost","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Cost"}},{"name":"diesel_price","in":"query","required":false,"schema":{"type":"number","maximum":100,"minimum":0,"default":0.8,"title":"Diesel Price"}},{"name":"elec_price","in":"query","required":false,"schema":{"type":"number","maximum":100,"minimum":0,"default":0.245,"title":"Elec Price"}},{"name":"export_rate","in":"query","required":false,"schema":{"type":"number","maximum":100,"minimum":0,"default":0.15,"title":"Export Rate"}},{"name":"allow_export","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Allow Export"}},{"name":"carbon","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Carbon"}},{"name":"num_panels","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":0,"default":0,"title":"Num Panels"}},{"name":"panel_watts","in":"query","required":false,"schema":{"type":"number","maximum":100000,"minimum":0,"default":0.0,"title":"Panel Watts"}},{"name":"sections","in":"query","required":false,"schema":{"type":"string","maxLength":200,"default":"","title":"Sections"}},{"name":"report_name","in":"query","required":false,"schema":{"type":"string","maxLength":120,"default":"","title":"Report Name"}},{"name":"location_label","in":"query","required":false,"schema":{"type":"string","maxLength":120,"default":"","title":"Location Label"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"Body_designer_unlock_designer_unlock_post":{"properties":{"email":{"type":"string","title":"Email","default":""}},"type":"object","title":"Body_designer_unlock_designer_unlock_post"},"Body_login_submit_login_post":{"properties":{"username":{"type":"string","title":"Username","default":""},"password":{"type":"string","title":"Password","default":""},"next":{"type":"string","title":"Next","default":""}},"type":"object","title":"Body_login_submit_login_post"},"Body_solar_calculate_solar_calculate_post":{"properties":{"location_mode":{"type":"string","title":"Location Mode"},"postcode":{"type":"string","title":"Postcode","default":""},"lat":{"type":"number","title":"Lat"},"lon":{"type":"number","title":"Lon"},"panel_watts":{"type":"integer","title":"Panel Watts","default":430},"num_panels":{"type":"integer","title":"Num Panels","default":4},"panel_tilt":{"type":"integer","title":"Panel Tilt","default":35},"panel_direction":{"type":"string","title":"Panel Direction","default":"South"},"panel_efficiency_pct":{"type":"number","title":"Panel Efficiency Pct","default":22.5}},"type":"object","required":["location_mode"],"title":"Body_solar_calculate_solar_calculate_post"},"Body_turbine_calculate_turbine_calculate_post":{"properties":{"turbine_name":{"type":"string","title":"Turbine Name"},"location_mode":{"type":"string","title":"Location Mode"},"postcode":{"type":"string","title":"Postcode","default":""},"lat":{"type":"number","title":"Lat"},"lon":{"type":"number","title":"Lon"}},"type":"object","required":["turbine_name","location_mode"],"title":"Body_turbine_calculate_turbine_calculate_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}