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

# Moyens de paiement d'un client

> Les cartes et numéros mobile money enregistrés, du plus ancien au plus récent.

Seul votre client ajoute un moyen de paiement, sur la page de paiement ou dans son [espace client](https://docs.mercy-pay.com/subscriptions/billing-portal.md) : il faut sa carte ou son téléphone.


## OpenAPI

````yaml GET /api/v1/customers/{customer}/payment_methods
openapi: 3.1.0
info:
  title: API Mercy Pay
  version: 1.0.0
  description: >-
    Encaissez par mobile money et par carte, facturez en récurrent et versez vos
    fonds. Les montants sont des entiers en unités mineures. Chaque réponse
    porte un en-tête `Request-Id`.
servers:
  - url: https://mercy-pay.com
    description: >-
      Production. La clé choisit l'environnement : `mp_sandbox_…` ou
      `mp_live_…`.
security:
  - bearerAuth: []
tags:
  - name: Compte
  - name: Sessions de paiement
  - name: Paiements
  - name: Remboursements
    description: Rendre un paiement au client, en entier.
  - name: Liens de paiement
  - name: Plans
  - name: Abonnements
  - name: Clients
  - name: Factures
  - name: Espace client
  - name: Soldes
  - name: Retraits
  - name: État des opérateurs
  - name: Événements
    description: Tout ce qui s'est passé sur le compte, envoyé ou non à un endpoint.
  - name: Endpoints de webhook
    description: Les URL de votre serveur qui reçoivent les événements.
paths:
  /api/v1/customers/{customer}/payment_methods:
    get:
      tags:
        - Clients
      summary: Moyens de paiement d'un client
      description: >-
        Les cartes et numéros mobile money enregistrés, du plus ancien au plus
        récent.
      operationId: listCustomerPaymentMethods
      parameters:
        - name: customer
          in: path
          required: true
          schema:
            type: string
          description: Identifiant du client (`cus_…`)
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/StartingAfter'
        - $ref: '#/components/parameters/EndingBefore'
        - $ref: '#/components/parameters/CreatedGte'
        - $ref: '#/components/parameters/CreatedLte'
      responses:
        '200':
          description: Les moyens
          content:
            application/json:
              schema:
                type: object
                properties:
                  object:
                    type: string
                    const: list
                  url:
                    type: string
                  has_more:
                    type: boolean
                  next_cursor:
                    type:
                      - string
                      - 'null'
                    description: À passer en `starting_after` pour la page suivante
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/PaymentMethod'
              example:
                object: list
                url: >-
                  /api/v1/customers/cus_c71d0e5a3b2f4e8a9c1d5f6a7b8c9d01/payment_methods
                has_more: false
                next_cursor: null
                data:
                  - id: pm_8e2f1a7c5d4b4c3e9a1f0b6d2e8c4a15
                    object: payment_method
                    livemode: false
                    created: '2026-11-07T10:00:00+00:00'
                    type: card
                    label: Visa •• 4242
                    brand: visa
                    last4: '4242'
                    exp_month: 9
                    exp_year: 2029
                    country: null
                    provider: null
                    phone_last_digits: null
                    verified: true
                  - id: pm_3a9c6e2d1f8b4d7a8e5c2b4f6a9d1c37
                    object: payment_method
                    livemode: false
                    created: '2026-11-07T10:05:00+00:00'
                    type: mobile_money
                    label: MTN Mobile Money •• 12
                    brand: null
                    last4: null
                    exp_month: null
                    exp_year: null
                    country: CMR
                    provider: MTN_MOMO_CMR
                    phone_last_digits: '12'
                    verified: false
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  parameters:
    Limit:
      name: limit
      in: query
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 20
      description: Nombre d'objets. Voir [Pagination](/developers/pagination)
    StartingAfter:
      name: starting_after
      in: query
      schema:
        type: string
      description: Le `next_cursor` de la page précédente
    EndingBefore:
      name: ending_before
      in: query
      schema:
        type: string
      description: Un id, pour la page qui le précède
    CreatedGte:
      name: created[gte]
      in: query
      schema:
        type: string
      description: Créés à partir de cette date (ISO 8601 ou horodatage Unix)
    CreatedLte:
      name: created[lte]
      in: query
      schema:
        type: string
      description: Créés jusqu'à cette date
  schemas:
    PaymentMethod:
      type: object
      properties:
        id:
          type: string
          description: Identifiant du moyen de paiement (`pm_…`)
        object:
          type: string
          const: payment_method
        livemode:
          type: boolean
          description: '`true` pour de l''argent réel (clé live), `false` en sandbox'
        created:
          type:
            - string
            - 'null'
          format: date-time
          description: Date de création, ISO 8601
        type:
          type: string
          description: Type
          enum:
            - card
            - mobile_money
        label:
          type: string
          description: Libellé lisible, par exemple `Visa •• 4242`
        brand:
          type:
            - string
            - 'null'
          description: 'Carte : marque'
        last4:
          type:
            - string
            - 'null'
          description: 'Carte : 4 derniers chiffres'
        exp_month:
          type:
            - integer
            - 'null'
          description: 'Carte : mois d''expiration'
        exp_year:
          type:
            - integer
            - 'null'
          description: 'Carte : année d''expiration'
        country:
          type:
            - string
            - 'null'
          description: 'Mobile money : pays'
        provider:
          type:
            - string
            - 'null'
          description: 'Mobile money : opérateur'
        phone_last_digits:
          type:
            - string
            - 'null'
          description: >-
            Mobile money : les 2 derniers chiffres. Le numéro complet n'est
            jamais renvoyé.
        verified:
          type: boolean
          description: >-
            `true` dès qu'un paiement a réussi avec ce moyen. Un numéro est
            confirmé ainsi, sans SMS.
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            type:
              type: string
              enum:
                - authentication_error
                - invalid_request_error
                - idempotency_error
                - payment_error
                - rate_limit_error
                - api_error
            code:
              type: string
              description: Code stable, à tester dans votre code
            message:
              type: string
              description: Explication en français, pour un humain
            param:
              type:
                - string
                - 'null'
              description: Le premier champ en cause
            doc_url:
              type: string
              description: Explication de ce code
            request_id:
              type: string
              description: >-
                Identifiant de la requête (`req_…`), aussi dans l'en-tête
                `Request-Id`
            errors:
              type: object
              additionalProperties:
                type: array
                items:
                  type: string
              description: Détail par champ refusé, sur une erreur `422`
      required:
        - error
  responses:
    Unauthorized:
      description: Clé absente, invalide ou révoquée
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              type: authentication_error
              code: api_key_invalid
              message: Clé API invalide.
              param: null
              doc_url: https://docs.mercy-pay.com/developers/errors#api_key_invalid
              request_id: req_01jc8x4m2v7t9qk3n5w6y8z0ab
    NotFound:
      description: Ressource inconnue, ou d'un autre marchand ou environnement
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              type: invalid_request_error
              code: resource_not_found
              message: Ressource introuvable.
              param: null
              doc_url: https://docs.mercy-pay.com/developers/errors#resource_not_found
              request_id: req_01jc8x4m2v7t9qk3n5w6y8z0ab
    RateLimited:
      description: Plus de 60 requêtes par minute avec cette clé
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              type: rate_limit_error
              code: rate_limited
              message: Trop de requêtes.
              param: null
              doc_url: https://docs.mercy-pay.com/developers/errors#rate_limited
              request_id: req_01jc8x4m2v7t9qk3n5w6y8z0ab
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Votre clé API. Utilisez une clé sandbox (`mp_sandbox_…`) pour essayer :
        aucun argent réel ne bouge.

````

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