List subscription collection attempts
Lists collection attempts for a recurring-payment subscription.
GET/Run in dashboard
Requires an API key with the recurring.read action.
Path parameters
-
subscriptionId·string· required · min length 1 · examplepsub_exampleSDP subscription record ID.
Query parameters
-
status·string· one ofpending,processing,confirmed,failed,skipped· examplependingCollection attempt status.
-
page·integer· greater than 0 · default1 -
pageSize·integer· min 1 · max 100 · default20
Headers
-
x-project-id·string· min length 1 · exampleprj_exampleRequired for dashboard sessions. API keys use their assigned project.
Responses
-
200Collection attempt list-
data·object· requiredCollection attempt list response payload.
-
collectionAttempts·object[]· required-
id·string· required · examplepsca_exampleCollection attempt ID.
-
organizationId·string· required · min length 1 · exampleorg_exampleOrganization identifier.
-
projectId·string· required · min length 1 · exampleprj_exampleProject identifier.
-
subscriptionId·string· requiredSubscription ID.
-
transferId·string | null· required · min length 1 · examplexfr_examplePayment transfer record ID when linked.
-
token·string· requiredToken mint or normalized token identifier.
-
amount·string· required · example100.00Token amount in UI units (decimal string).
-
dueAt·string· required · formatdate-time· example2025-01-01T00:00:00.000ZISO 8601 timestamp.
-
attemptedAt·string | null· required · formatdate-time· example2025-01-01T00:00:00.000ZISO 8601 timestamp.
-
status·string· required · one ofpending,processing,confirmed,failed,skipped· examplependingCollection attempt status.
-
signature·string | null· requiredSolana transaction signature.
-
error·string | null· requiredCollection error, if any.
-
metadata·object· requiredProvider/job metadata for the attempt.
One of:
-
source: "manual"
-
recurringPaymentId·string· required -
initiatedByKeyId·string | null· required -
source·string· required · alwaysmanual
-
-
source: "automated"
-
recurringPaymentId·string· required -
initiatedByKeyId·string | null· required -
source·string· required · alwaysautomated
-
-
source: "retry"
-
recurringPaymentId·string· required -
initiatedByKeyId·string | null· required -
source·string· required · alwaysretry -
initialSource·string· required · one ofmanual,automated -
transferId·string | null· required -
error·string· required -
retryAfterAt·string· required
-
-
source: "linked_transfer"
-
recurringPaymentId·string· required -
initiatedByKeyId·string | null· required -
source·string· required · alwayslinked_transfer -
initialSource·string· required · one ofmanual,automated -
transferId·string· required
-
-
-
createdAt·string· required · formatdate-time· example2025-01-01T00:00:00.000ZISO 8601 timestamp.
-
updatedAt·string· required · formatdate-time· example2025-01-01T00:00:00.000ZISO 8601 timestamp.
-
-
total·integer· required -
page·integer· required -
pageSize·integer· required
-
-
meta·object· requiredResponse metadata.
-
requestId·string· required · min length 1 · examplereq_exampleRequest identifier for tracing.
-
timestamp·string· required · formatdate-time· example2025-01-01T00:00:00.000ZISO 8601 timestamp.
-
-
-
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 therecurring.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. -
404Not FoundSame fields as
400. -
500Internal Server ErrorSame fields as
400.
Example request
curl 'https://api.solana.com/v1/payments/subscriptions/psub_example/collection-attempts' \
-H "Authorization: Bearer $SDP_API_KEY"Example responses
{
"data": {
"collectionAttempts": [
{
"id": "psca_example",
"organizationId": "org_example",
"projectId": "prj_example",
"subscriptionId": "subscription_example",
"transferId": "xfr_example",
"token": "example",
"amount": "100.00",
"dueAt": "2025-01-01T00:00:00.000Z",
"attemptedAt": "2025-01-01T00:00:00.000Z",
"status": "pending",
"signature": "example",
"error": "example",
"metadata": {
"recurringPaymentId": "recurringpayment_example",
"initiatedByKeyId": "initiatedbykey_example",
"source": "manual"
},
"createdAt": "2025-01-01T00:00:00.000Z",
"updatedAt": "2025-01-01T00:00:00.000Z"
}
],
"total": 1,
"page": 1,
"pageSize": 1
},
"meta": {
"requestId": "req_example",
"timestamp": "2025-01-01T00:00:00.000Z"
}
}Error responses use the standard error shape.