Easy Labs
TreasuryGuides

Generate a payout link

Send a shareable link that lets someone claim a payout without a recipient record.

Goal

Generate a single-use link with a fixed amount that anyone can open, enter their bank details, and receive the funds — without needing to first exist as a recipient in your account. Useful for one-off contractor payments, referral payouts, customer refunds where you don't have the bank info, or any "we need to pay this person once" flow.

Prerequisites

  • API key with Treasury enabled.
  • A linked funding bank account with balance to cover the link amount.

Implementation

const { data: link } = await client.generatePayoutLink({
  amount: 25_000,                         // $250.00, USD cents, integer > 0
  currency: "USD",                        // only USD today
  description: "Q3 referral bonus — order #4127", // ≤1000 chars
});

// link.url           — the shareable URL
// link.token         — the path token (also embedded in url)
// link.expires_at    — ISO-8601 expiry
// link.status        — "pending"

Underlying endpoint: POST /treasury/payout-link/generate.

Email it, drop it into Slack, embed it in your own UI — it's a regular HTTPS URL. The hosted page on the other end:

  1. Asks the claimant to identify themselves (name + email).
  2. Walks them through bank entry via Plaid Link.
  3. On submit (POST /treasury/payout-link/{token}/submit), creates a recipient + payment method on your account and queues the payout.

3. Track redemption

const { data } = await client.getPayoutLink(link.token);
// data.status: "pending" | "claimed" | "completed" | "expired" | "cancelled"
// data.recipient_id  — set once claimed
// data.transaction_id — set once the payout is initiated

Or list all your links to build a redemption dashboard:

const { data: links } = await client.listPayoutLinks();

4. (Optional) React when the payout settles

The standard settlement.created webhook fires when the underlying payout funds — same plumbing as a directly-sent payout. There is no separate "link.claimed" webhook today; poll getPayoutLink if you need an earlier signal.

Tradeoffs

  • Single-use, fixed amount. A link is for one specific payment. If you want recurring payments to the same contractor, create a regular recipient and send payouts.
  • Recipient is auto-created. When the link is claimed, a recipient record appears in your account. Two claims on two links by the same person create two recipients — dedupe on email server-side if that matters to you.
  • No 2FA prompt at claim time. Link redemption funds from your default source account and doesn't go through the operator-level approval flow that createPayout does. Keep individual link amounts low and use direct payouts for high-value transfers.

On this page