Guides

Approve and execute payouts

Move payouts from pending to paid, with a human or programmatic approval step.

A payout created through the API starts out pending: it exists, the recipient can be notified, but no money moves until the payout is approved by the sending team. This split keeps the API safe by default — payouts:write can never move funds on its own.

Option 1: approve in the dashboard

Team members with approval permission see pending payouts in the Talentir dashboard and approve them there. No integration work needed.

Option 2: approval sessions

Mint a hosted approval screen for a team member with POST /session/approval and a list of payoutIds. The member reviews and approves the batch on a Talentir-hosted page. See Create hosted sessions.

This is the recommended pattern for platforms: your product shows "payouts ready", the customer clicks through to the hosted screen, reviews, and approves with their passkey.

Option 3: pre-approved creation

With the payouts:approve scope, POST /payout accepts preApproved: true and creates the payout already approved. The scope is restricted — it is granted only to admin-provisioned OAuth clients and to API keys for teams with the payout.api_approve permission. It is not available via dynamic client registration.

Pre-approved payouts are subject to balance enforcement: when the total of all open (approved but not yet paid out) payouts would exceed the team wallet balance, the request is rejected with HTTP 422 and error code INSUFFICIENT_BALANCE (the error data carries walletBalance, totalOpenAmount, and currency).

Wallet and allowance

Approval and execution run against the team's wallet, a passkey wallet held by the team owner:

  • A team must finish wallet setup before its payouts can be approved or executed. The hosted flows prompt the owner automatically if the wallet is missing.
  • The owner can cap automated spending with a daily allowance; mint the hosted screen for it with POST /session/allowance.

After approval

Once approved and funded, Talentir requests the transfer with the payout method the recipient chose during claiming. Track progress via webhooks (approvedrequestedcompleted) or GET /payout/{id}. The full state machine is described in Payout lifecycle.