Basic payment
Send a single token transfer with SDP.
SDP handles token transfers through its payments API. A basic payment moves tokens from a custody wallet you control to any Solana wallet address.
The sourceCustodyWalletId field is the exact SDP Wallet id (cwlt_…, from GET /v1/wallets), resolved server-side from the caller's custody-wallet list; destination is the recipient's on-chain wallet (owner) address — for SPL transfers, SDP derives the associated token account (ATA) from this address and creates it if needed, so pass the wallet pubkey, not a token-account address.
Transfers are available through the Payments dashboard and the API.
Prerequisites
- A deployed token with minted supply
- A custody wallet to use as
sourceCustodyWalletId, with a custody signer configured so SDP can sign and submit. - An API key with both
payments:writeandwallets:readpermissions, where the key'spayments:writescope includes the source wallet —POST /v1/payments/transfersis gated by that pair at the route layer, and the source wallet is then re-checked against the key'spayments:writewallet scope.
How it works
Set up the transfer
Specify the source, destination, token, and amount.
Go to Payments in the sidebar. The overview shows your total SDP balance, recent transactions, and Send / Receive actions.

Click Send and select Wallet transfer to send from an SDP wallet to a Solana address.

On the Enter transfer details form, select a source wallet from the dropdown.

Fill in:
- Source — a wallet you control in SDP
- Amount — human-readable units (e.g.,
0.5) - Asset — select from your deployed tokens
- Destination address — any valid Solana wallet address
- Memo — optional note recorded onchain

Execute the transfer
Submit the transfer. SDP signs with the source custody wallet and submits the transaction.
Click Review to see the transfer summary, then Confirm to submit.
The transfer status updates to Confirmed once the transaction is finalized.
Verify the transfer
Confirm the transfer completed and balances updated.
The transfer appears in Payments history with a confirmed status and an onchain transaction signature.

Click the record to see full details including the Solana Explorer link.
Deduplication
Send one stable Idempotency-Key per logical payment and reuse it for network retries. An identical request for the same exact sourceCustodyWalletId returns the original transfer; reusing the key with a different payload or wallet returns 409. A request without a key creates a new transfer intent.
Persist the returned Transfer.id as your local primary key. Once populated, the on-chain signature is also unique across SDP transfers and can deduplicate records across SDP and another chain indexer.
See Payouts and disbursements for the same pattern applied to batched outbound flows.
Related
- Payment with memo — using the
memofield to carry order references - Payouts and disbursements — batched outbound flows
- Mint and Burn — create or destroy token supply
- Allowlists — define approved destinations for allowlist-enabled issuance flows
- Freeze and Compliance — halt transfers for compliance