---
title: "List transactions"
method: GET
path: "/v1/transactions"
tags: ["Payments"]
---

# List transactions

`GET /v1/transactions`

## Request

- Base URL: `http://localhost:8787`
- URL: `http://localhost:8787/v1/transactions`
- Auth: HTTP bearer

Lists the project's transactions across SDP modules with stable cursor pagination. Requires `transactions.read`. Every row also needs the `read` action of the module it comes from (which its `manage` or `execute` includes): a Payments row needs `transfers.read` for a transfer or deposit, `transfer_batches.read` for a batch item, `recurring.read` for a recurring collection, `payment_requests.read` for a payment request's fulfilment; every other module's rows need that module's `read`. Rows the caller cannot read are left out. Requesting a module, or a Payments `kind`, without its action returns 403 INSUFFICIENT_PERMISSIONS naming it. `search` matches transaction id, module id, or signature as a prefix, not a substring. The endpoint is metered (60/min per credential, 240/min per organization); exceeding the quota returns 429, and 503 indicates the quota backend was unavailable.

## Query parameters

- `module` 'payments'
- `kind` string
- `status` 'pending' | 'succeeded' | 'failed' | 'canceled'
- `custodyWalletId` string
- `counterpartyId` string
- `token` string
- `search` string: Prefix match against transaction id, module id, or signature — not a substring search.
- `createdAtFrom` string, date-time
- `createdAtTo` string, date-time
- `cursor` string
- `limit` integer

## Headers

- `x-project-id` string: Required for dashboard sessions. API keys use their assigned project.

## Response `200`

Unified transactions

- object
  - `data` object, required
    - `transactions` object[], required
      - `id` string, required
      - `moduleId` string, required
      - `status` 'pending' | 'succeeded' | 'failed' | 'canceled', required
      - `organizationId` string, required
      - `projectId` string, nullable, required
      - `custodyWalletId` string, nullable, required
      - `custodyWalletLabel` string, nullable, required
      - `token` string, nullable, required
      - `amount` string, nullable, required
      - `counterpartyId` string, nullable, required
      - `signature` string, nullable, required
      - `createdAt` string, required
      - `module` 'payments', required
      - `kind` string, required
      - `moduleStatus` 'pending' | 'processing' | 'confirmed' | 'finalized' | 'failed' | 'awaiting_payment' | 'settling' | 'completed' | 'canceled' | 'expired', required
    - `nextCursor` string, nullable, required

## Other responses

- `400`: Error
- `401`: Error
- `403`: Forbidden. Requires the `transactions.read` action: an API key must hold it (a module's `manage` or `execute` also covers its `read`), and a signed-in member's organization role must include it. Without it the error is INSUFFICIENT_PERMISSIONS and `error.details.action` names the action. Any other 403 names its own reason.
- `429`: Error
- `500`: Error
- `503`: Error

## Changes

- **2026-11-02** `9f0b1d561064`: 6 warning
  - added the new `CUSTODY_POLICY_REFUSED` enum value to the `error/code` response property for the response status `400`
  - added the new `CUSTODY_POLICY_REFUSED` enum value to the `error/code` response property for the response status `401`
  - added the new `CUSTODY_POLICY_REFUSED` enum value to the `error/code` response property for the response status `403`
  - added the new `CUSTODY_POLICY_REFUSED` enum value to the `error/code` response property for the response status `429`
  - …2 more
- **2026-10-30** `f4a0135eca08`: 36 warning
  - added the new `RPC_UNAVAILABLE` enum value to the `error/code` response property for the response status `400`
  - added the new `RPC_UNAVAILABLE` enum value to the `error/code` response property for the response status `401`
  - added the new `RPC_UNAVAILABLE` enum value to the `error/code` response property for the response status `403`
  - added the new `RPC_UNAVAILABLE` enum value to the `error/code` response property for the response status `429`
  - …32 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/solana/apis/solana-developer-platform-api/changes/v1/transactions/get.md)

---

[API](https://skmtc.dev/solana/apis/solana-developer-platform-api.md) - [All operations](https://skmtc.dev/solana/apis/solana-developer-platform-api/llms.txt) - [OpenAPI document](https://skmtc.dev/solana/apis/solana-developer-platform-api/revisions/b329212c2291?raw)
