List transfer batches

Lists transfer batches for the authenticated organization or project scope.

GET/v1/payments/transfer-batchesRun in dashboard

Requires an API key with the transfer_batches.read action.

Query parameters

  • sourceCustodyWalletId · string · min length 1 · example cwlt_example

    Filter by exact source SDP Wallet ID.

  • token · string · example SOL

    Filter by token symbol or mint.

  • status · string · one of pending, processing, confirmed, failed, partially_failed, archived · example processing

    Filter by transfer batch status.

  • externalId · string · min length 1 · max length 256 · example payroll_2026_06_30

    Filter by caller-provided batch correlation ID.

  • page · integer · greater than 0 · default 1 · example 1

    Page number (1-based).

  • pageSize · integer · min 1 · max 100 · default 20 · example 20

    Number of batches per page.

Headers

  • x-project-id · string · min length 1 · example prj_example

    Required for dashboard sessions. API keys use their assigned project.

Responses

  • 200 Transfer batch list

    • data · object[] · required

      • id · string · required · example xbatch_example

        Transfer batch identifier.

      • organizationId · string · required · min length 1 · example org_example

        Organization identifier.

      • projectId · string · required · min length 1 · example prj_example

        Project identifier for the transfer batch.

      • externalId · string | null · required · example payroll_2026_06_30

        Caller-provided batch correlation ID.

      • sourceCustodyWalletId · string | null · required · example cwlt_example

        Exact source SDP Wallet ID, or null for unresolved legacy batches.

      • sourceProviderWalletId · string · required · min length 1 · example privy_wallet_123

        Source Provider wallet ID retained as evidence.

      • sourceAddress · string · required · min length 32 · max length 44 · example So11111111111111111111111111111111111111112

        Source custody wallet address.

      • token · string · required · example SOL

        Token symbol or mint address.

      • status · string · required · one of pending, processing, confirmed, failed, partially_failed, archived · example processing

        Transfer batch status.

      • totalAmount · string | null · required · example 1000.00

        Total requested batch amount in UI units, when computed.

      • recipientCount · integer · required · example 20

        Number of recipient rows in the batch.

      • transactionCount · integer · required · example 1

        Number of Solana transaction chunks for the batch.

      • createdAt · string · required · format date-time · example 2025-01-01T00:00:00.000Z

        ISO 8601 timestamp.

      • updatedAt · string · required · format date-time · example 2025-01-01T00:00:00.000Z

        ISO 8601 timestamp.

    • meta · object · required

      Pagination metadata.

      • total · integer · required · min 0

        Total items.

      • page · integer · required · greater than 0

        Current page number.

      • pageSize · integer · required · greater than 0

        Items per page.

      • hasMore · boolean · required

        Whether more pages exist.

      • requestId · string · required · min length 1 · example req_example

        Request identifier for tracing.

  • 400 Bad Request

    • error · object · required

      Standard error payload.

      • code · string · required

        Machine-readable error code.

      • message · string · required

        Human-readable error message.

      • details · object

        Optional error details for debugging.

        • * · any
    • meta · object

      • requestId · string · min length 1 · example req_example

        Request identifier for tracing.

  • 401 Unauthorized

    Same fields as 400.

  • 403 Forbidden. Requires the transfer_batches.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.

    Same fields as 400.

  • 404 Not Found

    Same fields as 400.

  • 409 Conflict

    Same fields as 400.

  • 500 Internal Server Error

    Same fields as 400.

Example request

curl 'https://api.solana.com/v1/payments/transfer-batches' \
  -H "Authorization: Bearer $SDP_API_KEY"

Example responses

{
  "data": [
    {
      "id": "xbatch_example",
      "organizationId": "org_example",
      "projectId": "prj_example",
      "externalId": "payroll_2026_06_30",
      "sourceCustodyWalletId": "cwlt_example",
      "sourceProviderWalletId": "privy_wallet_123",
      "sourceAddress": "So11111111111111111111111111111111111111112",
      "token": "SOL",
      "status": "processing",
      "totalAmount": "1000.00",
      "recipientCount": 20,
      "transactionCount": 1,
      "createdAt": "2025-01-01T00:00:00.000Z",
      "updatedAt": "2025-01-01T00:00:00.000Z"
    }
  ],
  "meta": {
    "total": 1,
    "page": 1,
    "pageSize": 1,
    "hasMore": false,
    "requestId": "req_example"
  }
}

Error responses use the standard error shape.

Is this page helpful?