{"openapi":"3.1.0","info":{"title":"AlertMétéo Local Risk API","version":"2026-06-23.ai-v1","summary":"Local weather-risk decision support for France.","description":"A source-transparent API that turns local AROME forecasts and official canicule vigilance linkage into practical public or operator actions."},"servers":[{"url":"https://alertmeteo.fr"}],"tags":[{"name":"local-risk","description":"Local weather-event risk and practical action."}],"paths":{"/api/risk/local":{"get":{"tags":["local-risk"],"operationId":"getLocalWeatherRisk","summary":"Get the most useful local weather-risk signal.","description":"Use either commune mode or coordinate mode. The response distinguishes official vigilance, model forecasts and AlertMétéo's independent local synthesis.","parameters":[{"name":"commune","in":"query","required":false,"description":"French INSEE commune code. Preferred for public local pages.","schema":{"type":"string","pattern":"^\\d{5}$","example":"17300"}},{"name":"lat","in":"query","required":false,"description":"Latitude in metropolitan France. Required with lon if commune is absent.","schema":{"type":"number","minimum":41,"maximum":52,"example":46.162}},{"name":"lon","in":"query","required":false,"description":"Longitude in metropolitan France. Required with lat if commune is absent.","schema":{"type":"number","minimum":-6,"maximum":11,"example":-1.1765}},{"name":"department","in":"query","required":false,"description":"French department code used to attach official canicule vigilance when available.","schema":{"type":"string","example":"17"}},{"name":"audience","in":"query","required":false,"description":"Use public for individuals and operator for local B2B decisions.","schema":{"type":"string","enum":["public","operator"],"default":"public"}}],"responses":{"200":{"description":"Local risk response.","headers":{"x-ratelimit-limit":{"description":"Maximum local-risk requests allowed in the current window.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Remaining requests in the current window for this client fingerprint.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"Unix timestamp, in seconds, when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","source","generatedAt"],"properties":{"ok":{"type":"boolean"},"source":{"type":"string","const":"alertmeteo_local_risk"},"version":{"type":"string","example":"2026-06-23.v1"},"generatedAt":{"type":"string","format":"date-time"},"location":{"type":"object","properties":{"label":{"type":"string"},"communeCode":{"type":"string"},"departmentCode":{"type":"string"},"departmentName":{"type":"string"},"lat":{"type":"number"},"lon":{"type":"number"},"elevationM":{"type":"number"}},"additionalProperties":true},"audience":{"type":"string","enum":["public","operator"]},"summary":{"type":"object","required":["level","headline","message","action","confidence"],"properties":{"level":{"type":"string","enum":["normal","watch","attention","danger","severe"]},"headline":{"type":"string"},"message":{"type":"string"},"action":{"type":"string"},"confidence":{"type":"string","enum":["official_and_model","model_only","partial"]}},"additionalProperties":false},"events":{"type":"array","items":{"type":"object","required":["type","level","title","message","action","operatorAction"],"properties":{"type":{"type":"string","enum":["heat","cold","wind","rain"]},"level":{"type":"string","enum":["normal","watch","attention","danger","severe"]},"score":{"type":"number"},"title":{"type":"string"},"message":{"type":"string"},"action":{"type":"string"},"operatorAction":{"type":"string"},"evidence":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"additionalProperties":false}},"sourceIds":{"type":"array","items":{"type":"string"}},"window":{"type":"object","properties":{"label":{"type":"string"},"time":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false}},"sources":{"type":"array","items":{"type":"object","required":["id","label","kind","status"],"properties":{"id":{"type":"string"},"label":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string"},"url":{"type":"string","format":"uri"},"note":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"}},"additionalProperties":true}},"limits":{"type":"array","items":{"type":"string"}}},"additionalProperties":true}}}},"400":{"description":"Invalid local query.","headers":{"x-ratelimit-limit":{"description":"Maximum local-risk requests allowed in the current window.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Remaining requests in the current window for this client fingerprint.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"Unix timestamp, in seconds, when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","source","generatedAt","error"],"properties":{"ok":{"type":"boolean","const":false},"source":{"type":"string","const":"alertmeteo_local_risk"},"generatedAt":{"type":"string","format":"date-time"},"error":{"type":"string"}},"additionalProperties":true}}}},"429":{"description":"Local-risk rate limit exceeded.","headers":{"x-ratelimit-limit":{"description":"Maximum local-risk requests allowed in the current window.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Remaining requests in the current window for this client fingerprint.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"Unix timestamp, in seconds, when the current window resets.","schema":{"type":"integer"}},"retry-after":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","source","generatedAt","error"],"properties":{"ok":{"type":"boolean","const":false},"source":{"type":"string","const":"alertmeteo_local_risk"},"generatedAt":{"type":"string","format":"date-time"},"error":{"type":"string"}},"additionalProperties":true}}}},"503":{"description":"Temporary source or model unavailability.","headers":{"x-ratelimit-limit":{"description":"Maximum local-risk requests allowed in the current window.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Remaining requests in the current window for this client fingerprint.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"Unix timestamp, in seconds, when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","source","generatedAt","error"],"properties":{"ok":{"type":"boolean","const":false},"source":{"type":"string","const":"alertmeteo_local_risk"},"generatedAt":{"type":"string","format":"date-time"},"error":{"type":"string"}},"additionalProperties":true}}}}},"x-alertmeteo-source-boundaries":["Météo-France Vigilance is the official vigilance source when explicitly mentioned.","Open-Meteo API Météo-France provides AROME model forecasts, not station observations.","AlertMétéo local risk is an independent decision-support synthesis, not an official warning.","Wind, rain and cold are currently model-derived signals unless explicitly stated otherwise.","In immediate danger, users should follow official authorities and emergency services."]}}},"components":{"schemas":{"LocalRiskResponse":{"type":"object","required":["ok","source","generatedAt"],"properties":{"ok":{"type":"boolean"},"source":{"type":"string","const":"alertmeteo_local_risk"},"version":{"type":"string","example":"2026-06-23.v1"},"generatedAt":{"type":"string","format":"date-time"},"location":{"type":"object","properties":{"label":{"type":"string"},"communeCode":{"type":"string"},"departmentCode":{"type":"string"},"departmentName":{"type":"string"},"lat":{"type":"number"},"lon":{"type":"number"},"elevationM":{"type":"number"}},"additionalProperties":true},"audience":{"type":"string","enum":["public","operator"]},"summary":{"type":"object","required":["level","headline","message","action","confidence"],"properties":{"level":{"type":"string","enum":["normal","watch","attention","danger","severe"]},"headline":{"type":"string"},"message":{"type":"string"},"action":{"type":"string"},"confidence":{"type":"string","enum":["official_and_model","model_only","partial"]}},"additionalProperties":false},"events":{"type":"array","items":{"type":"object","required":["type","level","title","message","action","operatorAction"],"properties":{"type":{"type":"string","enum":["heat","cold","wind","rain"]},"level":{"type":"string","enum":["normal","watch","attention","danger","severe"]},"score":{"type":"number"},"title":{"type":"string"},"message":{"type":"string"},"action":{"type":"string"},"operatorAction":{"type":"string"},"evidence":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"additionalProperties":false}},"sourceIds":{"type":"array","items":{"type":"string"}},"window":{"type":"object","properties":{"label":{"type":"string"},"time":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false}},"sources":{"type":"array","items":{"type":"object","required":["id","label","kind","status"],"properties":{"id":{"type":"string"},"label":{"type":"string"},"kind":{"type":"string"},"status":{"type":"string"},"url":{"type":"string","format":"uri"},"note":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"}},"additionalProperties":true}},"limits":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"LocalRiskError":{"type":"object","required":["ok","source","generatedAt","error"],"properties":{"ok":{"type":"boolean","const":false},"source":{"type":"string","const":"alertmeteo_local_risk"},"generatedAt":{"type":"string","format":"date-time"},"error":{"type":"string"}},"additionalProperties":true}}},"x-alertmeteo":{"contractVersion":"2026-06-23.ai-v1","canonicalDocs":"https://alertmeteo.fr/ai","sourceBoundaries":["Météo-France Vigilance is the official vigilance source when explicitly mentioned.","Open-Meteo API Météo-France provides AROME model forecasts, not station observations.","AlertMétéo local risk is an independent decision-support synthesis, not an official warning.","Wind, rain and cold are currently model-derived signals unless explicitly stated otherwise.","In immediate danger, users should follow official authorities and emergency services."]}}