Référence de l’API
Chaque route, ses paramètres, et une vraie réponse de chacune.
L’essentiel
- Adresse
https://communes.pages.dev. Ni clé ni inscription. N’importe quel site peut l’appeler depuis le navigateur.- Identifiants
- Une unité s’écrit de 4 façons, et chacune la trouve :
01.511.01.0,001511010,1511010,tanger. - Réponses
- Chaque réponse contient
data,metaetlinks. Une liste ajoutepage,perPage,totalettotalPagesàmeta, et une recherche ajoutetotal. - OpenAPI
- Cette référence en document OpenAPI 3.1 :
/api/openapi.json
Routes
- GET
/api/search - GET
/api/douars/search - GET
/api/communes/at - GET
/api/communes/near - GET
/api/communes - GET
/api/communes/{code} - GET
/api/communes/{code}/arrondissements.json - GET
/api/{collection}/{code}/indicators - GET
/api/indicators.json - GET
/api/{collection}/{code}/economy - GET
/api/economy.json - GET
/api/{collection}/{code}/housing - GET
/api/communes/{code}/neighbours - GET
/api/communes/{code}/neighbourhoods - GET
/api/communes/{code}/douars - GET
/api/neighbourhoods.json - GET
/api/housing.json - GET
/api/insights.json - GET
/api/regions.json - GET
/api/provinces.json - GET
/api/cercles.json - GET
/api/version.json
GET /api/search
Trouver une unité administrative par son nom
Cherche dans les noms français, les noms arabes, les slugs et les codes, avec ou sans points, avec ou sans leurs zéros de tête. Les accents, les variantes des lettres arabes et les voyelles sont ramenés à une forme, et un lieu se trouve aussi par ses autres noms, comme Fez pour Fès. Le nom d’un quartier trouve l’arrondissement ou la commune qui le contient, avec matched: neighbourhood et les noms du quartier : Sidi Maârouf trouve Aïn-Chock, à Casablanca. Les quartiers viennent d’OpenStreetMap et de Poste Maroc, tous deux sous licence ODbL. La liste de Poste Maroc donne une ville et aucun point : ses quartiers se trouvent dans la commune de la ville, et non dans un arrondissement. Un code postal à 5 chiffres trouve sa commune, avec matched: postcode : 20520 trouve Casablanca.
qobligatoire- stringTexte à chercher, jusqu’à 100 caractères.
levels- stringNiveaux à inclure, séparés par des virgules. Tous quand il est absent.
limit10 par défaut- integer [1, 50]Nombre de résultats, jusqu’à 50.
- 200Les résultats, du meilleur au moins bon.
- 400q manque ou est trop long, ou un paramètre sort de ses bornes.
Exemple · GET /api/search?q=fez&limit=2
{
"data": [
{
"code": "03.231.01.0",
"level": "commune",
"name": {
"fr": "Fès",
"ar": "فاس"
},
"slug": "fes",
"score": 1000,
"matched": "alias"
},
{
"code": "08.201.03.09",
"level": "commune",
"name": {
"fr": "Fezna",
"ar": "فزنا"
},
"slug": "fezna",
"score": 498,
"matched": "prefix"
}
],
"meta": {
"datasetVersion": "1.10.0",
"total": 2
},
"links": {
"self": "/api/search?q=fez&limit=2",
"prev": null,
"next": null
}
}GET /api/douars/search
Trouver un douar par son nom
Cherche parmi les douars que liste le recensement 2024 du HCP, les villages et hameaux des communes rurales, en arabe ou en lettres latines. Une requête latine est comparée sur les consonnes que les deux écritures partagent, si bien que Tachdirt et Tashdirt trouvent تشديرت ; seules les graphies proches de ce qui a été tapé sont gardées. Le nom latin d’un douar est celui d’une source quand l’une l’écrit, et sinon il est épelé depuis l’arabe, ce que spelt signale.
qobligatoire- stringLe nom du douar, jusqu’à 100 caractères.
limit10 par défaut- integer [1, 50]Nombre de résultats, jusqu’à 50.
- 200Les résultats, les graphies les plus proches d’abord, puis les plus gros douars.
- 400q manque ou est trop long, ou limit sort de ses bornes.
Exemple · GET /api/douars/search?q=tachdirt&limit=2
{
"data": [
{
"code": "0410703203002",
"name": {
"ar": "تشديرت",
"latin": "Tachdirt"
},
"spelt": false,
"people": 559,
"commune": {
"slug": "asni",
"name": "Asni",
"ar": "اسني"
}
},
{
"code": "5410461201010",
"name": {
"ar": "تشديرت",
"latin": "Tachddirt"
},
"spelt": false,
"people": 233,
"commune": {
"slug": "tinzart",
"name": "Tinzart",
"ar": "تنزرت"
}
}
],
"meta": {
"datasetVersion": "1.10.0",
"total": 2
},
"links": {
"self": "/api/douars/search?q=tachdirt&limit=2",
"prev": null,
"next": null
}
}GET /api/communes/at
La commune qui contient un point
Le point est comparé à la limite de chaque commune, conservée sur une grille de 2 à 6 m selon la taille de sa région. Dans les 6 villes divisées en arrondissements, arrondissement nomme celui où se trouve le point ; ailleurs, il vaut null. Sidi Mohamed Benmansour n’a pas de limite, et une zone d’environ 88 km² entre Ifrane et Boulemane n’en a pas non plus.
latobligatoire- number [−90, 90]Latitude, en degrés.
lngobligatoire- number [−180, 180]Longitude, en degrés.
- 200La commune, avec l’arrondissement où se trouve le point.
- 400Une coordonnée manque ou sort de ses bornes.
- 404Aucune limite de commune ne contient le point : il est hors du Maroc, en mer, ou dans l’un des 2 endroits qui n’en ont pas.
Exemple · GET /api/communes/at?lat=35.786&lng=-5.8125
{
"data": {
"code": "01.511.01.0",
"codeDigits": "001511010",
"slug": "tanger",
"nameFrRaw": "Commune de Tanger",
"name": {
"fr": "Tanger",
"ar": "طنجة"
},
"type": "urban",
"parents": {
"region": "01",
"province": "01.511",
"cercle": null
},
"population": {
"2014": {
"total": 947952,
"households": 239243
},
"2024": {
"total": 1275428,
"moroccan": 1268512,
"foreign": 6916,
"households": 362062
},
"change": {
"absolute": 327476,
"pct": 34.55,
"basis": "arrondissement_sum"
}
},
"urbanCentres": [],
"centroid": {
"lat": 35.75623595957031,
"lng": -5.832718404101565
},
"bbox": [-5.9484121, 35.6995621, -5.7135397, 35.8259979],
"areaKm2": 149.41,
"density": 8536.51,
"osm": {
"relationId": 2758781,
"wikidata": "Q126148"
},
"provenance": {
"name": "hcp-2024",
"population2024": "hcp-2024",
"population2014": "hcp-2014:arrondissement_sum",
"geometry": "osm-odbl"
},
"arrondissement": {
"code": "01.511.01.07",
"name": {
"fr": "Médina",
"ar": "المدينة"
}
}
},
"meta": {
"datasetVersion": "1.10.0"
},
"links": {
"self": "/api/communes/01.511.01.0.json",
"prev": null,
"next": null
}
}GET /api/communes/near
Les communes dans un rayon autour d’un point
La distance se mesure jusqu’au centroïde de chaque commune, de la plus proche à la plus lointaine.
latobligatoire- number [−90, 90]Latitude, en degrés.
lngobligatoire- number [−180, 180]Longitude, en degrés.
radius10 par défaut- number (0, 100]Distance en km, jusqu’à 100.
limit10 par défaut- integer [1, 50]Nombre de résultats, jusqu’à 50.
- 200Les communes dans le rayon, de la plus proche à la plus lointaine.
- 400Une coordonnée ou le rayon manque ou sort de ses bornes.
Exemple · GET /api/communes/near?lat=33.5731&lng=-7.5898&radius=15&limit=2
{
"data": [
{
"code": "06.141.01.81",
"name": {
"fr": "Méchouar de Casablanca",
"ar": "مشور الدار البيضاء"
},
"slug": "mechouar-de-casablanca",
"distanceKm": 1.627
},
{
"code": "06.141.01.0",
"name": {
"fr": "Casablanca",
"ar": "الدار البيضاء"
},
"slug": "casablanca",
"distanceKm": 6.103
}
],
"meta": {
"datasetVersion": "1.10.0",
"total": 2
},
"links": {
"self": "/api/communes/near?lat=33.5731&lng=-7.5898&radius=15&limit=2",
"prev": null,
"next": null
}
}GET /api/communes
Lister les communes, avec ou sans filtre
Paginé, 50 communes par page. Les filtres se combinent. q cherche plutôt les communes par nom, et ne s’emploie ni avec un filtre ni avec page.
region- stringUne région, par code ou slug.
province- stringUne province ou une préfecture, par code ou slug.
cercle- stringUn cercle, par code ou slug.
typeurban|ruralSeulement les communes urbaines, ou rurales.min_population- integer [0, 10 000 000]Seulement les communes d’au moins autant d’habitants en 2024.
max_population- integer [0, 10 000 000]Seulement les communes d’au plus autant d’habitants en 2024.
sortcode par défaut- stringTrier par
name,populationen 2024,changedepuis 2014,densityouarea, ou par le chemin d’un indicateur du recensement, commelabour.unemploymentRate. Mettre2014.devant le chemin trie sur le chiffre de 2014, etchange.sur l’écart entre les deux recensements, commechange.illiteracy.rate10Plus; les deux existent pour les chiffres que les recensements posent de la même façon. Un moins devant met les plus grands d’abord, et une commune sans valeur vient en dernier dans les deux sens. Triée par un indicateur, chaque commune porteindicator, sa valeur. page1 par défaut- integer [1, 10 000]Numéro de page, à partir de 1.
q- stringCherche les communes par nom, jusqu’à 100 caractères, et renvoie jusqu’à 10 résultats. Ne prend aucun autre paramètre.
- 200Une page de communes, ou les résultats de recherche quand q est donné.
- 400Un filtre n’est pas un code valide ou désigne une unité du mauvais niveau, un paramètre sort de ses bornes, ou q est donné avec un autre paramètre.
- 404Un filtre désigne une unité qui n’existe pas, ou la page est au-delà de la dernière.
Exemple · GET /api/communes?type=urban&sort=-population
{
"data": [
{
"code": "06.141.01.0",
"codeDigits": "006141010",
"slug": "casablanca",
"nameFrRaw": "Commune de Casablanca",
"name": {
"fr": "Casablanca",
"ar": "الدار البيضاء"
},
"type": "urban",
"parents": {
"region": "06",
"province": "06.141",
"cercle": null
},
"population": {
"2014": {
"total": 3357173,
"households": 819309
},
"2024": {
"total": 3215935,
"moroccan": 3169978,
"foreign": 45957,
"households": 909228
},
"change": {
"absolute": -141238,
"pct": -4.21,
"basis": "arrondissement_sum"
}
},
"urbanCentres": [],
"centroid": {
"lat": 33.55246299128418,
"lng": -7.650829588842771
},
"bbox": [-7.751238, 33.493342, -7.4574165, 33.6409103],
"areaKm2": 216.76,
"density": 14836.29,
"osm": {
"relationId": 4072985,
"wikidata": "Q7903"
},
"provenance": {
"name": "hcp-2024",
"population2024": "hcp-2024",
"population2014": "hcp-2014:arrondissement_sum",
"geometry": "osm-odbl"
}
}
],
"meta": {
"datasetVersion": "1.10.0",
"page": 1,
"perPage": 50,
"total": 242,
"totalPages": 5
},
"links": {
"self": "/api/communes?type=urban&sort=-population",
"prev": null,
"next": "/api/communes?type=urban&sort=-population&page=2"
}
}1 ligne sur 50 affichée ici.
GET /api/communes/{code}
Une commune, quelle que soit l’écriture de son identifiant
codeobligatoire- stringUn code à points, les chiffres avec ou sans zéros de tête, ou un slug.
Exemple · GET /api/communes/tanger
{
"data": {
"code": "01.511.01.0",
"codeDigits": "001511010",
"slug": "tanger",
"nameFrRaw": "Commune de Tanger",
"name": {
"fr": "Tanger",
"ar": "طنجة"
},
"type": "urban",
"parents": {
"region": "01",
"province": "01.511",
"cercle": null
},
"population": {
"2014": {
"total": 947952,
"households": 239243
},
"2024": {
"total": 1275428,
"moroccan": 1268512,
"foreign": 6916,
"households": 362062
},
"change": {
"absolute": 327476,
"pct": 34.55,
"basis": "arrondissement_sum"
}
},
"urbanCentres": [],
"centroid": {
"lat": 35.75623595957031,
"lng": -5.832718404101565
},
"bbox": [-5.9484121, 35.6995621, -5.7135397, 35.8259979],
"areaKm2": 149.41,
"density": 8536.51,
"osm": {
"relationId": 2758781,
"wikidata": "Q126148"
},
"provenance": {
"name": "hcp-2024",
"population2024": "hcp-2024",
"population2014": "hcp-2014:arrondissement_sum",
"geometry": "osm-odbl"
}
},
"meta": {
"datasetVersion": "1.10.0"
},
"links": {
"self": "/api/communes/01.511.01.0.json",
"prev": null,
"next": null
}
}GET /api/communes/{code}/arrondissements.json
Les arrondissements d’une commune
Seules les 6 communes divisées en arrondissements ont ce fichier ; pour toute autre commune, c’est une 404.
codeobligatoire- stringLe code à points de la commune.
- 200Les arrondissements de la commune.
- 404Aucune commune ne porte ce code, ou elle n’a pas d’arrondissements.
Exemple · GET /api/communes/01.511.01.0/arrondissements.json
{
"data": [
{
"code": "01.511.01.05",
"codeDigits": "015110105",
"name": {
"fr": "Mghogha",
"ar": "مغوغة"
},
"population": {
"2024": {
"total": 252656,
"moroccan": 251850,
"foreign": 806,
"households": 70679
}
},
"provenance": {
"name": "hcp-2024",
"population2024": "hcp-2024",
"geometry": "osm-odbl"
},
"communeCode": "01.511.01.0",
"prefectureOfArrondissementsCode": null,
"centroid": {
"lat": 35.76514231191407,
"lng": -5.752523938476561
},
"bbox": [-5.8129665, 35.7226626, -5.7135397, 35.8259979],
"areaKm2": 43.81,
"density": 5767.67,
"osm": {
"relationId": 3544604,
"wikidata": null
}
},
{
"code": "01.511.01.06",
"codeDigits": "015110106",
"name": {
"fr": "Souani",
"ar": "السواني"
},
"population": {
"2024": {
"total": 111772,
"moroccan": 111120,
"foreign": 652,
"households": 33489
}
},
"provenance": {
"name": "hcp-2024",
"population2024": "hcp-2024",
"geometry": "osm-odbl"
},
"communeCode": "01.511.01.0",
"prefectureOfArrondissementsCode": null,
"centroid": {
"lat": 35.76715592148438,
"lng": -5.8238295160156275
},
"bbox": [-5.8411056, 35.7515914, -5.8021143, 35.7789764],
"areaKm2": 5.09,
"density": 21972.47,
"osm": {
"relationId": 3544606,
"wikidata": null
}
}
],
"meta": {
"datasetVersion": "1.10.0",
"total": 4
},
"links": {
"self": "/api/communes/01.511.01.0/arrondissements.json",
"prev": null,
"next": null
}
}2 lignes sur 4 affichées ici.
GET /api/{collection}/{code}/indicators
Les chiffres d’une unité aux recensements de 2024 et 2014
Les indicateurs du HCP pour une région, une province, un cercle, une commune ou un arrondissement : âge, état matrimonial, fécondité, handicap, scolarisation, alphabétisation et langues, études et travail, et pour les ménages le logement, les équipements, les eaux usées, les déchets et le combustible de cuisson. Pour toute l’unité, sa partie urbaine et sa partie rurale, et pour les hommes et les femmes. Les parts et les taux sont en pourcentage. La plupart viennent du questionnaire long, posé à 20 % des ménages tirés au hasard dans les communes de 2 000 ménages ou plus : là, ce sont des estimations. Les chiffres de 2024 sont au premier niveau et le recensement de 2014 est sous 2014, null pour une unité qu’il n’a pas recensée. Le fichier d’une commune porte aussi les chiffres de ses centres urbains. /data/v1/indicators/fields.json nomme chaque champ avec l’intitulé du HCP, et /data/v1/indicators/2014/fields.json nomme ceux de 2014 et ce à quoi chacun se compare.
collectionobligatoireregions|provinces|cercles|communes|arrondissementsLe niveau de l’unité.codeobligatoire- stringUn code à points, les chiffres avec ou sans zéros de tête, ou un slug.
- 200Les indicateurs de l’unité.
- 400Ce n’est pas un identifiant.
- 404Aucune unité ne porte cet identifiant, ou elle est dans une autre collection.
Exemple · GET /api/communes/tanger/indicators
{
"data": {
"2014": null,
"code": "01.511.01.0",
"codeDigits": "001511010",
"level": "commune",
"name": {
"fr": "Tanger",
"ar": "طنجة"
},
"fromLocalAdministration": false,
"people": {
"total": {
"all": {
"population": {
"legal": 1275428,
"municipal": 1272718
},
"labour": {
"population15Plus": 940063,
"active": 489284,
"inactive": 449985,
"activityRate": 52.1,
"unemploymentRate": 15.3,
"employed": 414399
}
},
"male": {
"population": {
"municipal": 644380
},
"labour": {
"population15Plus": 472773,
"active": 350602,
"inactive": 121457,
"activityRate": 74.3,
"unemploymentRate": 14.4,
"employed": 300274
}
},
"female": {
"population": {
"municipal": 628338
},
"labour": {
"population15Plus": 467290,
"active": 138682,
"inactive": 328528,
"activityRate": 29.7,
"unemploymentRate": 17.7,
"employed": 114125
}
}
},
"urban": {
"all": {
"population": {
"legal": 1275428,
"municipal": 1272718
},
"labour": {
"population15Plus": 940063,
"active": 489284,
"inactive": 449985,
"activityRate": 52.1,
"unemploymentRate": 15.3,
"employed": 414399
}
},
"male": {
"population": {
"municipal": 644380
},
"labour": {
"population15Plus": 472773,
"active": 350602,
"inactive": 121457,
"activityRate": 74.3,
"unemploymentRate": 14.4,
"employed": 300274
}
},
"female": {
"population": {
"municipal": 628338
},
"labour": {
"population15Plus": 467290,
"active": 138682,
"inactive": 328528,
"activityRate": 29.7,
"unemploymentRate": 17.7,
"employed": 114125
}
}
},
"rural": null
},
"households": {
"total": {
"amenities": {
"kitchen": 98.7,
"toilet": 99.8,
"bathroom": 73.7,
"electricity": 99.4,
"runningWater": 98.8
}
},
"urban": {
"amenities": {
"kitchen": 98.7,
"toilet": 99.8,
"bathroom": 73.7,
"electricity": 99.4,
"runningWater": 98.8
}
},
"rural": null
},
"urbanCentres": []
},
"meta": {
"datasetVersion": "1.10.0"
},
"links": {
"self": "/api/communes/01.511.01.0/indicators.json",
"prev": null,
"next": null
}
}Réduit ici à quelques thèmes. Le fichier les a tous.
GET /api/indicators.json
Les chiffres du Maroc aux recensements de 2024 et 2014
Les mêmes indicateurs pour l’ensemble du pays.
- 200Les indicateurs du Maroc.
Exemple · GET /api/indicators.json
{
"data": {
"2014": {
"people": {
"total": {
"all": {
"population": {
"legal": 33848242,
"municipal": 33610084
},
"age": {
"0-4": 10.2,
"5-9": 9,
"10-14": 9,
"15-19": 8.9,
"20-24": 9.1,
"25-29": 8.3,
"30-34": 7.8,
"35-39": 7,
"40-44": 6.4,
"45-49": 5.4,
"50-54": 5.3,
"55-59": 4.1,
"60-64": 3.4,
"65-69": 1.9,
"70-74": 1.7,
"75+": 2.5
},
"maritalStatus": {
"single": 53.2,
"married": 41.4,
"divorced": 1.6,
"widowed": 3.9,
"singulateMeanAgeAtMarriage": 28.5
},
"disability": {
"prevalence": 5.1
},
"fertility": {
"completedFertility": 3.46,
"totalFertilityRate": 2.22
},
"schooling": {
"rate7to12": 95.1
},
"illiteracy": {
"rate10Plus": 32.2
},
"languageCombinations": {
"arabicOnly": 30.9,
"arabicAndFrench": 45.4,
"arabicFrenchEnglish": 18.4,
"other": 5.2
},
"education": {
"none": 36.9,
"preschool": 4.7,
"primary": 28,
"lowerSecondary": 14.3,
"upperSecondary": 10,
"higher": 6.1
},
"localLanguages": {
"darija": 90.9,
"tachelhit": 14.1,
"tamazight": 7.9,
"tarifit": 4,
"hassania": 0.8
},
"labour": {
"active": 11548464,
"inactive": 22061620,
"activityRate": 47.6,
"unemploymentRate": 16.2
},
"employmentStatus": {
"employer": 2.9,
"selfEmployed": 29.8,
"publicSector": 10.2,
"privateSector": 47.6,
"familyWorker": 6.5,
"apprentice": 0.9,
"cooperativeMember": 1.8,
"other": 0.4
},
"commute": {
"employed": 9619080,
"walking": 47.1,
"bikeOrMotorcycle": 9.1,
"privateCar": 10.4,
"bus": 8.2,
"taxi": 10.7,
"employerTransport": 4.5,
"train": 0.4,
"tram": 0.3,
"other": 2.7,
"worksAtHome": 3.1,
"undetermined": 3.4
},
"workplace": {
"atHome": 3.1,
"ownNeighbourhood": 36.4,
"otherNeighbourhood": 18.3,
"otherCommune": 13.7,
"otherProvince": 10.4,
"noFixedPlace": 13.9,
"elsewhere": 0.9,
"undetermined": 3.3
},
"study": {
"students": 8392290,
"ownNeighbourhood": 48.9,
"otherNeighbourhood": 26.7,
"otherCommune": 8.8,
"otherProvince": 5.3,
"elsewhere": 0.2,
"undetermined": 10.1
},
"studyCommute": {
"walking": 69.3,
"bikeOrMotorcycle": 2.5,
"privateCar": 2.8,
"bus": 6.3,
"taxi": 3.4,
"schoolTransport": 4.6,
"train": 0.3,
"tram": 0.3,
"other": 0.9,
"undetermined": 9.7
},
"profession": {
"employed": 9627341,
"managersAndProfessionals": 7,
"technicians": 3.3,
"clerks": 13.9,
"traders": 7.6,
"farmers": 10.4,
"artisans": 22.5,
"farmLabourers": 12.7,
"machineOperators": 4,
"labourers": 16.6,
"unclassified": 1.9
},
"workSector": {
"agriculture": 23.5,
"industry": 11.8,
"utilities": 0.6,
"construction": 14.4,
"commerce": 16,
"transport": 5.2,
"marketServices": 14,
"publicServices": 11.6,
"other": 2.8
},
"diploma": {
"population10Plus": 27172768,
"primary": 21.1,
"lowerSecondary": 12.2,
"upperSecondary": 6.6,
"bachelor": 3.1,
"masterOrDoctorate": 1.1,
"undeclared": 0,
"none": 55.9
},
"vocationalDiploma": {
"specialisedTechnician": 1.7,
"technician": 2.1,
"qualification": 2.4,
"specialisation": 0.6,
"initiation": 0.6,
"undeclared": 0,
"none": 92.5
}
},
"male": {
"population": {
"municipal": 16747522
},
"age": {
"0-4": 10.4,
"5-9": 9.2,
"10-14": 9.3,
"15-19": 8.9,
"20-24": 9,
"25-29": 8.2,
"30-34": 7.7,
"35-39": 6.8,
"40-44": 6.3,
"45-49": 5.3,
"50-54": 5.3,
"55-59": 4.2,
"60-64": 3.4,
"65-69": 1.9,
"70-74": 1.6,
"75+": 2.4
},
"maritalStatus": {
"single": 57.9,
"married": 40.8,
"divorced": 0.7,
"widowed": 0.6,
"singulateMeanAgeAtMarriage": 31.3
},
"disability": {
"prevalence": 5
},
"fertility": {
"completedFertility": null,
"totalFertilityRate": null
},
"schooling": {
"rate7to12": 95.7
},
"illiteracy": {
"rate10Plus": 22.2
},
"languageCombinations": {
"arabicOnly": 31.8,
"arabicAndFrench": 45.4,
"arabicFrenchEnglish": 17.3,
"other": 5.5
},
"education": {
"none": 28.5,
"preschool": 6.4,
"primary": 30.6,
"lowerSecondary": 16.7,
"upperSecondary": 11,
"higher": 6.8
},
"localLanguages": {
"darija": 92.2,
"tachelhit": 14.2,
"tamazight": 7.9,
"tarifit": 4,
"hassania": 0.8
},
"labour": {
"active": 9030773,
"inactive": 7716749,
"activityRate": 75.5,
"unemploymentRate": 12.4
},
"employmentStatus": {
"employer": 3.1,
"selfEmployed": 33.4,
"publicSector": 9.3,
"privateSector": 45.3,
"familyWorker": 5.6,
"apprentice": 1,
"cooperativeMember": 1.9,
"other": 0.4
},
"commute": {
"employed": 7862051,
"walking": 48.4,
"bikeOrMotorcycle": 10.8,
"privateCar": 10.4,
"bus": 8,
"taxi": 10,
"employerTransport": 3.6,
"train": 0.4,
"tram": 0.2,
"other": 3,
"worksAtHome": 2,
"undetermined": 3.1
},
"workplace": {
"atHome": 2,
"ownNeighbourhood": 37.7,
"otherNeighbourhood": 17.3,
"otherCommune": 12.8,
"otherProvince": 10.5,
"noFixedPlace": 15.7,
"elsewhere": 1,
"undetermined": 3
},
"study": {
"students": 4451894,
"ownNeighbourhood": 48.5,
"otherNeighbourhood": 26.8,
"otherCommune": 9.5,
"otherProvince": 5.6,
"elsewhere": 0.2,
"undetermined": 9.3
},
"studyCommute": {
"walking": 69,
"bikeOrMotorcycle": 3.4,
"privateCar": 2.7,
"bus": 6.3,
"taxi": 3.6,
"schoolTransport": 4.5,
"train": 0.3,
"tram": 0.3,
"other": 1,
"undetermined": 8.9
},
"profession": {
"employed": 7868873,
"managersAndProfessionals": 5.6,
"technicians": 2.5,
"clerks": 13.1,
"traders": 8.7,
"farmers": 12.1,
"artisans": 22.9,
"farmLabourers": 12.5,
"machineOperators": 4.9,
"labourers": 16,
"unclassified": 1.7
},
"workSector": {
"agriculture": 25,
"industry": 9.7,
"utilities": 0.6,
"construction": 17.4,
"commerce": 17.7,
"transport": 5.9,
"marketServices": 11.7,
"publicServices": 9.4,
"other": 2.5
},
"diploma": {
"population10Plus": 13458638,
"primary": 24.4,
"lowerSecondary": 13.6,
"upperSecondary": 7.1,
"bachelor": 3.4,
"masterOrDoctorate": 1.4,
"undeclared": 0,
"none": 50
},
"vocationalDiploma": {
"specialisedTechnician": 1.8,
"technician": 2.6,
"qualification": 3,
"specialisation": 0.8,
"initiation": 0.6,
"undeclared": 0,
"none": 91.2
}
},
"female": {
"population": {
"municipal": 16862562
},
"age": {
"0-4": 9.9,
"5-9": 8.8,
"10-14": 8.8,
"15-19": 8.8,
"20-24": 9.1,
"25-29": 8.4,
"30-34": 8,
"35-39": 7.2,
"40-44": 6.5,
"45-49": 5.6,
"50-54": 5.4,
"55-59": 4,
"60-64": 3.3,
"65-69": 1.9,
"70-74": 1.8,
"75+": 2.6
},
"maritalStatus": {
"single": 48.4,
"married": 42,
"divorced": 2.4,
"widowed": 7.1,
"singulateMeanAgeAtMarriage": 25.7
},
"disability": {
"prevalence": 5.1
},
"fertility": {
"completedFertility": 3.46,
"totalFertilityRate": 2.22
},
"schooling": {
"rate7to12": 94.4
},
"illiteracy": {
"rate10Plus": 42.1
},
"languageCombinations": {
"arabicOnly": 29.7,
"arabicAndFrench": 45.4,
"arabicFrenchEnglish": 20,
"other": 4.9
},
"education": {
"none": 45.2,
"preschool": 3,
"primary": 25.4,
"lowerSecondary": 12,
"upperSecondary": 8.9,
"higher": 5.4
},
"localLanguages": {
"darija": 89.7,
"tachelhit": 14.1,
"tamazight": 8,
"tarifit": 4.1,
"hassania": 0.8
},
"labour": {
"active": 2517691,
"inactive": 14344871,
"activityRate": 20.4,
"unemploymentRate": 29.6
},
"employmentStatus": {
"employer": 2,
"selfEmployed": 14.5,
"publicSector": 14,
"privateSector": 57.3,
"familyWorker": 10.3,
"apprentice": 0.4,
"cooperativeMember": 1,
"other": 0.5
},
"commute": {
"employed": 1757029,
"walking": 41.4,
"bikeOrMotorcycle": 1.5,
"privateCar": 10.6,
"bus": 9.1,
"taxi": 13.4,
"employerTransport": 8.3,
"train": 0.5,
"tram": 0.6,
"other": 1.4,
"worksAtHome": 8.4,
"undetermined": 4.6
},
"workplace": {
"atHome": 8.4,
"ownNeighbourhood": 30.4,
"otherNeighbourhood": 22.9,
"otherCommune": 17.5,
"otherProvince": 10,
"noFixedPlace": 5.5,
"elsewhere": 0.6,
"undetermined": 4.6
},
"study": {
"students": 3940396,
"ownNeighbourhood": 49.4,
"otherNeighbourhood": 26.7,
"otherCommune": 8,
"otherProvince": 4.9,
"elsewhere": 0.2,
"undetermined": 10.9
},
"studyCommute": {
"walking": 69.6,
"bikeOrMotorcycle": 1.4,
"privateCar": 2.9,
"bus": 6.3,
"taxi": 3.2,
"schoolTransport": 4.7,
"train": 0.3,
"tram": 0.4,
"other": 0.7,
"undetermined": 10.5
},
"profession": {
"employed": 1758468,
"managersAndProfessionals": 13.5,
"technicians": 6.6,
"clerks": 17.6,
"traders": 2.7,
"farmers": 2.8,
"artisans": 20.4,
"farmLabourers": 14,
"machineOperators": 0.3,
"labourers": 19.1,
"unclassified": 3
},
"workSector": {
"agriculture": 16.8,
"industry": 21.3,
"utilities": 0.6,
"construction": 1.1,
"commerce": 8.4,
"transport": 1.8,
"marketServices": 24.5,
"publicServices": 21.4,
"other": 4.1
},
"diploma": {
"population10Plus": 13714130,
"primary": 17.9,
"lowerSecondary": 10.8,
"upperSecondary": 6,
"bachelor": 2.8,
"masterOrDoctorate": 0.8,
"undeclared": 0,
"none": 61.6
},
"vocationalDiploma": {
"specialisedTechnician": 1.6,
"technician": 1.5,
"qualification": 1.9,
"specialisation": 0.4,
"initiation": 0.6,
"undeclared": 0,
"none": 93.9
}
}
},
"urban": {
"all": {
"population": {
"legal": null,
"municipal": 20284436
},
"age": {
"0-4": 9.4,
"5-9": 8.4,
"10-14": 8.3,
"15-19": 8.4,
"20-24": 9.1,
"25-29": 8.5,
"30-34": 8.1,
"35-39": 7.3,
"40-44": 6.9,
"45-49": 6,
"50-54": 5.9,
"55-59": 4.5,
"60-64": 3.5,
"65-69": 1.9,
"70-74": 1.6,
"75+": 2.3
},
"maritalStatus": {
"single": 52.5,
"married": 41.6,
"divorced": 2,
"widowed": 4,
"singulateMeanAgeAtMarriage": 29.2
},
"disability": {
"prevalence": 4.8
},
"fertility": {
"completedFertility": 2.93,
"totalFertilityRate": 2.03
},
"schooling": {
"rate7to12": 97.8
},
"illiteracy": {
"rate10Plus": 22.6
},
"languageCombinations": {
"arabicOnly": 25.6,
"arabicAndFrench": 46.4,
"arabicFrenchEnglish": 23.1,
"other": 4.9
},
"education": {
"none": 27.7,
"preschool": 5.2,
"primary": 26.6,
"lowerSecondary": 17.2,
"upperSecondary": 14.2,
"higher": 9.2
},
"localLanguages": {
"darija": 96.3,
"tachelhit": 11.5,
"tamazight": 5.1,
"tarifit": 3.8,
"hassania": 1.2
},
"labour": {
"active": 7369399,
"inactive": 12915037,
"activityRate": 49.1,
"unemploymentRate": 19.3
},
"employmentStatus": {
"employer": 3.7,
"selfEmployed": 25.2,
"publicSector": 14.4,
"privateSector": 52.3,
"familyWorker": 1.2,
"apprentice": 0.9,
"cooperativeMember": 1.8,
"other": 0.4
},
"commute": {
"employed": 5932706,
"walking": 38,
"bikeOrMotorcycle": 9.7,
"privateCar": 14.8,
"bus": 8.5,
"taxi": 12.3,
"employerTransport": 6.6,
"train": 0.6,
"tram": 0.4,
"other": 2.1,
"worksAtHome": 3.1,
"undetermined": 3.8
},
"workplace": {
"atHome": 3.1,
"ownNeighbourhood": 22.5,
"otherNeighbourhood": 26.9,
"otherCommune": 16.7,
"otherProvince": 10.6,
"noFixedPlace": 15.5,
"elsewhere": 0.9,
"undetermined": 3.7
},
"study": {
"students": 5586730,
"ownNeighbourhood": 46.1,
"otherNeighbourhood": 31.8,
"otherCommune": 6.8,
"otherProvince": 5.5,
"elsewhere": 0.2,
"undetermined": 9.6
},
"studyCommute": {
"walking": 68.7,
"bikeOrMotorcycle": 1.7,
"privateCar": 3.8,
"bus": 7,
"taxi": 2.6,
"schoolTransport": 5.7,
"train": 0.5,
"tram": 0.5,
"other": 0.4,
"undetermined": 9.1
},
"profession": {
"employed": 5932706,
"managersAndProfessionals": 10.7,
"technicians": 5,
"clerks": 19,
"traders": 9.4,
"farmers": 1.3,
"artisans": 26.3,
"farmLabourers": 2.9,
"machineOperators": 4.7,
"labourers": 18.1,
"unclassified": 2.5
},
"workSector": {
"agriculture": 4.4,
"industry": 15.7,
"utilities": 0.9,
"construction": 13.1,
"commerce": 20.3,
"transport": 6.5,
"marketServices": 18.7,
"publicServices": 16.8,
"other": 3.6
},
"diploma": {
"population10Plus": 16684508,
"primary": 23.2,
"lowerSecondary": 16.5,
"upperSecondary": 9.5,
"bachelor": 4.6,
"masterOrDoctorate": 1.8,
"undeclared": 0,
"none": 44.4
},
"vocationalDiploma": {
"specialisedTechnician": 2.6,
"technician": 3.1,
"qualification": 3.6,
"specialisation": 0.9,
"initiation": 0.9,
"undeclared": 0,
"none": 88.9
}
},
"male": {
"population": {
"municipal": 10034689
},
"age": {
"0-4": 9.7,
"5-9": 8.6,
"10-14": 8.6,
"15-19": 8.5,
"20-24": 9,
"25-29": 8.3,
"30-34": 7.9,
"35-39": 7.1,
"40-44": 6.7,
"45-49": 5.8,
"50-54": 5.8,
"55-59": 4.7,
"60-64": 3.7,
"65-69": 1.9,
"70-74": 1.5,
"75+": 2.1
},
"maritalStatus": {
"single": 57.2,
"married": 41.4,
"divorced": 0.8,
"widowed": 0.6,
"singulateMeanAgeAtMarriage": 32.1
},
"disability": {
"prevalence": 4.6
},
"fertility": {
"completedFertility": null,
"totalFertilityRate": null
},
"schooling": {
"rate7to12": 97.8
},
"illiteracy": {
"rate10Plus": 14
},
"languageCombinations": {
"arabicOnly": 26,
"arabicAndFrench": 46.8,
"arabicFrenchEnglish": 21.9,
"other": 5.3
},
"education": {
"none": 20.4,
"preschool": 6.5,
"primary": 29,
"lowerSecondary": 19,
"upperSecondary": 15.3,
"higher": 10
},
"localLanguages": {
"darija": 96.7,
"tachelhit": 12,
"tamazight": 5.1,
"tarifit": 3.7,
"hassania": 1.2
},
"labour": {
"active": 5390506,
"inactive": 4644183,
"activityRate": 73.4,
"unemploymentRate": 15.2
},
"employmentStatus": {
"employer": 4.1,
"selfEmployed": 28.9,
"publicSector": 13.7,
"privateSector": 48.4,
"familyWorker": 1.2,
"apprentice": 1.1,
"cooperativeMember": 2.1,
"other": 0.4
},
"commute": {
"employed": 4559158,
"walking": 39,
"bikeOrMotorcycle": 12.2,
"privateCar": 15.2,
"bus": 8,
"taxi": 11.3,
"employerTransport": 5.6,
"train": 0.6,
"tram": 0.3,
"other": 2.4,
"worksAtHome": 2,
"undetermined": 3.4
},
"workplace": {
"atHome": 2,
"ownNeighbourhood": 22.9,
"otherNeighbourhood": 26.4,
"otherCommune": 15.6,
"otherProvince": 10.5,
"noFixedPlace": 18.3,
"elsewhere": 1,
"undetermined": 3.4
},
"study": {
"students": 2872466,
"ownNeighbourhood": 46.2,
"otherNeighbourhood": 32.1,
"otherCommune": 6.9,
"otherProvince": 5.6,
"elsewhere": 0.3,
"undetermined": 9
},
"studyCommute": {
"walking": 69.1,
"bikeOrMotorcycle": 2.4,
"privateCar": 3.8,
"bus": 6.7,
"taxi": 2.4,
"schoolTransport": 5.6,
"train": 0.5,
"tram": 0.4,
"other": 0.4,
"undetermined": 8.5
},
"profession": {
"employed": 4559158,
"managersAndProfessionals": 8.9,
"technicians": 4.1,
"clerks": 18.4,
"traders": 11.4,
"farmers": 1.6,
"artisans": 27.5,
"farmLabourers": 2.9,
"machineOperators": 6,
"labourers": 17.1,
"unclassified": 2.3
},
"workSector": {
"agriculture": 4.8,
"industry": 13.3,
"utilities": 0.9,
"construction": 16.6,
"commerce": 23.5,
"transport": 7.8,
"marketServices": 15.7,
"publicServices": 14,
"other": 3.3
},
"diploma": {
"population10Plus": 8195220,
"primary": 26,
"lowerSecondary": 17.9,
"upperSecondary": 10.1,
"bachelor": 5,
"masterOrDoctorate": 2.3,
"undeclared": 0,
"none": 38.7
},
"vocationalDiploma": {
"specialisedTechnician": 2.8,
"technician": 3.8,
"qualification": 4.2,
"specialisation": 1.1,
"initiation": 0.8,
"undeclared": 0,
"none": 87.2
}
},
"female": {
"population": {
"municipal": 10249747
},
"age": {
"0-4": 9.1,
"5-9": 8.1,
"10-14": 8.1,
"15-19": 8.4,
"20-24": 9.2,
"25-29": 8.6,
"30-34": 8.3,
"35-39": 7.6,
"40-44": 7,
"45-49": 6.1,
"50-54": 5.9,
"55-59": 4.3,
"60-64": 3.3,
"65-69": 1.9,
"70-74": 1.7,
"75+": 2.4
},
"maritalStatus": {
"single": 47.9,
"married": 41.8,
"divorced": 3.1,
"widowed": 7.3,
"singulateMeanAgeAtMarriage": 26.4
},
"disability": {
"prevalence": 5
},
"fertility": {
"completedFertility": 2.93,
"totalFertilityRate": 2.03
},
"schooling": {
"rate7to12": 97.9
},
"illiteracy": {
"rate10Plus": 31
},
"languageCombinations": {
"arabicOnly": 25,
"arabicAndFrench": 46,
"arabicFrenchEnglish": 24.5,
"other": 4.5
},
"education": {
"none": 34.9,
"preschool": 4.1,
"primary": 24.2,
"lowerSecondary": 15.4,
"upperSecondary": 13.1,
"higher": 8.4
},
"localLanguages": {
"darija": 95.9,
"tachelhit": 11,
"tamazight": 5.2,
"tarifit": 3.8,
"hassania": 1.2
},
"labour": {
"active": 1978893,
"inactive": 8270854,
"activityRate": 25.8,
"unemploymentRate": 30.5
},
"employmentStatus": {
"employer": 2.3,
"selfEmployed": 13.2,
"publicSector": 16.9,
"privateSector": 64.5,
"familyWorker": 1.2,
"apprentice": 0.4,
"cooperativeMember": 0.9,
"other": 0.5
},
"commute": {
"employed": 1373548,
"walking": 34.8,
"bikeOrMotorcycle": 1.7,
"privateCar": 13.2,
"bus": 10.5,
"taxi": 15.7,
"employerTransport": 9.9,
"train": 0.6,
"tram": 0.8,
"other": 1.2,
"worksAtHome": 6.9,
"undetermined": 4.9
},
"workplace": {
"atHome": 6.9,
"ownNeighbourhood": 21.2,
"otherNeighbourhood": 28.4,
"otherCommune": 20.5,
"otherProvince": 11.2,
"noFixedPlace": 6.2,
"elsewhere": 0.7,
"undetermined": 4.9
},
"study": {
"students": 2714264,
"ownNeighbourhood": 46,
"otherNeighbourhood": 31.5,
"otherCommune": 6.6,
"otherProvince": 5.4,
"elsewhere": 0.2,
"undetermined": 10.2
},
"studyCommute": {
"walking": 68.2,
"bikeOrMotorcycle": 1,
"privateCar": 3.9,
"bus": 7.3,
"taxi": 2.8,
"schoolTransport": 5.8,
"train": 0.5,
"tram": 0.5,
"other": 0.4,
"undetermined": 9.7
},
"profession": {
"employed": 1373548,
"managersAndProfessionals": 16.6,
"technicians": 8.1,
"clerks": 21.3,
"traders": 3,
"farmers": 0.3,
"artisans": 22.5,
"farmLabourers": 2.7,
"machineOperators": 0.4,
"labourers": 21.7,
"unclassified": 3.3
},
"workSector": {
"agriculture": 3.1,
"industry": 23.7,
"utilities": 0.8,
"construction": 1.2,
"commerce": 9.8,
"transport": 2.2,
"marketServices": 28.7,
"publicServices": 26,
"other": 4.6
},
"diploma": {
"population10Plus": 8489288,
"primary": 20.5,
"lowerSecondary": 15.2,
"upperSecondary": 9,
"bachelor": 4.2,
"masterOrDoctorate": 1.3,
"undeclared": 0,
"none": 49.8
},
"vocationalDiploma": {
"specialisedTechnician": 2.5,
"technician": 2.4,
"qualification": 3,
"specialisation": 0.7,
"initiation": 1,
"undeclared": 0,
"none": 90.6
}
}
},
"rural": {
"all": {
"population": {
"legal": null,
"municipal": 13325648
},
"age": {
"0-4": 11.3,
"5-9": 10,
"10-14": 10.1,
"15-19": 9.5,
"20-24": 9.1,
"25-29": 8.1,
"30-34": 7.4,
"35-39": 6.5,
"40-44": 5.6,
"45-49": 4.6,
"50-54": 4.5,
"55-59": 3.5,
"60-64": 3.1,
"65-69": 1.9,
"70-74": 1.9,
"75+": 2.8
},
"maritalStatus": {
"single": 54.2,
"married": 41.2,
"divorced": 0.9,
"widowed": 3.7,
"singulateMeanAgeAtMarriage": 27.5
},
"disability": {
"prevalence": 5.5
},
"fertility": {
"completedFertility": 4.53,
"totalFertilityRate": 2.53
},
"schooling": {
"rate7to12": 91.6
},
"illiteracy": {
"rate10Plus": 47.5
},
"languageCombinations": {
"arabicOnly": 43.5,
"arabicAndFrench": 43,
"arabicFrenchEnglish": 7.5,
"other": 6
},
"education": {
"none": 50.9,
"preschool": 3.8,
"primary": 30.2,
"lowerSecondary": 10,
"upperSecondary": 3.6,
"higher": 1.5
},
"localLanguages": {
"darija": 82.7,
"tachelhit": 18.2,
"tamazight": 12.2,
"tarifit": 4.4,
"hassania": 0.3
},
"labour": {
"active": 4179065,
"inactive": 9146583,
"activityRate": 45.1,
"unemploymentRate": 10.5
},
"employmentStatus": {
"employer": 1.5,
"selfEmployed": 37.5,
"publicSector": 3.2,
"privateSector": 39.7,
"familyWorker": 15.4,
"apprentice": 0.7,
"cooperativeMember": 1.6,
"other": 0.5
},
"commute": {
"employed": 3686374,
"walking": 61.8,
"bikeOrMotorcycle": 8.2,
"privateCar": 3.5,
"bus": 7.7,
"taxi": 8,
"employerTransport": 1.1,
"train": 0.2,
"tram": 0,
"other": 3.7,
"worksAtHome": 3.2,
"undetermined": 2.7
},
"workplace": {
"atHome": 3.2,
"ownNeighbourhood": 58.7,
"otherNeighbourhood": 4.6,
"otherCommune": 8.8,
"otherProvince": 10,
"noFixedPlace": 11.3,
"elsewhere": 0.8,
"undetermined": 2.6
},
"study": {
"students": 2805560,
"ownNeighbourhood": 54.5,
"otherNeighbourhood": 16.6,
"otherCommune": 12.8,
"otherProvince": 4.9,
"elsewhere": 0.2,
"undetermined": 11
},
"studyCommute": {
"walking": 70.4,
"bikeOrMotorcycle": 4,
"privateCar": 0.6,
"bus": 5,
"taxi": 4.9,
"schoolTransport": 2.4,
"train": 0.1,
"tram": 0,
"other": 1.8,
"undetermined": 10.7
},
"profession": {
"employed": 3694635,
"managersAndProfessionals": 1.1,
"technicians": 0.6,
"clerks": 5.6,
"traders": 4.7,
"farmers": 25.1,
"artisans": 16.2,
"farmLabourers": 28.6,
"machineOperators": 3,
"labourers": 14.1,
"unclassified": 1
},
"workSector": {
"agriculture": 54.3,
"industry": 5.7,
"utilities": 0.2,
"construction": 16.6,
"commerce": 9,
"transport": 3.1,
"marketServices": 6.5,
"publicServices": 3.2,
"other": 1.5
},
"diploma": {
"population10Plus": 10488260,
"primary": 17.9,
"lowerSecondary": 5.3,
"upperSecondary": 1.8,
"bachelor": 0.7,
"masterOrDoctorate": 0.1,
"undeclared": 0,
"none": 74.2
},
"vocationalDiploma": {
"specialisedTechnician": 0.2,
"technician": 0.4,
"qualification": 0.6,
"specialisation": 0.2,
"initiation": 0.2,
"undeclared": 0,
"none": 98.3
}
},
"male": {
"population": {
"municipal": 6712833
},
"age": {
"0-4": 11.5,
"5-9": 10.1,
"10-14": 10.2,
"15-19": 9.6,
"20-24": 9.1,
"25-29": 8.1,
"30-34": 7.4,
"35-39": 6.5,
"40-44": 5.6,
"45-49": 4.5,
"50-54": 4.4,
"55-59": 3.5,
"60-64": 3.1,
"65-69": 1.9,
"70-74": 1.8,
"75+": 2.8
},
"maritalStatus": {
"single": 59,
"married": 40,
"divorced": 0.4,
"widowed": 0.6,
"singulateMeanAgeAtMarriage": 30.1
},
"disability": {
"prevalence": 5.6
},
"fertility": {
"completedFertility": null,
"totalFertilityRate": null
},
"schooling": {
"rate7to12": 93
},
"illiteracy": {
"rate10Plus": 34.9
},
"languageCombinations": {
"arabicOnly": 43.8,
"arabicAndFrench": 42.5,
"arabicFrenchEnglish": 7.7,
"other": 5.9
},
"education": {
"none": 40.6,
"preschool": 6.4,
"primary": 33,
"lowerSecondary": 13.4,
"upperSecondary": 4.7,
"higher": 2
},
"localLanguages": {
"darija": 85.4,
"tachelhit": 17.5,
"tamazight": 12.2,
"tarifit": 4.3,
"hassania": 0.3
},
"labour": {
"active": 3640267,
"inactive": 3072566,
"activityRate": 78.8,
"unemploymentRate": 8.3
},
"employmentStatus": {
"employer": 1.6,
"selfEmployed": 39.7,
"publicSector": 3.2,
"privateSector": 40.8,
"familyWorker": 11.9,
"apprentice": 0.7,
"cooperativeMember": 1.6,
"other": 0.5
},
"commute": {
"employed": 3302893,
"walking": 61.4,
"bikeOrMotorcycle": 9,
"privateCar": 3.8,
"bus": 8.1,
"taxi": 8.3,
"employerTransport": 0.9,
"train": 0.2,
"tram": 0,
"other": 3.9,
"worksAtHome": 1.9,
"undetermined": 2.6
},
"workplace": {
"atHome": 1.9,
"ownNeighbourhood": 58.2,
"otherNeighbourhood": 4.8,
"otherCommune": 9,
"otherProvince": 10.5,
"noFixedPlace": 12.3,
"elsewhere": 0.8,
"undetermined": 2.5
},
"study": {
"students": 1579428,
"ownNeighbourhood": 52.7,
"otherNeighbourhood": 17.2,
"otherCommune": 14.3,
"otherProvince": 5.8,
"elsewhere": 0.2,
"undetermined": 9.9
},
"studyCommute": {
"walking": 68.8,
"bikeOrMotorcycle": 5.2,
"privateCar": 0.7,
"bus": 5.5,
"taxi": 5.6,
"schoolTransport": 2.5,
"train": 0.1,
"tram": 0,
"other": 2.1,
"undetermined": 9.6
},
"profession": {
"employed": 3309715,
"managersAndProfessionals": 1,
"technicians": 0.5,
"clerks": 5.8,
"traders": 5.1,
"farmers": 26.6,
"artisans": 16.6,
"farmLabourers": 25.6,
"machineOperators": 3.3,
"labourers": 14.6,
"unclassified": 0.9
},
"workSector": {
"agriculture": 52.9,
"industry": 4.8,
"utilities": 0.2,
"construction": 18.4,
"commerce": 9.6,
"transport": 3.4,
"marketServices": 6.1,
"publicServices": 3.1,
"other": 1.4
},
"diploma": {
"population10Plus": 5263418,
"primary": 22,
"lowerSecondary": 6.9,
"upperSecondary": 2.4,
"bachelor": 1,
"masterOrDoctorate": 0.1,
"undeclared": 0,
"none": 67.4
},
"vocationalDiploma": {
"specialisedTechnician": 0.3,
"technician": 0.6,
"qualification": 1,
"specialisation": 0.3,
"initiation": 0.2,
"undeclared": 0,
"none": 97.5
}
},
"female": {
"population": {
"municipal": 6612815
},
"age": {
"0-4": 11.1,
"5-9": 9.9,
"10-14": 9.9,
"15-19": 9.5,
"20-24": 9,
"25-29": 8.2,
"30-34": 7.5,
"35-39": 6.6,
"40-44": 5.7,
"45-49": 4.7,
"50-54": 4.7,
"55-59": 3.5,
"60-64": 3.2,
"65-69": 1.9,
"70-74": 1.9,
"75+": 2.8
},
"maritalStatus": {
"single": 49.3,
"married": 42.5,
"divorced": 1.4,
"widowed": 6.8,
"singulateMeanAgeAtMarriage": 24.8
},
"disability": {
"prevalence": 5.3
},
"fertility": {
"completedFertility": 4.53,
"totalFertilityRate": 2.53
},
"schooling": {
"rate7to12": 90.1
},
"illiteracy": {
"rate10Plus": 60.1
},
"languageCombinations": {
"arabicOnly": 43.1,
"arabicAndFrench": 43.8,
"arabicFrenchEnglish": 7,
"other": 6.1
},
"education": {
"none": 61.3,
"preschool": 1.3,
"primary": 27.4,
"lowerSecondary": 6.6,
"upperSecondary": 2.5,
"higher": 0.9
},
"localLanguages": {
"darija": 80,
"tachelhit": 18.9,
"tamazight": 12.3,
"tarifit": 4.5,
"hassania": 0.3
},
"labour": {
"active": 538798,
"inactive": 6074017,
"activityRate": 11.4,
"unemploymentRate": 26.2
},
"employmentStatus": {
"employer": 0.9,
"selfEmployed": 19.1,
"publicSector": 3.1,
"privateSector": 30.2,
"familyWorker": 44.4,
"apprentice": 0.3,
"cooperativeMember": 1.7,
"other": 0.3
},
"commute": {
"employed": 383481,
"walking": 65.2,
"bikeOrMotorcycle": 1.1,
"privateCar": 1.4,
"bus": 4.4,
"taxi": 5.2,
"employerTransport": 2.8,
"train": 0.2,
"tram": 0,
"other": 2.3,
"worksAtHome": 13.9,
"undetermined": 3.7
},
"workplace": {
"atHome": 13.9,
"ownNeighbourhood": 63.4,
"otherNeighbourhood": 3.3,
"otherCommune": 6.9,
"otherProvince": 5.8,
"noFixedPlace": 3,
"elsewhere": 0.4,
"undetermined": 3.5
},
"study": {
"students": 1226132,
"ownNeighbourhood": 56.9,
"otherNeighbourhood": 15.8,
"otherCommune": 10.9,
"otherProvince": 3.8,
"elsewhere": 0.1,
"undetermined": 12.5
},
"studyCommute": {
"walking": 72.5,
"bikeOrMotorcycle": 2.4,
"privateCar": 0.6,
"bus": 4.3,
"taxi": 4.1,
"schoolTransport": 2.3,
"train": 0.1,
"tram": 0,
"other": 1.5,
"undetermined": 12.2
},
"profession": {
"employed": 384920,
"managersAndProfessionals": 2.3,
"technicians": 1.3,
"clerks": 4.2,
"traders": 1.4,
"farmers": 11.9,
"artisans": 12.8,
"farmLabourers": 54.1,
"machineOperators": 0.2,
"labourers": 9.9,
"unclassified": 1.8
},
"workSector": {
"agriculture": 65.9,
"industry": 12.7,
"utilities": 0.1,
"construction": 1,
"commerce": 3.4,
"transport": 0.3,
"marketServices": 9.6,
"publicServices": 4.7,
"other": 2.2
},
"diploma": {
"population10Plus": 5224842,
"primary": 13.7,
"lowerSecondary": 3.7,
"upperSecondary": 1.3,
"bachelor": 0.4,
"masterOrDoctorate": 0,
"undeclared": 0,
"none": 80.9
},
"vocationalDiploma": {
"specialisedTechnician": 0.2,
"technician": 0.2,
"qualification": 0.2,
"specialisation": 0.1,
"initiation": 0.1,
"undeclared": 0,
"none": 99.2
}
}
}
},
"households": {
"total": {
"households": {
"municipalPopulation": 33610084,
"count": 7313806,
"averageSize": 4.6,
"peoplePerRoom": 1.4,
"distanceToPavedRoadKm": 3
},
"dwellingType": {
"villa": 3.2,
"apartment": 11.6,
"moroccanHouse": 56.8,
"basicOrSlum": 4.5,
"rural": 22.8,
"other": 1
},
"occupancy": {
"owner": 71.9,
"tenant": 18.8,
"other": 9.2
},
"dwellingAge": {
"under10": 20.1,
"10-19": 22.2,
"20-49": 37.4,
"50+": 20.3
},
"amenities": {
"kitchen": 93.5,
"toilet": 93.7,
"bathroom": 54,
"electricity": 91.6,
"runningWater": 73
},
"wastewater": {
"publicSewer": 58.9,
"septicTank": 23.2,
"other": 17.9
},
"householdWaste": {
"municipalBin": 46.1,
"truck": 19.3,
"otherOrOpen": 34.6
},
"cookingFuel": {
"gas": 96.9,
"electricity": 4.8,
"charcoal": 1.5,
"firewood": 10.2,
"animalWaste": 4.3
},
"equipment": {
"television": 92.5,
"radio": 52.6,
"mobilePhone": 94.3,
"landline": 13.5,
"internet": 19.3,
"computer": 25.4,
"satelliteDish": 84,
"refrigerator": 85.1
}
},
"urban": {
"households": {
"municipalPopulation": 20284436,
"count": 4807743,
"averageSize": 4.2,
"peoplePerRoom": 1.3,
"distanceToPavedRoadKm": null
},
"dwellingType": {
"villa": 4.5,
"apartment": 17.5,
"moroccanHouse": 70.4,
"basicOrSlum": 5.2,
"rural": 1.3,
"other": 1
},
"occupancy": {
"owner": 62.7,
"tenant": 27.6,
"other": 9.6
},
"dwellingAge": {
"under10": 20.7,
"10-19": 23.6,
"20-49": 40.8,
"50+": 14.9
},
"amenities": {
"kitchen": 94.9,
"toilet": 99,
"bathroom": 58.3,
"electricity": 95.2,
"runningWater": 91.3
},
"wastewater": {
"publicSewer": 88.2,
"septicTank": 9.6,
"other": 2.2
},
"householdWaste": {
"municipalBin": 68.3,
"truck": 26.6,
"otherOrOpen": 5.1
},
"cookingFuel": {
"gas": 99.6,
"electricity": 6.5,
"charcoal": 1.1,
"firewood": 1.4,
"animalWaste": 0.8
},
"equipment": {
"television": 96.1,
"radio": 55.4,
"mobilePhone": 96.5,
"landline": 19.7,
"internet": 27.5,
"computer": 35.7,
"satelliteDish": 90.4,
"refrigerator": 91.4
}
},
"rural": {
"households": {
"municipalPopulation": 13325648,
"count": 2506063,
"averageSize": 5.3,
"peoplePerRoom": 1.6,
"distanceToPavedRoadKm": 3
},
"dwellingType": {
"villa": 0.8,
"apartment": 0.3,
"moroccanHouse": 30.7,
"basicOrSlum": 3.1,
"rural": 64.1,
"other": 1
},
"occupancy": {
"owner": 89.6,
"tenant": 1.9,
"other": 8.5
},
"dwellingAge": {
"under10": 19,
"10-19": 19.3,
"20-49": 30.9,
"50+": 30.7
},
"amenities": {
"kitchen": 90.8,
"toilet": 83.4,
"bathroom": 45.9,
"electricity": 84.6,
"runningWater": 37.8
},
"wastewater": {
"publicSewer": 2.9,
"septicTank": 49.2,
"other": 47.9
},
"householdWaste": {
"municipalBin": 3.4,
"truck": 5.3,
"otherOrOpen": 91.3
},
"cookingFuel": {
"gas": 91.7,
"electricity": 1.7,
"charcoal": 2.3,
"firewood": 27.1,
"animalWaste": 11.2
},
"equipment": {
"television": 85.7,
"radio": 47.3,
"mobilePhone": 90.3,
"landline": 1.5,
"internet": 3.6,
"computer": 5.7,
"satelliteDish": 71.8,
"refrigerator": 73
}
}
}
},
"code": null,
"codeDigits": null,
"level": "country",
"name": {
"fr": "Maroc",
"ar": "المغرب"
},
"fromLocalAdministration": false,
"people": {
"total": {
"all": {
"fertility": {
"totalFertilityRate": 1.97,
"completedFertility": 2.8
},
"localLanguages": {
"darija": 91.9,
"tachelhit": 14.2,
"tamazight": 7.4,
"tarifit": 3.2,
"hassania": 0.8
}
},
"male": {
"localLanguages": {
"darija": 92.7,
"tachelhit": 14.2,
"tamazight": 7.4,
"tarifit": 3.1,
"hassania": 0.8
}
},
"female": {
"fertility": {
"totalFertilityRate": 1.97,
"completedFertility": 2.8
},
"localLanguages": {
"darija": 91.1,
"tachelhit": 14.2,
"tamazight": 7.5,
"tarifit": 3.3,
"hassania": 0.8
}
}
},
"urban": {
"all": {
"fertility": {
"totalFertilityRate": 1.77,
"completedFertility": 2.5
},
"localLanguages": {
"darija": 96.3,
"tachelhit": 11.7,
"tamazight": 5.1,
"tarifit": 3,
"hassania": 1.1
}
},
"male": {
"localLanguages": {
"darija": 96.6,
"tachelhit": 11.9,
"tamazight": 5.1,
"tarifit": 2.9,
"hassania": 1.1
}
},
"female": {
"fertility": {
"totalFertilityRate": 1.77,
"completedFertility": 2.5
},
"localLanguages": {
"darija": 95.9,
"tachelhit": 11.5,
"tamazight": 5.2,
"tarifit": 3.1,
"hassania": 1.1
}
}
},
"rural": {
"all": {
"fertility": {
"totalFertilityRate": 2.37,
"completedFertility": 3.4
},
"localLanguages": {
"darija": 84.5,
"tachelhit": 18.5,
"tamazight": 11.3,
"tarifit": 3.5,
"hassania": 0.3
}
},
"male": {
"localLanguages": {
"darija": 86.3,
"tachelhit": 18,
"tamazight": 11.2,
"tarifit": 3.3,
"hassania": 0.3
}
},
"female": {
"fertility": {
"totalFertilityRate": 2.37,
"completedFertility": 3.4
},
"localLanguages": {
"darija": 82.7,
"tachelhit": 19,
"tamazight": 11.5,
"tarifit": 3.6,
"hassania": 0.3
}
}
}
},
"households": {
"total": {
"households": {
"municipalPopulation": 36490591,
"count": 9275038,
"averageSize": 3.9,
"sedentary": 9263270,
"peoplePerRoom": 1.4,
"distanceToPavedRoadKm": 1.5
}
},
"urban": {
"households": {
"municipalPopulation": 22921202,
"count": 6173930,
"averageSize": 3.7,
"sedentary": 6166796,
"peoplePerRoom": 1.3,
"distanceToPavedRoadKm": null
}
},
"rural": {
"households": {
"municipalPopulation": 13569389,
"count": 3101108,
"averageSize": 4.4,
"sedentary": 3096474,
"peoplePerRoom": 1.7,
"distanceToPavedRoadKm": 1.5
}
}
}
},
"meta": {
"datasetVersion": "1.10.0"
},
"links": {
"self": "/api/indicators.json",
"prev": null,
"next": null
}
}Réduit ici à quelques thèmes. Le fichier les a tous.
GET /api/{collection}/{code}/economy
Les établissements économiques d’une unité, recensés en 2024
Combien d’établissements les équipes du HCP ont relevés dans une région, une province, un cercle, une commune ou un arrondissement, combien sont des services publics, des associations ou des entreprises, et combien d’emplois permanents ces entreprises portent. Les entreprises sont réparties par secteur, par nombre d’employés et par année de création, chaque répartition les couvrant toutes. Les souks hebdomadaires actifs sont comptés à côté. L’agriculture n’y est pas : tous les autres secteurs le sont. Les 6 villes à arrondissements sont comptées par arrondissement : leurs chiffres sont la somme de ceux-ci, signalée par basis. /data/v1/economy/fields.json nomme chaque champ avec l’intitulé du HCP.
collectionobligatoireregions|provinces|cercles|communes|arrondissementsLe niveau de l’unité.codeobligatoire- stringUn code à points, les chiffres avec ou sans zéros de tête, ou un slug.
- 200Les établissements de l’unité.
- 400Ce n’est pas un identifiant.
- 404Aucune unité ne porte cet identifiant, ou elle est dans une autre collection.
Exemple · GET /api/communes/tiznit/economy
{
"data": {
"code": "09.581.01.07",
"codeDigits": "095810107",
"level": "commune",
"name": {
"fr": "Tiznit",
"ar": "تيزنيت"
},
"topics": {
"establishments": {
"total": 5079,
"publicServices": 211,
"nonProfit": 137,
"weeklySouks": 1,
"business": 4731,
"jobs": 8219
},
"sector": {
"industry": 503,
"construction": 256,
"commerce": 2600,
"services": 1372
},
"size": {
"1": 3391,
"2-3": 1081,
"4-9": 205,
"10-49": 47,
"50+": 7
},
"founded": {
"before1956": 2,
"1956-1980": 131,
"1981-1990": 211,
"1991-2000": 440,
"2001-2010": 801,
"2011-2019": 1816,
"2020+": 1330
}
}
},
"meta": {
"datasetVersion": "1.10.0"
},
"links": {
"self": "/api/communes/09.581.01.07/economy.json",
"prev": null,
"next": null
}
}GET /api/economy.json
Les établissements économiques du Maroc, recensés en 2024
Le même comptage pour l’ensemble du pays.
- 200Les établissements du Maroc.
Exemple · GET /api/economy.json
{
"data": {
"code": null,
"codeDigits": null,
"level": "country",
"name": {
"fr": "Maroc",
"ar": "المغرب"
},
"topics": {
"establishments": {
"total": 1304564,
"publicServices": 147062,
"nonProfit": 27481,
"weeklySouks": 1022,
"business": 1130021,
"jobs": 3585475
},
"sector": {
"industry": 154979,
"construction": 39522,
"commerce": 587177,
"services": 348343
},
"size": {
"1": 637834,
"2-3": 371110,
"4-9": 90677,
"10-49": 24961,
"50+": 5439
},
"founded": {
"before1956": 7446,
"1956-1980": 32106,
"1981-1990": 34954,
"1991-2000": 84809,
"2001-2010": 191285,
"2011-2019": 416003,
"2020+": 363418
}
}
},
"meta": {
"datasetVersion": "1.10.0"
},
"links": {
"self": "/api/economy.json",
"prev": null,
"next": null
}
}GET /api/{collection}/{code}/housing
Le parc logement urbain d'une unité, recensé en 2024
Combien de logements urbains compte une unité, combien sont occupés, vacants ou secondaires, de quel type ils sont, de quel âge, en quoi sont faits leurs murs et leurs toits, combien sont raccordés aux réseaux publics d'électricité, d'eau et d'assainissement, et le déficit en logement du HCP. Tous les chiffres sauf le nombre de logements sont des pourcentages des logements urbains de l'unité. On compte ici des logements et non des ménages : un appartement vacant est ici et dans la fiche de recensement de personne. Une unité sans partie urbaine n'a pas de fichier. /data/v1/housing/fields.json nomme chaque champ avec l'intitulé du classeur.
collectionobligatoireregions|provinces|cercles|communes|arrondissementsLe niveau de l'unité.codeobligatoire- stringUn code à points, les chiffres avec ou sans zéros de tête, ou un slug.
- 200Le parc logement urbain de l'unité.
- 400Ce n'est pas un identifiant.
- 404Aucune unité ne porte cet identifiant, elle est dans une autre collection, ou elle n'a pas de logements urbains.
Exemple · GET /api/communes/tiznit/housing
{
"data": {
"code": "09.581.01.07",
"codeDigits": "095810107",
"level": "commune",
"name": {
"fr": "Tiznit",
"ar": "تيزنيت"
},
"topics": {
"dwellings": {
"total": 34570,
"deficitRate": 0.9
},
"occupancy": {
"occupied": 67.2,
"vacant": 15.2,
"seasonal": 17.6,
"unoccupied": 32.8
},
"type": {
"villa": 1.7,
"apartment": 10.1,
"traditional": 1.9,
"modern": 85.7,
"sound": 99.4,
"slum": 0.1,
"ruralType": 0.1,
"other": 0.3,
"precarious": 0.6
},
"age": {
"under20": 55.9,
"20-49": 40.7,
"50+": 3.3
},
"ageByType": {
"villaUnder20": 76.7,
"villa20to49": 23.1,
"villa50Plus": 0.2,
"apartmentUnder20": 59.2,
"apartment20to49": 39.5,
"apartment50Plus": 1.3,
"traditionalUnder20": 24.8,
"traditional20to49": 46.6,
"traditional50Plus": 28.6,
"modernUnder20": 56,
"modern20to49": 41,
"modern50Plus": 3,
"soundUnder20": 56,
"sound20to49": 40.7,
"sound50Plus": 3.3,
"slumUnder20": 83.3,
"slum20to49": 16.7,
"slum50Plus": 0,
"ruralTypeUnder20": 10.7,
"ruralType20to49": 89.3,
"ruralType50Plus": 0,
"otherUnder20": 40.2,
"other20to49": 47.4,
"other50Plus": 12.3,
"precariousUnder20": 39.1,
"precarious20to49": 53.6,
"precarious50Plus": 7.3
},
"walls": {
"concreteOrBrick": 99.1,
"stone": 0.8,
"other": 0.1
},
"roofs": {
"slab": 98.4,
"woodOrTiles": 1.5,
"sheetMetal": 0,
"other": 0
},
"networks": {
"electricity": 95,
"water": 96,
"sewerage": 84.9
}
},
"urbanCentres": []
},
"meta": {
"datasetVersion": "1.10.0"
},
"links": {
"self": "/api/communes/09.581.01.07/housing.json",
"prev": null,
"next": null
}
}GET /api/communes/{code}/neighbours
Les communes voisines d’une commune
Chacune avec ses noms et la longueur de la limite que les deux partagent, en km, mesurée le long de leurs limites OpenStreetMap. Sidi Mohamed Benmansour n’a pas de limite, elle n’a donc pas de fichier.
codeobligatoire- stringUn code à points, les chiffres avec ou sans zéros de tête, ou un slug.
- 200Les communes qu’elle borde.
- 400Ce n’est pas un identifiant.
- 404Aucune commune ne porte cet identifiant, ou elle n’a pas de limite.
Exemple · GET /api/communes/tiznit/neighbours
{
"data": [
{
"code": "09.581.11.07",
"name": {
"fr": "El Maader El Kabir",
"ar": "المعدر الكبير"
},
"km": 4.38
},
{
"code": "09.581.11.09",
"name": {
"fr": "Ouijjane",
"ar": "وجان"
},
"km": 9.83
},
{
"code": "09.581.11.11",
"name": {
"fr": "Reggada",
"ar": "الركادة"
},
"km": 5.98
},
{
"code": "09.581.11.15",
"name": {
"fr": "Tnine Aglou",
"ar": "اثنين أكلو"
},
"km": 20.76
}
],
"meta": {
"datasetVersion": "1.10.0",
"total": 4
},
"links": {
"self": "/api/communes/09.581.01.07/neighbours.json",
"prev": null,
"next": null
}
}GET /api/communes/{code}/neighbourhoods
Les quartiers nommés d’une commune et ses codes postaux
Les quartiers qu’OpenStreetMap et Poste Maroc nomment dans une commune, arrondissements d’une ville compris, chacun avec l’arrondissement où son point le place quand il en a un, la source de son nom et les codes postaux que Poste Maroc donne sous ce nom ; et les codes postaux de la commune. Le recensement ne publie rien par quartier : aucune ligne n’a de chiffres. Les noms sont tels que les sources les donnent, et la liste de Poste Maroc date de 2018. Les 2 sources sont sous licence ODbL. Une commune sans l’un ni l’autre n’a pas de fichier.
codeobligatoire- stringUn code à points, les chiffres avec ou sans zéros de tête, ou un slug.
- 200Les quartiers et les codes postaux de la commune.
- 400Ce n’est pas un identifiant.
- 404Aucune commune ne porte cet identifiant, ou elle n’a ni quartier nommé ni code postal.
Exemple · GET /api/communes/agadir/neighbourhoods
{
"data": {
"neighbourhoods": [
{
"name": {
"fr": "Abttih",
"ar": ""
},
"arrondissement": null,
"source": "poste",
"postcodes": [
"80060"
]
},
{
"name": {
"fr": "Administratif",
"ar": ""
},
"arrondissement": null,
"source": "poste",
"postcodes": [
"80000"
]
},
{
"name": {
"fr": "Adrar",
"ar": "أدرار"
},
"arrondissement": null,
"source": "osm",
"postcodes": []
},
{
"name": {
"fr": "Aghdiss",
"ar": ""
},
"arrondissement": null,
"source": "poste",
"postcodes": [
"80090"
]
}
],
"postcodes": [
"80000",
"80010",
"80020",
"80030",
"80040",
"80050",
"80060",
"80070",
"80080",
"80090"
]
},
"meta": {
"datasetVersion": "1.10.0",
"total": 176
},
"links": {
"self": "/api/communes/09.001.01.01/neighbourhoods.json",
"prev": null,
"next": null
}
}4 lignes sur 176 affichées ici.
GET /api/communes/{code}/douars
Les fractions et les douars d’une commune rurale
Les douars d’une commune selon le recensement de 2024 du HCP, les villages et hameaux de sa partie rurale, avec les fractions (mashyakha) qui les regroupent. Chaque douar a son type, ses ménages et sa population, et, pour un douar de 30 ménages ou plus, la nationalité, le sexe, l’âge, l’inscription à l’état civil et l’état matrimonial de ses habitants, le type de logement de ses ménages, et la distance moyenne de ses logements à une route goudronnée, une route carrossable non goudronnée, une école primaire, un collège, un lycée et un centre de santé. Le HCP les retire pour un douar plus petit, dont topics est null. Le HCP ne nomme les douars qu’en arabe ; latin est le nom d’un douar en lettres latines là où une source l’écrit, et place son point là où une carte le place. Une fraction a latin là où un douar de sa commune porte le même nom et qu’une source l’écrit, et label là où le HCP la range sous une étiquette plutôt qu’un nom. Une commune sans partie rurale n’a pas de fichier.
codeobligatoire- stringUn code à points, les chiffres avec ou sans zéros de tête, ou un slug.
- 200Les fractions et les douars de la commune.
- 400Ce n’est pas un identifiant.
- 404Aucune commune ne porte cet identifiant, ou elle n’a pas de douar.
Exemple · GET /api/communes/imi-mqourn/douars
{
"data": {
"fractions": [
{
"code": "1630717201",
"name": {
"ar": "إكونكا"
},
"douars": 29,
"households": 1743,
"population": 6444
},
{
"code": "1630717202",
"name": {
"ar": "إداومنو"
},
"douars": 16,
"households": 1040,
"population": 3868
}
],
"douars": [
{
"code": "1630717201001",
"fraction": "1630717201",
"name": {
"ar": "توريرت نترست"
},
"type": "dispersed",
"households": 32,
"population": 105,
"topics": {
"nationality": {
"moroccan": 100,
"foreign": 0
},
"sex": {
"male": 50.5,
"female": 49.5
},
"age": {
"under15": 23.8,
"15-59": 47.6,
"60+": 28.6
},
"civilRegistration": {
"registered": 99
},
"maritalStatus": {
"population15Plus": 80,
"single": 25,
"married": 61.3,
"divorced": 3.8,
"widowed": 10
},
"dwellingType": {
"villa": 0,
"apartment": 0,
"traditionalMoroccanHouse": 0,
"modernMoroccanHouse": 68.8,
"basicOrSlum": 0,
"ruralSolid": 31.3,
"ruralEarth": 0,
"other": 0
},
"distanceKm": {
"pavedRoad": 3.75,
"drivableTrack": 1.06,
"primarySchool": 3.75,
"middleSchool": 13.75,
"highSchool": 13.75,
"healthCentre": 12.72
}
},
"place": {
"source": "geonames",
"lat": 30.10924,
"lng": -9.18203
},
"latin": {
"name": "Taourirt n'Tirst",
"source": "geonames"
}
},
{
"code": "1630717201002",
"fraction": "1630717201",
"name": {
"ar": "أيت موس"
},
"type": "split",
"households": 25,
"population": 91,
"topics": null,
"place": {
"source": "geonames",
"lat": 30.10585,
"lng": -9.19243
},
"latin": {
"name": "Aït Moussa",
"source": "geonames"
}
},
{
"code": "1630717201003",
"fraction": "1630717201",
"name": {
"ar": "أيت واكريم"
},
"type": "dispersed",
"households": 19,
"population": 58,
"topics": null,
"place": {
"source": "geonames",
"lat": 30.10374,
"lng": -9.20053
},
"latin": {
"name": "Aït Ouakrim",
"source": "geonames"
}
}
]
},
"meta": {
"datasetVersion": "1.10.0",
"total": 45
},
"links": {
"self": "/api/communes/09.163.07.17/douars.json",
"prev": null,
"next": null
}
}3 lignes sur 45 affichées ici.
GET /api/neighbourhoods.json
Tous les quartiers nommés, avec leur commune
Le tableau entier en un fichier : chaque quartier avec sa commune, son arrondissement quand il est connu, sa source et ses codes postaux. Sous licence ODbL.
- 200Tous les quartiers nommés.
Exemple · GET /api/neighbourhoods.json
{
"data": [
{
"name": {
"fr": "Afazar",
"ar": ""
},
"commune": "01.051.01.01",
"arrondissement": null,
"source": "poste",
"postcodes": [
"32000"
]
},
{
"name": {
"fr": "Azougar",
"ar": ""
},
"commune": "01.051.01.01",
"arrondissement": null,
"source": "poste",
"postcodes": [
"32000"
]
},
{
"name": {
"fr": "Baddis",
"ar": ""
},
"commune": "01.051.01.01",
"arrondissement": null,
"source": "poste",
"postcodes": [
"32000"
]
}
],
"meta": {
"datasetVersion": "1.10.0",
"total": 10471
},
"links": {
"self": "/api/neighbourhoods.json",
"prev": null,
"next": null
}
}3 lignes sur 10471 affichées ici.
GET /api/housing.json
Le parc logement urbain du Maroc, recensé en 2024
Les mêmes chiffres pour toutes les villes du pays réunies.
- 200Le parc logement urbain du Maroc.
Exemple · GET /api/housing.json
{
"data": {
"code": null,
"codeDigits": null,
"level": "country",
"name": {
"fr": "Maroc",
"ar": "المغرب"
},
"topics": {
"dwellings": {
"total": 8336782,
"deficitRate": 4.9
},
"occupancy": {
"occupied": 71.1,
"vacant": 13.4,
"seasonal": 15.5,
"unoccupied": 28.9
},
"type": {
"villa": 3.2,
"apartment": 31.7,
"traditional": 2.5,
"modern": 59.2,
"sound": 96.6,
"slum": 2.2,
"ruralType": 0.6,
"other": 0.6,
"precarious": 3.4
},
"age": {
"under20": 59.8,
"20-49": 33.9,
"50+": 6.2
},
"ageByType": {
"villaUnder20": 60.3,
"villa20to49": 34.2,
"villa50Plus": 5.5,
"apartmentUnder20": 77.5,
"apartment20to49": 20,
"apartment50Plus": 2.5,
"traditionalUnder20": 22,
"traditional20to49": 40.7,
"traditional50Plus": 37.4,
"modernUnder20": 53.5,
"modern20to49": 40.2,
"modern50Plus": 6.3,
"soundUnder20": 60.8,
"sound20to49": 33.4,
"sound50Plus": 5.8,
"slumUnder20": 28.5,
"slum20to49": 53,
"slum50Plus": 18.5,
"ruralTypeUnder20": 30.7,
"ruralType20to49": 46.1,
"ruralType50Plus": 23.2,
"otherUnder20": 46.2,
"other20to49": 40.7,
"other50Plus": 13.1,
"precariousUnder20": 32,
"precarious20to49": 49.6,
"precarious50Plus": 18.4
},
"walls": {
"concreteOrBrick": 98.2,
"stone": 1.2,
"other": 0.6
},
"roofs": {
"slab": 96.7,
"woodOrTiles": 1.6,
"sheetMetal": 0.8,
"other": 0.9
},
"networks": {
"electricity": 96.3,
"water": 95.2,
"sewerage": 92.6
}
}
},
"meta": {
"datasetVersion": "1.10.0"
},
"links": {
"self": "/api/housing.json",
"prev": null,
"next": null
}
}GET /api/insights.json
Chaque commune qui a un chiffre publié qui se détache
Les chiffres du recensement de 2024 d'une commune qui se détachent, 3 au plus, chacun avec son contexte tiré du recensement : les communes voisines sur le même chiffre, et le même chiffre en 2014 à côté de celui du Maroc, là où les deux recensements se comparent. Aucun modèle de langage n'en écrit ni n'en juge rien ; voir la page méthode pour savoir comment un chiffre est choisi. Chaque ligne donne le code d'une commune, son niveau et le nombre de ses chiffres ; lire /api/communes/{code}/insights.json pour les chiffres eux-mêmes. La plupart des communes n'y figurent pas : aucun de leurs chiffres ne s'est détaché, ou ceux qui l'ont fait ont été écartés.
- 200Chaque commune qui a un chiffre publié qui se détache.
Exemple · GET /api/insights.json
{
"data": [
{
"code": "01.051.07.07",
"level": "commune",
"findings": 1
},
{
"code": "01.051.11.01",
"level": "commune",
"findings": 1
},
{
"code": "01.227.03.11",
"level": "commune",
"findings": 3
},
{
"code": "01.227.05.09",
"level": "commune",
"findings": 2
},
{
"code": "01.331.07.05",
"level": "commune",
"findings": 1
},
{
"code": "01.331.09.15",
"level": "commune",
"findings": 1
},
{
"code": "01.331.11.12",
"level": "commune",
"findings": 2
},
{
"code": "01.405.09.05",
"level": "commune",
"findings": 3
},
{
"code": "01.511.01.09",
"level": "commune",
"findings": 2
},
{
"code": "01.571.03.07",
"level": "commune",
"findings": 1
},
{
"code": "01.571.05.01",
"level": "commune",
"findings": 1
},
{
"code": "01.571.05.05",
"level": "commune",
"findings": 1
},
{
"code": "01.571.05.13",
"level": "commune",
"findings": 1
},
{
"code": "01.573.01.07",
"level": "commune",
"findings": 1
},
{
"code": "02.251.05.05",
"level": "commune",
"findings": 3
},
{
"code": "02.251.07.07",
"level": "commune",
"findings": 3
},
{
"code": "02.265.01.03",
"level": "commune",
"findings": 1
},
{
"code": "03.061.01.03",
"level": "commune",
"findings": 3
},
{
"code": "03.061.03.07",
"level": "commune",
"findings": 3
},
{
"code": "03.061.05.09",
"level": "commune",
"findings": 1
},
{
"code": "03.131.05.01",
"level": "commune",
"findings": 1
},
{
"code": "03.131.07.09",
"level": "commune",
"findings": 1
},
{
"code": "03.231.01.03",
"level": "commune",
"findings": 3
},
{
"code": "03.271.01.03",
"level": "commune",
"findings": 1
},
{
"code": "03.271.03.01",
"level": "commune",
"findings": 1
},
{
"code": "03.271.03.09",
"level": "commune",
"findings": 2
},
{
"code": "03.531.05.11",
"level": "commune",
"findings": 1
},
{
"code": "03.531.07.19",
"level": "commune",
"findings": 1
},
{
"code": "03.531.09.05",
"level": "commune",
"findings": 1
},
{
"code": "03.531.09.07",
"level": "commune",
"findings": 1
},
{
"code": "03.561.11.01",
"level": "commune",
"findings": 1
},
{
"code": "03.561.11.13",
"level": "commune",
"findings": 3
},
{
"code": "03.561.11.15",
"level": "commune",
"findings": 3
},
{
"code": "03.591.05.03",
"level": "commune",
"findings": 1
},
{
"code": "03.591.05.09",
"level": "commune",
"findings": 1
},
{
"code": "04.281.01.13",
"level": "commune",
"findings": 3
},
{
"code": "04.281.03.01",
"level": "commune",
"findings": 3
},
{
"code": "04.281.11.07",
"level": "commune",
"findings": 1
},
{
"code": "04.291.05.03",
"level": "commune",
"findings": 3
},
{
"code": "04.421.01.07",
"level": "commune",
"findings": 2
},
{
"code": "04.481.01.03",
"level": "commune",
"findings": 1
},
{
"code": "04.491.03.17",
"level": "commune",
"findings": 1
},
{
"code": "04.501.01.03",
"level": "commune",
"findings": 3
},
{
"code": "04.501.01.05",
"level": "commune",
"findings": 3
},
{
"code": "04.501.01.09",
"level": "commune",
"findings": 2
},
{
"code": "04.501.03.01",
"level": "commune",
"findings": 3
},
{
"code": "04.501.03.11",
"level": "commune",
"findings": 2
},
{
"code": "05.081.15.21",
"level": "commune",
"findings": 1
},
{
"code": "05.301.03.07",
"level": "commune",
"findings": 1
},
{
"code": "05.301.05.01",
"level": "commune",
"findings": 1
},
{
"code": "06.111.01.05",
"level": "commune",
"findings": 1
},
{
"code": "06.111.05.03",
"level": "commune",
"findings": 1
},
{
"code": "06.117.01.09",
"level": "commune",
"findings": 1
},
{
"code": "06.117.01.13",
"level": "commune",
"findings": 1
},
{
"code": "06.117.09.33",
"level": "commune",
"findings": 1
},
{
"code": "06.181.05.01",
"level": "commune",
"findings": 1
},
{
"code": "06.181.09.23",
"level": "commune",
"findings": 1
},
{
"code": "06.355.01.01",
"level": "commune",
"findings": 1
},
{
"code": "06.371.01.03",
"level": "commune",
"findings": 2
},
{
"code": "06.385.01.01",
"level": "commune",
"findings": 1
},
{
"code": "06.385.01.02",
"level": "commune",
"findings": 1
},
{
"code": "06.385.01.03",
"level": "commune",
"findings": 2
},
{
"code": "06.461.01.01",
"level": "commune",
"findings": 1
},
{
"code": "06.461.07.05",
"level": "commune",
"findings": 1
},
{
"code": "06.461.13.11",
"level": "commune",
"findings": 1
},
{
"code": "06.461.13.33",
"level": "commune",
"findings": 1
},
{
"code": "06.467.07.23",
"level": "commune",
"findings": 1
},
{
"code": "07.041.01.03",
"level": "commune",
"findings": 1
},
{
"code": "07.041.07.09",
"level": "commune",
"findings": 1
},
{
"code": "07.041.09.01",
"level": "commune",
"findings": 1
},
{
"code": "07.161.05.05",
"level": "commune",
"findings": 2
},
{
"code": "07.161.05.09",
"level": "commune",
"findings": 1
},
{
"code": "07.191.01.03",
"level": "commune",
"findings": 1
},
{
"code": "07.191.01.07",
"level": "commune",
"findings": 1
},
{
"code": "07.191.05.07",
"level": "commune",
"findings": 1
},
{
"code": "07.211.01.05",
"level": "commune",
"findings": 2
},
{
"code": "07.351.03.05",
"level": "commune",
"findings": 2
},
{
"code": "07.351.05.09",
"level": "commune",
"findings": 1
},
{
"code": "07.427.07.19",
"level": "commune",
"findings": 1
},
{
"code": "07.427.09.03",
"level": "commune",
"findings": 1
},
{
"code": "08.201.03.01",
"level": "commune",
"findings": 1
},
{
"code": "08.201.03.07",
"level": "commune",
"findings": 1
},
{
"code": "08.201.03.09",
"level": "commune",
"findings": 1
},
{
"code": "08.363.07.19",
"level": "commune",
"findings": 1
},
{
"code": "08.363.09.03",
"level": "commune",
"findings": 2
},
{
"code": "08.401.03.09",
"level": "commune",
"findings": 1
},
{
"code": "08.577.05.29",
"level": "commune",
"findings": 1
},
{
"code": "08.577.07.01",
"level": "commune",
"findings": 1
},
{
"code": "08.577.07.19",
"level": "commune",
"findings": 1
},
{
"code": "08.577.07.27",
"level": "commune",
"findings": 1
},
{
"code": "08.577.09.03",
"level": "commune",
"findings": 1
},
{
"code": "08.587.03.03",
"level": "commune",
"findings": 1
},
{
"code": "08.587.03.21",
"level": "commune",
"findings": 1
},
{
"code": "08.587.03.27",
"level": "commune",
"findings": 1
},
{
"code": "08.587.09.35",
"level": "commune",
"findings": 1
},
{
"code": "09.541.01.01",
"level": "commune",
"findings": 1
},
{
"code": "09.541.01.13",
"level": "commune",
"findings": 1
},
{
"code": "09.541.04.17",
"level": "commune",
"findings": 1
},
{
"code": "09.541.04.35",
"level": "commune",
"findings": 2
},
{
"code": "09.541.04.53",
"level": "commune",
"findings": 1
},
{
"code": "09.541.04.67",
"level": "commune",
"findings": 3
},
{
"code": "09.541.07.05",
"level": "commune",
"findings": 1
},
{
"code": "09.541.07.65",
"level": "commune",
"findings": 1
},
{
"code": "09.551.07.01",
"level": "commune",
"findings": 2
},
{
"code": "10.071.01.01",
"level": "commune",
"findings": 1
},
{
"code": "10.261.05.05",
"level": "commune",
"findings": 1
},
{
"code": "10.473.07.09",
"level": "commune",
"findings": 2
},
{
"code": "11.537.05.01",
"level": "commune",
"findings": 1
},
{
"code": "12.391.05.01",
"level": "commune",
"findings": 3
},
{
"code": "12.391.09.01",
"level": "commune",
"findings": 1
},
{
"code": "12.391.09.03",
"level": "commune",
"findings": 3
}
],
"meta": {
"datasetVersion": "1.10.0",
"total": 111
},
"links": {
"self": "/api/insights.json",
"prev": null,
"next": null
}
}GET /api/regions.json
Les 12 régions
- 200Toutes les régions.
Exemple · GET /api/regions.json
{
"data": [
{
"code": "01",
"codeDigits": "01",
"name": {
"fr": "Tanger-Tétouan-Al Hoceima",
"ar": "طنجة-تطوان-الحسيمة"
},
"population": {
"2024": {
"total": 4030222,
"moroccan": 4020545,
"foreign": 9677,
"households": 1048860
}
},
"provenance": {
"name": "hcp-2024",
"population2024": "hcp-2024"
},
"provinceCount": 8,
"communeCount": 146
},
{
"code": "02",
"codeDigits": "02",
"name": {
"fr": "Oriental",
"ar": "الشرق"
},
"population": {
"2024": {
"total": 2294665,
"moroccan": 2291040,
"foreign": 3625,
"households": 575015
}
},
"provenance": {
"name": "hcp-2024",
"population2024": "hcp-2024"
},
"provinceCount": 8,
"communeCount": 124
}
],
"meta": {
"datasetVersion": "1.10.0",
"total": 12
},
"links": {
"self": "/api/regions.json",
"prev": null,
"next": null
}
}2 lignes sur 12 affichées ici.
GET /api/provinces.json
Toutes les provinces et préfectures
- 200Toutes les provinces et préfectures.
Exemple · GET /api/provinces.json
{
"data": [
{
"code": "01.511",
"codeDigits": "01511",
"name": {
"fr": "Tanger-Assilah",
"ar": "طنجة-أصيلة"
},
"population": {
"2024": {
"total": 1494413,
"moroccan": 1487175,
"foreign": 7238,
"households": 418844
}
},
"provenance": {
"name": "hcp-2024",
"population2024": "hcp-2024"
},
"type": "prefecture",
"regionCode": "01",
"cercleCount": 2,
"communeCount": 12
},
{
"code": "01.573",
"codeDigits": "01573",
"name": {
"fr": "M'diq-Fnideq",
"ar": "المضيق-الفنيدق"
},
"population": {
"2024": {
"total": 254064,
"moroccan": 253388,
"foreign": 676,
"households": 67797
}
},
"provenance": {
"name": "hcp-2024",
"population2024": "hcp-2024"
},
"type": "prefecture",
"regionCode": "01",
"cercleCount": 0,
"communeCount": 5
}
],
"meta": {
"datasetVersion": "1.10.0",
"total": 83
},
"links": {
"self": "/api/provinces.json",
"prev": null,
"next": null
}
}2 lignes sur 83 affichées ici.
GET /api/cercles.json
Tous les cercles
- 200Tous les cercles.
Exemple · GET /api/cercles.json
{
"data": [
{
"code": "01.511.05",
"codeDigits": "0151105",
"name": {
"fr": "Tanger",
"ar": "طنجة"
},
"population": {
"2024": {
"total": 60807,
"moroccan": 60765,
"foreign": 42,
"households": 14102
}
},
"provenance": {
"name": "hcp-2024",
"population2024": "hcp-2024"
},
"regionCode": "01",
"provinceCode": "01.511",
"communeCount": 5
},
{
"code": "01.511.03",
"codeDigits": "0151103",
"name": {
"fr": "Assilah",
"ar": "أصيلة"
},
"population": {
"2024": {
"total": 33463,
"moroccan": 33434,
"foreign": 29,
"households": 7896
}
},
"provenance": {
"name": "hcp-2024",
"population2024": "hcp-2024"
},
"regionCode": "01",
"provinceCode": "01.511",
"communeCount": 4
}
],
"meta": {
"datasetVersion": "1.10.0",
"total": 213
},
"links": {
"self": "/api/cercles.json",
"prev": null,
"next": null
}
}2 lignes sur 213 affichées ici.
GET /api/version.json
Version du jeu de données, nombre d’enregistrements et date de chaque source
- 200Le document de version.
Exemple · GET /api/version.json
{
"data": {
"api": "v1",
"counts": {
"regions": 12,
"provinces": 83,
"cercles": 213,
"communes": 1503,
"arrondissements": 41
},
"sources": {
"datasetVersion": "1.10.0",
"sources": [
{
"id": "hcp-2024",
"url": "https://www.hcp.ma/file/242341/",
"licence": "Haut-Commissariat au Plan, RGPH 2024. Reusable, commercially too, on CC BY 4.0 terms: credit HCP and say what was changed. https://www.hcp.ma/Conditions-generales-d-utilisation-Version-1-0_a2194.html",
"sha256": "7e9d3d402cc2fd0d9c4fc941c4f23c6a5e5ddcbefbba80b7540267f8e2728dca",
"retrievedAt": "2026-09-17"
},
{
"id": "hcp-2024-indicators",
"url": "https://www.hcp.ma/file/242671/",
"licence": "Haut-Commissariat au Plan, RGPH 2024, Indicateurs démographiques et socioéconomiques. Reusable, commercially too, on CC BY 4.0 terms: credit HCP and say what was changed. https://www.hcp.ma/Conditions-generales-d-utilisation-Version-1-0_a2194.html",
"sha256": "f3d96fcae3c10a2c194b2fe97ee8352a242fb3f36b1b63d4d2a7006176dc7c3e",
"retrievedAt": "2026-09-19"
},
{
"id": "hcp-2014",
"url": "https://www.hcp.ma/file/230057/",
"licence": "Haut-Commissariat au Plan, RGPH 2014. Reusable, commercially too, on CC BY 4.0 terms: credit HCP and say what was changed. https://www.hcp.ma/Conditions-generales-d-utilisation-Version-1-0_a2194.html",
"sha256": "e0a7e308c0c1e185e5bec0c080d10635b19e83216d0bf91656554c707bbf0709",
"retrievedAt": "2026-09-17"
},
{
"id": "hcp-2014-indicators-people",
"url": "https://www.hcp.ma/file/230045/",
"licence": "Haut-Commissariat au Plan, RGPH 2014, Indicateurs démographiques et socioéconomiques de la population. Reusable, commercially too, on CC BY 4.0 terms: credit HCP and say what was changed. https://www.hcp.ma/Conditions-generales-d-utilisation-Version-1-0_a2194.html",
"sha256": "c20c1f7d08c1089bf4610f81a0eac89516a278fddb24b8577588284e2fc9a2d0",
"retrievedAt": "2026-09-19"
},
{
"id": "hcp-2014-indicators-households",
"url": "https://www.hcp.ma/file/230042/",
"licence": "Haut-Commissariat au Plan, RGPH 2014, Indicateurs sur les ménages et les conditions d'habitation. Reusable, commercially too, on CC BY 4.0 terms: credit HCP and say what was changed. https://www.hcp.ma/Conditions-generales-d-utilisation-Version-1-0_a2194.html",
"sha256": "2fde794a15d0d98889875316666d918f1044f8055610bfb909d056a15fe878a1",
"retrievedAt": "2026-09-19"
},
{
"id": "hcp-2024-commute",
"url": "https://www.hcp.ma/file/248301/",
"licence": "Haut-Commissariat au Plan, RGPH 2024, Indicateurs communaux sur le mode de transport domicile-lieu de travail des actifs occupés. Reusable, commercially too, on CC BY 4.0 terms: credit HCP and say what was changed. https://www.hcp.ma/Conditions-generales-d-utilisation-Version-1-0_a2194.html",
"sha256": "30e8fc0047fe7ada2cb1db36e127e8d31966da2e775183b9bb0c7eeffd540027",
"retrievedAt": "2026-09-19"
},
{
"id": "hcp-2014-mobility",
"url": "https://www.hcp.ma/file/230011/",
"licence": "Haut-Commissariat au Plan, RGPH 2014, Indicateurs sur la mobilité et le transport par commune. Reusable, commercially too, on CC BY 4.0 terms: credit HCP and say what was changed. https://www.hcp.ma/Conditions-generales-d-utilisation-Version-1-0_a2194.html",
"sha256": "ed3c24c0c9dba69cac98c03bf27235211ffdf66e6edd97a84b61d9f0c64aa957",
"retrievedAt": "2026-09-19"
},
{
"id": "hcp-2024-establishments",
"url": "https://www.hcp.ma/file/242672/",
"licence": "Haut-Commissariat au Plan, RGPH 2024, Cartographie des établissements économiques. Reusable, commercially too, on CC BY 4.0 terms: credit HCP and say what was changed. https://www.hcp.ma/Conditions-generales-d-utilisation-Version-1-0_a2194.html",
"sha256": "33887f36154129e9fc8eceb6d5393d5b26fae0851f153cdb1ed6358e0aed38ee",
"retrievedAt": "2026-09-20"
},
{
"id": "hcp-2014-professions",
"url": "https://www.hcp.ma/file/230028/",
"licence": "Haut-Commissariat au Plan, RGPH 2014, Indicateurs sur les professions et les secteurs d'activité de la population active occupée. Reusable, commercially too, on CC BY 4.0 terms: credit HCP and say what was changed. https://www.hcp.ma/Conditions-generales-d-utilisation-Version-1-0_a2194.html",
"sha256": "c3b94173217e306fa14ce628269bd6b1f0855ccf03eb3503e5da08340c58c644",
"retrievedAt": "2026-09-20"
},
{
"id": "hcp-2014-diplomas",
"url": "https://www.hcp.ma/file/230031/",
"licence": "Haut-Commissariat au Plan, RGPH 2014, Indicateurs sur les diplômes de la population. Reusable, commercially too, on CC BY 4.0 terms: credit HCP and say what was changed. https://www.hcp.ma/Conditions-generales-d-utilisation-Version-1-0_a2194.html",
"sha256": "5b6e4785caa3ef42265d4af4b4e1390195d7c114bbf58a1d9867866826329ad6",
"retrievedAt": "2026-09-20"
},
{
"id": "hcp-2024-housing",
"url": "https://www.hcp.ma/file/246208/",
"licence": "Haut-Commissariat au Plan, RGPH 2024, Indicateurs communaux du parc logement urbain. Reusable, commercially too, on CC BY 4.0 terms: credit HCP and say what was changed. https://www.hcp.ma/Conditions-generales-d-utilisation-Version-1-0_a2194.html",
"sha256": "c5ca0d86eef04cac4692cc0fff691e81f77e73726515b12eb17a0d7f3a8ff421",
"retrievedAt": "2026-09-20"
},
{
"id": "hcp-2024-douars",
"url": "https://www.hcp.ma/file/245768/",
"licence": "Haut-Commissariat au Plan, RGPH 2024, Population et ménages par douars. Reusable, commercially too, on CC BY 4.0 terms: credit HCP and say what was changed. https://www.hcp.ma/Conditions-generales-d-utilisation-Version-1-0_a2194.html",
"sha256": "b04fa4f479aa77a4fbd741c50b734fc80e42be3786ea8a94e2adb085fc5ae1b6",
"retrievedAt": "2026-10-01"
},
{
"id": "osm",
"via": "Overpass API",
"licence": "ODbL-1.0",
"attribution": "© OpenStreetMap contributors, opendatacommons.org/licenses/odbl/1-0/",
"snapshot": {
"earliest": "2026-09-17T16:53:06.964Z",
"latest": "2026-09-19T02:18:14.612Z",
"regions": 12
}
}
]
}
},
"meta": {
"datasetVersion": "1.10.0"
},
"links": {
"self": "/api/version.json",
"prev": null,
"next": null
}
}Autres fichiers
Des fichiers statiques pour ce que les routes ci-dessus ne couvrent pas. Comme tout chemin en .json, ils ne coûtent rien.
| Chemin | Contenu |
|---|---|
| / | Une région |
| / | Les provinces et préfectures d’une région |
| / | Les communes d’une région, 50 par page |
| / | Une province ou une préfecture |
| / | Les cercles d’une province |
| / | Les communes d’une province, 50 par page |
| / | Un cercle |
| / | Les communes d’un cercle, 50 par page |
| / | Toutes les communes, 50 par page |
| / | Les communes urbaines ou rurales, par page |
| / | Une commune, par code à points |
| / | Tous les arrondissements |
| / | Un arrondissement |
| / | La limite d’une commune, en Feature GeoJSON |
| / | Les communes qu’une commune touche, et la limite partagée avec chacune |
| / | Les arrondissements d’une ville, en FeatureCollection GeoJSON |
| / | La limite d’un arrondissement |
| / | Le contour d’une province, obtenu par fusion de ses communes |
| / | Le contour d’une région, obtenu par fusion de ses communes |
| / | Les chiffres du recensement de chaque région, pour les comparer |
| / | Les chiffres du recensement de chaque province, pour les comparer |
| / | Les établissements de chaque région, pour les comparer |
| / | Les établissements de chaque province, pour les comparer |
| / | Les chiffres du recensement de chaque arrondissement, l’échelle à laquelle les 6 villes sont comptées |
| / | Les établissements de chaque arrondissement, de la même façon |
| / | Le parc logement urbain de chaque région, pour les comparer |
| / | Le parc logement urbain de chaque province, pour les comparer |
| / | Les limites découpées en tuiles, que lit /api/communes/at |
Erreurs
Une erreur revient sous forme de document problem RFC 9457, de type application/problem+json. Son champ type renvoie à sa description ci-dessous, et detail dit en toutes lettres ce qui ne va pas.
not-found404- Resource not found. L’identifiant est bien formé mais ne désigne rien, la page est au-delà de la dernière, ou le chemin n’est pas une route.
invalid-code400- Malformed code or slug. L’identifiant ne se lit ni comme un code ni comme un slug.
invalid-query400- Invalid query parameter. Un paramètre manque, sort de ses bornes, ou ne va pas avec un autre.
{
"type": "https://<host>/docs/api/#not-found",
"title": "Resource not found",
"status": 404,
"detail": "no unit has code 99.999",
"instance": "/api/communes/99.999"
}Où une requête est traitée
L’en-tête X-Api-Tier dit où une requête a été traitée. Un fichier statique n’en a pas, puisque rien ne s’est exécuté.
Un fichier sur le CDN
aucun en-tête : rien ne s’est exécuté
12 723 réponses sont écrites à la construction du site, et ne coûtent rien à servir.
Une réécriture vers ce fichier
X-Api-Tier: alias
Une chaîne de requête ne peut pas désigner un fichier. Les requêtes écrites ainsi sont donc renvoyées vers le fichier qui porte déjà la réponse, et la réponse le nomme.
Calcul à la demande
X-Api-Tier: computed
La recherche, les requêtes par point ou par rayon, et les combinaisons de filtres qu’aucun fichier ne couvre. Ce sont les seules requêtes qui consomment quelque chose.