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

# Calculer les frais d'un service

> Simuler les frais applicables à une opération sur un service donné, avant de l'exécuter.

Cet appel **simule** les frais d'une opération sans rien engager. Il est indispensable avant [d'exécuter une opération](/endpoints/operations/execute) : il ne vous donne pas seulement un montant, mais aussi le **mode d'application** qui détermine le montant à envoyer ensuite.

## Exploiter `modeApplication`

La réponse contient `montantFrais`, `referenceService` et surtout `modeApplication`, qui change la façon dont vous devez calculer le montant de l'opération :

| `modeApplication` | Signification                                | Montant à envoyer à `POST /operations`                  |
| ----------------- | -------------------------------------------- | ------------------------------------------------------- |
| `ADDITION`        | Les frais **s'ajoutent** au montant initial  | Le montant net souhaité — le débit total sera supérieur |
| `SOUSTRACTION`    | Les frais sont **déduits** du montant envoyé | Le montant total — le bénéficiaire recevra moins        |

<Note>
  Contrôlez le solde de l'instrument initiateur **après** ce calcul, pas avant : en mode `ADDITION`, un solde qui couvre le montant saisi peut ne pas couvrir le débit réel.
</Note>

## Réponses

Le corps utile arrive dans `body`, à l'intérieur de l'enveloppe commune `{ message, status, body, timestamp }`. `montantFrais` est exprimé en FCFA.

Un `400` signale un `referenceService` manquant ou un montant incorrect. Un `404` indique un service introuvable : récupérez les références valides via `GET /mmps/{referenceMmp}/services`.

## Et ensuite ?

<CardGroup cols={2}>
  <Card title="Exécuter l'opération" icon="arrows-rotate" href="/endpoints/operations/execute">
    Appliquez le mode de frais au montant transmis.
  </Card>

  <Card title="Glossaire" icon="book" href="/glossary/enumerations#modeapplication">
    Les valeurs de `modeApplication`.
  </Card>
</CardGroup>


## OpenAPI

````yaml openapi.json GET /api/v1/services/{referenceService}/fees
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/services/{referenceService}/fees:
    get:
      tags:
        - Services
      summary: Calculer les frais d'un service
      operationId: calculateFees
      parameters:
        - name: referenceService
          in: path
          required: true
          schema:
            type: string
          description: Référence unique du service.
        - name: amount
          in: query
          required: true
          schema:
            type: number
            format: double
            example: 10000
          description: Montant de l'opération pour lequel calculer les frais.
      responses:
        '200':
          description: Frais calculés.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ApiEnvelope'
                  - type: object
                    properties:
                      body:
                        $ref: '#/components/schemas/FraisResponse'
        '400':
          $ref: '#/components/responses/Error400'
        '401':
          $ref: '#/components/responses/Error401'
        '500':
          $ref: '#/components/responses/Error500'
components:
  schemas:
    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.
    FraisResponse:
      type: object
      properties:
        montantFrais:
          type: number
          format: double
        modeApplication:
          $ref: '#/components/schemas/ModeApplicationFrais'
    ModeApplicationFrais:
      type: string
      description: SOUSTRACTION = frais déduits du montant ; ADDITION = frais ajoutés.
      enum:
        - SOUSTRACTION
        - ADDITION
    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`.

````