Skip to main content
POST /transfer moves money out of a custodial wallet on either rail. One field (type) decides whether the amount is public or encrypted.

type: "public"

A standard ERC-20 transfer of the test stablecoin. Amount visible on-chain, cheapest and fastest.

type: "private"

A cAROUSD confidentialTransfer. The amount is FHE-encrypted; observers see the transfer, never the value.

Make the call

Request fields

The sending wallet needs a sufficient balance on the matching rail: public stablecoin for public, cAROUSD for private (mint first if needed), plus ETH for gas.

Privacy characteristics

For private transfers, the amount is encrypted client-side of the chain; that is, the sandbox produces the encrypted input and proof server-side and submits it. On-chain observers see sender, recipient, and the fact of a transfer; the value stays ciphertext. The recipient (or the sandbox, for custodial recipients) decrypts their updated balance through the relayer.
Private transfers cost more gas and take a bit longer than public ones; encrypted inputs are bigger and verification is heavier. Budget for that in UX, not in correctness.

Failure modes

Like all money movement, transfers block up to ~90 s and may return PENDING; poll to completion.