National census indicators
Good to know. RGPH 2024 and HCP historical series. See meta for each series’ source and date.
Understand the context
RGPH is the population census run by HCP, Morocco’s statistics office. A resident is not necessarily a Moroccan citizen. Reading example: 100 residents, including 95 Moroccan nationals and 5 foreign nationals, means a total of 100; do not add them again. These figures are illustrative.
Read the response
data: The requested results, as an object or an array.
meta: Dataset sources, license and dates. null means unknown or unavailable.
API v2 is the canonical path. Older /api/v1 paths remain compatibility aliases for the currently published behavior, including pagination; no removal date is scheduled.
Response fields 27
[] means each item in a list. null means unknown or unavailable, never zero. The guide language does not translate source values.
dataobjectRequested result: a single object or a list.
data.territoryobjectTerritory described by the indicators, with its codes and name.
data.territory.levelstringTerritorial level: national, regions, subdivisions (provinces and prefectures), prefectures-of-arrondissements, communes or arrondissements.
Accepted values:
"national""regions""subdivisions""prefectures-of-arrondissements""communes""arrondissements"data.territory.codestring | nullMoroccoAPI resource identifier; use it in the corresponding resource URLs.
data.territory.hcp_codestring | nullCode from HCP, Morocco’s national statistics office. Keep it as text to preserve leading zeros.
data.territory.nameobjectResource name, grouped by language where applicable.
data.territory.name.arstringArabic value; null when no translation is provided.
data.territory.name.frstringFrench value; null when no translation is provided.
data.territory.name.enstring | nullEnglish value; null when no translation is provided.
data.territory.region_codestring | nullIdentifier of the parent region, Morocco’s first administrative level.
data.territory.province_codestring | nullIdentifier of the parent province or prefecture, below the region.
data.territory.data_from_local_administrationbooleantrue for the four communes HCP marks with *: data supplied by the local administration because of seasonal mobility.
data.indicatorsobject[]Census indicators for this territory, with their values by sex.
data.indicators[].idstringIdentifier of this item in the dataset; not necessarily an official code.
data.indicators[].groupstringIndicator group identifier, usable in the group filter.
data.indicators[].unitstringIndicator unit: percent (0 to 100), persons, households, years, children-per-woman, persons-per-room, persons-per-household or km.
Accepted values:
"percent""persons""households""years""children-per-woman""persons-per-room""persons-per-household""km"data.indicators[].nameobjectResource name, grouped by language where applicable.
data.indicators[].name.frstringFrench value; null when no translation is provided.
data.indicators[].name.enstringEnglish value; null when no translation is provided.
data.indicators[].name.arstringArabic value; null when no translation is provided.
data.indicators[].both_sexesnumber | nullValue for the whole population (both sexes), in the indicator’s unit; null when absent, see null_reasons.
data.indicators[].malenumber | nullValue for males, in the indicator’s unit; null when absent, see null_reasons.
data.indicators[].femalenumber | nullValue for females, in the indicator’s unit; null when absent, see null_reasons.
data.indicators[].null_reasonsobjectWhy each value is null: unavailable (HCP “.”), not_applicable (HCP “…”) or not_published (no HCP value for that sex).
data.indicators[].null_reasons.both_sexesstring | nullReason when this sex’s value is null: unavailable, not_applicable or not_published; null when the value exists.
data.indicators[].null_reasons.malestring | nullReason when this sex’s value is null: unavailable, not_applicable or not_published; null when the value exists.
data.indicators[].null_reasons.femalestring | nullReason when this sex’s value is null: unavailable, not_applicable or not_published; null when the value exists.
Data structure
{
"type": "object",
"additionalProperties": false,
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"additionalProperties": false,
"required": [
"territory",
"indicators"
],
"properties": {
"territory": {
"type": "object",
"additionalProperties": false,
"required": [
"level",
"code",
"hcp_code",
"name",
"region_code",
"province_code",
"data_from_local_administration"
],
"properties": {
"level": {
"enum": [
"national",
"regions",
"subdivisions",
"prefectures-of-arrondissements",
"communes",
"arrondissements"
]
},
"code": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"nullable": true,
"enum": [
null
]
}
],
"description": "MoroccoAPI geography code; null for the national total."
},
"hcp_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"nullable": true,
"enum": [
null
]
}
],
"description": "HCP geographic code in the dotted form used by the geography endpoints; null for the national total."
},
"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": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"nullable": true,
"enum": [
null
]
}
]
},
"province_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"nullable": true,
"enum": [
null
]
}
]
},
"data_from_local_administration": {
"type": "boolean",
"description": "True for the four communes that HCP marks with *: their data comes from the local administration because of seasonal mobility."
}
}
},
"indicators": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"group",
"unit",
"name",
"both_sexes",
"male",
"female",
"null_reasons"
],
"properties": {
"id": {
"type": "string",
"minLength": 2,
"maxLength": 64,
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"group": {
"type": "string"
},
"unit": {
"enum": [
"percent",
"persons",
"households",
"years",
"children-per-woman",
"persons-per-room",
"persons-per-household",
"km"
]
},
"name": {
"type": "object",
"additionalProperties": false,
"required": [
"fr",
"en",
"ar"
],
"properties": {
"fr": {
"type": "string"
},
"en": {
"type": "string"
},
"ar": {
"type": "string"
}
}
},
"both_sexes": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "string",
"nullable": true,
"enum": [
null
]
}
]
},
"male": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "string",
"nullable": true,
"enum": [
null
]
}
]
},
"female": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "string",
"nullable": true,
"enum": [
null
]
}
]
},
"null_reasons": {
"type": "object",
"additionalProperties": false,
"required": [
"both_sexes",
"male",
"female"
],
"description": "Why each value is null: unavailable (HCP \".\"), not_applicable (HCP \"…\") or not_published (HCP gives no value for that sex). Null when the value is present.",
"properties": {
"both_sexes": {
"anyOf": [
{
"enum": [
"unavailable",
"not_applicable",
"not_published"
]
},
{
"type": "string",
"nullable": true,
"enum": [
null
]
}
]
},
"male": {
"anyOf": [
{
"enum": [
"unavailable",
"not_applicable",
"not_published"
]
},
{
"type": "string",
"nullable": true,
"enum": [
null
]
}
]
},
"female": {
"anyOf": [
{
"enum": [
"unavailable",
"not_applicable",
"not_published"
]
},
{
"type": "string",
"nullable": true,
"enum": [
null
]
}
]
}
}
}
}
}
}
}
},
"meta": {
"type": "object",
"additionalProperties": false,
"required": [
"dataset",
"total",
"license",
"retrieved_at",
"transformation_version",
"sources"
],
"properties": {
"dataset": {
"enum": [
"population-indicators"
]
},
"total": {
"type": "integer",
"minimum": 0
},
"license": {
"enum": [
"CC-BY-4.0"
]
},
"retrieved_at": {
"enum": [
"2026-10-20"
]
},
"transformation_version": {
"enum": [
"1.0.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"
},
"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"
}
}
}
}
}
}
}
}Sources and pagination 13
metaobjectResult context: sources, dates, license and pagination where applicable.
meta.datasetstringName of the dataset for this result or source.
Accepted values:
"population-indicators"meta.totalintegerNumber of matching records before pagination; not the size of this page.
meta.licensestringReuse license. mixed means licenses differ: inspect each source.
Accepted values:
"CC-BY-4.0"meta.retrieved_atstringDate the project retrieved the source file; not the observation date.
Accepted values:
"2026-10-20"meta.transformation_versionstringVersion of the dataset conversion rules; separate from the API version.
Accepted values:
"1.0.1"meta.sourcesobject[]Sources used for this result, with their publishers and licenses.
meta.sources[].datasetstringName of the dataset for this result or source.
meta.sources[].producerstringOrganization publishing the original data.
meta.sources[].source_urlstringSource publication or dataset landing page.
meta.sources[].resource_urlstringLink to the actual file or resource used.
meta.sources[].licensestringReuse license. mixed means licenses differ: inspect each source.
Accepted values:
"CC-BY-4.0"meta.sources[].source_updated_atstringLast update reported by the source; not the retrieval date.
Errors
400: Invalid or missing parameter.
Errors return error.code, error.message and error.request_id.
errorobjectDetails of a failed request; replaces data and meta.
error.codestringStable error code, such as RESOURCE_NOT_FOUND; use it in application logic.
error.messagestringHuman-readable error explanation; use code for application logic.
error.request_idstringIdentifier for this request, useful when reporting a problem.