Skip to main content

Household Members

Members are managed through routes nested under the household.

MethodEndpointPermissionDescription
GET/api/menages/{id}/membreslogged-in userList members
POST/api/menages/{id}/membresregistre.menages_membresAdd a member
POST/api/menages/{id}/membres/bulkregistre.menages_membresAdd several members
PUT, PATCH/api/menages/{id}/membres/{membreId}registre.menages_membresUpdate a member
DELETE/api/menages/{id}/membres/{membreId}registre.menages_membresDelete a member

All these routes check that the household is within the user's scope. A household of an archived project is read-only: writes return 403 Ce projet est en lecture seule, les modifications ne sont pas autorisées.

GET /api/menages/{id}/membres​

{
"success": true,
"data": [
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"identifiantUnique": "…",
"nomComplet": "Membre Exemple",
"sexe": "F",
"age": 12,
"lienParente": "fille",
"niveauEducation": "primaire",
"occupation": "eleve",
"handicape": false,
"dateNaissance": "2014-03-02",
"scolarise": true,
"beneficiairePrincipal": false,
"beneficiaireSubstitut": false
}
]
}

The list returns each member's full record: identity, documents, education, health (including pregnancy and breastfeeding), disability (Washington Group questions), phone details and beneficiary role. identifiantUnique is the person's readable identifier in the SIG; the UUID id only identifies the row.

Unknown household: 404 {"success": false, "message": "Ménage non trouvé"}.

POST /api/menages/{id}/membres​

{
"nomComplet": "Membre Exemple",
"sexe": "F",
"lienParente": "fille",
"dateNaissance": "2014-03-02",
"niveauEducation": "primaire",
"scolarise": true
}

Only nomComplet is required. The other fields are those of the record above; a missing key is left unchanged. Choice values (sex, relationship, education level…) are mapped to the household questionnaire reference code, so a label and an import code give the same value.

Response 201 Created:

{
"success": true,
"message": "Membre ajouté avec succès",
"data": {
"id": "…",
"identifiantUnique": "…",
"nomComplet": "Membre Exemple",
"sexe": "F",
"age": 12,
"lienParente": "fille",
"niveauEducation": "primaire",
"occupation": null,
"handicape": false
}
}

Error 400 if nomComplet is missing.

POST /api/menages/{id}/membres/bulk​

{
"membres": [
{ "nomComplet": "Membre Un", "sexe": "F", "lienParente": "fille" },
{ "nomComplet": "Membre Deux", "sexe": "M", "lienParente": "fils" }
]
}

Response: { "success": true, "message": "2 membre(s) ajouté(s)", "data": { … } }. Without a membres array: 400 Liste de membres requise.

PUT /api/menages/{id}/membres/{membreId}​

Same fields as creation, all optional. Response: { "success": true, "message": "Membre mis à jour avec succès", "data": { … } }. Unknown member: 404 Membre non trouvé.

DELETE /api/menages/{id}/membres/{membreId}​

Response: { "success": true, "message": "Membre supprimé avec succès" }.

JavaScript example​

const base = `https://sig.example.com/api/menages/${menageId}/membres`;
const headers = { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' };

const { data: membres } = await (await fetch(base, { headers })).json();

await fetch(base, {
method: 'POST',
headers,
body: JSON.stringify({ nomComplet: 'Membre Exemple', sexe: 'F', lienParente: 'fille' }),
});

Notes​

  • The household head is not part of this list: it is edited with the household.
  • Changes are recorded in the audit log.