> ## Documentation Index
> Fetch the complete documentation index at: https://sandbox.it-centrex.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Enrôler un mobile wallet

> Rattacher un instrument de paiement de type mobile wallet à un usager déjà enrôlé dans GIMpay.

Cet appel rattache un **mobile wallet supplémentaire** à un usager qui existe déjà dans GIMpay. Il ne crée pas d'usager : pour le premier instrument, utilisez plutôt [l'enrôlement d'usager](https://sandbox.it-centrex.com/endpoints/users/enroll.md), qui crée l'usager et son instrument en un seul appel.

## Avant d'appeler

**1. L'usager doit exister**

Vous avez besoin de sa `refUsager` (la `refUsagerGIMpay` retournée à l'enrôlement).

**2. Vérifiez que le wallet n'est pas déjà enrôlé**

[`POST /check-existence`](https://sandbox.it-centrex.com/endpoints/wallets/check-existence) et validation de l'OTP.

## Champs

Les cinq champs sont **tous obligatoires** :

| Champ | Rôle |
| - | - |
| `msidn` | Numéro de téléphone du wallet, **sans indicatif** |
| `codeIso` | Code ISO 3166-1 alpha-3 du pays (`CIV`, `SEN`…) |
| `refUsager` | Référence GIMpay de l'usager détenteur |
| `refContributeurDemandeur` | Vous, le contributeur qui demande l'enrôlement |
| `refContributeurEmetteur` | L'opérateur détenteur du wallet |

> [!WARNING]
>
> Ici `msidn` est le numéro **sans** indicatif, alors que dans l'objet `wallet` de [l'enrôlement d'usager](https://sandbox.it-centrex.com/endpoints/users/enroll.md) le champ `msisdn` attend le **numéro complet, indicatif inclus**.

> [!NOTE]
>
> La longueur attendue varie par pays (champ `longueurmsisdn` de [`GET /countries`](https://sandbox.it-centrex.com/api-reference/introduction)) : 10 chiffres pour CIV/BEN, 9 pour SEN/GNB, 8 pour BFA/MLI/NER/TGO (constaté en sandbox le 2026-07-15). Elle n'est **pas vérifiée côté client** par le SDK Flutter — seul le format numérique l'est — le serveur la valide et renvoie un message explicite en cas d'écart.

## Réponses

Le corps utile arrive dans `body`, à l'intérieur de l'enveloppe commune `{ message, status, body, timestamp }`, et contient notamment `refInstrumentPaiement` — la référence de l'instrument nouvellement créé, à conserver.

Un `404` indique qu'une entité renseignée est introuvable : le plus souvent `refUsager` ou l'une des deux références de contributeur.

## Et ensuite ?

> **[Consulter le solde](https://sandbox.it-centrex.com/api-reference/introduction.md)**
>
> `GET /wallets/{referenceWallet}/balance`

> **[Exécuter une opération](https://sandbox.it-centrex.com/endpoints/operations/execute.md)**
>
> Utilisez ce nouvel instrument comme initiateur.


## OpenAPI

````yaml openapi.json POST /api/v1/wallets/mobile-wallet
openapi: 3.0.3
info:
  title: Registre des APIs GIM Gar Sud
  version: 1.0.9-sdk0.3.0
  description: >
    APIs exposées par GIM Gar Sud pour permettre aux Contributeurs Tiers de
    Service Financier (CTSF) de consommer les services de GIMpay : enrôlement
    d'usagers et d'instruments de paiement, opérations financières, OTP,
    consentements, documents d'identité et fidélité.
  contact:
    name: Support intégrateurs GimPay
    email: support@it-centrex.com
servers:
  - url: https://egimgarsud.gimpayapp.com
    variables:
      environnement:
        default: egimgarsud
        description: Sous-domaine de l'environnement (sandbox ou production).
security:
  - bearerAuth: []
tags:
  - name: Authentification
  - name: Wallets
    description: Instruments de paiement (cartes, comptes bancaires, mobile wallets)
  - name: Opérations
  - name: OTP
  - name: Usagers
  - name: Bénéficiaires
  - name: MMP favorites
  - name: Pays
  - name: Contributeurs
  - name: Mini-places de marché
  - name: Services
  - name: Terminaux
  - name: Documents
  - name: Consentements & demandes
paths:
  /api/v1/wallets/mobile-wallet:
    post:
      tags:
        - Wallets
      summary: Enrôler un Mobile Wallet
      operationId: enrollMobileWallet
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EnrollMobileWalletRequest'
      responses:
        '200':
          description: Mobile Wallet enrôlé.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ApiEnvelope'
                  - type: object
                    properties:
                      body:
                        $ref: '#/components/schemas/EnrollMobileWalletResponse'
        '400':
          $ref: '#/components/responses/Error400'
        '401':
          $ref: '#/components/responses/Error401'
        '500':
          $ref: '#/components/responses/Error500'
components:
  schemas:
    EnrollMobileWalletRequest:
      type: object
      required:
        - codeIso
        - msisdn
        - refContributeurDemandeur
        - refContributeurEmetteur
        - refUsager
      properties:
        codeIso:
          type: string
          example: CIV
          description: Le code ISO de l'instrument de paiement à enrôler
        msisdn:
          type: string
          description: Numéro mobile money (typo `msisdn` conforme au contrat).
        refContributeurDemandeur:
          type: string
          description: >-
            La référence du contributeur demandeur qui demande l'enrôlement de
            l'instrument de paiement
        refContributeurEmetteur:
          type: string
          description: >-
            La référence du contributeur émetteur de l'instrument de paiement à
            enrôler
        refUsager:
          type: string
          description: La reference de l'usager
    ApiEnvelope:
      type: object
      description: Enveloppe standard de toutes les réponses (sauf auth).
      properties:
        message:
          type: string
          description: Message technique décrivant le résultat de l'appel.
        status:
          type: integer
          description: Code de statut HTTP de la réponse.
        timestamp:
          type: string
          format: date-time
          description: Horodatage de la réponse.
    EnrollMobileWalletResponse:
      type: object
      properties:
        refUsager:
          type: string
          description: La reference de l'usager
        libelle:
          type: string
          description: Libellé de l'opération
        msisdn:
          type: string
          description: Le MSISDN de l'instrument de paiement à enrôler
        reference:
          type: string
          description: Référence unique de la demande.
    ErrorEnvelope:
      allOf:
        - $ref: '#/components/schemas/ApiEnvelope'
        - type: object
          properties:
            body:
              nullable: true
  responses:
    Error400:
      description: Requête invalide (champ manquant ou mal formé).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    Error401:
      description: Non autorisé — jeton manquant, invalide ou expiré.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    Error500:
      description: Erreur interne du serveur.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Jeton émis par `POST /api/v1/auth/token`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.