How it works
Onboarding
Section titled βOnboardingβPOST /v1/userswithemail,phone_e164, and apassword. nuez creates the account, a default API key for MCP use, and (inwidgetonboarding mode) an identity verification widget URL.- Complete KYC through the widget URL.
- Receive your CVU once onboarding finishes β
GET /v1/cvuor theget_cvuMCP tool. - Fund your wallet by transferring to that CVU from any Argentine bank, Mercado Pago, or UalΓ‘.
- Generate additional API keys per agent if you want independent revocation β
POST /v1/api-keys.
Until KYC (onboarding = "done") completes, the policy engine denies every payout with kyc_incomplete β see Policy engine.
Two execution flows
Section titled βTwo execution flowsβUnder the threshold β agent executes autonomously
Section titled βUnder the threshold β agent executes autonomouslyβAGENT β POST /v1/withdraws (or request_payout MCP tool) β policy.Evaluate() β decision: allow β payout submitted to the bank rail β status: submitted β webhook: payout.requested, payout.submittedNo human involved. The payout attempt is created with decision: "allow" and executes immediately.
Over the threshold β WhatsApp or Telegram approval
Section titled βOver the threshold β WhatsApp or Telegram approvalβ- Agent calls
request_payout(MCP) orPOST /v1/withdraws(REST) with an amount that trips one of the threshold rules. - The policy engine returns
require_approvaland the payout attempt is created withstatus: "pending_approval"β the call returns immediately with anapproval_idandexpires_in(seconds), it does not block or long-poll. - nuez sends a notification to the account owner via WhatsApp or Telegram, whichever channel is linked, with a 6-character challenge token and an amount/destination summary.
- The owner replies
APPROVE:XXXXXX/REJECT:XXXXXX(or taps a button, which sends the same format). nuez resolves the approval and updates the payout attempt toapprovedorrejected. - If approved, nuez submits the withdraw to the bank rail. A signed webhook (
payout.approved, thenpayout.submitted/payout.confirmed) fires on your configured endpoint. - If no response arrives within
APPROVAL_EXPIRY_MINUTES(default 5 minutes), a background worker marks itexpiredand firespayout.expired.
There is no MCP tool or REST endpoint to approve a payout directly β approval only happens by replying to the WhatsApp/Telegram message. Poll GET /v1/withdraws/{id} or get_payout_status to check whether a pending payout has resolved, or just wait for the webhook.
Design principle: the human only appears when it matters. Below the threshold, full autonomy. Above it, approval via a channel the owner already has open.
Architecture
Section titled βArchitectureβββββββββββββββββββββ AI Agent β Claude Desktop, Cursor, CLI, custom agentββββββββββ¬βββββββββ β POST /mcp (JSON-RPC) OR REST /v1/* (JWT) βΌβββββββββββββββββββββββββββββ nuez API (single :8080) βββββββββββ¬βββββββββββββββββββ β βΌββββββββββββββββββββ Policy engine β KYC Β· amount Β· whitelist Β· absolute cap Β·β β per-tx / daily / monthly limitsββββββββββ¬βββββββββ β ββββββ΄βββββ β β βΌ βΌ Execute Pause + notify (WhatsApp/Telegram) β β ββββββ¬βββββ βΌββββββββββββββββββββ Bank rail β CVU/CBU/alias payout railββββββββββ¬βββββββββ β βΌ Signed webhook (X-Nuez-Signature) β your endpointCards, bill payments, and crypto off-ramp follow the same pattern β MCP tool or REST call β store β underlying rail β but bill payments and card issuance are gated by their own whitelist/balance checks rather than the payout policy engine. See Cards, Bill payments, and Crypto off-ramp.