> ## Documentation Index
> Fetch the complete documentation index at: https://docs.djonanko.ci/llms.txt
> Use this file to discover all available pages before exploring further.

# Demander un reversement

> Crée une demande de reversement de votre solde vers votre **compte principal de reversement**.
Montant minimum : **500 FCFA**. La demande passe en `PENDING` jusqu'à validation par Djonanko.

Si aucun compte principal n'est enregistré, vous devez fournir `destination` et `operator`.




## OpenAPI

````yaml /openapi.yaml post /web-merchant/request-disbursement
openapi: 3.1.0
info:
  title: Djonanko Pay API
  version: 1.0.0
  description: >
    API de la passerelle de paiement mobile money **Djonanko Pay**.


    Deux modes d'authentification coexistent :


    - **Clé API** (`x-api-key` + `x-api-secret`) — pour l'intégration serveur à
    serveur :
      création de liens de paiement et de QR codes.
    - **Jeton marchand** (`authenticationtoken`) — un JWT obtenu via `POST
    /user/login-merchant`,
      utilisé par le dashboard marchand pour tout le reste (statut, solde, reversements, rapports…).

    Toutes les réponses sont en JSON. Les montants sont exprimés en **FCFA (XOF
    / XAF)** sans décimales.
  contact:
    name: Support Djonanko
    url: https://www.djonanko.ci/#contact
servers:
  - url: https://apidjonanko.tech
    description: Production
security: []
tags:
  - name: Authentification
  - name: Paiements
  - name: Solde & statistiques
  - name: Webhooks
  - name: Reversements
  - name: Sécurité
  - name: Rapports
  - name: Compte marchand
paths:
  /web-merchant/request-disbursement:
    post:
      tags:
        - Reversements
      summary: Demander un reversement
      description: >
        Crée une demande de reversement de votre solde vers votre **compte
        principal de reversement**.

        Montant minimum : **500 FCFA**. La demande passe en `PENDING` jusqu'à
        validation par Djonanko.


        Si aucun compte principal n'est enregistré, vous devez fournir
        `destination` et `operator`.
      operationId: requestDisbursement
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - reference
                - amount
              properties:
                reference:
                  type: string
                  description: Référence du marchand.
                  example: beautyshop
                amount:
                  type: number
                  minimum: 500
                  description: Montant en FCFA (≥ 500 et ≤ solde disponible).
                  example: 50000
                destination:
                  type: string
                  description: Numéro cible. **Ignoré** si un compte principal existe.
                  example: '+2250700000000'
                country:
                  type: string
                  example: CI
                operator:
                  type: string
                  description: >-
                    `orange`, `moov`, `mtn` ou `wave`. **Ignoré** si un compte
                    principal existe.
                  example: wave
      responses:
        '201':
          description: Demande créée.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Disbursement'
        '400':
          description: Montant trop faible, solde insuffisant ou aucun compte principal.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                solde:
                  value:
                    statusCode: 400
                    message: >-
                      Solde insuffisant : votre solde disponible est de 12 000
                      FCFA
                    error: Bad Request
                minimum:
                  value:
                    statusCode: 400
                    message: Le montant minimum est de 500 FCFA
                    error: Bad Request
                compte:
                  value:
                    statusCode: 400
                    message: >-
                      Aucun moyen principal de reversement n'est enregistré.
                      Ajoutez un contact principal dans « Gestion des comptes ».
                    error: Bad Request
        '401':
          $ref: '#/components/responses/Unauthorized'
      security:
        - MerchantToken: []
components:
  schemas:
    Disbursement:
      type: object
      properties:
        id:
          type: string
          format: uuid
        reference:
          type: string
          description: Référence du marchand.
          example: beautyshop
        amount:
          type: number
          example: 50000
        destination:
          type: string
          description: Numéro mobile money ou numéro de compte bancaire cible.
          example: '+2250700000000'
        country:
          type: string
          example: CI
        operator:
          type: string
          description: Type du compte cible (`orange`, `moov`, `mtn`, `wave`, `bank`).
          example: wave
        status:
          $ref: '#/components/schemas/DisbursementStatus'
        payoutAccountId:
          type: string
          nullable: true
        payoutDetails:
          type: object
          nullable: true
          description: Instantané du compte de reversement au moment de la demande.
        failureReason:
          type: string
          nullable: true
        processedManually:
          type: boolean
        validatedAt:
          type: string
          format: date-time
          nullable: true
        completedAt:
          type: string
          format: date-time
          nullable: true
        merchantName:
          type: string
          nullable: true
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    Error:
      type: object
      properties:
        statusCode:
          type: integer
          example: 401
        message:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
          example: Invalid API credentials
        error:
          type: string
          example: Unauthorized
    DisbursementStatus:
      type: string
      enum:
        - PENDING
        - PROCESSING
        - SUCCESS
        - FAILED
      description: |
        - `PENDING` — demande créée, en attente de validation par Djonanko.
        - `PROCESSING` — validée, transfert lancé chez l'opérateur.
        - `SUCCESS` — fonds reçus sur le compte de reversement.
        - `FAILED` — transfert échoué (voir `failureReason`).
  responses:
    Unauthorized:
      description: Identifiants manquants ou invalides.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            statusCode: 401
            message: Invalid API credentials
            error: Unauthorized
  securitySchemes:
    MerchantToken:
      type: apiKey
      in: header
      name: authenticationtoken
      description: >-
        JWT obtenu via `POST /user/login-merchant`. À passer tel quel, **sans**
        préfixe `Bearer`.

````