---
updatedAt: 2026-10-16T08:11:00.482Z
---

Fetch the complete documentation index at: https://docs.avvio.xyz/llms.txt. Use this file to discover all available pages before exploring further. Append .md to any documentation page URL to get its markdown version.

# Submit a payout link

`POST https://api.avvio.xyz/business/api/v1/payout-links/{token}/submit`

Spend the link and send the money.

**Takes no credential**, as above.

Submitting twice returns the original payout with `status:
"already_submitted"`, so a worker who double-taps on a slow connection gets
the payout they already have, never a second one.

A validation failure leaves the link spendable, so a mistyped account
number is correctable rather than fatal. A link that is already being
spent or has failed is `400 PAYOUT_LINK_UNUSABLE`: it is not
spendable, so ask for a new one.

## Parameters

- `token` (path, required) — Opaque signed bearer token from the link URL.

## Example

```bash
curl -s -X POST "$AVVIO_BASE_URL/payout-links/$token/submit" \
  -H "content-type: application/json" \
  -d '{
        "esignConsent": true,
        "name": "Maria Gonzalez",
        "email": "<email>",
        "details": "<details>",
        "recipientType": "individual"
      }'
```

## Responses

- `201` — The payout.
- `400` — `VALIDATION_ERROR`: the details did not match what the corridor requires. The link is still spendable; correct and resubmit. `PAYOUT_LINK_UNUSABLE`: the link is being spent or has failed. It is **not** spendable; ask the sender for a new one.
- `403` — `USE_POST_PAYOUTS`: this organization has an approval threshold or a velocity cap, and only `POST /payouts` enforces them. Nothing was sent; send the payout through `POST /payouts`, which may answer `202 pending_approval`.
- `404` — `NOT_FOUND`: the token is not valid (expired, spent, forged). `DESTINATION_ACCOUNT_NOT_FOUND`: the saved destination is outside this link's end-user scope, or does not exist.
- `429` — Too many requests. The default ceiling is **100 requests per minute per API credential** on a 60-second window. High-volume payout and reconciliation routes declare a 600/minute override, and batch submission a 30/minute ceiling. A separate 2,000/minute per-source-IP abuse ceiling always applies. Obey `Retry-After`; it is in seconds and is authoritative. A 429 means the request was refused before the handler ran. Retry reads normally; retry an idempotent mutation with its same `Idempotency-Key`.
- `503` — `PAYOUT_LINKS_UNAVAILABLE`: hosted payout links are not configured on this environment. Nothing was sent; contact support.

Machine contract: [partner-payouts.openapi.yaml](/partner-payouts.openapi.yaml), operation `submitPayoutLink`.
