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

# Lister les transactions

> Listez les transactions du compte avec des filtres, pour une vue d'ensemble ou une réconciliation.

Utile pour une vue d'ensemble ou une réconciliation périodique. Pour vérifier une transaction précise que vous venez de créer, préférez [Consulter une transaction](/api-reference/transactions/consulter-un-paiement), plus direct et qui accepte votre propre `transaction_id`.

* **Filtres.** `query` filtre en texte libre ; les autres paramètres filtrent sur une valeur exacte ou une plage de dates. Ils s'appliquent tous en même temps (ET logique), pas en alternative. L'exemple n'illustre qu'un sous-ensemble : ajoutez ou retirez des paramètres selon vos besoins.
* **Valeurs affichées.** Les valeurs de `status` et `payment_method` (voir les [moyens de paiement](/guides/reversement#frais-par-moyen-de-paiement)) sont mises en forme pour l'affichage et ne correspondent pas aux valeurs machine utilisées par les autres opérations : ne les comparez pas dans votre code, n'utilisez cette liste que pour de l'affichage ou de l'export.
* **Limites.** Aucune limite de débit n'est documentée : à confirmer auprès du support avant un usage intensif. Pour un suivi en temps réel d'une transaction donnée, préférez les [webhooks](/guides/webhooks) à un sondage répété de cette liste.

Messages d'erreur communs : [Erreurs](/api-reference/erreurs).


## OpenAPI

````yaml openapi.yaml GET /payments
openapi: 3.1.0
info:
  title: iPayMoney Merchant API
  version: 1.0.0
  description: >-
    Contrats marchands v1 vérifiés contre les routes, contrôleurs et services
    Rails. Les contrats partenaires et les routes v2 non opérationnelles ne font
    pas partie de cette spécification publique. Les liens de paiement doivent
    utiliser des références aléatoires privées.
servers:
  - url: https://i-pay.money/api/v1
    description: Sandbox ou Live selon les en-têtes et la clé utilisée
security: []
tags:
  - name: Payments
    description: Création et suivi des transactions marchandes
  - name: Payment links
    description: Liens de paiement hébergés
paths:
  /payments:
    get:
      tags:
        - Payments
      summary: Lister les transactions
      description: >-
        Pagination côté serveur : le nombre d'éléments par page se règle avec le
        paramètre `items` (25 par défaut). La réponse reste un tableau JSON
        brut, sans aucune métadonnée de pagination structurée : ni enveloppe
        `meta`, ni en-tête `Link` ou `Total-Count`. Le paramètre de page n'est
        pas documenté par ce contrat, et l'API ne renvoie ni total ni lien de
        page suivante permettant de le construire côté client.
      parameters:
        - $ref: '#/components/parameters/ContentType'
        - $ref: '#/components/parameters/TargetEnvironment'
        - $ref: '#/components/parameters/PaymentType'
        - name: query
          in: query
          schema:
            type: string
        - name: status
          in: query
          schema:
            type: string
            enum:
              - initiated
              - pending
              - succeeded
              - failed
              - refunded
        - name: created_from
          in: query
          schema:
            type: string
            format: date
        - name: created_to
          in: query
          schema:
            type: string
            format: date
        - name: items
          in: query
          schema:
            type: integer
            default: 25
            minimum: 1
      responses:
        '200':
          description: >-
            Liste des transactions (tableau JSON brut, sans enveloppe de
            pagination). Les valeurs de `status` et de `payment_method` y sont
            formatées pour l'affichage (ex. `Succeeded`, `Airtel Ne`) et non
            normalisées : ne pas les comparer aux valeurs de statut utilisées
            par les autres opérations.
          x-verified: >-
            Note interne de vérification (non destinée à la documentation
            publique). Formatage rendu par `payment.displayed_status` et
            `payment.displayed_payment_method` — voir
            app/views/api/v1/payments/_payment.json.jbuilder:3,6.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PaymentListItem'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '406':
          $ref: '#/components/responses/NotAcceptable'
      security:
        - bearerAuth: []
components:
  parameters:
    ContentType:
      name: Content-Type
      in: header
      required: true
      description: >-
        Exigé par l'authentification de l'API, y compris sur les requêtes GET
        qui n'ont pourtant pas de corps.
      schema:
        type: string
        const: application/json
    TargetEnvironment:
      name: Ipay-Target-Environment
      in: header
      required: true
      schema:
        type: string
        enum:
          - sandbox
          - live
    PaymentType:
      name: Ipay-Payment-Type
      in: header
      required: true
      description: >-
        Méthode de paiement. `POST /payments` ne prend en charge que `mobile`
        (mobile money). Les autres moyens de paiement (carte bancaire et autres
        canaux) ne s'utilisent pas ici : ils sont disponibles via les liens de
        paiement (`POST /external_payments`). Liste complète : [moyens de
        paiement](/guides/reversement#frais-par-moyen-de-paiement).
      x-verified: >-
        Note interne de vérification (non destinée à la documentation publique).
        Décision de périmètre : seule la valeur `mobile` est documentée pour
        `POST /payments` ; les autres valeurs traitées par
        `Live::PaymentService` restent acceptées par l'API mais relèvent du
        parcours « lien de paiement ». `external_payment` est réservé à `POST
        /external_payments` (paramètre dédié de cette opération).
      schema:
        type: string
        const: mobile
        example: mobile
  schemas:
    PaymentListItem:
      type: object
      properties:
        id:
          type: integer
        reference:
          type: string
        status:
          type: string
          example: Succeeded
        amount:
          type: integer
        fees:
          type: integer
        payment_method:
          type: string
          example: Airtel Ne
          description: >-
            Moyen de paiement utilisé par le client — voir la liste des [moyens
            de paiement](/guides/reversement#frais-par-moyen-de-paiement).
        net_amount:
          type: integer
        platform:
          type: string
        device:
          type: string
        failure_reason:
          type:
            - string
            - 'null'
        country:
          type: string
        currency:
          type: string
        external_reference:
          type: string
        msisdn:
          type: string
        customer_name:
          type: string
        created_at:
          type: string
          format: date-time
        validated_at:
          type:
            - string
            - 'null'
          format: date-time
    Error:
      type: object
      properties:
        message:
          type: string
        status:
          type: string
          description: >-
            Présent uniquement sur certains échecs applicatifs, ex. paiement
            dupliqué sur `POST /payments` où `status` vaut toujours `failed`.
            Absent des autres erreurs de ce contrat (ex. 404 `Payment Not
            Found`, erreurs d'en-tête/authentification).
          x-verified: >-
            Note interne de vérification (non destinée à la documentation
            publique). Voir `Live::PaymentService#error_response`
            (app/services/live/payment_service.rb:994-1005).
          example: failed
  responses:
    BadRequest:
      description: En-tête ou paramètre invalide, détecté avant toute logique métier.
      x-verified: >-
        Note interne de vérification (non destinée à la documentation publique).
        Détecté par `ApiAuthService#authenticate`
        (app/services/api_auth_service.rb:20-26) — messages exacts vérifiés le
        2026-09-16.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            missingHeaderParams:
              summary: En-tête d'authentification manquant
              value:
                message: 'Bad Request: Missing params'
            notAllowedEnvironment:
              summary: Ipay-Target-Environment non autorisé
              value:
                message: 'Bad Request: Not Allowed Environment'
            notAllowedPaymentType:
              summary: Ipay-Payment-Type non autorisé
              value:
                message: 'Bad Request: Not Allowed Payment Type'
            missingAuthenticationKey:
              summary: Authorization Bearer manquant ou mal formé
              value:
                message: 'Bad Request: Missing Authentication Key'
    Unauthorized:
      description: Clé invalide
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: Compte ou environnement indisponible
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotAcceptable:
      description: Content-Type différent de application/json
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Clé secrète du compte Sandbox ou Live

````