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

# Calculer le prix d'un paiement (bêta)

> Calcule le prix d'un paiement avant de le demander, à votre prix : ce que paie votre client, les frais et ce que vous recevez,
selon qui paie les frais. Rien n'est créé.




## OpenAPI

````yaml /fr/openapi.yaml post /mobile-money/quote
openapi: 3.1.0
info:
  title: API KemyPay
  version: '1.0'
  description: >
    KemyPay vous permet d'encaisser des paiements mobile money dans 12 pays
    d'Afrique avec une seule API, avec un solde par

    service, par pays et par devise.


    Chaque requête est authentifiée par une clé API secrète (`sk_live_…` ou
    `sk_test_…`) et doit venir d'une de

    vos adresses IP autorisées. Les réponses utilisent la même enveloppe : `{
    "success": true, "data": …, "meta": … }`, ou

    `{ "success": false, "error": { "code", "message", "details" }, "meta": …
    }`.


    Les encaissements, le calcul de prix et la devinette de l'opérateur sont en
    **bêta** : ils sont en cours de déploiement en production.
  contact:
    name: KemyPay Support
    email: hi@kemypay.com
servers:
  - url: https://api.kemypay.com/v1
    description: Production
security:
  - BearerAuth: []
tags:
  - name: Catalog
    description: Pays, opérateurs, prix et catégories de service
  - name: Services
    description: Vos services (un par application ou activité), validés par notre équipe
  - name: Collections
    description: Encaisser un paiement depuis le compte mobile money d'un client (bêta)
  - name: Balances
    description: Un solde par service, par pays et par devise
paths:
  /mobile-money/quote:
    post:
      tags:
        - Collections
      summary: Calculer le prix d'un paiement (bêta)
      description: >
        Calcule le prix d'un paiement avant de le demander, à votre prix : ce
        que paie votre client, les frais et ce que vous recevez,

        selon qui paie les frais. Rien n'est créé.
      operationId: quoteCollection
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QuoteRequest'
      responses:
        '200':
          description: Le prix du paiement
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    $ref: '#/components/schemas/Quote'
                  meta:
                    $ref: '#/components/schemas/Meta'
        '422':
          $ref: '#/components/responses/ValidationError'
        '503':
          $ref: '#/components/responses/OperatorUnavailable'
components:
  schemas:
    QuoteRequest:
      type: object
      required:
        - operator
        - currency
        - amount
      properties:
        operator:
          type: string
          example: MTN_CMR
        currency:
          type: string
          example: XAF
        amount:
          type: string
          description: La valeur de la marchandise.
          example: '1000'
        fee_bearer:
          type: string
          enum:
            - merchant
            - customer
          description: 'Par défaut : le réglage du `service`, sinon `merchant`.'
        service:
          type: string
          format: uuid
          description: Facultatif. Utilise le `fee_bearer` de ce service.
    Quote:
      type: object
      properties:
        operator:
          type: string
          example: MTN_CMR
        country:
          type: string
          example: CMR
        currency:
          type: string
          example: XAF
        fee_bearer:
          type: string
          example: customer
        value:
          type: string
          example: '1000'
        customer_pays:
          type: string
          example: '1033'
        fee:
          type: string
          example: '33'
        merchant_receives:
          type: string
          example: '1000'
        within_limits:
          type: boolean
          description: >-
            `false` si `customer_pays` est en dehors du minimum et du maximum de
            l'opérateur.
          example: true
    Meta:
      type: object
      properties:
        request_id:
          type: string
          example: a4f8e2c1b3d97056
        timestamp:
          type: string
          format: date-time
          example: '2026-10-29T10:00:00+00:00'
        mode:
          type: string
          enum:
            - test
            - live
          example: live
    Error:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: object
          properties:
            code:
              type: string
              example: VALIDATION_ERROR
            message:
              type: string
              example: Some fields of the payment are missing or invalid.
            details:
              type: object
              additionalProperties: true
              example:
                phone_number: >-
                  Required: the mobile money number with the country code,
                  digits only, for example 237670000000.
        meta:
          $ref: '#/components/schemas/Meta'
  responses:
    ValidationError:
      description: >-
        `VALIDATION_ERROR` : un ou plusieurs champs manquent ou sont invalides.
        `details` explique chaque champ.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    OperatorUnavailable:
      description: >-
        `OPERATION_FAILED` : l'opérateur est fermé aux encaissements en ce
        moment. Proposez un autre opérateur.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            success: false
            error:
              code: OPERATION_FAILED
              message: >-
                ORANGE_CMR is temporarily unavailable for collections. Offer
                another operator or try again later.
              details:
                failure_code: operator_unavailable
            meta:
              request_id: a4f8e2c1b3d97056
              timestamp: '2026-10-29T10:00:00+00:00'
              mode: live
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >-
        Votre clé API secrète : `sk_live_…` (argent réel) ou `sk_test_…` (mode
        test).

````

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