---
title: "List payment methods for a customer"
method: GET
path: "/customers/{customer_id}/payment-methods"
tags: ["Payment methods"]
---

# List payment methods for a customer

`GET /customers/{customer_id}/payment-methods`

## Request

- Base URL: `https://sandbox-api.paddle.com`
- URL: `https://sandbox-api.paddle.com/customers/{customer_id}/payment-methods`
- Auth: HTTP bearer

Returns a paginated list of payment methods that a customer has saved.  Use the query parameters to page through results.

Customers can choose to save payment methods when purchasing one-time items and subscriptions by checking a box when completing checkout. You can present customers with their saved payment methods when they make a purchase in the future.

Returns an empty list where customers have not saved any payment methods, or have deleted all previously saved payment methods.

## Path parameters

- `customer_id` string, required: Unique Paddle ID for this customer entity, prefixed with `ctm_`.

## Query parameters

- `after` string
- `per_page` integer
- `address_id` string[]
- `order_by` string
- `supports_checkout` boolean

## Headers

- `Skip-Count` string

## Response `200`

The request has succeeded.

- object
  - `data` CustomerPaymentMethod[], required
    - `id` string, required: Unique Paddle ID for this payment method entity, prefixed with `paymtd_`.
    - `customer_id` string, required: Unique Paddle ID for this customer entity, prefixed with `ctm_`.
    - `address_id` string, required: Unique Paddle ID for this address entity, prefixed with `add_`.
    - `type` 'alipay' | 'apple_pay' | 'blik' | 'card' | 'google_pay' | 'kakao_pay' | 'korea_local' | 'south_korea_local_card' | 'mb_way' | 'naver_pay' | 'payco' | 'paypal' | 'pix' | 'samsung_pay' | 'upi' | 'wechat_pay', required: Type of payment method saved.
    - `card` Card, required: Card metadata
      - `type` 'american_express' | 'diners_club' | 'discover' | 'jcb' | 'mada' | 'maestro' | 'mastercard' | 'union_pay' | 'unknown' | 'visa', required: Type of credit or debit card used to pay.
      - `last4` string, required: Last four digits of the card used to pay.
      - `expiry_month` integer, required: Month of the expiry date of the card used to pay.
      - `expiry_year` integer, required: Year of the expiry date of the card used to pay.
      - `cardholder_name` string, required: The name on the card used to pay.
    - `paypal` Paypal, required: PayPal metadata
      - `email` string, required: Email address associated with the PayPal account.
      - `reference` string, required: PayPal payment method identifier.
    - `underlying_details` UnderlyingDetails: Information about the underlying payment method used to pay. Populated for payment methods that offer multiple payment options, like `korea_local`. Deprecated - use top-level type objects instead.
      - `korea_local` KoreaLocalUnderlyingDetails, required: Information about the Korean payment method used to pay. `null` unless the type is `korea_local`. Deprecated - use top-level type objects instead.
        - `type` 'bc' | 'citi' | 'hana' | 'hyundai' | 'jeju' | 'jeonbuk' | 'kakaobank' | 'kakaopay' | 'kbank' | 'kdbbank' | 'kookmin' | 'kwangju' | 'lotte' | 'mg' | 'naverpaycard' | 'naverpaypoint' | 'nh' | 'payco' | 'post' | 'samsung' | 'samsungpay' | 'savingsbank' | 'shinhan' | 'shinhyup' | 'suhyup' | 'tossbank' | 'unknown' | 'woori', required: Type of Korean payment method used to pay. Deprecated - use top-level type objects instead.
    - `south_korea_local_card` SouthKoreaLocalCard, required: Information about the Korean credit or debit card used to pay.
      - `type` 'bc' | 'citi' | 'hana' | 'hyundai' | 'jeju' | 'jeonbuk' | 'kakaobank' | 'kbank' | 'kdbbank' | 'kookmin' | 'kwangju' | 'lotte' | 'mg' | 'nh' | 'post' | 'samsung' | 'savingsbank' | 'shinhan' | 'shinhyup' | 'suhyup' | 'tossbank' | 'unknown' | 'woori': Type of Korean credit or debit card used to pay.
      - `last4` string: Last four digits of the card used to pay.
    - `origin` 'saved_during_purchase' | 'subscription' | 'subscription_saved_during_purchase', required: Describes how this payment method was saved.
    - `saved_at` string, date-time, required: RFC 3339 datetime string of when this entity was saved. Set automatically by Paddle.
    - `updated_at` string, date-time, required: RFC 3339 datetime string of when this entity was updated. Set automatically by Paddle.
  - `meta` PaginatedMeta, required: Information about this response.
    - `request_id` string, required: Unique ID for the request relating to this response. Provide this when contacting Paddle support about a specific request.
    - `pagination` Pagination, required: Keys used for working with paginated results.
      - `per_page` integer, required: Number of entities per page for this response. May differ from the number requested if the requested number is greater than the maximum.
      - `next` string, uri, required: URL containing the query parameters of the original request, along with the `after` parameter that marks the starting point of the next page. Always returned, even if `has_more` is `false`.
      - `has_more` boolean, required: Whether this response has another page.
      - `estimated_total` integer: Estimated number of entities for this response. For datasets with 100,000 or fewer matches, returns the exact count. For datasets with more than 100,000 matches, returns `100001` to indicate that more than 100,000 entities match. Returns `-1` when counting is skipped or couldn't be calculated. Use `has_more` and `next` to page through all results rather than relying on `estimated_total` for an exact count.

## Other responses

- `default`: An unexpected error response.

## Changes

- **2026-10-19** (v1) `4f35a8c6ea4d`: 3 info
  - response property `data/items/underlying_details/anyOf[subschema #1: PaymentMethodUnderlyingDetails]/korea_local/anyOf[subschema #1: Korean market underlying details]/` deprecated
  - response property `data/items/underlying_details/anyOf[subschema #1: PaymentMethodUnderlyingDetails]/korea_local/anyOf[subschema #1: Korean market underlying details]/type` deprecated
  - response property `data/items/underlying_details/anyOf[subschema #1: PaymentMethodUnderlyingDetails]/korea_local/anyOf[subschema #1: Korean market underlying details]/type/allOf[subschema #1: Korean market underlying payment method type]/` deprecated
- **2026-07-09** (v1) `e1ac347eb3c5`: 1 breaking, 1 info
  - added the pattern `^ctm_[a-z\d]{26}$` to the `path` request parameter `customer_id`
  - added the new optional `header` request parameter `Skip-Count`
- **2026-02-02** (v1) `9ba8be0f2006`: 13 breaking, 1 warning, 44 info
  - added the new path request parameter `customer_id`
  - the `data/items/address_id` response's property type changed from `string` to no type for status `200`
  - the `data/items/customer_id` response's property type changed from `string` to no type for status `200`
  - the `data/items/id` response's property type changed from `string` to no type for status `200`
  - …54 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/paddlehq/apis/paddle-api/changes/customers/:customer_id/payment-methods/get.md)

---

[API](https://skmtc.dev/paddlehq/apis/paddle-api.md) - [All operations](https://skmtc.dev/paddlehq/apis/paddle-api/llms.txt) - [OpenAPI document](https://skmtc.dev/paddlehq/apis/paddle-api/revisions/bbc0c72039c8?raw)
