List transactions
Lists the project's transactions across SDP modules with stable cursor pagination.
GET/Run in dashboard
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, and onramp.read or offramp.read for a ramp transfer; 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.
Requires an API key with the transactions.read action.
Query parameters
-
module·string· alwayspayments -
kind·string -
status·string· one ofpending,succeeded,failed,canceled -
custodyWalletId·string· max length 128 -
counterpartyId·string· max length 128 -
token·string· max length 128 -
search·string· min length 3 · max length 200Prefix match against transaction id, module id, or signature — not a substring search.
-
createdAtFrom·string· formatdate-time -
createdAtTo·string· formatdate-time -
cursor·string -
limit·integer· min 1 · max 100 · default50
Headers
-
x-project-id·string· min length 1 · exampleprj_exampleRequired for dashboard sessions. API keys use their assigned project.
Responses
-
200Unified transactions-
data·object· required-
transactions·object[]· requiredOne of:
-
module: "payments"
-
id·string· required -
moduleId·string· required -
status·string· required · one ofpending,succeeded,failed,canceled -
organizationId·string· required -
projectId·string | null· required -
custodyWalletId·string | null· required -
custodyWalletLabel·string | null· required -
token·string | null· required -
amount·string | null· required -
counterpartyId·string | null· required -
signature·string | null· required -
createdAt·string· required -
module·string· required · alwayspayments -
kind·string· required -
moduleStatus·string· required · one ofpending,processing,confirmed,finalized,failed,awaiting_payment,settling,completed,canceled,expired
-
-
-
nextCursor·string | null· required
-
-
-
400Bad Request-
error·object· requiredStandard error payload.
-
code·string· requiredMachine-readable error code.
-
message·string· requiredHuman-readable error message.
-
details·objectOptional error details for debugging.
*·any
-
-
meta·object-
requestId·string· min length 1 · examplereq_exampleRequest identifier for tracing.
-
-
-
401UnauthorizedSame fields as
400. -
403Forbidden. Requires thetransactions.readaction: an API key must hold it (a module'smanageorexecutealso covers itsread), and a signed-in member's organization role must include it. Without it the error is INSUFFICIENT_PERMISSIONS anderror.details.actionnames the action. Any other 403 names its own reason.Same fields as
400. -
429Too Many RequestsSame fields as
400. -
500Internal Server ErrorSame fields as
400. -
503Service UnavailableSame fields as
400.
Example request
curl 'https://api.solana.com/v1/transactions' \
-H "Authorization: Bearer $SDP_API_KEY"Example responses
{
"data": {
"transactions": [
{
"id": "_example",
"moduleId": "module_example",
"status": "pending",
"organizationId": "organization_example",
"projectId": "project_example",
"custodyWalletId": "custodywallet_example",
"custodyWalletLabel": "example",
"token": "example",
"amount": "example",
"counterpartyId": "counterparty_example",
"signature": "example",
"createdAt": "example",
"module": "payments",
"kind": "example",
"moduleStatus": "pending"
}
],
"nextCursor": "example"
}
}Error responses use the standard error shape.