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

# Listar medios de pago del usuario

> Lista las referencias no sensibles de los medios de pago registrados por un usuario final (via la pagina de enrolamiento de TapiPay). La respuesta no está paginada.



## OpenAPI

````yaml /api-reference/openapi.yaml get /payment-methods
openapi: 3.0.0
info:
  title: TapiPay API
  version: 1.0.0
  description: >
    API pública de la plataforma de cobranzas TapiPay.  Ofrece un contrato
    limpio y desacoplado del modelo interno de la plataforma, permitiendo a los
    clientes crear y gestionar cobros (deudas puntuales,  suscripciones
    recurrentes, links de pago, productos y contactos)  sin conocer detalles
    internos de Company, Modalities o GenerationData.
  contact:
    name: TapiPay Team
    url: https://www.tapipay.com
  license:
    name: Proprietary
servers:
  - url: https://tapipay-facade.homo.tapila.cloud
    description: Homologación
security:
  - apiKeyAuth: []
    tapiAuth: []
paths:
  /payment-methods:
    get:
      tags:
        - Payment methods
      summary: Listar medios de pago del usuario
      description: >-
        Lista las referencias no sensibles de los medios de pago registrados por
        un usuario final (via la pagina de enrolamiento de TapiPay). La
        respuesta no está paginada.
      operationId: listPaymentMethods
      parameters:
        - name: externalClientId
          in: query
          required: true
          schema:
            type: string
          description: >-
            Tu identificador del usuario final: exactamente el mismo del
            enrolamiento. No admite los caracteres `'`, `"`, `\`, `;`.
      responses:
        '200':
          description: >-
            Medios de pago del usuario. Si el externalClientId no tiene medios o
            no existe, devuelve 200 con `data: []`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/PaymentMethodRef'
                  requestId:
                    type: string
        '400':
          description: externalClientId faltante o invalido
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: RESOURCE_NOT_FOUND
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: BUSINESS_RULE_VIOLATION
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    PaymentMethodRef:
      type: object
      description: >-
        Referencia no sensible al medio de pago del usuario. Nunca viaja el dato
        real del instrumento (CLABE/PAN), solo su referencia opaca.
      properties:
        paymentMethodId:
          type: string
          description: Referencia opaca al instrumento en el servicio de pago.
          example: 8b2e2a1e-1111-4222-8333-444455556666
        paymentMethodType:
          type: string
          enum:
            - BANK_ACCOUNT
            - YUNO
          description: >-
            BANK_ACCOUNT ejecuta debito automatico; YUNO (tarjeta tokenizada) se
            registra pero no debita en esta version.
        isDefault:
          type: boolean
        status:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
        createdAt:
          type: string
          format: date-time
          nullable: true
          description: Timestamp de registro (ISO 8601 en UTC con milisegundos y Z)
    Error:
      type: object
      required:
        - error
        - requestId
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              enum:
                - INVALID_REQUEST
                - BAD_REQUEST
                - RESOURCE_NOT_FOUND
                - RESOURCE_CONFLICT
                - RESOLUTION_ERROR
                - BUSINESS_RULE_VIOLATION
                - RATE_LIMITED
                - INTERNAL_ERROR
                - PARTIAL_UPDATE
              description: >-
                Código de error estándar. BAD_REQUEST se usa cuando tu cliente
                tiene varias companies y no se envía `companyCode`.
                PARTIAL_UPDATE solo aparece en el 207 de PATCH
                /subscriptions/{id}: la suscripción se actualizó, pero alguna de
                sus deudas no. Los 401 y 403 los emite el API Gateway y no usan
                este envelope (ver GatewayError).
            message:
              type: string
              description: >-
                Mensaje legible del error. Es informativo: no lo parsees, usa
                `code` y `details[].field`.
            details:
              type: array
              description: >-
                Array de detalles adicionales (validaciones por campo, etc.). Un
                JSON malformado devuelve `[{ "field": "body", "issue": "Invalid
                JSON syntax" }]`.
              items:
                type: object
                properties:
                  field:
                    type: string
                    description: Campo que falló la validación
                  issue:
                    type: string
                    description: Descripción del problema
                  index:
                    type: integer
                    description: >-
                      Solo en el modo lote de POST /v2/debts. Posición del item
                      en `debts`.
                  externalRequestId:
                    type: string
                    description: >-
                      Solo en el modo lote de POST /v2/debts. externalRequestId
                      del item.
        requestId:
          type: string
          pattern: ^req_[a-zA-Z0-9]+$
          description: ID único del request para trazabilidad
    GatewayError:
      type: object
      description: >-
        Respuesta de error emitida por el API Gateway, antes de llegar al
        servicio. No lleva el envelope `error` ni `requestId`. Casos: token
        faltante o inválido en `x-authorization-token` devuelve `401 {"message":
        "Unauthorized"}`; `x-api-key` faltante o inválida devuelve `403
        {"message": "Forbidden"}`; token válido sin permiso sobre el recurso
        devuelve `403 {"Message": "User is not authorized to access this
        resource with an explicit deny"}`. Ojo al tipar: en este último caso el
        campo viene con mayúscula (`Message`), no `message`.
      properties:
        message:
          type: string
          example: Unauthorized
        Message:
          type: string
          description: Solo en el 403 de explicit deny (con mayúscula).
          example: User is not authorized to access this resource with an explicit deny
  responses:
    Unauthorized:
      description: >-
        No autenticado. Lo emite el API Gateway cuando falta o es inválido el
        token en `x-authorization-token`. Body `{"message": "Unauthorized"}`,
        sin envelope `error` ni `requestId`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GatewayError'
          example:
            message: Unauthorized
    Forbidden:
      description: >-
        Prohibido. Lo emite el API Gateway, sin envelope `error` ni `requestId`.
        Si falta o es inválida la `x-api-key`, el body es `{"message":
        "Forbidden"}`. Si el token es válido pero no tiene permiso sobre el
        recurso, el body es `{"Message": "User is not authorized to access this
        resource with an explicit deny"}` (campo con mayúscula).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GatewayError'
          examples:
            apiKey:
              summary: x-api-key faltante o inválida
              value:
                message: Forbidden
            explicitDeny:
              summary: Token sin permiso sobre el recurso
              value:
                Message: >-
                  User is not authorized to access this resource with an
                  explicit deny
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >
        API key del API Gateway de Tapi. Requerida en todas las operaciones.
        Distinta por ambiente (desarrollo, homologación, producción).
    tapiAuth:
      type: apiKey
      in: header
      name: x-authorization-token
      description: >
        Token TAPI JWT. Requerido en todas las operaciones. Se envía sin prefijo
        "Bearer". Ej: x-authorization-token: eyJhbGci...

````