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

# Générer un code OTP

> Envoyer un code à usage unique au numéro rattaché à un instrument de paiement, pour sécuriser une opération de débit.

Cet appel demande au contributeur émetteur d'envoyer un **code à usage unique** au numéro de téléphone associé à l'instrument de paiement. Ce code authentifie l'usager au moment de valider le débit : il constitue l'avant-dernière étape avant [l'exécution de l'opération](/endpoints/operations/execute).

## Où il s'insère dans le parcours

<Steps>
  <Step title="Vous générez l'OTP">
    Cet appel. GIMpay déclenche l'envoi du code vers le téléphone de l'usager.
  </Step>

  <Step title="L'usager saisit le code">
    Dans votre application. GIMpay ne fournit pas d'interface de saisie.
  </Step>

  <Step title="Vous transmettez le code">
    Dans le champ `authData` de [l'exécution de l'opération](/endpoints/operations/execute).
  </Step>
</Steps>

<Note>
  Ne confondez pas cet endpoint avec [la vérification d'un OTP](/endpoints/otp/verify) (`POST /otp/confirm`), qui répond à un besoin distinct : valider un code auprès d'un contributeur tiers dans le cadre d'un enrôlement.
</Note>

## Points de vigilance

<AccordionGroup>
  <Accordion title="L'instrument doit être disponible" icon="triangle-exclamation">
    Un `400` est retourné si `refInstrumentPaiement` est manquant **ou si l'instrument de paiement est indisponible**, par exemple verrouillé ou désenrôlé. Vérifiez son statut au préalable via `GET /wallets/{referenceWallet}/authorization`.
  </Accordion>
</AccordionGroup>

## Réponses

Un `200` confirme que l'OTP a été généré et transmis. Le corps utile est un booléen dans `body`, à l'intérieur de l'enveloppe commune `{ message, status, body, timestamp }`.

Le succès de cet appel signifie que **la demande d'envoi a abouti**, il ne garantit pas la réception effective du SMS par l'usager. Prévoyez dans votre interface une porte de sortie si l'usager ne reçoit rien.

## Et ensuite ?

<CardGroup cols={2}>
  <Card title="Exécuter l'opération" icon="arrows-rotate" href="/endpoints/operations/execute">
    Transmettez le code saisi dans `authData`.
  </Card>

  <Card title="Codes d'erreur" icon="triangle-exclamation" href="/getting-started/errors">
    Signification des `400`, `404` et `500` sur cet endpoint.
  </Card>
</CardGroup>


## OpenAPI

````yaml openapi.json POST /api/v1/otp/debit
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/otp/debit:
    post:
      tags:
        - OTP
      summary: Générer un OTP de débit
      operationId: generateDebitOtp
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OtpDebitRequest'
      responses:
        '200':
          $ref: '#/components/responses/BooleanBody'
        '401':
          $ref: '#/components/responses/Error401'
        '404':
          $ref: '#/components/responses/Error404'
        '500':
          $ref: '#/components/responses/Error500'
components:
  schemas:
    OtpDebitRequest:
      type: object
      required:
        - refInstrumentPaiement
      properties:
        refInstrumentPaiement:
          type: string
          description: >-
            Référence GIMpay de l'instrument de paiement pour lequel générer le
            code OTP.
    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.
    ErrorEnvelope:
      allOf:
        - $ref: '#/components/schemas/ApiEnvelope'
        - type: object
          properties:
            body:
              nullable: true
  responses:
    BooleanBody:
      description: Succès. Le `body` de l'enveloppe est un booléen.
      content:
        application/json:
          schema:
            allOf:
              - $ref: '#/components/schemas/ApiEnvelope'
              - type: object
                properties:
                  body:
                    type: boolean
    Error401:
      description: Non autorisé — jeton manquant, invalide ou expiré.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    Error404:
      description: Ressource introuvable.
      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`.

````