---
title: "Collect recurring payment"
method: POST
path: "/v1/payments/recurring-payments/{id}/collect"
tags: ["Payments"]
---

# Collect recurring payment

`POST /v1/payments/recurring-payments/{id}/collect`

Manually collects a due active SDP-custody recurring payment by submitting the Solana subscriptions collection transaction, creating a linked payment transfer, recording the collection attempt, and advancing the next due time.

## Path parameters

- `id` string, required — SDP recurring payment record ID.

## Headers

- `x-project-id` string — Selects the active project for this request. Required for session/dashboard callers. Ignored when authenticating with an API key, whose scope is fixed to the key's project.

## Response `200`

Recurring payment collected

- object — Standard success response envelope.
  - `data` object, required — Recurring payment collection response payload.
    - `recurringPayment` object, required — SDP-custody outbound recurring payment record.
      - `id` string, required — SDP recurring payment ID.
      - `organizationId` string, required — Organization identifier.
      - `projectId` string, required — Project identifier.
      - `sourceWalletId` string, required — SDP custody wallet that funds the recurring payment.
      - `sourceAddress` string, required — Source wallet address.
      - `counterpartyId` string, required — Counterparty ID.
      - `counterpartyAccountId` string, required — Counterparty account ID.
      - `destinationAddress` string, required — Counterparty wallet owner address.
      - `destinationTokenAccount` string, nullable, required — Derived counterparty token account used for collection.
      - `token` string, required — SPL token mint address.
      - `amount` string, required — Token amount in UI units (decimal string).
      - `periodHours` integer, required
      - `firstCollectionAt` string, date-time, nullable, required — Requested first collection timestamp.
      - `nextCollectionDueAt` string, date-time, nullable, required — Next due collection timestamp.
      - `planId` string, nullable, required — Linked SDP subscription plan ID.
      - `subscriptionId` string, nullable, required — Linked SDP subscription ID.
      - `planPda` string, nullable, required — On-chain plan PDA.
      - `planCreatedAt` string, nullable, required — On-chain plan createdAt value as an unsigned integer string.
      - `planCreationSignature` string, nullable, required — Solana signature for plan creation.
      - `subscriptionPda` string, nullable, required — On-chain subscription PDA.
      - `subscriptionAuthorityAddress` string, nullable, required — On-chain subscription authority address.
      - `authorizationSignature` string, nullable, required — Solana signature for subscription authorization.
      - `status` 'pending_activation' | 'activating' | 'active' | 'updating' | 'canceling' | 'resuming' | 'paused' | 'canceled' | 'expired', required — Recurring payment status.
      - `metadataUri` string, nullable, required — Optional plan metadata URI.
      - `createdBy` string, nullable, required — Creator user ID or API key ID.
      - `createdAt` string, date-time, required — ISO 8601 timestamp.
      - `updatedAt` string, date-time, required — ISO 8601 timestamp.
    - `collectionAttempt` object, required — Recurring payment collection attempt record.
      - `id` string, required — Collection attempt ID.
      - `organizationId` string, required — Organization identifier.
      - `projectId` string, required — Project identifier.
      - `subscriptionId` string, required — Subscription ID.
      - `transferId` string, nullable, required — Payment transfer record ID when linked.
      - `token` string, required — Token mint or normalized token identifier.
      - `amount` string, required — Token amount in UI units (decimal string).
      - `dueAt` string, date-time, required — ISO 8601 timestamp.
      - `attemptedAt` string, date-time, nullable, required — ISO 8601 timestamp.
      - `status` 'pending' | 'processing' | 'confirmed' | 'failed' | 'skipped', required — Collection attempt status.
      - `signature` string, nullable, required — Solana transaction signature.
      - `error` string, nullable, required — Collection error, if any.
      - `metadata` object, required — Provider/job metadata for the attempt.
      - `createdAt` string, date-time, required — ISO 8601 timestamp.
      - `updatedAt` string, date-time, required — ISO 8601 timestamp.
    - `transfer` object, required — Transfer transaction record.
      - `id` string, required — Transfer identifier (SDP record ID, not the on-chain signature).
      - `organizationId` string, required — Organization identifier.
      - `walletId` string, required — Source or receiving SDP wallet associated with the transfer.
      - `projectId` string — Project identifier for the transfer.
      - `type` 'transfer' | 'transfer_confidential' | 'transfer_batch' | 'onramp' | 'offramp', required — Transfer type.
      - `direction` 'inbound' | 'outbound', required — Transfer direction.
      - `status` 'pending' | 'processing' | 'confirmed' | 'finalized' | 'failed' | 'awaiting_payment' | 'settling' | 'completed' | 'canceled' | 'expired', required — Transfer status.
      - `signature` string, nullable, required — Solana transaction signature (tx id/hash).
      - `serializedTx` string, nullable, required — Base64-encoded transaction payload, if available.
      - `slot` integer, nullable, required — Slot number, if confirmed.
      - `blockTime` string, date-time, nullable, required — Block time, if confirmed.
      - `fee` integer, nullable, required — Transaction fee in lamports.
      - `error` string, nullable, required — Error message if the transaction failed.
      - `initiatedBy` object — Initiator that triggered the transfer.
        - `type` 'api_key' | 'user' | 'system', required — Initiator type.
        - `id` string — Initiator identifier if applicable.
        - `display` string — Human-friendly label for the initiator.
      - `source` string — Source wallet address.
      - `destination` string — Destination wallet address.
      - `memo` string — Optional memo for the transfer.
      - `rampsMemo` object, required — Free-form key-value memo for offchain reconciliation of ramp transfers. At most 20 entries.
      - `token` string — Token symbol or mint address.
      - `amount` string — Token amount in UI units (decimal string).
      - `provider` 'moonpay' | 'lightspark' | 'bvnk' | 'moneygram' | 'coinbase' | 'mural' | 'stripe' — Ramp provider for on-ramp and off-ramp transfer records.
      - `counterpartyId` string — Counterparty tied to the transfer record, when available.
      - `counterpartyDisplayName` string — Current display name of the counterparty tied to the transfer.
      - `providerReference` string — Provider quote or transaction reference used for ramp correlation.
      - `deliveryMode` 'hosted' | 'manual_instructions' | 'session_widget' — Ramp delivery mode. Hosted flows require the customer to complete a provider-hosted UI; manual instructions require the customer to fund displayed instructions; session widgets use a provider SDK session.
      - `fiatCurrency` string — Fiat currency for the ramp leg.
      - `fiatAmount` string — Fiat amount for the ramp leg when known.
      - `risk` object — Optional risk evaluation for the transfer.
        - `provider` string, required — Risk scoring provider.
        - `score` string, required — Provider-specific risk score.
        - `level` 'low' | 'medium' | 'high' | 'unknown', required — Risk level classification.
        - `evaluatedAt` string, date-time, required — Timestamp when risk was evaluated.
      - `moneygram` object — MoneyGram-specific details for MoneyGram ramp transfers.
        - `transactionId` string — MoneyGram xRamps transaction identifier.
        - `referenceNumber` string — Cash pickup reference number issued by MoneyGram.
        - `payoutAmount` number — Fiat payout amount reported by MoneyGram.
        - `payoutStatus` string — MoneyGram payout status.
        - `cryptoTransferId` string — SDP transfer id for the on-chain USDC leg.
        - `solanaTxSignature` string — Solana transaction signature for the USDC transfer.
        - `lastWidgetError` string — Last MoneyGram widget error recorded for this transfer.
      - `createdAt` string, date-time, required — Creation timestamp.
      - `updatedAt` string, date-time, required — Last update timestamp.
  - `meta` object, required — Response metadata.
    - `requestId` string, required — Request identifier for tracing.
    - `timestamp` string, date-time, required — ISO 8601 timestamp.

## Other responses

- `400` — Error
- `401` — Error
- `403` — Error
- `404` — Error
- `409` — Error
- `500` — Error

---

[API](https://skmtc.net/solana/apis/solana-developer-platform-api.md) · [All operations](https://skmtc.net/solana/apis/solana-developer-platform-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/solana/solana-developer-platform-api/revisions/672b1916ba61/schema)
