openapi: 3.0.3 info: title: 'E-JUSTICE API Documentation' description: 'API de la plateforme nationale E-JUSTICE (RDC) : demande de documents officiels, paiement électronique et suivi des demandes.' version: 1.0.0 servers: - url: 'https://e-justice-api.kodinet.cd' tags: - name: Auth description: 'Inscription, connexion et gestion du mot de passe.' - name: Account description: "Compte et profil de l'utilisateur connecté." - name: Localisation description: 'Référentiel géographique RDC : consultation (tous) et administration (admin).' - name: Documents description: 'Catalogue des documents officiels et de leurs pièces requises.' - name: Applications description: 'Ouverture, suivi et soumission des demandes du citoyen.' - name: Workflow description: 'Traitement institutionnel des demandes par les organismes.' - name: Payments description: 'Paiement des frais du document via KODIPAY.' - name: Signature description: "Signature électronique du certificat par l'autorité (signNow)." - name: Certificates description: 'Récupération du certificat signé par le citoyen.' - name: Verification description: "Vérification publique de l'authenticité d'un certificat (QR)." - name: Administration description: 'Actions des agents au guichet, pour le compte des citoyens.' - name: Dashboard description: 'Statistiques agrégées du tableau de bord administratif.' - name: 'Encaissement guichet' description: 'Règlement des frais en espèces au comptoir.' - name: Endpoints description: '' - name: 'Personnes morales' description: "Gestion des fiches d'identification des personnes morales." components: securitySchemes: default: type: http scheme: bearer description: "Obtenez un jeton via POST /api/v1/auth/login puis la vérification OTP. Envoyez-le dans l'en-tête Authorization: Bearer {token}." security: - default: [] paths: /api/v1/auth/register: post: summary: 'Inscrire un citoyen' operationId: inscrireUnCitoyen description: '' parameters: [] responses: { } tags: - Auth requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b country_code: type: string description: 'Le texte de value ne peut pas contenir plus de 5 caractères.' example: 'n' phone_number: type: string description: 'Le texte de value ne peut pas contenir plus de 20 caractères.' example: gzmiyvdljnikhway email: type: string description: 'Le champ value doit être une adresse e-mail valide. Le texte de value ne peut pas contenir plus de 255 caractères.' example: gilbert32@example.com nullable: true password: type: string description: 'Mot de passe. Au moins 8 caractères.' example: Motdepasse1 password_confirmation: type: string description: 'Confirmation du mot de passe ; doit être identique à « password ».' example: Motdepasse1 required: - name - country_code - phone_number - password - password_confirmation security: [] /api/v1/auth/verify: post: summary: 'Vérifier le compte avec le code OTP' operationId: vrifierLeCompteAvecLeCodeOTP description: '' parameters: [] responses: { } tags: - Auth requestBody: required: true content: application/json: schema: type: object properties: identifier: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b code: type: string description: 'Le texte de value doit contenir 6 caractères.' example: ngzmiy required: - identifier - code security: [] /api/v1/auth/resend: post: summary: 'Renvoyer le code de vérification' operationId: renvoyerLeCodeDeVrification description: '' parameters: [] responses: { } tags: - Auth requestBody: required: true content: application/json: schema: type: object properties: identifier: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - identifier security: [] /api/v1/auth/login: post: summary: 'Se connecter' operationId: seConnecter description: '' parameters: [] responses: { } tags: - Auth requestBody: required: true content: application/json: schema: type: object properties: identifier: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b password: type: string description: '' example: '|]|{+-' device_name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: v nullable: true required: - identifier - password security: [] /api/v1/auth/logout: post: summary: 'Se déconnecter' operationId: seDconnecter description: '' parameters: [] responses: { } tags: - Auth /api/v1/auth/password/forgot: post: summary: 'Demander un code de réinitialisation' operationId: demanderUnCodeDeRinitialisation description: '' parameters: [] responses: { } tags: - Auth requestBody: required: true content: application/json: schema: type: object properties: identifier: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - identifier security: [] /api/v1/auth/password/reset: post: summary: 'Réinitialiser le mot de passe' operationId: rinitialiserLeMotDePasse description: '' parameters: [] responses: { } tags: - Auth requestBody: required: true content: application/json: schema: type: object properties: identifier: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b code: type: string description: 'Le texte de value doit contenir 6 caractères.' example: ngzmiy password: type: string description: 'Mot de passe. Au moins 8 caractères.' example: Motdepasse1 password_confirmation: type: string description: 'Confirmation du mot de passe ; doit être identique à « password ».' example: Motdepasse1 required: - identifier - code - password - password_confirmation security: [] /api/v1/auth/password/change: post: summary: 'Changer le mot de passe' operationId: changerLeMotDePasse description: '' parameters: [] responses: { } tags: - Auth requestBody: required: true content: application/json: schema: type: object properties: current_password: type: string description: '' example: architecto password: type: string description: 'Mot de passe. Au moins 8 caractères.' example: Motdepasse1 password_confirmation: type: string description: 'Confirmation du mot de passe ; doit être identique à « password ».' example: Motdepasse1 required: - current_password - password - password_confirmation /api/v1/user: get: summary: "Profil de l'utilisateur connecté" operationId: profilDeLutilisateurConnect description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Account /api/v1/account: delete: summary: 'Supprimer son compte (mot de passe requis)' operationId: supprimerSonComptemotDePasseRequis description: '' parameters: [] responses: { } tags: - Account requestBody: required: true content: application/json: schema: type: object properties: password: type: string description: 'Mot de passe actuel, pour confirmer la suppression du compte.' example: Motdepasse1 required: - password /api/v1/citizen: get: summary: 'Consulter mon profil citoyen' operationId: consulterMonProfilCitoyen description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Account put: summary: 'Créer ou mettre à jour mon profil citoyen' operationId: crerOuMettreJourMonProfilCitoyen description: '' parameters: [] responses: { } tags: - Account requestBody: required: true content: multipart/form-data: schema: type: object properties: last_name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b post_name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' first_name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: g birth_date: type: string description: "Le champ value n'est pas une date valide. Le champ value doit être une date antérieure au today." example: '2022-09-13' birth_place: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' father_name: type: string description: 'Nom complet du père. Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'Mwamba Faraja Adolphe' nullable: true father_nationality: type: string description: 'Nationalité du père. Le texte de value ne peut pas contenir plus de 255 caractères.' example: Congolaise nullable: true mother_name: type: string description: 'Nom complet de la mère. Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'Albertine Amani Emilie' nullable: true mother_nationality: type: string description: 'Nationalité de la mère. Le texte de value ne peut pas contenir plus de 255 caractères.' example: Congolaise nullable: true tribe: type: string description: 'Tribu d’origine du requérant. Le texte de value ne peut pas contenir plus de 255 caractères.' example: Luba nullable: true photo: type: string format: binary description: 'Le champ value doit être une image. La taille du fichier de value ne peut pas dépasser 4096 kilo-octets.' nullable: true gender: type: string description: '' example: female enum: - male - female nullable: true marital_status: type: string description: '' example: married enum: - single - married - divorced - widowed nullable: true nationality: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: g nullable: true profession: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: z nullable: true national_id: type: string description: 'Numéro national d’identité de la personne (identifiant national). Le texte de value ne peut pas contenir plus de 255 caractères.' example: 01-90-06-15-12345-67 nullable: true identity_document_type: type: string description: 'Type de pièce d’identité présentée (carte d’électeur, passeport, permis de conduire…). Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'Carte d’électeur' nullable: true identity_document_number: type: string description: 'Numéro de la pièce d’identité présentée. Le texte de value ne peut pas contenir plus de 255 caractères.' example: CD-2020-0123456 nullable: true province_origin_id: type: string description: 'Must match an existing stored value.' example: architecto territory_origin_id: type: string description: 'Must match an existing stored value.' example: architecto village_origin: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' chiefdom_origin: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: g nullable: true collectivity_origin: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: z nullable: true groupement_origin: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: m nullable: true province_address_id: type: string description: 'Must match an existing stored value.' example: null nullable: true city_address: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: i nullable: true municipality_address: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'y' nullable: true quarter_address: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: v nullable: true avenue_address: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: d nullable: true house_number: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: l nullable: true required: - last_name - post_name - first_name - birth_date - birth_place - province_origin_id - territory_origin_id - village_origin /api/v1/citizen/photo: post: summary: 'Mettre à jour ma photo de profil' operationId: mettreJourMaPhotoDeProfil description: '' parameters: [] responses: { } tags: - Account requestBody: required: true content: multipart/form-data: schema: type: object properties: photo: type: string format: binary description: 'Le champ value doit être une image. La taille du fichier de value ne peut pas dépasser 4096 kilo-octets.' required: - photo /api/v1/countries: get: summary: 'Lister les pays' operationId: listerLesPays description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Localisation post: summary: 'Créer Pays' operationId: crerPays description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - name '/api/v1/countries/{id}': get: summary: 'Afficher Pays' operationId: afficherPays description: '' parameters: [] responses: 404: description: '' content: application/json: schema: type: object example: message: 'The route api/v1/countries/architecto could not be found.' properties: message: type: string example: 'The route api/v1/countries/architecto could not be found.' tags: - Localisation put: summary: 'Mettre à jour Pays' operationId: mettreJourPays description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - name delete: summary: 'Supprimer Pays' operationId: supprimerPays description: '' parameters: [] responses: { } tags: - Localisation parameters: - in: path name: id description: 'The ID of the country.' example: architecto required: true schema: type: string /api/v1/provinces: get: summary: 'Lister les provinces' operationId: listerLesProvinces description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Localisation post: summary: 'Créer Province' operationId: crerProvince description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: country_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b postal_code: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' nullable: true required: - name '/api/v1/provinces/{id}': get: summary: 'Afficher Province' operationId: afficherProvince description: '' parameters: [] responses: 404: description: '' content: application/json: schema: type: object example: message: 'The route api/v1/provinces/architecto could not be found.' properties: message: type: string example: 'The route api/v1/provinces/architecto could not be found.' tags: - Localisation put: summary: 'Mettre à jour Province' operationId: mettreJourProvince description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: country_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b postal_code: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' nullable: true required: - name delete: summary: 'Supprimer Province' operationId: supprimerProvince description: '' parameters: [] responses: { } tags: - Localisation parameters: - in: path name: id description: 'The ID of the province.' example: architecto required: true schema: type: string /api/v1/territories: get: summary: 'Lister les territoires' operationId: listerLesTerritoires description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Localisation post: summary: 'Créer Territoire' operationId: crerTerritoire description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: province_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b postal_code: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' nullable: true required: - name '/api/v1/territories/{id}': get: summary: 'Afficher Territoire' operationId: afficherTerritoire description: '' parameters: [] responses: 404: description: '' content: application/json: schema: type: object example: message: 'The route api/v1/territories/architecto could not be found.' properties: message: type: string example: 'The route api/v1/territories/architecto could not be found.' tags: - Localisation put: summary: 'Mettre à jour Territoire' operationId: mettreJourTerritoire description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: province_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b postal_code: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' nullable: true required: - name delete: summary: 'Supprimer Territoire' operationId: supprimerTerritoire description: '' parameters: [] responses: { } tags: - Localisation parameters: - in: path name: id description: 'The ID of the territory.' example: architecto required: true schema: type: string /api/v1/chiefdoms: get: summary: 'Lister les chefferies' operationId: listerLesChefferies description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Localisation post: summary: 'Créer Chefferie' operationId: crerChefferie description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: territory_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - name '/api/v1/chiefdoms/{id}': get: summary: 'Afficher Chefferie' operationId: afficherChefferie description: '' parameters: [] responses: 404: description: '' content: application/json: schema: type: object example: message: 'The route api/v1/chiefdoms/architecto could not be found.' properties: message: type: string example: 'The route api/v1/chiefdoms/architecto could not be found.' tags: - Localisation put: summary: 'Mettre à jour Chefferie' operationId: mettreJourChefferie description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: territory_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - name delete: summary: 'Supprimer Chefferie' operationId: supprimerChefferie description: '' parameters: [] responses: { } tags: - Localisation parameters: - in: path name: id description: 'The ID of the chiefdom.' example: architecto required: true schema: type: string /api/v1/collectivities: get: summary: 'Lister les collectivités' operationId: listerLesCollectivits description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Localisation post: summary: 'Créer Collectivité' operationId: crerCollectivit description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: chiefdom_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - name '/api/v1/collectivities/{id}': get: summary: 'Afficher Collectivité' operationId: afficherCollectivit description: '' parameters: [] responses: 404: description: '' content: application/json: schema: type: object example: message: 'The route api/v1/collectivities/architecto could not be found.' properties: message: type: string example: 'The route api/v1/collectivities/architecto could not be found.' tags: - Localisation put: summary: 'Mettre à jour Collectivité' operationId: mettreJourCollectivit description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: chiefdom_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - name delete: summary: 'Supprimer Collectivité' operationId: supprimerCollectivit description: '' parameters: [] responses: { } tags: - Localisation parameters: - in: path name: id description: 'The ID of the collectivity.' example: architecto required: true schema: type: string /api/v1/groupements: get: summary: 'Lister les groupements' operationId: listerLesGroupements description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Localisation post: summary: 'Créer Groupement' operationId: crerGroupement description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: collectivity_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - name '/api/v1/groupements/{id}': get: summary: 'Afficher Groupement' operationId: afficherGroupement description: '' parameters: [] responses: 404: description: '' content: application/json: schema: type: object example: message: 'The route api/v1/groupements/architecto could not be found.' properties: message: type: string example: 'The route api/v1/groupements/architecto could not be found.' tags: - Localisation put: summary: 'Mettre à jour Groupement' operationId: mettreJourGroupement description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: collectivity_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - name delete: summary: 'Supprimer Groupement' operationId: supprimerGroupement description: '' parameters: [] responses: { } tags: - Localisation parameters: - in: path name: id description: 'The ID of the groupement.' example: architecto required: true schema: type: string /api/v1/villages: get: summary: 'Lister les villages' operationId: listerLesVillages description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Localisation post: summary: 'Créer Village' operationId: crerVillage description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: groupement_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - name '/api/v1/villages/{id}': get: summary: 'Afficher Village' operationId: afficherVillage description: '' parameters: [] responses: 404: description: '' content: application/json: schema: type: object example: message: 'The route api/v1/villages/architecto could not be found.' properties: message: type: string example: 'The route api/v1/villages/architecto could not be found.' tags: - Localisation put: summary: 'Mettre à jour Village' operationId: mettreJourVillage description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: groupement_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - name delete: summary: 'Supprimer Village' operationId: supprimerVillage description: '' parameters: [] responses: { } tags: - Localisation parameters: - in: path name: id description: 'The ID of the village.' example: architecto required: true schema: type: string /api/v1/cities: get: summary: 'Lister les villes' operationId: listerLesVilles description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Localisation post: summary: 'Créer Ville' operationId: crerVille description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: province_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b postal_code: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' nullable: true required: - name '/api/v1/cities/{id}': get: summary: 'Afficher Ville' operationId: afficherVille description: '' parameters: [] responses: 404: description: '' content: application/json: schema: type: object example: message: 'The route api/v1/cities/architecto could not be found.' properties: message: type: string example: 'The route api/v1/cities/architecto could not be found.' tags: - Localisation put: summary: 'Mettre à jour Ville' operationId: mettreJourVille description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: province_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b postal_code: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' nullable: true required: - name delete: summary: 'Supprimer Ville' operationId: supprimerVille description: '' parameters: [] responses: { } tags: - Localisation parameters: - in: path name: id description: 'The ID of the city.' example: architecto required: true schema: type: string /api/v1/municipalities: get: summary: 'Lister les communes' operationId: listerLesCommunes description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Localisation post: summary: 'Créer Commune' operationId: crerCommune description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: city_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - name '/api/v1/municipalities/{id}': get: summary: 'Afficher Commune' operationId: afficherCommune description: '' parameters: [] responses: 404: description: '' content: application/json: schema: type: object example: message: 'The route api/v1/municipalities/architecto could not be found.' properties: message: type: string example: 'The route api/v1/municipalities/architecto could not be found.' tags: - Localisation put: summary: 'Mettre à jour Commune' operationId: mettreJourCommune description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: city_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - name delete: summary: 'Supprimer Commune' operationId: supprimerCommune description: '' parameters: [] responses: { } tags: - Localisation parameters: - in: path name: id description: 'The ID of the municipality.' example: architecto required: true schema: type: string /api/v1/quarters: get: summary: 'Lister les quartiers' operationId: listerLesQuartiers description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Localisation post: summary: 'Créer Quartier' operationId: crerQuartier description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: municipality_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - name '/api/v1/quarters/{id}': get: summary: 'Afficher Quartier' operationId: afficherQuartier description: '' parameters: [] responses: 404: description: '' content: application/json: schema: type: object example: message: 'The route api/v1/quarters/architecto could not be found.' properties: message: type: string example: 'The route api/v1/quarters/architecto could not be found.' tags: - Localisation put: summary: 'Mettre à jour Quartier' operationId: mettreJourQuartier description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: municipality_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - name delete: summary: 'Supprimer Quartier' operationId: supprimerQuartier description: '' parameters: [] responses: { } tags: - Localisation parameters: - in: path name: id description: 'The ID of the quarter.' example: architecto required: true schema: type: string /api/v1/avenues: get: summary: 'Lister les avenues' operationId: listerLesAvenues description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Localisation post: summary: 'Créer Avenue' operationId: crerAvenue description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: quarter_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - name '/api/v1/avenues/{id}': get: summary: 'Afficher Avenue' operationId: afficherAvenue description: '' parameters: [] responses: 404: description: '' content: application/json: schema: type: object example: message: 'The route api/v1/avenues/architecto could not be found.' properties: message: type: string example: 'The route api/v1/avenues/architecto could not be found.' tags: - Localisation put: summary: 'Mettre à jour Avenue' operationId: mettreJourAvenue description: '' parameters: [] responses: { } tags: - Localisation requestBody: required: true content: application/json: schema: type: object properties: quarter_id: type: string description: 'Must match an existing stored value.' example: null nullable: true name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - name delete: summary: 'Supprimer Avenue' operationId: supprimerAvenue description: '' parameters: [] responses: { } tags: - Localisation parameters: - in: path name: id description: 'The ID of the avenue.' example: architecto required: true schema: type: string /api/v1/document-types: get: summary: 'Lister le catalogue' operationId: listerLeCatalogue description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Documents '/api/v1/document-types/{documentType_key}': get: summary: "Détails d'un type de document" operationId: dtailsDunTypeDeDocument description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Documents parameters: - in: path name: documentType_key description: '' example: attestation_of_non_nationality required: true schema: type: string - in: path name: documentType description: 'Clé du type de document.' example: certificate_of_nationality required: true schema: type: string /api/v1/applications: get: summary: 'Lister les demandes (filtrable, paginée)' operationId: listerLesDemandesfiltrablePagine description: '' parameters: - in: query name: 'filter[status]' description: 'Filtrer par statut.' example: under_review required: false schema: type: string description: 'Filtrer par statut.' example: under_review - in: query name: 'filter[current_stage]' description: 'Filtrer par étape courante.' example: anr required: false schema: type: string description: 'Filtrer par étape courante.' example: anr - in: query name: 'filter[document_type]' description: 'Filtrer par clé de type de document.' example: certificate_of_nationality required: false schema: type: string description: 'Filtrer par clé de type de document.' example: certificate_of_nationality - in: query name: 'filter[reference]' description: 'Filtrer par référence (partiel).' example: EJ-CN-2026 required: false schema: type: string description: 'Filtrer par référence (partiel).' example: EJ-CN-2026 - in: query name: 'filter[applicant]' description: 'Filtrer par nom/prénom du requérant.' example: Yannick required: false schema: type: string description: 'Filtrer par nom/prénom du requérant.' example: Yannick - in: query name: sort description: 'Tri : created_at, submitted_at, status, current_stage (préfixe - pour desc).' example: '-created_at' required: false schema: type: string description: 'Tri : created_at, submitted_at, status, current_stage (préfixe - pour desc).' example: '-created_at' - in: query name: per_page description: 'Nombre par page (1-100).' example: 20 required: false schema: type: integer description: 'Nombre par page (1-100).' example: 20 - in: query name: page description: 'Numéro de page.' example: 1 required: false schema: type: integer description: 'Numéro de page.' example: 1 responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Applications post: summary: 'Ouvrir une demande (brouillon)' operationId: ouvrirUneDemandebrouillon description: '' parameters: [] responses: { } tags: - Applications requestBody: required: true content: application/json: schema: type: object properties: document_type_key: type: string description: '' example: deed_deposit_certificate enum: - certificate_of_nationality - attestation_of_non_nationality - birth_certificate - criminal_record - certificate_of_non_appeal - deed_deposit_certificate reason: type: string description: 'Motif de la demande de certificat. Le texte de value ne peut pas contenir plus de 1000 caractères.' example: 'Obtention d’un passeport' nullable: true required: - document_type_key parameters: - in: path name: application description: 'Référence de la demande.' example: EJ-CN-2026-00000001 required: true schema: type: string '/api/v1/applications/{application_reference}': get: summary: "Détail et suivi d'une demande" operationId: dtailEtSuiviDuneDemande description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Applications parameters: - in: path name: application_reference description: '' example: EJ-AN-2026-00000001 required: true schema: type: string - in: path name: application description: 'Référence de la demande.' example: EJ-CN-2026-00000001 required: true schema: type: string '/api/v1/applications/{application_reference}/attachments': post: summary: 'Joindre une pièce justificative' operationId: joindreUnePiceJustificative description: '' parameters: [] responses: { } tags: - Applications requestBody: required: true content: multipart/form-data: schema: type: object properties: attachment_type: type: string description: '' example: parents_id enum: - birth_certificate - applicant_id - parents_id - residence_proof file: type: string format: binary description: 'Must be a file. La taille du fichier de value ne peut pas dépasser 10240 kilo-octets.' required: - attachment_type - file parameters: - in: path name: application_reference description: '' example: EJ-AN-2026-00000001 required: true schema: type: string - in: path name: application description: 'Référence de la demande.' example: EJ-CN-2026-00000001 required: true schema: type: string '/api/v1/applications/{application_reference}/submit': post: summary: 'Soumettre la demande' operationId: soumettreLaDemande description: '' parameters: [] responses: { } tags: - Applications parameters: - in: path name: application_reference description: '' example: EJ-AN-2026-00000001 required: true schema: type: string - in: path name: application description: 'Référence de la demande.' example: EJ-CN-2026-00000001 required: true schema: type: string '/api/v1/applications/{application_reference}/resubmit': post: summary: 'Resoumettre la demande après complément' operationId: resoumettreLaDemandeAprsComplment description: '' parameters: [] responses: { } tags: - Applications requestBody: required: false content: application/json: schema: type: object properties: observation: type: string description: 'Précision facultative du citoyen sur ce qui a été corrigé. Le texte de value ne peut pas contenir plus de 1000 caractères.' example: 'Acte de naissance rescanné en couleur.' nullable: true parameters: - in: path name: application_reference description: '' example: EJ-AN-2026-00000001 required: true schema: type: string - in: path name: application description: 'Référence de la demande.' example: EJ-CN-2026-00000001 required: true schema: type: string /api/v1/workflow/inbox: get: summary: 'Lister les demandes à traiter' operationId: listerLesDemandesTraiter description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Workflow '/api/v1/applications/{application_reference}/transitions': post: summary: 'Transitionner une demande' operationId: transitionnerUneDemande description: '' parameters: [] responses: { } tags: - Workflow requestBody: required: true content: application/json: schema: type: object properties: action: type: string description: '' example: resubmit enum: - approve - reject - request_changes - resubmit observation: type: string description: 'This field is required when action is reject or request_changes. Le texte de value ne peut pas contenir plus de 2000 caractères.' example: b nullable: true destination: type: string description: '' example: dgm enum: - payment - chancellery - general_secretariat - national_cell - anr - dgm - validation - signature - completed required: - action parameters: - in: path name: application_reference description: '' example: EJ-AN-2026-00000001 required: true schema: type: string - in: path name: application description: 'Référence de la demande.' example: EJ-CN-2026-00000001 required: true schema: type: string '/api/v1/applications/{application_reference}/payments': get: summary: 'Lister les paiements du dossier' operationId: listerLesPaiementsDuDossier description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Payments post: summary: 'Initier le paiement des frais' operationId: initierLePaiementDesFrais description: '' parameters: [] responses: { } tags: - Payments requestBody: required: true content: application/json: schema: type: object properties: payment_method: type: string description: '' example: card enum: - mobile_money - card - cash wallet_id: type: string description: 'This field is required when payment_method is mobile_money. Le texte de value ne peut pas contenir plus de 255 caractères.' example: b nullable: true required: - payment_method parameters: - in: path name: application_reference description: '' example: EJ-AN-2026-00000001 required: true schema: type: string - in: path name: application description: 'Référence de la demande.' example: EJ-CN-2026-00000001 required: true schema: type: string '/api/v1/applications/{application_reference}/payment-status': get: summary: 'Savoir si le dossier est déjà payé' operationId: savoirSiLeDossierEstDjPay description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Payments parameters: - in: path name: application_reference description: '' example: EJ-AN-2026-00000001 required: true schema: type: string - in: path name: application description: 'Référence de la demande.' example: EJ-CN-2026-00000001 required: true schema: type: string /api/v1/payments/callback: post: summary: 'Notification de paiement (webhook KODIPAY)' operationId: notificationDePaiementwebhookKODIPAY description: '' parameters: [] responses: { } tags: - Payments requestBody: required: true content: application/json: schema: type: object properties: reference: type: string description: '' example: architecto required: - reference security: [] /api/v1/signatures/callback: post: summary: 'Notification de signature (webhook signNow)' operationId: notificationDeSignaturewebhookSignNow description: '' parameters: [] responses: { } tags: - Signature security: [] '/api/v1/applications/{application_reference}/signature': post: summary: 'Initier la signature du certificat' operationId: initierLaSignatureDuCertificat description: '' parameters: [] responses: { } tags: - Signature requestBody: required: true content: application/json: schema: type: object properties: issue_place: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - issue_place parameters: - in: path name: application_reference description: '' example: EJ-AN-2026-00000001 required: true schema: type: string - in: path name: application description: 'Référence de la demande.' example: EJ-CN-2026-00000001 required: true schema: type: string '/api/v1/certificates/{certificate_number}/download': get: summary: 'Obtenir un lien de téléchargement du certificat signé (Cellule Nationale / Admin)' operationId: obtenirUnLienDeTlchargementDuCertificatSignCelluleNationaleAdmin description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Certificates parameters: - in: path name: certificate_number description: '' example: 10 required: true schema: type: integer - in: path name: certificate description: 'Numéro unique du certificat.' example: CN-RDC-2026-0000000001 required: true schema: type: string '/api/v1/certificates/{certificate_number}/file': get: summary: 'Servir le PDF signé (lien temporaire signé)' operationId: servirLePDFSignlienTemporaireSign description: '' parameters: [] responses: 404: description: '' content: application/json: schema: type: object example: errors: 'Certificate not found' status: 404 properties: errors: type: string example: 'Certificate not found' status: type: integer example: 404 tags: - Certificates security: [] parameters: - in: path name: certificate_number description: '' example: 10 required: true schema: type: integer - in: path name: certificate description: 'Numéro unique du certificat.' example: CN-RDC-2026-0000000001 required: true schema: type: string '/api/v1/verify/{number}': get: summary: 'Vérifier un certificat' operationId: vrifierUnCertificat description: '' parameters: [] responses: 403: description: '' content: application/json: schema: type: object example: valid: false message: 'Lien de vérification invalide.' properties: valid: type: boolean example: false message: type: string example: 'Lien de vérification invalide.' tags: - Verification security: [] parameters: - in: path name: number description: 'Numéro du certificat.' example: CN-RDC-2026-0000000001 required: true schema: type: string '/api/v1/verify/legal-entity/{number}': get: summary: 'Vérifier une personnalité juridique' operationId: vrifierUnePersonnalitJuridique description: '' parameters: [] responses: 404: description: '' content: application/json: schema: type: object example: valid: false message: 'Personnalité juridique introuvable.' properties: valid: type: boolean example: false message: type: string example: 'Personnalité juridique introuvable.' tags: - Verification security: [] parameters: - in: path name: number description: 'Numéro de personnalité juridique.' example: PJ-RDC-2026-000154 required: true schema: type: string /api/v1/admin/citizens: post: summary: 'Enregistrer un citoyen sans compte (guichet)' operationId: enregistrerUnCitoyenSansCompteguichet description: '' parameters: [] responses: { } tags: - Administration requestBody: required: true content: multipart/form-data: schema: type: object properties: last_name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b post_name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' first_name: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: g birth_date: type: string description: "Le champ value n'est pas une date valide. Le champ value doit être une date antérieure au today." example: '2022-09-13' birth_place: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' father_name: type: string description: 'Nom complet du père. Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'Mwamba Faraja Adolphe' nullable: true father_nationality: type: string description: 'Nationalité du père. Le texte de value ne peut pas contenir plus de 255 caractères.' example: Congolaise nullable: true mother_name: type: string description: 'Nom complet de la mère. Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'Albertine Amani Emilie' nullable: true mother_nationality: type: string description: 'Nationalité de la mère. Le texte de value ne peut pas contenir plus de 255 caractères.' example: Congolaise nullable: true tribe: type: string description: 'Tribu d’origine du requérant. Le texte de value ne peut pas contenir plus de 255 caractères.' example: Luba nullable: true photo: type: string format: binary description: 'Le champ value doit être une image. La taille du fichier de value ne peut pas dépasser 4096 kilo-octets.' nullable: true gender: type: string description: '' example: male enum: - male - female nullable: true marital_status: type: string description: '' example: married enum: - single - married - divorced - widowed nullable: true nationality: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: g nullable: true profession: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: z nullable: true national_id: type: string description: 'Numéro national d’identité de la personne (identifiant national). Le texte de value ne peut pas contenir plus de 255 caractères.' example: 01-90-06-15-12345-67 nullable: true identity_document_type: type: string description: 'Type de pièce d’identité présentée (carte d’électeur, passeport, permis de conduire…). Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'Carte d’électeur' nullable: true identity_document_number: type: string description: 'Numéro de la pièce d’identité présentée. Le texte de value ne peut pas contenir plus de 255 caractères.' example: CD-2020-0123456 nullable: true province_origin_id: type: string description: 'Must match an existing stored value.' example: architecto territory_origin_id: type: string description: 'Must match an existing stored value.' example: architecto village_origin: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' chiefdom_origin: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: g nullable: true collectivity_origin: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: z nullable: true groupement_origin: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: m nullable: true province_address_id: type: string description: 'Must match an existing stored value.' example: null nullable: true city_address: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: i nullable: true municipality_address: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'y' nullable: true quarter_address: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: v nullable: true avenue_address: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: d nullable: true house_number: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: l nullable: true contact_country_code: type: string description: 'This field is required when contact_phone is present. Le texte de value ne peut pas contenir plus de 8 caractères.' example: jnikhway nullable: true contact_phone: type: string description: 'Le texte de value ne peut pas contenir plus de 20 caractères.' example: kcmyuwpwlvqwrsit nullable: true required: - last_name - post_name - first_name - birth_date - birth_place - province_origin_id - territory_origin_id - village_origin '/api/v1/admin/citizens/{id}': get: summary: 'Consulter un citoyen' operationId: consulterUnCitoyen description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Administration parameters: - in: path name: id description: 'The ID of the citizen.' example: 9 required: true schema: type: integer '/api/v1/admin/citizens/{citizen_id}/photo': post: summary: "Mettre à jour la photo d'un citoyen (guichet)" operationId: mettreJourLaPhotoDunCitoyenguichet description: '' parameters: [] responses: { } tags: - Administration requestBody: required: true content: multipart/form-data: schema: type: object properties: photo: type: string format: binary description: 'Le champ value doit être une image. La taille du fichier de value ne peut pas dépasser 4096 kilo-octets.' required: - photo parameters: - in: path name: citizen_id description: 'The ID of the citizen.' example: 9 required: true schema: type: integer '/api/v1/admin/citizens/{citizen_id}/link': post: summary: 'Rattacher un compte à un citoyen (claim)' operationId: rattacherUnCompteUnCitoyenclaim description: '' parameters: [] responses: { } tags: - Administration requestBody: required: true content: application/json: schema: type: object properties: identifier: type: string description: '' example: architecto required: - identifier parameters: - in: path name: citizen_id description: 'The ID of the citizen.' example: 9 required: true schema: type: integer '/api/v1/admin/citizens/{citizen_id}/applications': post: summary: "Ouvrir une demande pour le compte d'un citoyen" operationId: ouvrirUneDemandePourLeCompteDunCitoyen description: '' parameters: [] responses: { } tags: - Administration requestBody: required: true content: application/json: schema: type: object properties: document_type_key: type: string description: '' example: criminal_record enum: - certificate_of_nationality - attestation_of_non_nationality - birth_certificate - criminal_record - certificate_of_non_appeal - deed_deposit_certificate reason: type: string description: 'Motif de la demande de certificat. Le texte de value ne peut pas contenir plus de 1000 caractères.' example: 'Obtention d’un passeport' nullable: true required: - document_type_key parameters: - in: path name: citizen_id description: 'The ID of the citizen.' example: 9 required: true schema: type: integer /api/v1/admin/persons: get: summary: 'Rechercher une personne physique au référentiel' operationId: rechercherUnePersonnePhysiqueAuRfrentiel description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Administration requestBody: required: true content: application/json: schema: type: object properties: q: type: string description: 'Le texte de value doit contenir au moins 2 caractères. Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - q /api/v1/dashboard: get: summary: "Vue d'ensemble du tableau de bord" operationId: vueDensembleDuTableauDeBord description: '' parameters: - in: query name: period description: 'Période : today|week|month|year|custom.' example: month required: false schema: type: string description: 'Période : today|week|month|year|custom.' example: month - in: query name: from description: 'Début de la plage (requis si period=custom).' example: '2026-06-01' required: false schema: type: string description: 'Début de la plage (requis si period=custom).' example: '2026-06-01' - in: query name: to description: 'Fin de la plage (requis si period=custom).' example: '2026-06-30' required: false schema: type: string description: 'Fin de la plage (requis si period=custom).' example: '2026-06-30' - in: query name: province description: "Filtre sur la province d'origine." example: Kinshasa required: false schema: type: string description: "Filtre sur la province d'origine." example: Kinshasa - in: query name: document_type description: 'Clé du type de document.' example: certificate_of_nationality required: false schema: type: string description: 'Clé du type de document.' example: certificate_of_nationality responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Dashboard requestBody: required: false content: application/json: schema: type: object properties: period: type: string description: '' example: custom enum: - today - week - month - year - custom from: type: string description: "This field is required when period is custom. Le champ value n'est pas une date valide. Le champ value doit être une date antérieure ou égale au to." example: '2022-09-13' to: type: string description: "This field is required when period is custom. Le champ value n'est pas une date valide." example: '2026-08-20T03:25:00' province: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' document_type: type: string description: 'Must match an existing stored value.' example: architecto /api/v1/admin/cash-payments: get: summary: 'Lister les paiements en espèces en attente' operationId: listerLesPaiementsEnEspcesEnAttente description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - 'Encaissement guichet' '/api/v1/admin/cash-payments/{payment_reference}/process': post: summary: 'Encaisser un paiement en espèces (guichet)' operationId: encaisserUnPaiementEnEspcesguichet description: '' parameters: [] responses: { } tags: - 'Encaissement guichet' requestBody: required: false content: application/json: schema: type: object properties: counter: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b nullable: true parameters: - in: path name: payment_reference description: '' example: PAY-EJ-AN-2026-00000002-04 required: true schema: type: string /api/v1/applications/initTable: get: summary: '' operationId: getApiV1ApplicationsInitTable description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints /api/v1/applications/tableData: get: summary: '' operationId: getApiV1ApplicationsTableData description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints /api/v1/payments/initTable: get: summary: '' operationId: getApiV1PaymentsInitTable description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints /api/v1/payments/tableData: get: summary: '' operationId: getApiV1PaymentsTableData description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints /api/v1/certificates/initTable: get: summary: '' operationId: getApiV1CertificatesInitTable description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints /api/v1/certificates/tableData: get: summary: '' operationId: getApiV1CertificatesTableData description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints /api/v1/citizens/initTable: get: summary: '' operationId: getApiV1CitizensInitTable description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints /api/v1/citizens/tableData: get: summary: '' operationId: getApiV1CitizensTableData description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints /api/v1/users/initTable: get: summary: '' operationId: getApiV1UsersInitTable description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints /api/v1/users/tableData: get: summary: '' operationId: getApiV1UsersTableData description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints /api/v1/admin/legal-entities/initTable: get: summary: '' operationId: getApiV1AdminLegalEntitiesInitTable description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints /api/v1/admin/legal-entities/tableData: get: summary: '' operationId: getApiV1AdminLegalEntitiesTableData description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints /api/v1/admin/legal-entities/inbox: get: summary: 'Corbeille des fiches personne morale à traiter' operationId: corbeilleDesFichesPersonneMoraleTraiter description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - 'Personnes morales' '/api/v1/admin/legal-entities/{legalEntity_reference}/submit': post: summary: 'Soumettre la fiche dans le circuit de traitement' operationId: soumettreLaFicheDansLeCircuitDeTraitement description: '' parameters: [] responses: { } tags: - 'Personnes morales' parameters: - in: path name: legalEntity_reference description: '' example: architecto required: true schema: type: string '/api/v1/admin/legal-entities/{legalEntity_reference}/transitions': post: summary: 'Transitionner la fiche (approuver / rejeter / complément / resoumettre)' operationId: transitionnerLaFicheapprouverRejeterComplmentResoumettre description: '' parameters: [] responses: { } tags: - 'Personnes morales' requestBody: required: true content: application/json: schema: type: object properties: action: type: string description: '' example: reject enum: - approve - reject - request_changes - resubmit observation: type: string description: 'This field is required when action is reject or request_changes. Le texte de value ne peut pas contenir plus de 2000 caractères.' example: b nullable: true viability_outcome: type: string description: '' example: favorable enum: - favorable - reserved - unfavorable nullable: true legal_opinion: type: string description: 'Le texte de value ne peut pas contenir plus de 5000 caractères.' example: 'n' nullable: true required: - action parameters: - in: path name: legalEntity_reference description: '' example: architecto required: true schema: type: string '/api/v1/admin/legal-entities/{legalEntity_reference}/payments': get: summary: 'Lister les paiements de la personne morale' operationId: listerLesPaiementsDeLaPersonneMorale description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - 'Personnes morales' post: summary: 'Initier le paiement des frais de personnalité juridique' operationId: initierLePaiementDesFraisDePersonnalitJuridique description: '' parameters: [] responses: { } tags: - 'Personnes morales' requestBody: required: true content: application/json: schema: type: object properties: payment_method: type: string description: '' example: card enum: - mobile_money - card - cash wallet_id: type: string description: 'This field is required when payment_method is mobile_money. Le texte de value ne peut pas contenir plus de 255 caractères.' example: b nullable: true required: - payment_method parameters: - in: path name: legalEntity_reference description: '' example: architecto required: true schema: type: string '/api/v1/admin/legal-entities/{legalEntity_reference}/issue': post: summary: "Signer l'arrêté et délivrer la personnalité juridique" operationId: signerLarrtEtDlivrerLaPersonnalitJuridique description: '' parameters: [] responses: { } tags: - 'Personnes morales' parameters: - in: path name: legalEntity_reference description: '' example: architecto required: true schema: type: string '/api/v1/admin/legal-entities/{legalEntity_reference}/documents/{type}': get: summary: 'Télécharger un document officiel (certificate|decree|plaque)' operationId: tlchargerUnDocumentOfficielcertificatedecreeplaque description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - 'Personnes morales' parameters: - in: path name: legalEntity_reference description: '' example: architecto required: true schema: type: string - in: path name: type description: '' example: architecto required: true schema: type: string /api/v1/admin/legal-entities: post: summary: 'Créer une fiche personne morale' operationId: crerUneFichePersonneMorale description: '' parameters: [] responses: { } tags: - 'Personnes morales' requestBody: required: true content: application/json: schema: type: object properties: nature: type: string description: '' example: foundation enum: - asbl_confessional - asbl_non_confessional - ngo - foundation - church_community - public_utility_establishment - federation_network - other denomination: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b required: - nature - denomination '/api/v1/admin/legal-entities/{legalEntity_reference}': get: summary: 'Consulter une fiche personne morale' operationId: consulterUneFichePersonneMorale description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - 'Personnes morales' parameters: - in: path name: legalEntity_reference description: '' example: architecto required: true schema: type: string '/api/v1/admin/legal-entities/{legalEntity_reference}/identification-sheet': get: summary: "Générer la fiche d'identification (PDF)" operationId: gnrerLaFicheDidentificationPDF description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - 'Personnes morales' parameters: - in: path name: legalEntity_reference description: '' example: architecto required: true schema: type: string '/api/v1/admin/legal-entities/{legalEntity_reference}/identification': put: summary: 'Section 1 — Nature et identification' operationId: section1NatureEtIdentification description: '' parameters: [] responses: { } tags: - 'Personnes morales' requestBody: required: true content: application/json: schema: type: object properties: nature: type: string description: '' example: federation_network enum: - asbl_confessional - asbl_non_confessional - ngo - foundation - church_community - public_utility_establishment - federation_network - other denomination: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b acronym: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' nullable: true former_denomination: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: g nullable: true creation_date: type: string description: "Le champ value n'est pas une date valide." example: '2026-08-20T03:25:01' nullable: true duration_type: type: string description: '' example: indefinite enum: - indefinite - fixed nullable: true duration_value: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: z nullable: true required: - nature - denomination parameters: - in: path name: legalEntity_reference description: '' example: architecto required: true schema: type: string '/api/v1/admin/legal-entities/{legalEntity_reference}/seat': put: summary: 'Section 2 — Siège social' operationId: section2SigeSocial description: '' parameters: [] responses: { } tags: - 'Personnes morales' requestBody: required: false content: application/json: schema: type: object properties: province_id: type: string description: 'Must match an existing stored value.' example: null nullable: true city: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b nullable: true municipality: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' nullable: true quarter: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: g nullable: true avenue: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: z nullable: true parcel_number: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: m nullable: true phone: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: i nullable: true email: type: string description: 'Le champ value doit être une adresse e-mail valide. Le texte de value ne peut pas contenir plus de 255 caractères.' example: okon.justina@example.com nullable: true website: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' nullable: true gps_latitude: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: i nullable: true gps_longitude: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: k nullable: true parameters: - in: path name: legalEntity_reference description: '' example: architecto required: true schema: type: string '/api/v1/admin/legal-entities/{legalEntity_reference}/object-mission': put: summary: 'Section 3 — Objet et mission' operationId: section3ObjetEtMission description: '' parameters: [] responses: { } tags: - 'Personnes morales' requestBody: required: false content: application/json: schema: type: object properties: vision: type: string description: '' example: architecto nullable: true mission: type: string description: '' example: architecto nullable: true main_object: type: string description: '' example: architecto nullable: true objective_1: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' nullable: true objective_2: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: g nullable: true objective_3: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: z nullable: true intervention_domains: type: array description: '' example: - human_rights items: type: string enum: - religion - health - education - agriculture - humanitarian - social - human_rights - youth - culture - environment - development - other parameters: - in: path name: legalEntity_reference description: '' example: architecto required: true schema: type: string '/api/v1/admin/legal-entities/{legalEntity_reference}/governance': put: summary: 'Sections 10-11 — Gouvernance et organes' operationId: sections1011GouvernanceEtOrganes description: '' parameters: [] responses: { } tags: - 'Personnes morales' requestBody: required: false content: application/json: schema: type: object properties: constitutive_assembly_date: type: string description: "Le champ value n'est pas une date valide." example: '2026-08-20T03:25:01' nullable: true constitutive_assembly_place: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b nullable: true founders_count: type: integer description: 'La valeur de value doit être supérieure ou égale à 0.' example: 39 nullable: true members_count: type: integer description: 'La valeur de value doit être supérieure ou égale à 0.' example: 84 nullable: true quorum: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: z nullable: true statutes_adoption_date: type: string description: "Le champ value n'est pas une date valide." example: '2026-08-20T03:25:01' nullable: true internal_rules_adoption_date: type: string description: "Le champ value n'est pas une date valide." example: '2026-08-20T03:25:01' nullable: true administrators_designation_date: type: string description: "Le champ value n'est pas une date valide." example: '2026-08-20T03:25:01' nullable: true mandate_duration: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: m nullable: true organs: type: array description: '' example: - executive_secretariat items: type: string enum: - general_assembly - board_of_directors - steering_committee - audit_board - spiritual_body - control_committee - executive_secretariat - other parameters: - in: path name: legalEntity_reference description: '' example: architecto required: true schema: type: string '/api/v1/admin/legal-entities/{legalEntity_reference}/resources': put: summary: 'Section 12 — Ressources' operationId: section12Ressources description: '' parameters: [] responses: { } tags: - 'Personnes morales' requestBody: required: false content: application/json: schema: type: object properties: funding_sources: type: array description: '' example: - contributions items: type: string enum: - contributions - donations - subsidies - offerings_tithes - income_generating_activity - partners annual_budget: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b nullable: true bank_account: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' nullable: true employees_count: type: integer description: 'La valeur de value doit être supérieure ou égale à 0.' example: 84 nullable: true volunteers_count: type: integer description: 'La valeur de value doit être supérieure ou égale à 0.' example: 12 nullable: true beneficiaries_count: type: integer description: 'La valeur de value doit être supérieure ou égale à 0.' example: 77 nullable: true parameters: - in: path name: legalEntity_reference description: '' example: architecto required: true schema: type: string '/api/v1/admin/legal-entities/{legalEntity_reference}/confessional': put: summary: 'Section 13 — Structure confessionnelle' operationId: section13StructureConfessionnelle description: '' parameters: [] responses: { } tags: - 'Personnes morales' requestBody: required: false content: application/json: schema: type: object properties: confession: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b nullable: true doctrine: type: string description: '' example: architecto nullable: true parent_organization: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' nullable: true spiritual_authority: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: g nullable: true worship_places_count: type: integer description: 'La valeur de value doit être supérieure ou égale à 0.' example: 12 nullable: true faithful_count: type: integer description: 'La valeur de value doit être supérieure ou égale à 0.' example: 77 nullable: true legal_rep_theological_training: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: i nullable: true diploma_institution_year: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'y' nullable: true parameters: - in: path name: legalEntity_reference description: '' example: architecto required: true schema: type: string '/api/v1/admin/legal-entities/{legalEntity_reference}/viability': put: summary: 'Section 14 — Siège et viabilité' operationId: section14SigeEtViabilit description: '' parameters: [] responses: { } tags: - 'Personnes morales' requestBody: required: false content: application/json: schema: type: object properties: seat_occupation: type: string description: '' example: provided_free_of_charge enum: - ownership - rental - provided_free_of_charge - other nullable: true lease_title: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b nullable: true approximate_area: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' nullable: true reception_capacity: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: g nullable: true has_electricity: type: boolean description: '' example: true nullable: true has_water: type: boolean description: '' example: true nullable: true has_internet: type: boolean description: '' example: false nullable: true parameters: - in: path name: legalEntity_reference description: '' example: architecto required: true schema: type: string '/api/v1/admin/legal-entities/{legalEntity_reference}/representatives': put: summary: 'Sections 5/9/16 — Représentants et déclarant' operationId: sections5916ReprsentantsEtDclarant description: '' parameters: [] responses: { } tags: - 'Personnes morales' requestBody: required: false content: application/json: schema: type: object properties: legal_representative_citizen_id: type: string description: 'Must match an existing stored value.' example: null nullable: true mandatary_mode: type: string description: '' example: mandatary enum: - legal_representative - administrator - lawyer - mandatary nullable: true mandatary_citizen_id: type: string description: 'Must match an existing stored value.' example: null nullable: true mandate_reference: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b nullable: true declarant_citizen_id: type: string description: 'Must match an existing stored value.' example: null nullable: true declarant_capacity: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' nullable: true declaration_place: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: g nullable: true declaration_date: type: string description: "Le champ value n'est pas une date valide." example: '2026-08-20T03:25:01' nullable: true parameters: - in: path name: legalEntity_reference description: '' example: architecto required: true schema: type: string '/api/v1/admin/legal-entities/{legalEntity_reference}/attachments': post: summary: 'Section 15 — Joindre une pièce à la liasse' operationId: section15JoindreUnePiceLaLiasse description: '' parameters: [] responses: { } tags: - 'Personnes morales' requestBody: required: true content: multipart/form-data: schema: type: object properties: attachment_type: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: b file: type: string format: binary description: 'Must be a file. La taille du fichier de value ne peut pas dépasser 10240 kilo-octets.' required: - attachment_type - file parameters: - in: path name: legalEntity_reference description: '' example: architecto required: true schema: type: string '/api/v1/admin/legal-entities/{legalEntity_reference}/members': post: summary: 'Associer une personne physique à la personne morale' operationId: associerUnePersonnePhysiqueLaPersonneMorale description: '' parameters: [] responses: { } tags: - 'Personnes morales' requestBody: required: true content: application/json: schema: type: object properties: citizen_id: type: string description: 'Must match an existing stored value.' example: architecto role: type: string description: '' example: effective_member enum: - administrator - founder - effective_member function: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: 'n' nullable: true designation_date: type: string description: "Le champ value n'est pas une date valide." example: '2026-08-20T03:25:01' nullable: true mandate: type: string description: 'Le texte de value ne peut pas contenir plus de 255 caractères.' example: g nullable: true required: - citizen_id - role parameters: - in: path name: legalEntity_reference description: '' example: architecto required: true schema: type: string '/api/v1/admin/legal-entities/{legalEntity_reference}/members/{id}': delete: summary: 'Retirer une personne associée' operationId: retirerUnePersonneAssocie description: '' parameters: [] responses: { } tags: - 'Personnes morales' parameters: - in: path name: legalEntity_reference description: '' example: architecto required: true schema: type: string - in: path name: id description: 'The ID of the member.' example: 16 required: true schema: type: integer