Household Members
Members are managed through routes nested under the household.
| Method | Endpoint | Permission | Description |
|---|---|---|---|
| GET | /api/menages/{id}/membres | logged-in user | List members |
| POST | /api/menages/{id}/membres | registre.menages_membres | Add a member |
| POST | /api/menages/{id}/membres/bulk | registre.menages_membres | Add several members |
| PUT, PATCH | /api/menages/{id}/membres/{membreId} | registre.menages_membres | Update a member |
| DELETE | /api/menages/{id}/membres/{membreId} | registre.menages_membres | Delete 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.