{"openapi":"3.0.3","info":{"title":"MoroccoAPI","description":"Community-maintained access to reusable Moroccan public open data with source and license metadata.","version":"2.3.0"},"components":{"schemas":{}},"paths":{"/api/v2/status":{"get":{"summary":"Check API health","tags":["System"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["status","service","version","timestamp"],"properties":{"status":{"enum":["ok"]},"service":{"enum":["MoroccoAPI"]},"version":{"type":"string"},"timestamp":{"type":"string","format":"date-time"}}},"meta":{"type":"object","additionalProperties":false,"required":["request_id"],"properties":{"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/regions":{"get":{"summary":"List Morocco's 12 administrative regions","tags":["Administrative geography"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","hcp_code","type","name"],"properties":{"code":{"type":"string"},"hcp_code":{"type":"string","pattern":"^[0-9]{2}$"},"type":{"enum":["region"]},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"type":"string"}}}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["administrative-regions"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-09-25"]},"transformation_version":{"enum":["2.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/regions/{code}":{"get":{"summary":"Get one administrative region by MoroccoAPI code","tags":["Administrative geography"],"parameters":[{"schema":{"type":"string","minLength":2,"maxLength":80,"pattern":"^[a-z0-9-]+$"},"in":"path","name":"code","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["code","hcp_code","type","name"],"properties":{"code":{"type":"string"},"hcp_code":{"type":"string","pattern":"^[0-9]{2}$"},"type":{"enum":["region"]},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"type":"string"}}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["administrative-regions"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-09-25"]},"transformation_version":{"enum":["2.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/provinces":{"get":{"summary":"List all provinces and prefectures from the HCP dataset","tags":["Administrative geography"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","hcp_code","type","administrative_type","name","region_code"],"properties":{"code":{"type":"string"},"hcp_code":{"type":"string","pattern":"^[0-9]{2}\\.[0-9]{3}$"},"type":{"enum":["province_or_prefecture"]},"administrative_type":{"enum":["province","prefecture"]},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}},"region_code":{"type":"string"}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["administrative-provinces"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-09-26"]},"transformation_version":{"enum":["3.1.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"enum":["Haut-Commissariat au Plan (HCP)"]},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"enum":["2024-11-22"]}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/provinces/{code}":{"get":{"summary":"Get one province or prefecture by MoroccoAPI code","tags":["Administrative geography"],"parameters":[{"schema":{"type":"string","minLength":2,"maxLength":180,"pattern":"^[a-z0-9]+(?:-+[a-z0-9]+)*$"},"in":"path","name":"code","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["code","hcp_code","type","administrative_type","name","region_code"],"properties":{"code":{"type":"string"},"hcp_code":{"type":"string","pattern":"^[0-9]{2}\\.[0-9]{3}$"},"type":{"enum":["province_or_prefecture"]},"administrative_type":{"enum":["province","prefecture"]},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}},"region_code":{"type":"string"}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["administrative-provinces"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-09-26"]},"transformation_version":{"enum":["3.1.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"enum":["Haut-Commissariat au Plan (HCP)"]},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"enum":["2024-11-22"]}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/prefectures-of-arrondissements":{"get":{"summary":"List Casablanca's eight prefectures of arrondissements","tags":["Administrative geography"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","hcp_code","type","name","province_code","region_code"],"properties":{"code":{"type":"string"},"hcp_code":{"type":"string","pattern":"^[0-9]{2}\\.[0-9]{3}\\.[0-9]{2}\\.[0-9]{2}$"},"type":{"enum":["prefecture_of_arrondissements"]},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}},"province_code":{"type":"string"},"region_code":{"type":"string"}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["administrative-prefectures-of-arrondissements"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-09-26"]},"transformation_version":{"enum":["3.1.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"enum":["Haut-Commissariat au Plan (HCP)"]},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"enum":["2024-11-22"]}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/prefectures-of-arrondissements/{code}":{"get":{"summary":"Get one prefecture of arrondissements by MoroccoAPI code","tags":["Administrative geography"],"parameters":[{"schema":{"type":"string","minLength":2,"maxLength":180,"pattern":"^[a-z0-9]+(?:-+[a-z0-9]+)*$"},"in":"path","name":"code","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["code","hcp_code","type","name","province_code","region_code"],"properties":{"code":{"type":"string"},"hcp_code":{"type":"string","pattern":"^[0-9]{2}\\.[0-9]{3}\\.[0-9]{2}\\.[0-9]{2}$"},"type":{"enum":["prefecture_of_arrondissements"]},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}},"province_code":{"type":"string"},"region_code":{"type":"string"}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["administrative-prefectures-of-arrondissements"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-09-26"]},"transformation_version":{"enum":["3.1.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"enum":["Haut-Commissariat au Plan (HCP)"]},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"enum":["2024-11-22"]}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/communes":{"get":{"summary":"List all communes from the HCP dataset","tags":["Administrative geography"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","hcp_code","type","name","cercle_hcp_code","province_code","region_code"],"properties":{"code":{"type":"string"},"hcp_code":{"type":"string","pattern":"^[0-9]{2}\\.[0-9]{3}\\.[0-9]{2}\\.[0-9]{1,2}$"},"type":{"enum":["commune"]},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}},"cercle_hcp_code":{"anyOf":[{"type":"string","pattern":"^[0-9]{2}\\.[0-9]{3}\\.[0-9]{2}$"},{"type":"string","nullable":true,"enum":[null]}]},"province_code":{"type":"string"},"region_code":{"type":"string"}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["administrative-communes"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-09-26"]},"transformation_version":{"enum":["3.1.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"enum":["Haut-Commissariat au Plan (HCP)"]},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"enum":["2024-11-22"]}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/communes/{code}":{"get":{"summary":"Get one commune by MoroccoAPI code","tags":["Administrative geography"],"parameters":[{"schema":{"type":"string","minLength":2,"maxLength":180,"pattern":"^[a-z0-9]+(?:-+[a-z0-9]+)*$"},"in":"path","name":"code","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["code","hcp_code","type","name","cercle_hcp_code","province_code","region_code"],"properties":{"code":{"type":"string"},"hcp_code":{"type":"string","pattern":"^[0-9]{2}\\.[0-9]{3}\\.[0-9]{2}\\.[0-9]{1,2}$"},"type":{"enum":["commune"]},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}},"cercle_hcp_code":{"anyOf":[{"type":"string","pattern":"^[0-9]{2}\\.[0-9]{3}\\.[0-9]{2}$"},{"type":"string","nullable":true,"enum":[null]}]},"province_code":{"type":"string"},"region_code":{"type":"string"}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["administrative-communes"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-09-26"]},"transformation_version":{"enum":["3.1.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"enum":["Haut-Commissariat au Plan (HCP)"]},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"enum":["2024-11-22"]}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/arrondissements":{"get":{"summary":"List the 41 arrondissements of Morocco's six subdivided cities","tags":["Administrative geography"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","hcp_code","type","name","commune_code","prefecture_of_arrondissements_code","province_code","region_code"],"properties":{"code":{"type":"string"},"hcp_code":{"type":"string","pattern":"^[0-9]{2}\\.[0-9]{3}\\.[0-9]{2}\\.[0-9]{2}$"},"type":{"enum":["arrondissement"]},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}},"commune_code":{"type":"string"},"prefecture_of_arrondissements_code":{"anyOf":[{"type":"string","pattern":"^[a-z0-9]+(?:-+[a-z0-9]+)*$"},{"type":"string","nullable":true,"enum":[null]}]},"province_code":{"type":"string"},"region_code":{"type":"string"}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["administrative-arrondissements"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-09-26"]},"transformation_version":{"enum":["3.1.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"enum":["Haut-Commissariat au Plan (HCP)"]},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"enum":["2024-11-22"]}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/arrondissements/{code}":{"get":{"summary":"Get one arrondissement by MoroccoAPI code","tags":["Administrative geography"],"parameters":[{"schema":{"type":"string","minLength":2,"maxLength":180,"pattern":"^[a-z0-9]+(?:-+[a-z0-9]+)*$"},"in":"path","name":"code","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["code","hcp_code","type","name","commune_code","prefecture_of_arrondissements_code","province_code","region_code"],"properties":{"code":{"type":"string"},"hcp_code":{"type":"string","pattern":"^[0-9]{2}\\.[0-9]{3}\\.[0-9]{2}\\.[0-9]{2}$"},"type":{"enum":["arrondissement"]},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}},"commune_code":{"type":"string"},"prefecture_of_arrondissements_code":{"anyOf":[{"type":"string","pattern":"^[a-z0-9]+(?:-+[a-z0-9]+)*$"},{"type":"string","nullable":true,"enum":[null]}]},"province_code":{"type":"string"},"region_code":{"type":"string"}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["administrative-arrondissements"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-09-26"]},"transformation_version":{"enum":["3.1.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"enum":["Haut-Commissariat au Plan (HCP)"]},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"enum":["2024-11-22"]}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/regions/{code}/subdivisions":{"get":{"summary":"Get all subdivisions (provinces and prefectures) by MoroccoAPI region code","tags":["Administrative geography"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."},{"schema":{"type":"string","minLength":2,"maxLength":180,"pattern":"^[a-z0-9]+(?:-+[a-z0-9]+)*$"},"in":"path","name":"code","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","hcp_code","type","administrative_type","name","region_code"],"properties":{"code":{"type":"string"},"hcp_code":{"type":"string","pattern":"^[0-9]{2}\\.[0-9]{3}$"},"type":{"enum":["province_or_prefecture"]},"administrative_type":{"enum":["province","prefecture"]},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}},"region_code":{"type":"string"}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["administrative-provinces"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-09-26"]},"transformation_version":{"enum":["3.1.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"enum":["Haut-Commissariat au Plan (HCP)"]},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"enum":["2024-11-22"]}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/locations/search":{"get":{"summary":"Search administrative regions by code or multilingual name","tags":["Administrative geography"],"parameters":[{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"q","required":true},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","hcp_code","type","name"],"properties":{"code":{"type":"string"},"hcp_code":{"type":"string","pattern":"^[0-9]{2}$"},"type":{"enum":["region"]},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"type":"string"}}}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["administrative-regions"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-09-25"]},"transformation_version":{"enum":["2.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/population/national":{"get":{"summary":"Get Morocco's national population from the RGPH 2024 snapshot","tags":["Population"],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["total","moroccans","foreigners","urban","rural"],"properties":{"total":{"type":"integer","minimum":0},"moroccans":{"type":"integer","minimum":0},"foreigners":{"type":"integer","minimum":0},"urban":{"type":"object","additionalProperties":false,"required":["total","moroccans","foreigners"],"properties":{"total":{"type":"integer","minimum":0},"moroccans":{"type":"integer","minimum":0},"foreigners":{"type":"integer","minimum":0}}},"rural":{"type":"object","additionalProperties":false,"required":["total","moroccans","foreigners"],"properties":{"total":{"type":"integer","minimum":0},"moroccans":{"type":"integer","minimum":0},"foreigners":{"type":"integer","minimum":0}}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["national-population"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-10-05"]},"transformation_version":{"enum":["2.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}}}}},"/api/v2/population/regions":{"get":{"summary":"List population totals for Morocco's 12 administrative regions","tags":["Population"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","hcp_code","type","name","population","moroccans","foreigners","urban","rural"],"properties":{"code":{"type":"string"},"hcp_code":{"type":"string","pattern":"^[0-9]{2}$"},"type":{"enum":["region"]},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"type":"string"}}},"population":{"type":"integer","minimum":0},"moroccans":{"type":"integer","minimum":0},"foreigners":{"type":"integer","minimum":0},"urban":{"type":"integer","minimum":0},"rural":{"type":"integer","minimum":0}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["regional-population"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-10-05"]},"transformation_version":{"enum":["2.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/population/regions/{code}":{"get":{"summary":"Get population totals for one administrative region","tags":["Population"],"parameters":[{"schema":{"type":"string","minLength":2,"maxLength":80,"pattern":"^[a-z0-9-]+$"},"in":"path","name":"code","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["code","hcp_code","type","name","population","moroccans","foreigners","urban","rural"],"properties":{"code":{"type":"string"},"hcp_code":{"type":"string","pattern":"^[0-9]{2}$"},"type":{"enum":["region"]},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"type":"string"}}},"population":{"type":"integer","minimum":0},"moroccans":{"type":"integer","minimum":0},"foreigners":{"type":"integer","minimum":0},"urban":{"type":"integer","minimum":0},"rural":{"type":"integer","minimum":0}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["regional-population"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-10-05"]},"transformation_version":{"enum":["2.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/population/historical":{"get":{"summary":"Get Morocco's historical population from 1960 to 2024","tags":["Population"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["year","total","urban","rural"],"properties":{"year":{"type":"integer","minimum":0},"total":{"type":"integer","minimum":0},"urban":{"type":"integer","minimum":0},"rural":{"type":"integer","minimum":0}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["historical-population"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-10-05"]},"transformation_version":{"enum":["2.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/population/historical/{year}":{"get":{"summary":"Get Morocco's historical population for a specific year","tags":["Population"],"parameters":[{"schema":{"type":"integer","minimum":1960,"maximum":2024},"in":"path","name":"year","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["year","total","urban","rural"],"properties":{"year":{"type":"integer","minimum":0},"total":{"type":"integer","minimum":0},"urban":{"type":"integer","minimum":0},"rural":{"type":"integer","minimum":0}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["historical-population"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-10-05"]},"transformation_version":{"enum":["2.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/population/subdivisions":{"get":{"summary":"List population data for Morocco's provinces and prefectures","tags":["Population"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","hcp_code","type","administrative_type","name","region_code","population","moroccans","foreigners","households"],"properties":{"code":{"type":"string","pattern":"^[a-z0-9]+(?:-+[a-z0-9]+)*$"},"hcp_code":{"type":"string","pattern":"^[0-9]{2}\\.[0-9]{3}$"},"type":{"enum":["province_or_prefecture"]},"administrative_type":{"enum":["province","prefecture"]},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}},"region_code":{"type":"string"},"population":{"type":"integer","minimum":0},"moroccans":{"type":"integer","minimum":0},"foreigners":{"type":"integer","minimum":0},"households":{"type":"integer","minimum":0}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["subdivision-population"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-10-05"]},"transformation_version":{"enum":["2.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/population/subdivisions/{code}":{"get":{"summary":"Get population data for one province or prefecture","tags":["Population"],"parameters":[{"schema":{"type":"string","minLength":2,"maxLength":180,"pattern":"^[a-z0-9]+(?:-+[a-z0-9]+)*$"},"in":"path","name":"code","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["code","hcp_code","type","administrative_type","name","region_code","population","moroccans","foreigners","households"],"properties":{"code":{"type":"string","pattern":"^[a-z0-9]+(?:-+[a-z0-9]+)*$"},"hcp_code":{"type":"string","pattern":"^[0-9]{2}\\.[0-9]{3}$"},"type":{"enum":["province_or_prefecture"]},"administrative_type":{"enum":["province","prefecture"]},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}},"region_code":{"type":"string"},"population":{"type":"integer","minimum":0},"moroccans":{"type":"integer","minimum":0},"foreigners":{"type":"integer","minimum":0},"households":{"type":"integer","minimum":0}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["subdivision-population"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-10-05"]},"transformation_version":{"enum":["2.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/population/communes":{"get":{"summary":"List population totals for Morocco's 1,503 communes","tags":["Population"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","hcp_code","type","name","cercle_hcp_code","province_code","region_code","population","moroccans","foreigners","households"],"properties":{"code":{"type":"string","pattern":"^[a-z0-9]+(?:-+[a-z0-9]+)*$"},"hcp_code":{"type":"string","pattern":"^[0-9]{2}\\.[0-9]{3}\\.[0-9]{2}\\.[0-9]{1,2}$"},"type":{"enum":["commune"]},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}},"cercle_hcp_code":{"anyOf":[{"type":"string","pattern":"^[0-9]{2}\\.[0-9]{3}\\.[0-9]{2}$"},{"type":"string","nullable":true,"enum":[null]}]},"province_code":{"type":"string"},"region_code":{"type":"string"},"population":{"type":"integer","minimum":0},"moroccans":{"type":"integer","minimum":0},"foreigners":{"type":"integer","minimum":0},"households":{"type":"integer","minimum":0}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["commune-population"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-10-05"]},"transformation_version":{"enum":["2.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/population/communes/{code}":{"get":{"summary":"Get population totals for one commune","tags":["Population"],"parameters":[{"schema":{"type":"string","minLength":2,"maxLength":180,"pattern":"^[a-z0-9]+(?:-+[a-z0-9]+)*$"},"in":"path","name":"code","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["code","hcp_code","type","name","cercle_hcp_code","province_code","region_code","population","moroccans","foreigners","households"],"properties":{"code":{"type":"string","pattern":"^[a-z0-9]+(?:-+[a-z0-9]+)*$"},"hcp_code":{"type":"string","pattern":"^[0-9]{2}\\.[0-9]{3}\\.[0-9]{2}\\.[0-9]{1,2}$"},"type":{"enum":["commune"]},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}},"cercle_hcp_code":{"anyOf":[{"type":"string","pattern":"^[0-9]{2}\\.[0-9]{3}\\.[0-9]{2}$"},{"type":"string","nullable":true,"enum":[null]}]},"province_code":{"type":"string"},"region_code":{"type":"string"},"population":{"type":"integer","minimum":0},"moroccans":{"type":"integer","minimum":0},"foreigners":{"type":"integer","minimum":0},"households":{"type":"integer","minimum":0}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["commune-population"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-10-05"]},"transformation_version":{"enum":["2.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/health/private-infrastructure":{"get":{"summary":"Get national and regional private health infrastructure counts","tags":["Health"],"description":"Counts describe 2024, including regional figures published by HCP in its 2026 edition. Without a region filter, returns one national aggregate and twelve regional records. Missing regional indicators are null; national and regional counts must not be added together.","parameters":[{"schema":{"type":"string","enum":["tanger-tetouan-al-hoceima","oriental","fes-meknes","rabat-sale-kenitra","beni-mellal-khenifra","casablanca-settat","marrakech-safi","draa-tafilalet","souss-massa","guelmim-oued-noun","laayoune-sakia-el-hamra","dakhla-oued-ed-dahab"]},"in":"query","name":"region_code","required":false},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["geographic_level","region_code","reference_year","clinics","dental_practices","medical_practices","radiology_practices","hemodialysis_centres","physiotherapy_centres","analysis_laboratories","pharmacies","infirmaries"],"properties":{"geographic_level":{"type":"string","enum":["national","region"]},"region_code":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}],"description":"MoroccoAPI region code, or null for the national aggregate."},"reference_year":{"type":"integer","description":"Year described by the counts, not the publication or retrieval year."},"clinics":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","nullable":true,"enum":[null]}],"description":"Number of private establishments. Null means no published breakdown for this geographic level."},"dental_practices":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","nullable":true,"enum":[null]}],"description":"Number of private establishments. Null means no published breakdown for this geographic level."},"medical_practices":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","nullable":true,"enum":[null]}],"description":"Number of private establishments. Null means no published breakdown for this geographic level."},"radiology_practices":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","nullable":true,"enum":[null]}],"description":"Number of private establishments. Null means no published breakdown for this geographic level."},"hemodialysis_centres":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","nullable":true,"enum":[null]}],"description":"Number of private establishments. Null means no published breakdown for this geographic level."},"physiotherapy_centres":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","nullable":true,"enum":[null]}],"description":"Number of private establishments. Null means no published breakdown for this geographic level."},"analysis_laboratories":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","nullable":true,"enum":[null]}],"description":"Number of private establishments. Null means no published breakdown for this geographic level."},"pharmacies":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","nullable":true,"enum":[null]}],"description":"Number of private establishments. Null means no published breakdown for this geographic level."},"infirmaries":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","nullable":true,"enum":[null]}],"description":"Number of private establishments. Null means no published breakdown for this geographic level."}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["private-infrastructure"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-06"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0","CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/health/primary-care-facilities":{"get":{"summary":"List public primary-care facilities with optional geographic filters","tags":["Health"],"description":"National registry for 2024 with partial commissioning confirmations from 2026. This is not a complete national registry for 2026.","parameters":[{"schema":{"type":"string","enum":["tanger-tetouan-al-hoceima","oriental","fes-meknes","rabat-sale-kenitra","beni-mellal-khenifra","casablanca-settat","marrakech-safi","draa-tafilalet","souss-massa","guelmim-oued-noun","laayoune-sakia-el-hamra","dakhla-oued-ed-dahab"]},"in":"query","name":"region_code","required":false},{"schema":{"type":"string","enum":["agadir-ida-ou-tanane","al-haouz","al-hoceima","aousserd","assa-zag","azilal","beni-mellal","benslimane","berkane","berrechid","boujdour","boulemane","casablanca","chefchaouen","chichaoua","chtouka-ait-baha","driouch","el-hajeb","el-jadida","el-kelaa-des-sraghna","errachidia","es-semara","essaouira","fahs-anjra","fes","figuig","fquih-ben-salah","guelmim","guercif","ifrane","inezgane-ait-melloul","jerada","kenitra","khemisset","khenifra","khouribga","laayoune","larache","m-diq-fnideq","marrakech","mediouna","meknes","midelt","mohammadia","moulay-yacoub","nador","nouaceur","ouarzazate","oued-ed-dahab","ouezzane","oujda-angad","rabat","rehamna","safi","sale","sefrou","settat","sidi-bennour","sidi-ifni","sidi-kacem","sidi-slimane","skhirate-temara","tan-tan","tanger-assilah","taounate","taourirt","tarfaya","taroudannt","tata","taza","tetouan","tinghir","tiznit","youssoufia","zagora"]},"in":"query","name":"province_code","required":false},{"schema":{"type":"string","enum":["CSU-1","CSU-2","CSR-1","CSR-2","DR"]},"in":"query","name":"category","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"q","required":false},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","aliases","category","category_label","ownership","region_code","province_code","commune_code","arrondissement_code","reference_year","last_service_event_date"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"category":{"type":"string","enum":["CSU-1","CSU-2","CSR-1","CSR-2","DR"]},"category_label":{"type":"string"},"ownership":{"enum":["public"]},"region_code":{"type":"string"},"province_code":{"type":"string"},"commune_code":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"arrondissement_code":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"reference_year":{"type":"integer","description":"Reference year of the national facility registry, not the retrieval year."},"last_service_event_date":{"description":"Matched official commissioning date after rehabilitation or equipment. Null means no matched announcement; it does not indicate closure or guarantee current operating status.","anyOf":[{"type":"string","format":"date"},{"type":"string","nullable":true,"enum":[null]}]}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["primary-care-facilities"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-06"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0","CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/health/hospitals":{"get":{"summary":"List hospitals with source attribution and optional geographic filters","tags":["Health"],"parameters":[{"schema":{"type":"string","enum":["tanger-tetouan-al-hoceima","oriental","fes-meknes","rabat-sale-kenitra","beni-mellal-khenifra","casablanca-settat","marrakech-safi","draa-tafilalet","souss-massa","guelmim-oued-noun","laayoune-sakia-el-hamra","dakhla-oued-ed-dahab"]},"in":"query","name":"region_code","required":false},{"schema":{"type":"string","enum":["agadir-ida-ou-tanane","al-haouz","al-hoceima","aousserd","assa-zag","azilal","beni-mellal","benslimane","berkane","berrechid","boujdour","boulemane","casablanca","chefchaouen","chichaoua","chtouka-ait-baha","driouch","el-hajeb","el-jadida","el-kelaa-des-sraghna","errachidia","es-semara","essaouira","fahs-anjra","fes","figuig","fquih-ben-salah","guelmim","guercif","ifrane","inezgane-ait-melloul","jerada","kenitra","khemisset","khenifra","khouribga","laayoune","larache","m-diq-fnideq","marrakech","mediouna","meknes","midelt","mohammadia","moulay-yacoub","nador","nouaceur","ouarzazate","oued-ed-dahab","ouezzane","oujda-angad","rabat","rehamna","safi","sale","sefrou","settat","sidi-bennour","sidi-ifni","sidi-kacem","sidi-slimane","skhirate-temara","tan-tan","tanger-assilah","taounate","taourirt","tarfaya","taroudannt","tata","taza","tetouan","tinghir","tiznit","youssoufia","zagora"]},"in":"query","name":"province_code","required":false},{"schema":{"type":"string","enum":["HP","HR","HIR","HPr","HPsyP","HPsyR","CRO","CPU"]},"in":"query","name":"category","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"q","required":false},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","aliases","category","category_label","ownership","region_code","province_code","commune_code","arrondissement_code","reference_year","location"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"category":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"category_label":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"ownership":{"anyOf":[{"enum":["public"]},{"type":"string","nullable":true,"enum":[null]}]},"region_code":{"type":"string"},"province_code":{"type":"string"},"commune_code":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"arrondissement_code":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"reference_year":{"anyOf":[{"type":"integer"},{"type":"string","nullable":true,"enum":[null]}]},"location":{"anyOf":[{"type":"string","nullable":true,"enum":[null]},{"type":"object","additionalProperties":false,"required":["latitude","longitude"],"properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180}}}]}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["hospitals"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-06"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0","CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/health/hospitals/{id}":{"get":{"summary":"Get a hospital by its stable MoroccoAPI ID","tags":["Health"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["id","name","aliases","category","category_label","ownership","region_code","province_code","commune_code","arrondissement_code","reference_year","location"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"category":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"category_label":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"ownership":{"anyOf":[{"enum":["public"]},{"type":"string","nullable":true,"enum":[null]}]},"region_code":{"type":"string"},"province_code":{"type":"string"},"commune_code":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"arrondissement_code":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"reference_year":{"anyOf":[{"type":"integer"},{"type":"string","nullable":true,"enum":[null]}]},"location":{"anyOf":[{"type":"string","nullable":true,"enum":[null]},{"type":"object","additionalProperties":false,"required":["latitude","longitude"],"properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180}}}]}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["hospitals"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-06"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0","CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/telecom/phone-numbers/validate":{"get":{"summary":"Validate and normalize a Moroccan phone number locally","tags":["Telecom"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64},"in":"query","name":"number","required":true,"description":"Moroccan national, nine-digit significant, +212 or 00212 form. Percent-encode a leading plus as %2B."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["is_possible","is_valid_format","is_allocated_range","has_known_prefix","e164","national_number","number_type","reason"],"properties":{"is_possible":{"type":"boolean","description":"Length compatibility with the numbering plan."},"is_valid_format":{"type":"boolean","description":"Validity against the pinned parser metadata; does not prove line assignment or reachability."},"is_allocated_range":{"type":"string","description":"Unknown: the prefix mapping dataset is not an official allocation registry.","nullable":true,"enum":[null]},"has_known_prefix":{"type":"boolean","description":"A prefix mapping exists, independently of format validity."},"e164":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"national_number":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"number_type":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"reason":{"anyOf":[{"enum":["INVALID_CHARACTERS","INVALID_LENGTH","NOT_MOROCCAN","INVALID_NUMBER_PATTERN"]},{"type":"string","nullable":true,"enum":[null]}]}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["phone-numbers"]},"total":{"type":"integer","minimum":0},"license":{"enum":["Apache-2.0"]},"retrieved_at":{"type":"string","format":"date"},"transformation_version":{"type":"string"},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["Apache-2.0"]},"source_updated_at":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/telecom/phone-numbers/lookup":{"get":{"summary":"Get original carrier and geographic prefix descriptions","tags":["Telecom"],"description":"Uses offline Google prefix mappings. Does not identify subscribers, active lines, current serving operators or physical locations.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64},"in":"query","name":"number","required":true,"description":"Moroccan national, nine-digit significant, +212 or 00212 form. Percent-encode a leading plus as %2B."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["is_possible","is_valid_format","is_allocated_range","has_known_prefix","e164","national_number","number_type","reason","matched_prefix","original_operator","current_operator","geographic_area"],"properties":{"is_possible":{"type":"boolean","description":"Length compatibility with the numbering plan."},"is_valid_format":{"type":"boolean","description":"Validity against the pinned parser metadata; does not prove line assignment or reachability."},"is_allocated_range":{"type":"string","description":"Unknown: the prefix mapping dataset is not an official allocation registry.","nullable":true,"enum":[null]},"has_known_prefix":{"type":"boolean","description":"A prefix mapping exists, independently of format validity."},"e164":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"national_number":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"number_type":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"reason":{"anyOf":[{"enum":["INVALID_CHARACTERS","INVALID_LENGTH","NOT_MOROCCAN","INVALID_NUMBER_PATTERN"]},{"type":"string","nullable":true,"enum":[null]}]},"matched_prefix":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"original_operator":{"anyOf":[{"type":"object","additionalProperties":false,"required":["code","name"],"properties":{"code":{"type":"string"},"name":{"type":"string"}}},{"type":"string","nullable":true,"enum":[null]}]},"current_operator":{"type":"string","description":"Cannot be inferred from a prefix after number portability.","nullable":true,"enum":[null]},"geographic_area":{"anyOf":[{"type":"object","additionalProperties":false,"required":["code","international_prefix","description","areas","hcp_code"],"properties":{"code":{"type":"string","minLength":2,"maxLength":6,"pattern":"^0[5-8][0-9]{0,4}$"},"international_prefix":{"type":"string"},"description":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string","nullable":true,"enum":[null]},"fr":{"type":"string"},"en":{"type":"string"}}},"areas":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string","nullable":true,"enum":[null]},"fr":{"type":"array","items":{"type":"string"}},"en":{"type":"array","items":{"type":"string"}}}},"hcp_code":{"type":"string","nullable":true,"enum":[null]}}},{"type":"string","nullable":true,"enum":[null]}]}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["phone-numbers"]},"total":{"type":"integer","minimum":0},"license":{"enum":["Apache-2.0"]},"retrieved_at":{"type":"string","format":"date"},"transformation_version":{"type":"string"},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["Apache-2.0"]},"source_updated_at":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/telecom/numbering-ranges":{"get":{"summary":"List licensed carrier and geographic prefix mappings","tags":["Telecom"],"description":"These are Google mapping prefixes, not an official allocation register. More specific prefixes override broad descriptions.","parameters":[{"schema":{"type":"string","minLength":2,"maxLength":6,"pattern":"^0[5-8][0-9]{0,4}$"},"in":"query","name":"prefix","required":false},{"schema":{"enum":["carrier","geographic"]},"in":"query","name":"category","required":false},{"schema":{"type":"string","minLength":2,"maxLength":80,"pattern":"^[a-z]+(?:-[a-z]+)*$"},"in":"query","name":"operator","required":false},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["prefix","international_prefix","mask","category","original_operator","area_code","more_specific_prefixes"],"properties":{"prefix":{"type":"string","minLength":2,"maxLength":6,"pattern":"^0[5-8][0-9]{0,4}$"},"international_prefix":{"type":"string"},"mask":{"type":"string","pattern":"^0[0-9]+X+$"},"category":{"enum":["carrier","geographic"]},"original_operator":{"anyOf":[{"type":"object","additionalProperties":false,"required":["code","name"],"properties":{"code":{"type":"string"},"name":{"type":"string"}}},{"type":"string","nullable":true,"enum":[null]}]},"area_code":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"more_specific_prefixes":{"type":"array","items":{"type":"string","minLength":2,"maxLength":6,"pattern":"^0[5-8][0-9]{0,4}$"}}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["numbering-ranges"]},"total":{"type":"integer","minimum":0},"license":{"enum":["Apache-2.0"]},"retrieved_at":{"type":"string","format":"date"},"transformation_version":{"type":"string"},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["Apache-2.0"]},"source_updated_at":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/telecom/numbering-ranges/{prefix}":{"get":{"summary":"Get one exact national mapping prefix","tags":["Telecom"],"parameters":[{"schema":{"type":"string","minLength":2,"maxLength":6,"pattern":"^0[5-8][0-9]{0,4}$"},"in":"path","name":"prefix","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["prefix","international_prefix","mask","category","original_operator","area_code","more_specific_prefixes"],"properties":{"prefix":{"type":"string","minLength":2,"maxLength":6,"pattern":"^0[5-8][0-9]{0,4}$"},"international_prefix":{"type":"string"},"mask":{"type":"string","pattern":"^0[0-9]+X+$"},"category":{"enum":["carrier","geographic"]},"original_operator":{"anyOf":[{"type":"object","additionalProperties":false,"required":["code","name"],"properties":{"code":{"type":"string"},"name":{"type":"string"}}},{"type":"string","nullable":true,"enum":[null]}]},"area_code":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"more_specific_prefixes":{"type":"array","items":{"type":"string","minLength":2,"maxLength":6,"pattern":"^0[5-8][0-9]{0,4}$"}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["numbering-ranges"]},"total":{"type":"integer","minimum":0},"license":{"enum":["Apache-2.0"]},"retrieved_at":{"type":"string","format":"date"},"transformation_version":{"type":"string"},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["Apache-2.0"]},"source_updated_at":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/telecom/area-codes":{"get":{"summary":"List geographic prefix descriptions in French and English","tags":["Telecom"],"description":"A prefix can describe multiple areas. Labels are preserved from Google and are not administrative identifiers or physical locations.","parameters":[{"schema":{"type":"string","minLength":2,"maxLength":6,"pattern":"^0[5-8][0-9]{0,4}$"},"in":"query","name":"prefix","required":false},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","international_prefix","description","areas","hcp_code"],"properties":{"code":{"type":"string","minLength":2,"maxLength":6,"pattern":"^0[5-8][0-9]{0,4}$"},"international_prefix":{"type":"string"},"description":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string","nullable":true,"enum":[null]},"fr":{"type":"string"},"en":{"type":"string"}}},"areas":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string","nullable":true,"enum":[null]},"fr":{"type":"array","items":{"type":"string"}},"en":{"type":"array","items":{"type":"string"}}}},"hcp_code":{"type":"string","nullable":true,"enum":[null]}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["area-codes"]},"total":{"type":"integer","minimum":0},"license":{"enum":["Apache-2.0"]},"retrieved_at":{"type":"string","format":"date"},"transformation_version":{"type":"string"},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["Apache-2.0"]},"source_updated_at":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/telecom/area-codes/{code}":{"get":{"summary":"Get areas associated with one exact national geographic prefix","tags":["Telecom"],"parameters":[{"schema":{"type":"string","minLength":2,"maxLength":6,"pattern":"^0[5-8][0-9]{0,4}$"},"in":"path","name":"code","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["code","international_prefix","description","areas","hcp_code"],"properties":{"code":{"type":"string","minLength":2,"maxLength":6,"pattern":"^0[5-8][0-9]{0,4}$"},"international_prefix":{"type":"string"},"description":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string","nullable":true,"enum":[null]},"fr":{"type":"string"},"en":{"type":"string"}}},"areas":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string","nullable":true,"enum":[null]},"fr":{"type":"array","items":{"type":"string"}},"en":{"type":"array","items":{"type":"string"}}}},"hcp_code":{"type":"string","nullable":true,"enum":[null]}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["area-codes"]},"total":{"type":"integer","minimum":0},"license":{"enum":["Apache-2.0"]},"retrieved_at":{"type":"string","format":"date"},"transformation_version":{"type":"string"},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["Apache-2.0"]},"source_updated_at":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/education/etablissement-prives":{"get":{"summary":"List private schools","tags":["Education"],"description":"Source commune, province, and region labels are preserved as published; they are not standardized geography codes.","parameters":[{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"region","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"province","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"commune","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"search","required":false,"description":"Search names and addresses."},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name_fr","name_ar","address_fr","address_ar","commune","province","region","category","ownership"],"properties":{"id":{"type":"string"},"name_fr":{"type":"string"},"name_ar":{"type":"string"},"address_fr":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"address_ar":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"commune":{"type":"string","description":"Commune or arrondissement label as published in the source."},"province":{"type":"string","description":"Province or prefecture label as published in the source."},"region":{"type":"string"},"category":{"type":"string","enum":["private-school","private-cpge","public-primary","public-collegial","public-qualifying","public-bts","public-cpge"]},"ownership":{"type":"string","enum":["public","private"]}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["etablissement-prives"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-13"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/education/etablissement-prives/{id}":{"get":{"summary":"Get a private schools record by its MoroccoAPI ID","tags":["Education"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["id","name_fr","name_ar","address_fr","address_ar","commune","province","region","category","ownership"],"properties":{"id":{"type":"string"},"name_fr":{"type":"string"},"name_ar":{"type":"string"},"address_fr":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"address_ar":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"commune":{"type":"string","description":"Commune or arrondissement label as published in the source."},"province":{"type":"string","description":"Province or prefecture label as published in the source."},"region":{"type":"string"},"category":{"type":"string","enum":["private-school","private-cpge","public-primary","public-collegial","public-qualifying","public-bts","public-cpge"]},"ownership":{"type":"string","enum":["public","private"]}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["etablissement-prives"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-13"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/education/etablissement-publics-qualifiant":{"get":{"summary":"List public qualifying schools","tags":["Education"],"description":"Source commune, province, and region labels are preserved as published; they are not standardized geography codes.","parameters":[{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"region","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"province","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"commune","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"search","required":false,"description":"Search names and addresses."},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name_fr","name_ar","address_fr","address_ar","commune","province","region","category","ownership"],"properties":{"id":{"type":"string"},"name_fr":{"type":"string"},"name_ar":{"type":"string"},"address_fr":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"address_ar":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"commune":{"type":"string","description":"Commune or arrondissement label as published in the source."},"province":{"type":"string","description":"Province or prefecture label as published in the source."},"region":{"type":"string"},"category":{"type":"string","enum":["private-school","private-cpge","public-primary","public-collegial","public-qualifying","public-bts","public-cpge"]},"ownership":{"type":"string","enum":["public","private"]}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["etablissement-publics-qualifiant"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-13"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/education/etablissement-publics-qualifiant/{id}":{"get":{"summary":"Get a public qualifying schools record by its MoroccoAPI ID","tags":["Education"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["id","name_fr","name_ar","address_fr","address_ar","commune","province","region","category","ownership"],"properties":{"id":{"type":"string"},"name_fr":{"type":"string"},"name_ar":{"type":"string"},"address_fr":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"address_ar":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"commune":{"type":"string","description":"Commune or arrondissement label as published in the source."},"province":{"type":"string","description":"Province or prefecture label as published in the source."},"region":{"type":"string"},"category":{"type":"string","enum":["private-school","private-cpge","public-primary","public-collegial","public-qualifying","public-bts","public-cpge"]},"ownership":{"type":"string","enum":["public","private"]}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["etablissement-publics-qualifiant"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-13"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/education/etablissements-prives-cpge":{"get":{"summary":"List private cpge schools","tags":["Education"],"description":"Source commune, province, and region labels are preserved as published; they are not standardized geography codes.","parameters":[{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"region","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"province","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"commune","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"search","required":false,"description":"Search names and addresses."},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name_fr","name_ar","address_fr","address_ar","commune","province","region","category","ownership"],"properties":{"id":{"type":"string"},"name_fr":{"type":"string"},"name_ar":{"type":"string"},"address_fr":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"address_ar":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"commune":{"type":"string","description":"Commune or arrondissement label as published in the source."},"province":{"type":"string","description":"Province or prefecture label as published in the source."},"region":{"type":"string"},"category":{"type":"string","enum":["private-school","private-cpge","public-primary","public-collegial","public-qualifying","public-bts","public-cpge"]},"ownership":{"type":"string","enum":["public","private"]}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["etablissements-prives-cpge"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-13"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/education/etablissements-prives-cpge/{id}":{"get":{"summary":"Get a private cpge schools record by its MoroccoAPI ID","tags":["Education"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["id","name_fr","name_ar","address_fr","address_ar","commune","province","region","category","ownership"],"properties":{"id":{"type":"string"},"name_fr":{"type":"string"},"name_ar":{"type":"string"},"address_fr":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"address_ar":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"commune":{"type":"string","description":"Commune or arrondissement label as published in the source."},"province":{"type":"string","description":"Province or prefecture label as published in the source."},"region":{"type":"string"},"category":{"type":"string","enum":["private-school","private-cpge","public-primary","public-collegial","public-qualifying","public-bts","public-cpge"]},"ownership":{"type":"string","enum":["public","private"]}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["etablissements-prives-cpge"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-13"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/education/etablissements-publics-primaire":{"get":{"summary":"List public primary schools","tags":["Education"],"description":"Source commune, province, and region labels are preserved as published; they are not standardized geography codes.","parameters":[{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"region","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"province","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"commune","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"search","required":false,"description":"Search names and addresses."},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name_fr","name_ar","address_fr","address_ar","commune","province","region","category","ownership"],"properties":{"id":{"type":"string"},"name_fr":{"type":"string"},"name_ar":{"type":"string"},"address_fr":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"address_ar":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"commune":{"type":"string","description":"Commune or arrondissement label as published in the source."},"province":{"type":"string","description":"Province or prefecture label as published in the source."},"region":{"type":"string"},"category":{"type":"string","enum":["private-school","private-cpge","public-primary","public-collegial","public-qualifying","public-bts","public-cpge"]},"ownership":{"type":"string","enum":["public","private"]}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["etablissements-publics-primaire"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-13"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/education/etablissements-publics-primaire/{id}":{"get":{"summary":"Get a public primary schools record by its MoroccoAPI ID","tags":["Education"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["id","name_fr","name_ar","address_fr","address_ar","commune","province","region","category","ownership"],"properties":{"id":{"type":"string"},"name_fr":{"type":"string"},"name_ar":{"type":"string"},"address_fr":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"address_ar":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"commune":{"type":"string","description":"Commune or arrondissement label as published in the source."},"province":{"type":"string","description":"Province or prefecture label as published in the source."},"region":{"type":"string"},"category":{"type":"string","enum":["private-school","private-cpge","public-primary","public-collegial","public-qualifying","public-bts","public-cpge"]},"ownership":{"type":"string","enum":["public","private"]}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["etablissements-publics-primaire"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-13"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/education/etablissements-publics-collegial":{"get":{"summary":"List public collegial schools","tags":["Education"],"description":"Source commune, province, and region labels are preserved as published; they are not standardized geography codes.","parameters":[{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"region","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"province","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"commune","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"search","required":false,"description":"Search names and addresses."},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name_fr","name_ar","address_fr","address_ar","commune","province","region","category","ownership"],"properties":{"id":{"type":"string"},"name_fr":{"type":"string"},"name_ar":{"type":"string"},"address_fr":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"address_ar":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"commune":{"type":"string","description":"Commune or arrondissement label as published in the source."},"province":{"type":"string","description":"Province or prefecture label as published in the source."},"region":{"type":"string"},"category":{"type":"string","enum":["private-school","private-cpge","public-primary","public-collegial","public-qualifying","public-bts","public-cpge"]},"ownership":{"type":"string","enum":["public","private"]}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["etablissements-publics-collegial"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-13"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/education/etablissements-publics-collegial/{id}":{"get":{"summary":"Get a public collegial schools record by its MoroccoAPI ID","tags":["Education"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["id","name_fr","name_ar","address_fr","address_ar","commune","province","region","category","ownership"],"properties":{"id":{"type":"string"},"name_fr":{"type":"string"},"name_ar":{"type":"string"},"address_fr":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"address_ar":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"commune":{"type":"string","description":"Commune or arrondissement label as published in the source."},"province":{"type":"string","description":"Province or prefecture label as published in the source."},"region":{"type":"string"},"category":{"type":"string","enum":["private-school","private-cpge","public-primary","public-collegial","public-qualifying","public-bts","public-cpge"]},"ownership":{"type":"string","enum":["public","private"]}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["etablissements-publics-collegial"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-13"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/education/etablissements-publics-bts":{"get":{"summary":"List public bts establishments","tags":["Education"],"description":"Source commune, province, and region labels are preserved as published; they are not standardized geography codes.","parameters":[{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"region","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"province","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"commune","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"search","required":false,"description":"Search names and addresses."},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name_fr","name_ar","address_fr","address_ar","commune","province","region","category","ownership"],"properties":{"id":{"type":"string"},"name_fr":{"type":"string"},"name_ar":{"type":"string"},"address_fr":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"address_ar":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"commune":{"type":"string","description":"Commune or arrondissement label as published in the source."},"province":{"type":"string","description":"Province or prefecture label as published in the source."},"region":{"type":"string"},"category":{"type":"string","enum":["private-school","private-cpge","public-primary","public-collegial","public-qualifying","public-bts","public-cpge"]},"ownership":{"type":"string","enum":["public","private"]}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["etablissements-publics-bts"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-13"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/education/etablissements-publics-bts/{id}":{"get":{"summary":"Get a public bts establishments record by its MoroccoAPI ID","tags":["Education"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["id","name_fr","name_ar","address_fr","address_ar","commune","province","region","category","ownership"],"properties":{"id":{"type":"string"},"name_fr":{"type":"string"},"name_ar":{"type":"string"},"address_fr":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"address_ar":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"commune":{"type":"string","description":"Commune or arrondissement label as published in the source."},"province":{"type":"string","description":"Province or prefecture label as published in the source."},"region":{"type":"string"},"category":{"type":"string","enum":["private-school","private-cpge","public-primary","public-collegial","public-qualifying","public-bts","public-cpge"]},"ownership":{"type":"string","enum":["public","private"]}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["etablissements-publics-bts"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-13"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/education/etablissements-publics-cpge":{"get":{"summary":"List public cpge schools","tags":["Education"],"description":"Source commune, province, and region labels are preserved as published; they are not standardized geography codes.","parameters":[{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"region","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"province","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"commune","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"search","required":false,"description":"Search names and addresses."},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name_fr","name_ar","address_fr","address_ar","commune","province","region","category","ownership"],"properties":{"id":{"type":"string"},"name_fr":{"type":"string"},"name_ar":{"type":"string"},"address_fr":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"address_ar":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"commune":{"type":"string","description":"Commune or arrondissement label as published in the source."},"province":{"type":"string","description":"Province or prefecture label as published in the source."},"region":{"type":"string"},"category":{"type":"string","enum":["private-school","private-cpge","public-primary","public-collegial","public-qualifying","public-bts","public-cpge"]},"ownership":{"type":"string","enum":["public","private"]}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["etablissements-publics-cpge"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-13"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/education/etablissements-publics-cpge/{id}":{"get":{"summary":"Get a public cpge schools record by its MoroccoAPI ID","tags":["Education"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["id","name_fr","name_ar","address_fr","address_ar","commune","province","region","category","ownership"],"properties":{"id":{"type":"string"},"name_fr":{"type":"string"},"name_ar":{"type":"string"},"address_fr":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"address_ar":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"commune":{"type":"string","description":"Commune or arrondissement label as published in the source."},"province":{"type":"string","description":"Province or prefecture label as published in the source."},"region":{"type":"string"},"category":{"type":"string","enum":["private-school","private-cpge","public-primary","public-collegial","public-qualifying","public-bts","public-cpge"]},"ownership":{"type":"string","enum":["public","private"]}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["etablissements-publics-cpge"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-13"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/education/universites-publiques":{"get":{"summary":"List public university establishments","tags":["Education"],"description":"Directory of public university establishments for 2024–2025, with enrollment figures for 2023–2024. Contact fields are included only when published in the source.","parameters":[{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"city","required":false},{"schema":{"type":"string","minLength":2,"maxLength":150},"in":"query","name":"university","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"search","required":false,"description":"Search university and establishment names, abbreviation, city, address, telephone, and fax."},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","university_fr","university_ar","establishment_fr","establishment_ar","abbreviation","city","address","enrollment_2023_2024","telephone","fax"],"properties":{"id":{"type":"string"},"university_fr":{"type":"string"},"university_ar":{"type":"string"},"establishment_fr":{"type":"string"},"establishment_ar":{"type":"string"},"abbreviation":{"type":"string"},"city":{"type":"string"},"address":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"enrollment_2023_2024":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","nullable":true,"enum":[null]}]},"telephone":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"fax":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["universites-publiques"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-13"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/education/universites-publiques/{id}":{"get":{"summary":"Get a public university establishment by its MoroccoAPI ID","tags":["Education"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["id","university_fr","university_ar","establishment_fr","establishment_ar","abbreviation","city","address","enrollment_2023_2024","telephone","fax"],"properties":{"id":{"type":"string"},"university_fr":{"type":"string"},"university_ar":{"type":"string"},"establishment_fr":{"type":"string"},"establishment_ar":{"type":"string"},"abbreviation":{"type":"string"},"city":{"type":"string"},"address":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"enrollment_2023_2024":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","nullable":true,"enum":[null]}]},"telephone":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"fax":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["universites-publiques"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-13"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/holidays/{year}":{"get":{"summary":"List Moroccan public holidays for a year","tags":["Holidays"],"description":"Common public-administration calendar, 2024–2027. Religious dates require official confirmation; missing confirmations are explicitly unknown.","parameters":[{"schema":{"type":"string","pattern":"^\\d{4}$"},"in":"path","name":"year","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","date","names","type","status","day","source_urls"],"properties":{"id":{"type":"string"},"date":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","format":"date"},{"type":"string","nullable":true,"enum":[null]}]},"names":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"type":"string"}}},"type":{"type":"string","enum":["national","religious"]},"status":{"type":"string","enum":["fixed","confirmed","pending_confirmation"]},"day":{"type":"integer","minimum":1,"maximum":2},"source_urls":{"type":"array","items":{"type":"string"},"minItems":1}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","license_url","reviewed_at","transformation_version","scope","weekend_days","years","calendar_complete","pending_holiday_days","sources","limitations"],"properties":{"dataset":{"enum":["moroccan-public-holidays"]},"total":{"type":"integer","minimum":0},"license":{"type":"string"},"license_url":{"type":"string"},"reviewed_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","format":"date"},"transformation_version":{"type":"string"},"scope":{"enum":["public-administration-common-calendar"]},"weekend_days":{"type":"array","items":{"type":"string","enum":["Saturday","Sunday"]}},"years":{"type":"array","items":{"type":"integer"}},"calendar_complete":{"type":"boolean"},"pending_holiday_days":{"type":"integer","minimum":0},"sources":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["producer","source_url","source_updated_at"],"properties":{"producer":{"type":"string"},"source_url":{"type":"string"},"source_updated_at":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","format":"date"},{"type":"string","nullable":true,"enum":[null]}]}}}},"limitations":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/holidays/check":{"get":{"summary":"Check whether a civil date is a holiday or business day","tags":["Holidays"],"description":"Common public-administration calendar, 2024–2027. Religious dates require official confirmation; missing confirmations are explicitly unknown.","parameters":[{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","format":"date"},"in":"query","name":"date","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["date","is_weekend","is_holiday","is_business_day","holidays"],"properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","format":"date"},"is_weekend":{"type":"boolean"},"is_holiday":{"anyOf":[{"type":"boolean"},{"type":"string","nullable":true,"enum":[null]}]},"is_business_day":{"anyOf":[{"type":"boolean"},{"type":"string","nullable":true,"enum":[null]}]},"holidays":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","date","names","type","status","day","source_urls"],"properties":{"id":{"type":"string"},"date":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","format":"date"},{"type":"string","nullable":true,"enum":[null]}]},"names":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string"},"fr":{"type":"string"},"en":{"type":"string"}}},"type":{"type":"string","enum":["national","religious"]},"status":{"type":"string","enum":["fixed","confirmed","pending_confirmation"]},"day":{"type":"integer","minimum":1,"maximum":2},"source_urls":{"type":"array","items":{"type":"string"},"minItems":1}}}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","license_url","reviewed_at","transformation_version","scope","weekend_days","years","calendar_complete","pending_holiday_days","sources","limitations"],"properties":{"dataset":{"enum":["moroccan-public-holidays"]},"total":{"type":"integer","minimum":0},"license":{"type":"string"},"license_url":{"type":"string"},"reviewed_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","format":"date"},"transformation_version":{"type":"string"},"scope":{"enum":["public-administration-common-calendar"]},"weekend_days":{"type":"array","items":{"type":"string","enum":["Saturday","Sunday"]}},"years":{"type":"array","items":{"type":"integer"}},"calendar_complete":{"type":"boolean"},"pending_holiday_days":{"type":"integer","minimum":0},"sources":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["producer","source_url","source_updated_at"],"properties":{"producer":{"type":"string"},"source_url":{"type":"string"},"source_updated_at":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","format":"date"},{"type":"string","nullable":true,"enum":[null]}]}}}},"limitations":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/business-days":{"get":{"summary":"Count business days in an inclusive civil-date range","tags":["Holidays"],"description":"Common public-administration calendar, 2024–2027. Religious dates require official confirmation; missing confirmations are explicitly unknown. Saturday/Sunday weekends. At most 366 days. business_days is null when unknown holidays could affect the count; business_days_upper_bound excludes known closures.","parameters":[{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","format":"date"},"in":"query","name":"from","required":true},{"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","format":"date"},"in":"query","name":"to","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["from","to","inclusive","calendar_days","weekend_days","holiday_weekdays","business_days","business_days_upper_bound","is_exact"],"properties":{"from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","format":"date"},"to":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","format":"date"},"inclusive":{"enum":[true]},"calendar_days":{"type":"integer","minimum":0},"weekend_days":{"type":"integer","minimum":0},"holiday_weekdays":{"type":"integer","minimum":0},"business_days":{"anyOf":[{"type":"integer","minimum":0},{"type":"string","nullable":true,"enum":[null]}]},"business_days_upper_bound":{"type":"integer","minimum":0},"is_exact":{"type":"boolean"}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","license_url","reviewed_at","transformation_version","scope","weekend_days","years","calendar_complete","pending_holiday_days","sources","limitations"],"properties":{"dataset":{"enum":["moroccan-public-holidays"]},"total":{"type":"integer","minimum":0},"license":{"type":"string"},"license_url":{"type":"string"},"reviewed_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","format":"date"},"transformation_version":{"type":"string"},"scope":{"enum":["public-administration-common-calendar"]},"weekend_days":{"type":"array","items":{"type":"string","enum":["Saturday","Sunday"]}},"years":{"type":"array","items":{"type":"integer"}},"calendar_complete":{"type":"boolean"},"pending_holiday_days":{"type":"integer","minimum":0},"sources":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["producer","source_url","source_updated_at"],"properties":{"producer":{"type":"string"},"source_url":{"type":"string"},"source_updated_at":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","format":"date"},{"type":"string","nullable":true,"enum":[null]}]}}}},"limitations":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/airports":{"get":{"summary":"List and search airports tagged MA in OurAirports","tags":["Airports"],"description":"Community snapshot from 14 October 2026. Includes heliports and source-marked closed sites. Search names, source municipalities, IATA or ICAO codes. Optional filters combine with AND.","parameters":[{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"q","required":false,"description":"Search names, source municipality, IATA and explicit ICAO codes without case or accent distinctions."},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"city","required":false,"description":"Exact source municipality match, ignoring case and accents."},{"schema":{"type":"string","enum":["small_airport","medium_airport","large_airport","heliport","closed"]},"in":"query","name":"type","required":false},{"schema":{"type":"boolean"},"in":"query","name":"scheduled_service","required":false},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","ident","icao_code","iata_code","name","type","municipality","iso_country","iso_region","location","scheduled_service"],"properties":{"id":{"type":"integer","minimum":1,"description":"Persistent OurAirports numeric ID, retained when codes change."},"ident":{"type":"string","minLength":1,"description":"OurAirports identifier; it is not necessarily an ICAO code."},"icao_code":{"anyOf":[{"type":"string","pattern":"^[A-Z]{4}$"},{"type":"string","nullable":true,"enum":[null]}],"description":"Explicit source ICAO field; never inferred from ident or GPS."},"iata_code":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$"},{"type":"string","nullable":true,"enum":[null]}]},"name":{"type":"string","minLength":1},"type":{"type":"string","enum":["small_airport","medium_airport","large_airport","heliport","closed"]},"municipality":{"anyOf":[{"type":"string","minLength":1},{"type":"string","nullable":true,"enum":[null]}],"description":"Source municipality served, not necessarily the airport's physical municipality."},"iso_country":{"enum":["MA"]},"iso_region":{"anyOf":[{"type":"string","minLength":1},{"type":"string","nullable":true,"enum":[null]}]},"location":{"anyOf":[{"type":"string","nullable":true,"enum":[null]},{"type":"object","additionalProperties":false,"required":["latitude","longitude"],"properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180}}}]},"scheduled_service":{"type":"boolean","description":"OurAirports scheduled airline service flag at the snapshot; not a live availability guarantee."}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","license_url","retrieved_at","transformation_version","snapshot_date","source_revision","source_record_count","scope","limitations","sources","pagination"],"properties":{"dataset":{"enum":["ourairports-morocco"]},"total":{"type":"integer","minimum":0},"license":{"enum":["Public-Domain"]},"license_url":{"enum":["https://ourairports.com/data/"]},"retrieved_at":{"enum":["2026-10-15"]},"transformation_version":{"enum":["1.0.0"]},"snapshot_date":{"enum":["2026-10-14"]},"source_revision":{"enum":["a5a1ab8c3d9d57568c4bf9a7d398a23a60623830"]},"source_record_count":{"enum":[45]},"scope":{"type":"string","minLength":1},"limitations":{"type":"array","items":{"type":"string","minLength":1}},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string","minLength":1},"producer":{"type":"string","minLength":1},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["Public-Domain"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/airports/{icao}":{"get":{"summary":"Get one airport by its explicit ICAO code","tags":["Airports"],"description":"ICAO lookup is case-insensitive and uses only the source icao_code field. Missing codes are not inferred from ident or GPS identifiers.","parameters":[{"schema":{"type":"string","pattern":"^[A-Za-z]{4}$"},"in":"path","name":"icao","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["id","ident","icao_code","iata_code","name","type","municipality","iso_country","iso_region","location","scheduled_service"],"properties":{"id":{"type":"integer","minimum":1,"description":"Persistent OurAirports numeric ID, retained when codes change."},"ident":{"type":"string","minLength":1,"description":"OurAirports identifier; it is not necessarily an ICAO code."},"icao_code":{"anyOf":[{"type":"string","pattern":"^[A-Z]{4}$"},{"type":"string","nullable":true,"enum":[null]}],"description":"Explicit source ICAO field; never inferred from ident or GPS."},"iata_code":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$"},{"type":"string","nullable":true,"enum":[null]}]},"name":{"type":"string","minLength":1},"type":{"type":"string","enum":["small_airport","medium_airport","large_airport","heliport","closed"]},"municipality":{"anyOf":[{"type":"string","minLength":1},{"type":"string","nullable":true,"enum":[null]}],"description":"Source municipality served, not necessarily the airport's physical municipality."},"iso_country":{"enum":["MA"]},"iso_region":{"anyOf":[{"type":"string","minLength":1},{"type":"string","nullable":true,"enum":[null]}]},"location":{"anyOf":[{"type":"string","nullable":true,"enum":[null]},{"type":"object","additionalProperties":false,"required":["latitude","longitude"],"properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180}}}]},"scheduled_service":{"type":"boolean","description":"OurAirports scheduled airline service flag at the snapshot; not a live availability guarantee."}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","license_url","retrieved_at","transformation_version","snapshot_date","source_revision","source_record_count","scope","limitations","sources"],"properties":{"dataset":{"enum":["ourairports-morocco"]},"total":{"type":"integer","minimum":0},"license":{"enum":["Public-Domain"]},"license_url":{"enum":["https://ourairports.com/data/"]},"retrieved_at":{"enum":["2026-10-15"]},"transformation_version":{"enum":["1.0.0"]},"snapshot_date":{"enum":["2026-10-14"]},"source_revision":{"enum":["a5a1ab8c3d9d57568c4bf9a7d398a23a60623830"]},"source_record_count":{"enum":[45]},"scope":{"type":"string","minLength":1},"limitations":{"type":"array","items":{"type":"string","minLength":1}},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string","minLength":1},"producer":{"type":"string","minLength":1},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["Public-Domain"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/museums":{"get":{"summary":"List and search the FNM museum inventory","tags":["Museums"],"description":"23 museums from September 2026. Filters combine with AND. This is FNM coverage, not all Moroccan museums. Hours, tariffs and phone formats are source facts; live opening status is unknown.","parameters":[{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"q","required":false,"description":"Search French/Arabic names, guide aliases and city names; accents and Arabic diacritics are ignored."},{"schema":{"type":"string","enum":["agadir-ida-ou-tanane--agadir","azilal--azilal","casablanca--casablanca","fes--fes","marrakech--marrakech","meknes--meknes","rabat--rabat","safi--safi","sale--sale","tanger-assilah--tanger","tetouan--tetouan"]},"in":"query","name":"city_code","required":false},{"schema":{"type":"string","enum":["tanger-tetouan-al-hoceima","oriental","fes-meknes","rabat-sale-kenitra","beni-mellal-khenifra","casablanca-settat","marrakech-safi","draa-tafilalet","souss-massa","guelmim-oued-noun","laayoune-sakia-el-hamra","dakhla-oued-ed-dahab"]},"in":"query","name":"region_code","required":false},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","aliases","city_code","region_code","address_fr","contact","opening_hours_text_fr","admission_text_fr","coordinates","operating_status","quality_flags"],"properties":{"id":{"type":"string","minLength":1,"pattern":"^fnm-[a-z0-9-]+$","description":"Stable internal MoroccoAPI ID, not an official FNM code."},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string","minLength":1},"fr":{"type":"string","minLength":1},"en":{"anyOf":[{"type":"string","minLength":1},{"type":"string","nullable":true,"enum":[null]}]}}},"aliases":{"type":"array","items":{"type":"string","minLength":1},"description":"French heading from the official guide, when different from the XLSX name."},"city_code":{"type":"string","minLength":1,"description":"Commune slug from the HCP geography snapshot."},"region_code":{"type":"string","minLength":1},"address_fr":{"type":"string","minLength":1},"contact":{"type":"object","additionalProperties":false,"required":["phone_e164","phone_status","social_handles"],"properties":{"phone_e164":{"anyOf":[{"type":"string","pattern":"^\\+212[5-7]\\d{8}$"},{"type":"string","nullable":true,"enum":[null]}]},"phone_status":{"type":"string","enum":["format_valid_unverified","invalid_format","missing"],"description":"Format validation only. Numbers may be shared and are not operationally verified."},"social_handles":{"type":"array","items":{"type":"string","minLength":1},"description":"Public visitor handles; platform is not inferred."}}},"opening_hours_text_fr":{"type":"string","minLength":1,"description":"Source visitor schedule; not a current opening guarantee."},"admission_text_fr":{"type":"string","minLength":1,"description":"Source tariff excerpt. Consult the guide for free-entry/reduction conditions."},"coordinates":{"type":"string","description":"No coordinates in the admitted source.","nullable":true,"enum":[null]},"operating_status":{"type":"string","enum":["unknown"]},"quality_flags":{"type":"array","items":{"type":"string","minLength":1},"description":"Known source issues, including shared/missing phones and works mentions."}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","source_version","scope","limitations","sources","pagination"],"properties":{"dataset":{"enum":["morocco-museums-fnm"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-14"]},"transformation_version":{"enum":["1.0.0"]},"source_version":{"enum":["Septembre 2026"]},"scope":{"type":"string","minLength":1},"limitations":{"type":"array","items":{"type":"string","minLength":1}},"sources":{"type":"array","minItems":3,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string","minLength":1},"producer":{"type":"string","minLength":1},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"type":"string","enum":["ODbL-1.0","CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/museums/{id}":{"get":{"summary":"Get one museum by stable MoroccoAPI ID","tags":["Museums"],"parameters":[{"schema":{"type":"string","pattern":"^fnm-[a-z0-9-]+$","maxLength":200},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["id","name","aliases","city_code","region_code","address_fr","contact","opening_hours_text_fr","admission_text_fr","coordinates","operating_status","quality_flags"],"properties":{"id":{"type":"string","minLength":1,"pattern":"^fnm-[a-z0-9-]+$","description":"Stable internal MoroccoAPI ID, not an official FNM code."},"name":{"type":"object","additionalProperties":false,"required":["ar","fr","en"],"properties":{"ar":{"type":"string","minLength":1},"fr":{"type":"string","minLength":1},"en":{"anyOf":[{"type":"string","minLength":1},{"type":"string","nullable":true,"enum":[null]}]}}},"aliases":{"type":"array","items":{"type":"string","minLength":1},"description":"French heading from the official guide, when different from the XLSX name."},"city_code":{"type":"string","minLength":1,"description":"Commune slug from the HCP geography snapshot."},"region_code":{"type":"string","minLength":1},"address_fr":{"type":"string","minLength":1},"contact":{"type":"object","additionalProperties":false,"required":["phone_e164","phone_status","social_handles"],"properties":{"phone_e164":{"anyOf":[{"type":"string","pattern":"^\\+212[5-7]\\d{8}$"},{"type":"string","nullable":true,"enum":[null]}]},"phone_status":{"type":"string","enum":["format_valid_unverified","invalid_format","missing"],"description":"Format validation only. Numbers may be shared and are not operationally verified."},"social_handles":{"type":"array","items":{"type":"string","minLength":1},"description":"Public visitor handles; platform is not inferred."}}},"opening_hours_text_fr":{"type":"string","minLength":1,"description":"Source visitor schedule; not a current opening guarantee."},"admission_text_fr":{"type":"string","minLength":1,"description":"Source tariff excerpt. Consult the guide for free-entry/reduction conditions."},"coordinates":{"type":"string","description":"No coordinates in the admitted source.","nullable":true,"enum":[null]},"operating_status":{"type":"string","enum":["unknown"]},"quality_flags":{"type":"array","items":{"type":"string","minLength":1},"description":"Known source issues, including shared/missing phones and works mentions."}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","source_version","scope","limitations","sources"],"properties":{"dataset":{"enum":["morocco-museums-fnm"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-14"]},"transformation_version":{"enum":["1.0.0"]},"source_version":{"enum":["Septembre 2026"]},"scope":{"type":"string","minLength":1},"limitations":{"type":"array","items":{"type":"string","minLength":1}},"sources":{"type":"array","minItems":3,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string","minLength":1},"producer":{"type":"string","minLength":1},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"type":"string","enum":["ODbL-1.0","CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/ports":{"get":{"summary":"List Moroccan ports","tags":["Maritime"],"description":"Ports from the Ministry of Equipment and Water source list. Source fields are preserved in French.","parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["Nom du port","Type de ports","Connectivité","Latitude","Longitude","Etat"],"properties":{"Nom du port":{"type":"string","minLength":1},"Type de ports":{"type":"string","minLength":1},"Connectivité":{"type":"string","minLength":1},"Latitude":{"type":"number","minimum":-90,"maximum":90},"Longitude":{"type":"number","minimum":-180,"maximum":180},"Etat":{"type":"string","minLength":1}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","license_url","retrieved_at","source_updated_at","transformation_version","scope","limitations","sources","pagination"],"properties":{"dataset":{"type":"string","enum":["morocco-ports","morocco-lighthouses"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"license_url":{"type":"string","format":"uri"},"retrieved_at":{"type":"string","format":"date"},"source_updated_at":{"type":"string","format":"date"},"transformation_version":{"type":"string"},"scope":{"type":"string","minLength":1},"limitations":{"type":"array","items":{"type":"string","minLength":1}},"sources":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string","minLength":1},"producer":{"type":"string","minLength":1},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/ports/{name}":{"get":{"summary":"Get a Moroccan port by name","tags":["Maritime"],"description":"Matches the source port name case- and accent-insensitively.","parameters":[{"schema":{"type":"string","minLength":2,"maxLength":200},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["Nom du port","Type de ports","Connectivité","Latitude","Longitude","Etat"],"properties":{"Nom du port":{"type":"string","minLength":1},"Type de ports":{"type":"string","minLength":1},"Connectivité":{"type":"string","minLength":1},"Latitude":{"type":"number","minimum":-90,"maximum":90},"Longitude":{"type":"number","minimum":-180,"maximum":180},"Etat":{"type":"string","minLength":1}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","license_url","retrieved_at","source_updated_at","transformation_version","scope","limitations","sources"],"properties":{"dataset":{"type":"string","enum":["morocco-ports","morocco-lighthouses"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"license_url":{"type":"string","format":"uri"},"retrieved_at":{"type":"string","format":"date"},"source_updated_at":{"type":"string","format":"date"},"transformation_version":{"type":"string"},"scope":{"type":"string","minLength":1},"limitations":{"type":"array","items":{"type":"string","minLength":1}},"sources":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string","minLength":1},"producer":{"type":"string","minLength":1},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/lighthouses":{"get":{"summary":"List Moroccan lighthouses (phares)","tags":["Maritime"],"description":"Lighthouses from the Ministry of Equipment and Water source list. Source fields are preserved in French. Optional filters combine with AND.","parameters":[{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"name","required":false,"description":"Filter by lighthouse name. Requires at least two characters after search normalization, including trimming whitespace and removing accents."},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"region","required":false,"description":"Filter by lighthouse region. Requires at least two characters after search normalization, including trimming whitespace and removing accents."},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"province","required":false,"description":"Filter by lighthouse province. Requires at least two characters after search normalization, including trimming whitespace and removing accents."},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"type","required":false,"description":"Filter by lighthouse type. Requires at least two characters after search normalization, including trimming whitespace and removing accents."},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"ville","required":false,"description":"Filter by lighthouse city. Requires at least two characters after search normalization, including trimming whitespace and removing accents."},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["Nom","Region","Province","Ville","Date de mise en service","Type du phare","Caracteristique_rythme","Portee_mile"],"properties":{"Nom":{"type":"string","minLength":1},"Region":{"type":"string","minLength":1},"Province":{"type":"string","minLength":1},"Ville":{"type":"string","minLength":1},"Date de mise en service":{"anyOf":[{"type":"integer"},{"type":"string","minLength":1}]},"Type du phare":{"type":"string","minLength":1},"Caracteristique_rythme":{"type":"string","minLength":1},"Portee_mile":{"anyOf":[{"type":"number","minimum":0},{"type":"string","minLength":1}]}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","license_url","retrieved_at","source_updated_at","transformation_version","scope","limitations","sources","pagination"],"properties":{"dataset":{"type":"string","enum":["morocco-ports","morocco-lighthouses"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"license_url":{"type":"string","format":"uri"},"retrieved_at":{"type":"string","format":"date"},"source_updated_at":{"type":"string","format":"date"},"transformation_version":{"type":"string"},"scope":{"type":"string","minLength":1},"limitations":{"type":"array","items":{"type":"string","minLength":1}},"sources":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string","minLength":1},"producer":{"type":"string","minLength":1},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/postal-codes":{"get":{"summary":"Search postal codes by place, city, province or region","tags":["Postal codes"],"description":"Requires at least one of q, region_code, province_code or city. A place can have several codes, and one code can cover many places. Source: Poste Maroc open data, last updated September 2018; codes created or changed since then are missing.","parameters":[{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"q","required":false,"description":"Place or city name (accent- and case-insensitive), or the first digits of a postal code."},{"schema":{"type":"string","enum":["locality","neighborhood"]},"in":"query","name":"type","required":false},{"schema":{"type":"string","enum":["tanger-tetouan-al-hoceima","oriental","fes-meknes","rabat-sale-kenitra","beni-mellal-khenifra","casablanca-settat","marrakech-safi","draa-tafilalet","souss-massa","guelmim-oued-noun","laayoune-sakia-el-hamra","dakhla-oued-ed-dahab"]},"in":"query","name":"region_code","required":false},{"schema":{"type":"string","enum":["agadir-ida-ou-tanane","al-haouz","al-hoceima","aousserd","assa-zag","azilal","beni-mellal","benslimane","berkane","berrechid","boujdour","boulemane","casablanca","chefchaouen","chichaoua","chtouka-ait-baha","driouch","el-hajeb","el-jadida","el-kelaa-des-sraghna","errachidia","es-semara","essaouira","fahs-anjra","fes","figuig","fquih-ben-salah","guelmim","guercif","ifrane","inezgane-ait-melloul","jerada","kenitra","khemisset","khenifra","khouribga","laayoune","larache","m-diq-fnideq","marrakech","mediouna","meknes","midelt","mohammadia","moulay-yacoub","nador","nouaceur","ouarzazate","oued-ed-dahab","ouezzane","oujda-angad","rabat","rehamna","safi","sale","sefrou","settat","sidi-bennour","sidi-ifni","sidi-kacem","sidi-slimane","skhirate-temara","tan-tan","tanger-assilah","taounate","taourirt","tarfaya","taroudannt","tata","taza","tetouan","tinghir","tiznit","youssoufia","zagora"]},"in":"query","name":"province_code","required":false},{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"city","required":false,"description":"Multi-code city name from /api/v2/postal-codes/cities; case, accents, spaces and hyphens are ignored."},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["postal_code","type","name","city","province_code","region_code","commune_code"],"properties":{"postal_code":{"type":"string","pattern":"^[0-9]{5}$"},"type":{"type":"string","enum":["locality","neighborhood"],"description":"locality: a place outside the multi-code cities, with one code. neighborhood: a neighbourhood of a multi-code city."},"name":{"type":"string","description":"Poste Maroc spelling, preserved apart from whitespace."},"city":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}],"description":"Multi-code city of a neighborhood, or null for a locality."},"province_code":{"type":"string"},"region_code":{"type":"string"},"commune_code":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}],"description":"MoroccoAPI commune whose name equals the locality name in the same province. Null when there is no exact match, and always null for neighborhoods."}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["postal-codes"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-14"]},"transformation_version":{"enum":["1.1.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0","CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/postal-codes/cities":{"get":{"summary":"List the cities whose neighbourhoods have different postal codes","tags":["Postal codes"],"description":"Source: Poste Maroc open data, last updated September 2018; codes created or changed since then are missing.","parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["name","province_code","region_code","commune_code","postal_codes","neighborhood_count"],"properties":{"name":{"type":"string","description":"Poste Maroc spelling of the city."},"province_code":{"type":"string"},"region_code":{"type":"string"},"commune_code":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"postal_codes":{"type":"array","items":{"type":"string","pattern":"^[0-9]{5}$"},"minItems":1},"neighborhood_count":{"type":"integer","minimum":1}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["postal-codes"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-14"]},"transformation_version":{"enum":["1.1.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0","CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/postal-codes/{code}":{"get":{"summary":"Get every locality and neighbourhood that uses a postal code","tags":["Postal codes"],"description":"Source: Poste Maroc open data, last updated September 2018; codes created or changed since then are missing.","parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."},{"schema":{"type":"string","pattern":"^[0-9]{5}$"},"in":"path","name":"code","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["postal_code","type","name","city","province_code","region_code","commune_code"],"properties":{"postal_code":{"type":"string","pattern":"^[0-9]{5}$"},"type":{"type":"string","enum":["locality","neighborhood"],"description":"locality: a place outside the multi-code cities, with one code. neighborhood: a neighbourhood of a multi-code city."},"name":{"type":"string","description":"Poste Maroc spelling, preserved apart from whitespace."},"city":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}],"description":"Multi-code city of a neighborhood, or null for a locality."},"province_code":{"type":"string"},"region_code":{"type":"string"},"commune_code":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}],"description":"MoroccoAPI commune whose name equals the locality name in the same province. Null when there is no exact match, and always null for neighborhoods."}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["postal-codes"]},"total":{"type":"integer","minimum":0},"license":{"enum":["ODbL-1.0"]},"retrieved_at":{"enum":["2026-10-14"]},"transformation_version":{"enum":["1.1.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["ODbL-1.0","CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/world-bank/indicators":{"get":{"summary":"List World Bank development indicators available for Morocco","tags":["World Bank"],"description":"The 1362 World Development Indicators with Moroccan values and a CC BY 4.0 license. World Bank compilations and estimates, often from third parties; they can differ from Moroccan official statistics (for example HCP census population) and are revised in later releases.","parameters":[{"schema":{"type":"string","minLength":2,"maxLength":100},"in":"query","name":"q","required":false,"description":"Part of an indicator code or name (accent- and case-insensitive)."},{"schema":{"type":"string","enum":["economic-policy-debt","education","environment","financial-sector","gender","health","infrastructure","policy-institutions","poverty","private-sector-trade","public-sector","social-protection-labor","trade"]},"in":"query","name":"topic","required":false},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","name","topic_code","topic","unit","periodicity","license","first_year","last_year","value_count"],"properties":{"code":{"type":"string","description":"World Bank indicator code, e.g. IT.NET.USER.ZS."},"name":{"type":"string"},"topic_code":{"type":"string","description":"Identifier of the topic group, as listed by /api/v2/world-bank/indicators/topics."},"topic":{"type":"string","description":"Full World Bank topic."},"unit":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}],"description":"Unit of measure. Null when the World Bank metadata gives none; the unit is then only in the name."},"periodicity":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"license":{"enum":["CC-BY-4.0"]},"first_year":{"type":"integer","minimum":1960,"maximum":2100},"last_year":{"type":"integer","minimum":1960,"maximum":2100},"value_count":{"type":"integer","minimum":1}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["world-bank-indicators"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-10-15"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/world-bank/indicators/topics":{"get":{"summary":"List the World Bank topic groups with their number of indicators","tags":["World Bank"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","name","indicator_count"],"properties":{"code":{"type":"string"},"name":{"type":"string"},"indicator_count":{"type":"integer","minimum":1}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources","pagination"],"properties":{"dataset":{"enum":["world-bank-indicators"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-10-15"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/world-bank/indicators/{code}":{"get":{"summary":"Get one World Bank indicator for Morocco with its annual values","tags":["World Bank"],"description":"Optional from/to select an inclusive range of years. World Bank compilations and estimates, often from third parties; they can differ from Moroccan official statistics (for example HCP census population) and are revised in later releases.","parameters":[{"schema":{"type":"integer","minimum":1960,"maximum":2100},"in":"query","name":"from","required":false,"description":"First year to include."},{"schema":{"type":"integer","minimum":1960,"maximum":2100},"in":"query","name":"to","required":false,"description":"Last year to include."},{"schema":{"type":"string","minLength":2,"maxLength":40,"pattern":"^[A-Za-z0-9_.]+$"},"in":"path","name":"code","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["code","name","topic_code","topic","unit","periodicity","license","first_year","last_year","value_count","source","license_url","citation_note","definition","values"],"properties":{"code":{"type":"string","description":"World Bank indicator code, e.g. IT.NET.USER.ZS."},"name":{"type":"string"},"topic_code":{"type":"string","description":"Identifier of the topic group, as listed by /api/v2/world-bank/indicators/topics."},"topic":{"type":"string","description":"Full World Bank topic."},"unit":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}],"description":"Unit of measure. Null when the World Bank metadata gives none; the unit is then only in the name."},"periodicity":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"license":{"enum":["CC-BY-4.0"]},"first_year":{"type":"integer","minimum":1960,"maximum":2100},"last_year":{"type":"integer","minimum":1960,"maximum":2100},"value_count":{"type":"integer","minimum":1},"source":{"type":"string","description":"Original producer of the data, as credited by the World Bank."},"license_url":{"type":"string","format":"uri"},"citation_note":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}],"description":"Attribution requested by the World Bank for third-party use, when any."},"definition":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"values":{"type":"array","description":"Values for the requested years, oldest first. Years without a value are omitted.","items":{"type":"object","additionalProperties":false,"required":["year","value"],"properties":{"year":{"type":"integer","minimum":1960,"maximum":2100},"value":{"type":"number"}}}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","retrieved_at","transformation_version","sources"],"properties":{"dataset":{"enum":["world-bank-indicators"]},"total":{"type":"integer","minimum":0},"license":{"enum":["CC-BY-4.0"]},"retrieved_at":{"enum":["2026-10-15"]},"transformation_version":{"enum":["1.0.0"]},"sources":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"required":["dataset","producer","source_url","resource_url","license","source_updated_at"],"properties":{"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"enum":["CC-BY-4.0"]},"source_updated_at":{"type":"string","format":"date"}}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/dams":{"get":{"summary":"List selected dams across Morocco with their latest available observation","tags":["Water"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"in":"query","name":"basin","required":false},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","name","basin","latest_level"],"properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"name":{"type":"object","additionalProperties":false,"required":["fr"],"properties":{"fr":{"anyOf":[{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"ar":{"type":"string"}}},"basin":{"type":"string","enum":["bouregreg","draa-oued-noun","guir-ziz-gheris","loukkos","moulouya","oum-er-rbia","sebou","souss-massa","tensift"]},"latest_level":{"type":"object","additionalProperties":false,"required":["dam_id","date","date_basis","capacity_mm3","volume_mm3","filling_rate_pct","source_id","source_ref"],"properties":{"dam_id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"date":{"type":"string","format":"date"},"date_basis":{"type":"string","enum":["source_calendar","dashboard_headline"]},"capacity_mm3":{"anyOf":[{"type":"number","minimum":0},{"type":"string","nullable":true,"enum":[null]}]},"volume_mm3":{"type":"number","minimum":0},"filling_rate_pct":{"type":"number","minimum":0},"previous_year_filling_rate_pct":{"anyOf":[{"type":"number","minimum":0},{"type":"string","nullable":true,"enum":[null]}]},"source_id":{"type":"string"},"source_ref":{"anyOf":[{"type":"object","additionalProperties":false,"required":["sheet","row"],"properties":{"sheet":{"type":"string"},"row":{"type":"integer","minimum":1}}},{"type":"object","additionalProperties":false,"required":["basin_code","dam_index"],"properties":{"basin_code":{"type":"string","pattern":"^MH[1-9]$"},"dam_index":{"type":"integer","minimum":1}}}]}}}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","license_url","retrieved_at","source_updated_at","transformation_version","coverage","sources","pagination"],"properties":{"dataset":{"enum":["morocco-dams"]},"total":{"type":"integer","minimum":0},"license":{"enum":["mixed"]},"license_url":{"type":"string","nullable":true,"enum":[null]},"retrieved_at":{"type":"string","format":"date"},"source_updated_at":{"anyOf":[{"type":"string","format":"date"},{"type":"string","nullable":true,"enum":[null]}]},"transformation_version":{"type":"string"},"coverage":{"type":"object","additionalProperties":false,"required":["basin","basins","from","to","real_time","complete_national_coverage","limitations"],"properties":{"basin":{"anyOf":[{"type":"string","enum":["bouregreg","draa-oued-noun","guir-ziz-gheris","loukkos","moulouya","oum-er-rbia","sebou","souss-massa","tensift"]},{"type":"string","nullable":true,"enum":[null]}]},"basins":{"type":"array","items":{"type":"string","enum":["bouregreg","draa-oued-noun","guir-ziz-gheris","loukkos","moulouya","oum-er-rbia","sebou","souss-massa","tensift"]}},"from":{"type":"string","format":"date"},"to":{"type":"string","format":"date"},"real_time":{"enum":[false]},"complete_national_coverage":{"enum":[false]},"limitations":{"type":"array","items":{"type":"string"}}}},"sources":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","dataset","producer","source_url","resource_url","license","license_url","date_basis","source_updated_at"],"properties":{"id":{"type":"string"},"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"anyOf":[{"enum":["ODbL-1.0"]},{"type":"string","nullable":true,"enum":[null]}]},"license_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","nullable":true,"enum":[null]}]},"date_basis":{"type":"string","enum":["source_calendar","dashboard_headline"]},"source_updated_at":{"anyOf":[{"type":"string","format":"date"},{"type":"string","nullable":true,"enum":[null]}]}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/api/v2/dams/{id}/levels":{"get":{"summary":"Get published water storage and filling-rate snapshots for one dam","tags":["Water"],"description":"Filter inclusively with ISO dates from and to. Observations are sorted oldest first. date_basis distinguishes source calendar dates from the Maadialna dashboard headline date; its JSON has no observation date. No interpolation.","parameters":[{"schema":{"type":"string","format":"date"},"in":"query","name":"from","required":false},{"schema":{"type":"string","format":"date"},"in":"query","name":"to","required":false},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"in":"query","name":"limit","required":false,"description":"Maximum records to return. Every collection response is paginated; omitting limit returns at most 100 records."},{"schema":{"type":"integer","minimum":0,"maximum":2147483647,"default":0},"in":"query","name":"offset","required":false,"description":"Number of matching records to skip, after filtering. Defaults to zero."},{"schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["dam_id","date","date_basis","capacity_mm3","volume_mm3","filling_rate_pct","source_id","source_ref"],"properties":{"dam_id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"date":{"type":"string","format":"date"},"date_basis":{"type":"string","enum":["source_calendar","dashboard_headline"]},"capacity_mm3":{"anyOf":[{"type":"number","minimum":0},{"type":"string","nullable":true,"enum":[null]}]},"volume_mm3":{"type":"number","minimum":0},"filling_rate_pct":{"type":"number","minimum":0},"previous_year_filling_rate_pct":{"anyOf":[{"type":"number","minimum":0},{"type":"string","nullable":true,"enum":[null]}]},"source_id":{"type":"string"},"source_ref":{"anyOf":[{"type":"object","additionalProperties":false,"required":["sheet","row"],"properties":{"sheet":{"type":"string"},"row":{"type":"integer","minimum":1}}},{"type":"object","additionalProperties":false,"required":["basin_code","dam_index"],"properties":{"basin_code":{"type":"string","pattern":"^MH[1-9]$"},"dam_index":{"type":"integer","minimum":1}}}]}}}},"meta":{"type":"object","additionalProperties":false,"required":["dataset","total","license","license_url","retrieved_at","source_updated_at","transformation_version","coverage","sources","pagination"],"properties":{"dataset":{"enum":["morocco-dams"]},"total":{"type":"integer","minimum":0},"license":{"enum":["mixed"]},"license_url":{"type":"string","nullable":true,"enum":[null]},"retrieved_at":{"type":"string","format":"date"},"source_updated_at":{"anyOf":[{"type":"string","format":"date"},{"type":"string","nullable":true,"enum":[null]}]},"transformation_version":{"type":"string"},"coverage":{"type":"object","additionalProperties":false,"required":["basin","basins","from","to","real_time","complete_national_coverage","limitations"],"properties":{"basin":{"anyOf":[{"type":"string","enum":["bouregreg","draa-oued-noun","guir-ziz-gheris","loukkos","moulouya","oum-er-rbia","sebou","souss-massa","tensift"]},{"type":"string","nullable":true,"enum":[null]}]},"basins":{"type":"array","items":{"type":"string","enum":["bouregreg","draa-oued-noun","guir-ziz-gheris","loukkos","moulouya","oum-er-rbia","sebou","souss-massa","tensift"]}},"from":{"type":"string","format":"date"},"to":{"type":"string","format":"date"},"real_time":{"enum":[false]},"complete_national_coverage":{"enum":[false]},"limitations":{"type":"array","items":{"type":"string"}}}},"sources":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","dataset","producer","source_url","resource_url","license","license_url","date_basis","source_updated_at"],"properties":{"id":{"type":"string"},"dataset":{"type":"string"},"producer":{"type":"string"},"source_url":{"type":"string","format":"uri"},"resource_url":{"type":"string","format":"uri"},"license":{"anyOf":[{"enum":["ODbL-1.0"]},{"type":"string","nullable":true,"enum":[null]}]},"license_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"string","nullable":true,"enum":[null]}]},"date_basis":{"type":"string","enum":["source_calendar","dashboard_headline"]},"source_updated_at":{"anyOf":[{"type":"string","format":"date"},{"type":"string","nullable":true,"enum":[null]}]}}}},"pagination":{"type":"object","additionalProperties":false,"required":["limit","offset","count","has_more","next_offset"],"properties":{"limit":{"type":"integer","minimum":1,"maximum":500},"offset":{"type":"integer","minimum":0,"maximum":2147483647},"count":{"type":"integer","minimum":0,"maximum":500},"has_more":{"type":"boolean"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"string","nullable":true,"enum":[null]}]}}}}}}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}}},"tags":[{"name":"System","description":"Service health and status"},{"name":"Administrative geography","description":"Normalized public administrative geography data"},{"name":"Population","description":"Demographic data for Morocco"},{"name":"Health","description":"Health facilities and infrastructure indicators with source and snapshot metadata"},{"name":"Education","description":"Public and private schools and public university establishments"},{"name":"Telecom","description":"Local phone formatting and licensed carrier and geographic prefix mappings"},{"name":"Holidays","description":"Moroccan public holidays and business days with confirmation status"},{"name":"Airports","description":"OurAirports MA directory with codes, municipalities and source coordinates"},{"name":"Museums","description":"FNM September 2026 museum inventory with visitor information and source metadata"},{"name":"Postal codes","description":"Poste Maroc postal codes for localities and city neighbourhoods (September 2018 snapshot), linked to administrative geography"},{"name":"World Bank","description":"World Bank development indicators for Morocco (international estimates, CC BY 4.0)"},{"name":"Maritime","description":"Ports and lighthouses from the Ministry of Equipment and Water"},{"name":"Water","description":"Historical dam storage observations with source and license metadata"}]}