---
title: "List payment methods"
method: GET
path: "/api/billing-payment-methods"
tags: ["billing_payment_methods"]
---

# List payment methods

`GET /api/billing-payment-methods`

## Request

- Base URL: `https://beta.getsales.io/id/v1`
- URL: `https://beta.getsales.io/id/v1/api/billing-payment-methods`
- Auth: HTTP bearer and API key in header `Team-SID`

The saved cards, PayPal and wallets of the user paying for the workspace's subscription, live from Paddle, the billing card first (is_default true: the card that last billed the plan). The whole set in one page, no counts block. Brand, last four and expiry only. Empty when the payer has no Paddle customer yet.

Contract:
- MCP tool `list_billing_payment_methods`, registry package `mcp.id/billing_payment_methods`, mount `id.billing`.
- Operation `search`, response envelope `search`.
- Flags: read only.

## Response `200`

`search` success envelope.

- ListBillingPaymentMethodsResponse
  - `success` true, required
  - `operation` 'search', required
  - `items` object[], required
    - `item` object, required
      - `sid` string, required: Paddle's payment method id (paymtd_...).
      - `type` 'card' | 'paypal' | 'apple_pay' | 'google_pay' | 'other', required: card | paypal | apple_pay | google_pay | other.
      - `card_brand` string, nullable, required: visa, mastercard, ...; null off a card.
      - `card_last4` string, nullable, required: The last four digits; null off a card.
      - `card_expiry` string, nullable, required: MM/YY; null off a card.
      - `is_default` boolean, required: true on the card that last billed the workspace's subscription.
      - `origin` 'saved_during_purchase' | 'subscription' | 'subscription_saved_during_purchase', nullable, required: How Paddle came to hold it; null when unknown.
      - `saved_at` string, nullable, required: ISO 8601 UTC; null when Paddle did not say.
    - `included` object, required
  - `pagination` object, required
    - `next_cursor` string, nullable, required
    - `has_more` boolean, required
    - `total_count` integer, nullable, required
  - `applied_filters` object, required
  - `includes` string[], required
  - `meta` object, required
    - `trace_id` string, required: UUID v7; same 128-bit value as the X-Trace-Id header.
    - `span_id` string, required: 16 hex chars, root span of this request.
    - `timestamp` string, required: ISO 8601 UTC (Y-m-dTH:i:sZ), response time.
    - `duration_ms` integer, required: Server-side wall clock.
    - `team_sid` string, nullable: The team this call ran in (the token team, or the team_sid override). Null when unauthenticated; absent from pre-2026-08-20 backends.
    - `actor_type` string, nullable: user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends.
  - `counts` object

## Other responses

- `4XX`: MCP error envelope. `error.code` is one of validation_failed, nothing_to_update, not_found, relation_not_found, invalid_transition, limit_exceeded, payment_required, duplicate_rejected, conflict, delete_blocked, unauthorized, forbidden, rate_limited, not_implemented.
- `5XX`: MCP error envelope with `error.code` internal_error or service_unavailable.

---

[API](https://skmtc.dev/getsales/apis/getsales-public-contract-gs-service-id.md) - [All operations](https://skmtc.dev/getsales/apis/getsales-public-contract-gs-service-id/llms.txt) - [OpenAPI document](https://skmtc.dev/getsales/apis/getsales-public-contract-gs-service-id/revisions/95e48541fe85?raw)
