Send a payment to a creator identified by handle, email, or wallet address.
POST /payout creates (or updates) a payout for a recipient. The recipient does not need a Talentir account yet — they claim the payout later through a hosted session.
Pick a verificationMethod that matches what you know about the recipient:
verificationMethod | Recipient identified by | Required fields |
|---|---|---|
email | Email address | email |
youtube-channel | YouTube handle | creatorHandle (starts with @) |
tiktok | TikTok handle | creatorHandle (starts with @) |
instagram | Instagram handle | creatorHandle (starts with @) |
wallet_address | Talentir user ID / wallet | walletAddress |
The recipient proves control of that identity during the claim flow — for social handles by connecting the account, for email by signing in with a one-time code.
curl -X POST "$BASE_URL/payout" \
-H "Authorization: Bearer $TALENTIR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"description": "Payment for YouTube channel campaign",
"creatorHandle": "@mrbeast",
"verificationMethod": "youtube-channel",
"payoutAmount": "100.00",
"currency": "EUR",
"customId": "campaign-42"
}'Useful optional fields:
customId — your identifier. Sending the same customId again updates the existing payout instead of creating a duplicate; the response's action field says created or updated. See Idempotency.payoutType — manual (default) or manual-immutable (source-of-truth fields cannot be updated after creation).availableOn — a UTC calendar date (YYYY-MM-DD) from which the payout can be claimed. Omit for immediately claimable.tags — free-form strings for categorizing payouts; filterable in GET /payouts.notifications — allowed (default) or not-allowed if you run your own notification system.preApproved — create the payout already approved. Requires the payouts:approve scope; see Approve and execute payouts.Currencies: USD, EUR, CHF, GBP. Amounts are decimal strings, minimum 0.1.
For every parameter and the full response schema, see the generated Payouts reference pages.
For teams with balance enforcement enabled (the default), pre-approved payouts are rejected with HTTP 422 and error code INSUFFICIENT_BALANCE when the total of all open (approved but not yet paid out) payouts would exceed the team wallet balance. The error data contains walletBalance, totalOpenAmount, and currency.
In the sandbox, every payout method has a passing and a failing scenario. Success is the default: any regular recipient details settle the payout instantly and synchronously, including the webhook events a real payout would emit. To exercise the failure path, have the recipient claim with these magic values:
| Method | Failure trigger |
|---|---|
SEPA (bank-iban), SWIFT (bank-swift), ACH (bank-ach), Fedwire (bank-wire), UK Faster Payments (bank-uk) | Account holder name containing SANDBOX FAIL |
PayPal (paypal) | Recipient email containing sandbox-fail (e.g. sandbox-fail@example.com) |
Venmo (venmo) | Recipient phone number ending in 0000 |
Crypto (crypto) | Destination wallet address 0x000000000000000000000000000000000000dEaD |
A triggered failure behaves like a real provider rejection: the transfer is dispatched, then declined, and the payout never reaches completed (no completed webhook fires; the payout stays requested while the failure is handled).