Skip to main content
Global Payouts lets you send a payout to a recipient before you know their payment details. Instead of collecting a bank account or wallet address yourself, you send the recipient a payout link. The recipient opens the link, enters their own details, and the payout is processed automatically. This is ideal for paying contractors, creators, or marketplace sellers who are spread across multiple countries and payment rails.

How it works

1

Create a global payout

You initiate a payout in self-collect mode by providing the recipient’s email address and the amount. Syncgram Pay reserves the funds from your Financial Account balance and sends the recipient an email with a secure claim link.
2

Recipient opens the link

The recipient clicks the link and lands on the self-collect page. Opening the page marks the payout as started and prevents you from cancelling it.
3

Recipient submits their details

The recipient enters their name, country, and payment details (bank account, mobile wallet, or crypto address), then verifies their email with a one-time code.
4

Payout is processed

Syncgram Pay validates the submitted details and initiates the payout. The recipient’s payment information is stored securely — they do not need to re-enter it for future payouts.
Self-collect links expire after 7 days. If the recipient does not claim the payout within that window, the funds are released back to your Financial Account balance.

Self-collect flow

The self-collect flow uses three public endpoints. These endpoints do not require authentication — they are protected by a single-use signed token embedded in the claim link.

Validate the claim token

Before rendering the self-collect page, validate the token to confirm it is active and retrieve the payout context.
GET /api/v1/public/global-payouts/collect/{token}
Response
{
  "token_status": "active",
  "merchant_name": "Acme Marketplace",
  "amount": "100.00",
  "currency": "USD",
  "expires_at": "2026-04-02T11:06:00Z",
  "requires_business_name": false,
  "kyc_threshold_usd": "500.00"
}
token_status
string
The current status of the token. One of: active, claimed, expired, cancelled.
merchant_name
string
The display name of the merchant sending the payout.
amount
string
The payout amount in currency.
expires_at
string
ISO 8601 timestamp when the claim token expires.
kyc_threshold_usd
string
Payouts at or above this USD equivalent may require the recipient to complete identity verification.
If the token is not found or is no longer valid, the API returns a 404 or 410 error.

Start collection

Call this endpoint when the recipient first opens the self-collect page. This marks the payout as started and blocks merchant cancellation.
POST /api/v1/public/global-payouts/collect/{token}/start
Response
{
  "token_status": "active",
  "started_at": "2026-03-26T11:20:00Z"
}
This endpoint is idempotent — you can call it multiple times without side effects. Only the first call sets started_at.

Submit recipient details

The recipient submits their identity and payment details. Syncgram Pay verifies the email OTP, creates the recipient record, and triggers payout processing.
POST /api/v1/public/global-payouts/collect/{token}/submit
Request
{
  "email_verification": {
    "verification_id": "scver_01J...",
    "otp": "193442"
  },
  "recipient": {
    "type": "individual",
    "first_name": "Jane",
    "last_name": "Doe",
    "business_name": null,
    "country": "NG",
    "email": "jane@example.com"
  },
  "payment_method": {
    "method_type": "bank_transfer",
    "currency": "NGN",
    "bank_code": "044",
    "account_number": "0123456789"
  }
}
{
  "email_verification": {
    "verification_id": "scver_01J...",
    "otp": "193442"
  },
  "recipient": {
    "type": "individual",
    "first_name": "Jane",
    "last_name": "Doe",
    "country": "NG",
    "email": "jane@example.com"
  },
  "payment_method": {
    "method_type": "bank_transfer",
    "currency": "NGN",
    "bank_code": "044",
    "account_number": "0123456789"
  }
}

Submit request fields

email_verification object
verification_id
string
required
The verification session ID returned when the OTP was sent to the recipient’s email.
otp
string
required
The one-time code the recipient received by email.
recipient object
type
string
required
Recipient type: individual or business.
first_name
string
Required when type is individual.
last_name
string
Required when type is individual.
business_name
string
Required when type is business.
country
string
required
The recipient’s country in ISO 3166-1 alpha-2 format, e.g. NG, GH, US.
email
string
required
The recipient’s email address. Must match the email that received the claim link.
payment_method object
method_type
string
required
The payment method type: bank_transfer, mobile_money, or crypto_wallet.
currency
string
required
The currency the recipient wants to receive, e.g. NGN, GHS, USDT_TRC20.
account_number
string
Bank account number. Required for bank_transfer.
bank_code
string
Bank routing code. Required for bank_transfer.
bank_name
string
Bank display name. Optional for bank_transfer.
phone_number
string
Mobile number in international format. Required for mobile_money.
mno_code
string
Mobile network operator code, e.g. MTN, Vodafone. Required for mobile_money.
wallet_address
string
On-chain wallet address. Required for crypto_wallet.
network
string
Blockchain network, e.g. TRC20, ERC20. Required for crypto_wallet when not encoded in currency.
stablecoin
string
Stablecoin ticker, e.g. USDT. Required for crypto_wallet stablecoin transfers.
Response
{
  "payout_id": "gpo_01J...",
  "status": "processing",
  "recipient_id": "gpr_01J...",
  "payment_method_id": "gpm_01J...",
  "claimed_at": "2026-03-26T11:25:00Z"
}

Payout statuses

Global payouts follow an extended lifecycle to account for the self-collect hold period.
StatusDescription
pending_collectionThe claim link has been sent. Waiting for the recipient to submit their details.
processingThe recipient has submitted their details and the payout is being settled.
successfulThe payout has been delivered to the recipient.
failedThe payout could not be completed. Funds are released back to your balance.
cancelledYou cancelled the payout before the recipient opened the link.
expiredThe claim link expired before the recipient claimed the payout. Funds are released back to your balance.

Use cases

Contractor payments

Pay freelancers and contractors without asking them to share their bank details upfront. They enter their own details securely when claiming the payout.

Creator payouts

Disburse earnings to creators across multiple countries. Each creator self-selects their preferred payment method.

Marketplace sellers

Settle funds to marketplace sellers without building a destination collection flow into your onboarding.

Refunds and reimbursements

Issue refunds or expense reimbursements to individuals without requiring them to have a pre-registered account.