Skip to content

Withdraws (payouts)

Requests a payout. Goes through the policy engine — the call returns immediately in all cases, it never blocks or long-polls, even when approval is required.

Requires header: Idempotency-Key

Terminal window
curl -X POST https://sandbox-api.nuez.app/v1/withdraws \
-H "Authorization: Bearer <jwt>" \
-H "Idempotency-Key: inv-2026-04-001" \
-H "Content-Type: application/json" \
-d '{
"amount_ars": 5000,
"destination": "0000003100010000123456",
"destination_kind": "CBU",
"note": "Invoice #42"
}'
ParameterTypeRequiredDescription
amount_arsnumberAmount in ARS
destinationstringCBU, CVU, or alias
destination_kindstringCBU | CVU | ALIAS. Default CBU.
notestringFree-text note
{ "id": "b3f1...", "status": "submitted", "decision": "allow" }
{
"id": "b3f1...",
"status": "pending_approval",
"decision": "require_approval",
"reasons": ["per_tx_limit"],
"approval_id": "9a02...",
"expires_in": 300
}

reasons names which policy rule(s) triggered — see Policy engine for the full list (kyc_incomplete, absolute_cap, per_tx_limit, daily_limit, monthly_limit).

Poll GET /v1/withdraws/{id} (below) to see when it resolves to approved/submitted/confirmed, rejected, or expired — or configure a webhook instead of polling.

HTTPCodeDescription
400MISSING_IDEMPOTENCY_KEYIdempotency-Key header absent
400INVALID_JSONMalformed body
404USER_NOT_FOUNDInvalid user in token
422ONBOARDING_INCOMPLETEUser has no CVU yet
422PAYOUT_DENIEDPolicy engine denied — e.g. kyc_incomplete or amount_invalid
502WITHDRAW_FAILEDThe bank rail rejected the payout when the decision was allow (e.g. insufficient balance)
503APPROVAL_NOT_CONFIGUREDDecision was require_approval but no approval service is wired up

Retrieve a single payout attempt by ID.

Terminal window
curl https://sandbox-api.nuez.app/v1/withdraws/b3f1... \
-H "Authorization: Bearer <jwt>"

Returns the full payout_attempts row — id, amount_ars, destination, destination_kind, status, decision, decision_reasons, idempotency_key, created_at, resolved_at, and (once submitted) provider_transfer_id.

status progresses through one of: approvedsubmittedconfirmed (allowed path), or pending_approvalapproved/rejected/expiredsubmittedconfirmed (approval path), or failed on a downstream error.


Lists all payout attempts for the authenticated user, most recent behavior determined by the store query (no pagination params currently).

Terminal window
curl https://sandbox-api.nuez.app/v1/withdraws \
-H "Authorization: Bearer <jwt>"
{ "withdraws": [ /* same shape as GET /v1/withdraws/{id} */ ] }

Returns a rendered receipt for a payout — used by the WhatsApp/Telegram receipt links, and backed by the same underlying data as get_receipt in MCP. See MCP tools → get_receipt for the JSON shape.