Skip to main content
Mermail returns a stable code with every wallet failure. Fix the call from the code instead of retrying the same request, because a transfer is not idempotent.

Amount and argument errors

These are safe to fix and call again in the same turn. Nothing was sent to PayBox. See catalog token transfers for the exact argument contract.

Approval errors

confirmation_required applies to destructive non-PayBox Mermail tools. Do not call prepare_destructive_action for paybox_* or legacy Agent Wallet submit/reject tools.

Upstream PayBox errors

pending, pending_paybox_approval, SUBMISSION_UNKNOWN, wallet_proposal_already_handled, and wallet_proposal_not_pending are not success. Treat them as unresolved. Do not retry submit or create another proposal unless status is FAILED.

Swap and x402 recovery

  • A pending swap is not success. Use its PayBox MCP App only if it shows a usable signing control, otherwise one returned signing handoff, then call paybox_get_request once only after the user confirms signing or asks for status. The model must not call reopen_signing_window.
  • Never replace a pending or uncertain x402 payment. Pay with paybox_pay_x402 only — paybox_use_service is unpaid mode: "probe" and is not a signing-continuation origin. The authenticated browser may finish signing in the PayBox window; the model must not call paybox_pay_x402 again to resume signing.
  • paybox_continuation_origin_not_found / Submit failed is not awaiting signature. Reconcile once, then wait for a fresh authorized paybox_pay_x402 if the origin is missing.
  • If an HTTP 402 challenge changes origin, resource/action, asset, chain, recipient, or exceeds the approved cap, stop for fresh authorization.
  • Charge required_charge = max(live quote, vendor prepaid floor) when a floor is resolved from same-origin docs or paybox_get_contract. Covering the live quote is not permission to skip the floor.
  • Treat x_payment as sensitive proof for the exact paid resource only. Never print, log, persist, or send it to another origin.
  • See swaps and x402 for the full workflow.

Portfolio reads during a PayBox outage

get_agent_wallet can report a connection.status of PAYBOX_UNAVAILABLE with an empty portfolio and a null portfolio_app. That means PayBox did not answer that one read, not that the delegated connection ended.
  • Read again later instead of telling the user to reconnect or re-authorize.
  • Do not present the balances from that response as final; they are missing, not zero.
  • The console keeps the last portfolio it loaded on screen while this happens, so what the user sees and what the tool returned can differ briefly.
A genuine disconnect shows NOT_CONNECTED, and an expired delegation shows REAUTH_REQUIRED. Those need the user: paste connect_handoff.console_url or reauth_handoff.console_url from get_paybox_connection / get_agent_wallet, or print mermail wallet connect-url / reauth-url. Never send the user to Claude, ChatGPT, or Codex connector settings for PayBox authorization.

Transfer amount rules

The argument contract these errors refer to.