> ## 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.

# Créer votre compte

> Crée votre compte, son portefeuille et votre première paire de clés.

L'en-tête `x-admission-token` est obligatoire : il vous est transmis par votre
référent Djonanko après accord. Cet endpoint n'est pas ouvert au public.

<Warning>
`apiSecret` et `webhookSecret` ne sont affichés **qu'une seule fois**.
Enregistrez-les immédiatement dans votre gestionnaire de secrets — ils ne sont
pas récupérables. En cas de perte, il faut émettre une nouvelle clé et faire
tourner le secret de signature.
</Warning>

Le compte naît en statut `PENDING` : vous pouvez authentifier, consulter votre
solde, configurer vos notifications et déclarer vos adresses IP, mais **pas
encore opérer**. L'activation intervient après validation de votre dossier.




## OpenAPI

````yaml /openapi-guichet.yaml post /merchants/signup
openapi: 3.1.0
info:
  title: Djonanko Guichet API
  version: 1.0.0
  description: >
    API d'agrégation mobile money de Djonanko. Elle permet à une entreprise

    partenaire d'**encaisser** (`cash-in`) et de **transférer** (`cash-out`) sur
    les

    réseaux mobile money d'Afrique de l'Ouest et du Centre, directement depuis
    ses

    propres serveurs.


    Contrairement à l'API Djonanko Pay, le Guichet ne passe **ni par un lien de

    paiement ni par une page hébergée** : vous appelez l'API, le client est
    sollicité

    sur son téléphone, et vous recevez l'issue par notification signée.


    ### Ce qu'il faut retenir avant de commencer


    - **Authentification** : `x-api-key` + `x-api-secret` sur chaque appel.

    - **Montants entiers** : le XOF, le XAF et le GNF n'ont pas de sous-unité.
      `5000` vaut 5 000 FCFA. Aucune décimale n'est acceptée.
    - **Idempotence obligatoire** : l'en-tête `Idempotency-Key` est exigé sur
      `POST /cashin` et `POST /cashout`.
    - **Un portefeuille unique** par compte : les encaissements le créditent,
    les
      transferts le débitent.
    - **Notifications signées** : vérifiez l'en-tête `Djonanko-Signature` avant
    de
      traiter.

    Toutes les réponses sont en JSON. Chaque réponse porte un en-tête

    `x-request-id` à citer dans vos demandes de support.
  contact:
    name: Support Djonanko
    url: https://www.djonanko.ci/#contact
servers:
  - url: https://guichet.apidjonanko.tech/v1
    description: Production
security:
  - ApiKey: []
    ApiSecret: []
tags:
  - name: Encaissement
    description: Débiter un compte mobile money vers votre portefeuille.
  - name: Transfert
    description: Créditer un compte mobile money depuis votre portefeuille.
  - name: Opérations
    description: Consulter l'état et l'historique de vos opérations.
  - name: Portefeuille
    description: Solde et relevé des mouvements.
  - name: Compte
    description: Création de compte, profil, clés d'API.
  - name: Sécurité
    description: Adresses IP autorisées.
  - name: Notifications
    description: Configuration, supervision et rejeu des notifications sortantes.
paths:
  /merchants/signup:
    post:
      tags:
        - Compte
      summary: Créer votre compte
      description: >
        Crée votre compte, son portefeuille et votre première paire de clés.


        L'en-tête `x-admission-token` est obligatoire : il vous est transmis par
        votre

        référent Djonanko après accord. Cet endpoint n'est pas ouvert au public.


        <Warning>

        `apiSecret` et `webhookSecret` ne sont affichés **qu'une seule fois**.

        Enregistrez-les immédiatement dans votre gestionnaire de secrets — ils
        ne sont

        pas récupérables. En cas de perte, il faut émettre une nouvelle clé et
        faire

        tourner le secret de signature.

        </Warning>


        Le compte naît en statut `PENDING` : vous pouvez authentifier, consulter
        votre

        solde, configurer vos notifications et déclarer vos adresses IP, mais
        **pas

        encore opérer**. L'activation intervient après validation de votre
        dossier.
      operationId: signup
      parameters:
        - name: x-admission-token
          in: header
          required: true
          description: Jeton d'admission fourni par Djonanko.
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - name
                - email
                - country
              properties:
                name:
                  type: string
                  minLength: 2
                  maxLength: 160
                  description: Nom commercial.
                  example: Wakati Technologies
                legalName:
                  type: string
                  maxLength: 200
                  description: Raison sociale au registre du commerce.
                  example: Wakati Technologies SARL
                email:
                  type: string
                  format: email
                  maxLength: 180
                  description: >
                    Adresse de contact technique. Unique : elle identifie votre
                    compte.
                  example: tech@wakati.ci
                phoneNumber:
                  type: string
                  maxLength: 24
                  example: '+2250700000000'
                country:
                  $ref: '#/components/schemas/Country'
                webhookUrl:
                  type: string
                  format: uri
                  description: >
                    URL HTTPS de réception des notifications. Configurable
                    ensuite via `PATCH /merchants/me`.
                  example: https://wakati.ci/hooks/djonanko
                metadata:
                  type: object
                  additionalProperties: true
      responses:
        '201':
          description: Compte créé.
          content:
            application/json:
              schema:
                type: object
                properties:
                  merchant:
                    $ref: '#/components/schemas/Merchant'
                  credentials:
                    type: object
                    properties:
                      apiKey:
                        type: string
                        example: gk_live_4f7k2m9q1a2b3c4d5e6f7a8b
                      apiSecret:
                        type: string
                        description: Affiché une seule fois.
                        example: gs_live_…
                      environment:
                        type: string
                        enum:
                          - live
                          - test
                  webhookSecret:
                    type: string
                    description: >
                      Secret de signature de vos notifications. Affiché une
                      seule fois.
                    example: whsec_…
                  notice:
                    type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          description: Jeton d'admission invalide (`ADMISSION_DENIED`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      security: []
components:
  schemas:
    Country:
      type: string
      description: Pays, en ISO 3166-1 alpha-2.
      enum:
        - CI
        - BF
        - ML
        - SN
        - TG
        - BJ
        - NE
        - CM
        - GN
      example: CI
    Merchant:
      type: object
      properties:
        reference:
          type: string
          description: Référence publique de votre compte.
          example: PRT-4F7K2M9Q
        name:
          type: string
          example: Wakati Technologies
        legalName:
          type:
            - string
            - 'null'
        email:
          type: string
          format: email
        phoneNumber:
          type:
            - string
            - 'null'
        country:
          $ref: '#/components/schemas/Country'
        status:
          type: string
          description: >
            - `PENDING` — créé, en attente d'activation : vous pouvez consulter
            et
              configurer, mais pas encore opérer
            - `ACTIVE` — opérationnel

            - `SUSPENDED` — bloqué temporairement

            - `CLOSED` — clôturé
          enum:
            - PENDING
            - ACTIVE
            - SUSPENDED
            - CLOSED
        allowedCountries:
          type: array
          description: Pays ouverts sur votre compte.
          items:
            $ref: '#/components/schemas/Country'
        webhookUrl:
          type:
            - string
            - 'null'
        webhookSecretHint:
          type:
            - string
            - 'null'
          description: >
            Huit derniers caractères de votre secret de signature, pour vérifier
            que vous détenez bien la version courante après une rotation.
          example: 9f1c2b7e
        pricing:
          type: object
          properties:
            cashinFeeBps:
              type: integer
              description: Commission d'encaissement en points de base (200 = 2 %).
              example: 200
            cashinFeeFlat:
              type: integer
              description: Part fixe de la commission d'encaissement.
              example: 0
            cashoutFeeBps:
              type: integer
              description: Commission de transfert en points de base (200 = 2 %).
              example: 200
            cashoutFeeFlat:
              type: integer
              example: 0
        limits:
          type: object
          properties:
            minCashinAmount:
              type: integer
              example: 100
            maxCashinAmount:
              type: integer
              example: 2000000
            minCashoutAmount:
              type: integer
              example: 100
            maxCashoutAmount:
              type: integer
              example: 2000000
            dailyCashoutLimit:
              type: integer
              description: Plafond glissant de transfert sur 24 h. `0` = pas de plafond.
              example: 0
        metadata:
          type:
            - object
            - 'null'
          additionalProperties: true
        createdAt:
          type: string
          format: date-time
    Error:
      type: object
      description: Forme de toutes les réponses d'erreur.
      properties:
        success:
          type: boolean
          enum:
            - false
        error:
          type: object
          properties:
            code:
              type: string
              description: >
                Code stable. **Branchez votre logique dessus**, jamais sur
                `message`, qui peut être reformulé.
              example: INSUFFICIENT_BALANCE
            message:
              type: string
              example: Le solde disponible de votre portefeuille est insuffisant.
            details:
              type:
                - object
                - 'null'
              description: Contexte complémentaire, variable selon le code.
              additionalProperties: true
        requestId:
          type: string
          description: Également renvoyé dans l'en-tête `x-request-id`.
          example: 9f1c2b7e-4a5d-4c8f-b0a1-e2d3c4b5a697
        timestamp:
          type: string
          format: date-time
  responses:
    BadRequest:
      description: Requête invalide (`VALIDATION_ERROR`, `IDEMPOTENCY_KEY_REQUIRED`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            success: false
            error:
              code: VALIDATION_ERROR
              message: La requête est invalide.
              details:
                fields:
                  - amount must be an integer number
            requestId: 9f1c2b7e-4a5d-4c8f-b0a1-e2d3c4b5a697
            timestamp: '2026-10-01T10:12:04.000Z'
    TooManyRequests:
      description: Débit dépassé.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: Votre clé publique, préfixée `gk_live_` (ou `gk_test_`).
    ApiSecret:
      type: apiKey
      in: header
      name: x-api-secret
      description: >
        Votre secret, préfixé `gs_live_` (ou `gs_test_`). Affiché une seule
        fois, à l'émission de la clé. Il ne doit jamais quitter vos serveurs.

````

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