Cross-chain crypto payments and bridging via Rozo. Send USDC/USDT across Ethereum, Base, BNB Chain, Solana, and Stellar. Use when user says "pay", "send", "transfer", "payout", "check balance", "payment status", or shares a QR code screenshot. Also triggers on wallet addresses (0x, base58, G/C stellar), transaction hashes. Auto-detects wallet type, auto-selects token (USDC preferred), checks balances, gets fees, and confirms before sending. Do NOT use for general blockchain questions or non-payment tasks.
Send cross-chain crypto payments and bridging via Rozo. Send USDC/USDT across Ethereum, Base, BNB Chain, Solana, and Stellar.
Determine the user's intent and load the matching sub-skill:
| Intent | Sub-skill | Triggers |
|---|---|---|
| Send a payment | skills/send-payment/SKILL.md | "pay", "send", "transfer", "payout", shares a QR code, provides an amount + address |
| Check wallet balance | skills/check-balance/SKILL.md | "check balance", "how much do I have", "show my balance", "wallet balance" |
| Parse a QR code | skills/parse-qr/SKILL.md | "scan QR", "parse QR", "read this QR", shares a QR image without mentioning payment |
| Check payment status | skills/payment-status/SKILL.md | "check payment", "payment status", "where is my payment", "track payment", provides a payment UUID or tx hash |
Rules:
send-paymentparse-qr first, then offer to sendcheck-balance, then continue to send-payment if they want to pay| Chain | USDC | USDT |
|---|---|---|
| Ethereum | Yes | Yes |
| Arbitrum | Yes | Yes |
| Base | Yes | Yes |
| BSC | Yes | Yes |
| Polygon | Yes | Yes |
| Solana | Yes | No |
| Stellar | Yes | No |
| Chain | USDC | USDT |
|---|---|---|
| Ethereum | Yes | Yes |
| Arbitrum | Yes | Yes |
| Base | Yes | No |
| BSC | Yes | Yes |
| Polygon | Yes | Yes |
| Solana | Yes | Yes |
| Stellar | Yes | No |
Trust the live API over these tables. Do NOT refuse a user's request
based purely on the tables above. Tables can be stale or misread — always
call create-payment.js --dryrun first and let the API be the source of
truth. If dryrun returns success: true, the route is supported; if it
returns an error, report that error to the user. Never tell a user "this
route isn't supported" without running the dryrun first.
Requires Node.js (ES modules). All scripts in scripts/dist/ are run with node.
The Rozo APIs are public and rate-limited — no API keys or authentication tokens are required.
| Endpoint | Host | Auth | Notes |
|---|---|---|---|
| Payment API (create, get, check) | intentapiv4.rozo.ai | None (rate-limited) | Main Rozo payment API |
| Balance API (check balance) | api-balance.rozo-deeplink.workers.dev | None (rate-limited) | Rozo balance service (Cloudflare Workers) |
Both hosts are operated by Rozo. The balance endpoint uses a separate Cloudflare Workers deployment for performance.
exactOut by default — recipient gets exact amount, fee added on topShared Node.js scripts in scripts/dist/ (run with plain node):
| Script | Purpose |
|---|---|
check-balance.js | Fetch wallet balances via Rozo balance API |
check-stellar-trustline.js | Verify asset trustline (USDC/EURC) on Stellar G-wallets |
create-payment.js | Create a payment (or dryrun for fee estimate) via Rozo API |
get-payment.js | Get payment status by ID, tx hash, or address+memo |
parse-qr.js | Parse payment QR code URIs (EIP-681, Solana Pay, Stellar URI) |
chains.js | Shared chain/token config (imported by other scripts) |
references/supported-chains.md — chain IDs, token addresses, decimalsreferences/api-reference.md — Rozo API endpoints and schemasreferences/wallet-detection.md — address format detection rules