Skip to main content
AroPay orchestrates confidential payments on public ledgers: sealed, private transfers whose amounts never appear in cleartext on-chain. It runs on the Aro Confidential Rails, built on Zama Protocol FHE. The current deployment is an MVP sandbox for B2B users that pairs a web dashboard with a versioned JSON API at /api/v1. Both surfaces drive the same backend, and every on-chain action executes for real on the environment’s ledger: Ethereum Sepolia (chain ID 11155111) during development, with a Mainnet deployment to follow.
AroPay user flow: provisioning, sign-in, wallet setup, funding, money movement, and tracking

The full sandbox journey: from provisioning to programmatic money movement.

The building blocks

Two rails, one API

Money in the sandbox lives on two rails that stay 1:1 with each other:

Public rail

The test stablecoin, a standard ERC-20. Balances and transfer amounts are visible to anyone on a block explorer, exactly like production stablecoins.

Confidential rail

cAROUSD, an ERC-7984 confidential token. Amounts are encrypted with fully homomorphic encryption (FHE), so the chain records that value moved, never how much.
You move between rails with mint (stable → cAROUSD) and redeem (cAROUSD → stable). Within the confidential rail, private transfers keep amounts encrypted end-to-end. See Confidential transfers for how the encryption works. The money behind the rails is environment-specific: in production, cAROUSD is designed to be backed 1:1 by liquid USDC and USDT held at the Aro Liquidity Commitment; on the Sepolia sandbox, a test stablecoin stands in and a faucet provides funds. The rail mechanics are identical in both.

The dashboard is an API client

Every dashboard feature (funding, minting, transfers, receipts, settings) calls the same /api/v1 endpoints you integrate against. That has two practical consequences:
  1. Parity is guaranteed. If the UI can do it, your integration can do it with the same request shapes.
  2. You can mix surfaces freely. Kick off a mint from a script, watch it confirm in the dashboard, download the receipt from either.

The operator

The operator is a platform-owned wallet that does the work your integration shouldn’t have to:
  • pays out faucet requests (test stablecoin + a gas top-up),
  • mints cAROUSD in float mode,
  • settles redemptions by paying stablecoin back to your wallet.
If the operator runs low on gas or stablecoin, faucet and settlement operations fail with explicit error codes (faucet_failed, redeem_settlement_failed); see Troubleshooting.

Mint modes: backed vs. float

Deployments run in one of two mint modes. The API is identical in both; only the on-chain mechanics differ.
Which mode your deployment uses is an operational setting. In backed mode a mint requires the custodial wallet to actually hold stablecoin; in float mode the operator mints directly. Either way you call POST /mint.

Server-side FHE

Confidential operations (encrypting mint amounts, decrypting custodial balances, publicly decrypting redeem burns) run server-side through the Zama Protocol relayer against its public Sepolia deployment. Two things follow:
  • You never handle FHE keys or ciphertexts. The API takes and returns plain decimal strings.
  • The first confidential call after a deployment restart can be slower while FHE keys are fetched. Subsequent calls are faster.

Host isolation

The sandbox runs on its own hosts (aropay.aro.media). Sandbox routes only resolve there, and admin routes 404 on sandbox hosts; the two surfaces are isolated at the proxy layer.