Skip to main content
Transfers move existing funds from one participant or group to one or more recipients. No new value is created: the source balance decreases by the exact total credited to all recipients. You might use them for peer-to-peer gifting, marketplace payouts with platform fees, or distributing a pool across multiple participants.

Creating a Transfer

The source’s available balance is debited for the total amount, and each recipient’s available balance is credited. The entire transfer is atomic: if any part fails, nothing moves.

Multi-Recipient Transfers

Split funds across multiple recipients in a single request:
Up to 100 recipients per transfer. This covers marketplace payouts with platform fees, prize splits, revenue sharing, and similar distributions.

Identifying Participants and Groups

The source and recipients can be identified by external ID, Scrip UUID, or group ID. Each identifier is mutually exclusive. Provide exactly one per source or recipient. For the source, use source_external_id, source_participant_id, or source_group_id. For recipients, use external_id, participant_id, or group_id on each entry.

LOT-Mode Assets

For LOT-mode assets, transfers spend the source’s oldest eligible lots first and create new lots for each recipient. The new lots get fresh created_at timestamps, so their age resets to zero. Source lot expiration dates do not carry over to the recipient. Destination lots do preserve the source lots’ issuer lineage, so redemption attribution still reports the original issuer.

Response

The response includes a journal_entry_id for tracing the transfer in the ledger, along with computed totals.

Transfer vs. Credit vs. Adjust

Requirements

  • Source and all recipients must be ACTIVE. To recover funds from a closed account, use forfeit, which is allowed on CLOSED participants.
  • Program must be ACTIVE (not SUSPENDED or ARCHIVED)
  • Source must have sufficient available balance for the total transfer amount. If insufficient, the entire transfer rolls back.
  • Source and recipient cannot be the same entity
  • Idempotency keys are scoped per program. Replaying a request with the same key and parameters returns the original result. Replaying with the same key but different parameters returns a 409 conflict.