Approve a payout
/api/v2/payouts/{id}/approveMoves created to approved and reserves the amount against the team balance. The body is optional. Needs payouts:approve, plus payouts:write with andThen: "pay".
id*stringThe payout id (payout_…) or your customId.
idempotency-key?stringClient-chosen key, 1 to 255 characters (a UUID is recommended). The same key on the same endpoint within 24 hours replays the stored response with Idempotent-Replayed: true.
1 <= length <= 255application/json- body
andThen?|Runs send_claim_link or pay in the same request, all or nothing. pay also needs payouts:write.
Payout
application/json- response
object*"payout"Type of the object. Always payout.
"payout"id*PayoutIdId of a payout: payout_ followed by its key.
^payout_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$customId*|Your own key for the payout. null when not set.
description*stringWhat the payout is for. Shown to the recipient. Can span several lines. Without invoice, it is also the reference of the bank transfer, on one line. Banks can cut it short.
amount*stringAmount in currency. Minimum 0.10.
currency*stringCurrency of amount and of the invoices. Open enum: treat an unknown value as a fallback case. Known values: USD, EUR, CHF, GBP.
recipient*|||Who is paid, discriminated on type. type is open on read; on write it is email or counterparty.
status*stringLifecycle status. Open enum: treat an unknown value as a fallback case. Known values: created, approved, requested, completed, failed, expired.
locked*booleanA locked payout refuses PATCH and dashboard edits, except of tags. It can still be deleted.
availableOn*|The payout cannot be claimed or paid before this UTC day. null while availableInDays is set.
availableInDays*|The recipient is paid this many days after the claim. A claim for the full amount sets availableOn to that UTC day and this field to null. null for a payout without this delay.
servicePeriod*|The days of the work the payout pays for, both inclusive. null when not set.
expiresAt*|When a created or approved payout expires if it is not claimed or paid. Talentir moves it to expired within a day after this time. Every change to the payout moves the time later, and it is never before availableOn. null in other statuses, and when the team turned expiry off.
tags*array<string>Your labels for the payout. Filter the list with ?tag=.
paymentMethod*||How the money is sent: the rail and the settlement currency. null until requested.
withInvoice*booleantrue: Talentir issues an invoice for the payout (VAT, e-invoice, Merchant of Record, DAC7). false: a plain payment without invoice, receipt or VAT.
senderInvoiceUrl*|URL of the invoice or receipt for your team. null while there is none.
recipientInvoiceUrl*|URL of the recipient's invoice. null while there is none.
recipientInvoiceSource*|Who issued the recipient invoice: self_billing (Talentir, in the recipient's name), recipient_upload (the recipient), or payment_request (the recipient, for the payment request that the payout pays). Open enum. null while there is none.
failureCode*|Why the transfer failed, while status is failed. account_closed: the account no longer exists. account_invalid: the account details are wrong. name_mismatch: the account holder name does not match the counterparty. other: any other reason; failureReason explains it. Open enum. null in other statuses.
failureReason*|Why the transfer failed, in English, while status is failed and the reason is known. Never the payment provider's own text. For a developer, never shown to the recipient.
approvedAt*|When the payout was last approved. null while status is created, and for a payout approved before May 2026.
recipientNotifications*stringWhether Talentir may notify the recipient. enabled: Talentir emails the claim link (and sends an SMS when the payout has a phone number) when send-claim-link or an andThen that sends it runs, a reminder follows, and a team member can send it from the dashboard. Nothing goes out before that. disabled: Talentir sends the recipient nothing and the dashboard cannot send the claim link; your own system shows or sends a link minted with POST /sessions.
"enabled""disabled"claimLinkSentAt*|The last time Talentir emailed the claim link. null when the sender sends its own link, or when the email could not be sent.
requestedAt*|When the transfer was requested: the claim, or the pay call.
retry*|Set while a returned payout waits for the recipient's retry to deliver. null otherwise, also after the retry completes.
completedAt*|When the payout became completed. null before that.
createdAt*stringWhen the payout was created.
date-timeupdatedAt*stringWhen the payout was last updated.
date-timecurl -X POST 'https://www.talentir.com/api/v2/payouts/payout_0e4ba886-0bfe-4b6a-ae2e-d6d9d135dd1e/approve' \ -H 'Content-Type: application/json' \ -d '{}'{ "object": "payout", "id": "payout_0e4ba886-0bfe-4b6a-ae2e-d6d9d135dd1e", "customId": "campaign-42", "description": "string", "amount": "100.00", "currency": "USD", "recipient": { "type": "email", "email": "jane@example.com", "phone": "string" }, "status": "created", "locked": true, "availableOn": "2026-10-01", "availableInDays": -9007199254740991, "servicePeriod": { "start": "2026-10-01", "end": "2026-10-01" }, "expiresAt": "2026-09-24T10:00:00.000Z", "tags": [ "string" ], "paymentMethod": { "type": "crypto", "asset": "string", "currency": "EUR" }, "withInvoice": true, "senderInvoiceUrl": "string", "recipientInvoiceUrl": "string", "recipientInvoiceSource": "self_billing", "failureCode": "account_closed", "failureReason": "string", "approvedAt": "2026-09-24T10:00:00.000Z", "recipientNotifications": "enabled", "claimLinkSentAt": "2026-09-24T10:00:00.000Z", "requestedAt": "2026-09-24T10:00:00.000Z", "retry": { "url": "string", "code": "account_closed", "reason": "string" }, "completedAt": "2026-09-24T10:00:00.000Z", "createdAt": "2026-09-24T10:00:00.000Z", "updatedAt": "2026-09-24T10:00:00.000Z"}Delete a payout DELETE
Allowed while `status` is `created`, `approved`, or `expired`. A `failed` payout cannot be deleted: its money waits for `pay`. A deleted payout is gone from the API: every endpoint answers 404 `PAYOUT_NOT_FOUND` for it, and lists do not include it. Its `customId` stays taken. Needs `payouts:write`.
Send the claim link POST
Talentir emails the claim link to the recipient and sets `recipientNotifications` to `enabled`. One reminder follows 7 days after the latest claim-link email; calling it again resends the email and moves a reminder that has not gone out yet. A locked payout with `recipientNotifications: "disabled"` fails with `PAYOUT_LOCKED`. Needs `payouts:write`.