---
title: "List paykeys"
method: GET
path: "/v1/paykeys"
tags: ["Paykeys"]
---

# List paykeys

`GET /v1/paykeys`

Returns a list of paykeys associated with a Straddle account. This endpoint supports advanced sorting and filtering options.

## Query parameters

- `customer_id` string, uuid — Filter paykeys by related customer ID.
- `page_number` integer — Page number for paginated results. Starts at 1.
- `page_size` integer — Number of results per page. Maximum: 1000.
- `status` PaykeyStatusV1[] — Filter paykeys by their current status.
- `sort_by` 'institution_name' | 'expires_at' | 'created_at'
- `sort_order` 'asc' | 'desc' | 'Asc' | 'Desc'
- `source` PaykeySourceV1[] — Filter paykeys by their source.

## Headers

- `Straddle-Account-Id` string, uuid
- `Request-Id` string
- `Correlation-Id` string

## Response `200`

OK

- PaykeySummaryV1PagedResponse
  - `meta` PagedResponseMetadata1, required
    - `api_request_id` string, uuid, required — Unique identifier for this API request, useful for troubleshooting.
    - `api_request_timestamp` string, date-time, required — Timestamp for this API request, useful for troubleshooting.
    - `total_items` integer, required
    - `page_number` integer, required — Page number for paginated results.
    - `page_size` integer, required — Number of items per page in this response.
    - `max_page_size` integer, required — Maximum allowed page size for this endpoint.
    - `sort_by` string, required — The field that the results were sorted by.
    - `sort_order` 'asc' | 'desc' | 'Asc' | 'Desc', required
    - `total_pages` integer, required — The number of pages available.
  - `response_type` 'object' | 'array' | 'error' | 'none' | 'Object' | 'Array' | 'Error' | 'None', required — Indicates the structure of the returned content. - "object" means the `data` field contains a single JSON object. - "array" means the `data` field contains an array of objects. - "error" means the `data` field contains an error object with details of the issue. - "none" means no data is returned.
  - `data` PaykeySummaryV1[], required
    - `id` string, uuid, required — Unique identifier for the paykey.
    - `customer_id` string, uuid, nullable — Unique identifier of the related customer object.
    - `label` string, required — Human-readable label that combines the bank name and masked account number to help easility represent this paykey in a UI
    - `source` 'bank_account' | 'straddle' | 'mx' | 'plaid' | 'tan' | 'quiltt', required
    - `institution_name` string, nullable — Name of the financial institution.
    - `status` 'pending' | 'active' | 'inactive' | 'rejected' | 'review' | 'blocked', required
    - `status_details` StatusDetailsV1
      - `message` string, required — A human-readable description of the current status.
      - `reason` 'insufficient_funds' | 'closed_bank_account' | 'invalid_bank_account' | 'invalid_routing' | 'disputed' | 'payment_stopped' | 'owner_deceased' | 'frozen_bank_account' | 'risk_review' | 'fraudulent' | 'duplicate_entry' | 'invalid_paykey' | 'payment_blocked' | 'amount_too_large' | 'too_many_attempts' | 'internal_system_error' | 'user_request' | 'ok' | 'other_network_return' | 'payout_refused' | 'cancel_request' | 'failed_verification' | 'require_review' | 'blocked_by_system' | 'watchtower_review' | 'InsufficientFunds' | 'ClosedBankAccount' | 'InvalidBankAccount' | 'InvalidRouting' | 'Disputed' | 'PaymentStopped' | 'OwnerDeceased' | 'FrozenBankAccount' | 'RiskReview' | 'Fraudulent' | 'DuplicateEntry' | 'InvalidPaykey' | 'PaymentBlocked' | 'AmountTooLarge' | 'TooManyAttempts' | 'InternalSystemError' | 'UserRequest' | 'Ok' | 'OtherNetworkReturn' | 'PayoutRefused', required
      - `source` 'watchtower' | 'bank_decline' | 'customer_dispute' | 'user_action' | 'system' | 'Watchtower' | 'BankDecline' | 'CustomerDispute' | 'UserAction' | 'System', required
      - `code` string, nullable — The status code if applicable.
      - `changed_at` string, date-time, required — The time the status change occurred.
    - `expires_at` string, date-time, nullable — Expiration date and time of the paykey, if applicable.
    - `created_at` string, date-time, required — Timestamp of when the paykey was created.
    - `updated_at` string, date-time, required — Timestamp of the most recent update to the paykey.
    - `bank_data` PaykeyBankDetailsV1
      - `routing_number` string, required — The routing number of the bank account.
      - `account_number` string, required — Bank account number. This value is masked by default for security reasons. Use the /unmask endpoint to access the unmasked value.
      - `account_type` 'checking' | 'savings', required
    - `paykey` string, required — The tokenized paykey value. This value is used to create payments and should be stored securely.
    - `config` PaykeyConfigurationV1, required
      - `sandbox_outcome` 'standard' | 'active' | 'rejected' | 'review'
      - `processing_method` 'inline' | 'background' | 'skip'
    - `external_id` string, nullable — Unique identifier for the paykey in your database, used for cross-referencing between Straddle and your systems.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `422` — Validation Failed
- `500` — Server Error

## Changes

- **2026-01-13** `9fcdff18526e` — 165 warning, 2 info
  - added the new `AmountTooLarge` enum value to the `data/items/status_details/reason` response property for the response status `200` (media type: text/plain)
  - added the new `AmountTooLarge` enum value to the `data/items/status_details/reason` response property for the response status `200` (media type: application/json)
  - added the new `AmountTooLarge` enum value to the `data/items/status_details/reason` response property for the response status `200` (media type: text/json)
  - added the new `Array` enum value to the `response_type` response property for the response status `200` (media type: text/plain)
  - …163 more
- **2026-01-13** `800f2d91f7da` — 2 breaking, 165 info
  - removed the enum value `Asc` from the `query` request parameter `sort_order`
  - removed the enum value `Desc` from the `query` request parameter `sort_order`
  - removed the `AmountTooLarge` enum value from the `data/items/status_details/reason` response property for the response status `200` (media type: text/plain)
  - removed the `AmountTooLarge` enum value from the `data/items/status_details/reason` response property for the response status `200` (media type: application/json)
  - …163 more
- …earlier changes not shown

[Full history](https://skmtc.dev/straddleio/apis/straddle-api/changes/v1/paykeys/get.md)

---

[API](https://skmtc.dev/straddleio/apis/straddle-api.md) · [All operations](https://skmtc.dev/straddleio/apis/straddle-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/straddleio/straddle-api/revisions/9fcdff18526e/schema)
