Skip to main content
Rach’s Solana rail supports canonical mainnet USDC and USDT SPL tokens. It is separate from the chain field used by Polygon, Base, and BNB Smart Chain: use the dedicated /v1/solana/* endpoints.
This guide applies when Solana is enabled for your Rach environment. Check GET /health/ready first. solana: INBOUND_READY means zero-SOL wallet provisioning and balance reads passed and receipt monitoring is configured. It does not prove that the separately operated scanner worker has observed a deposit or that a webhook was delivered. With monitoring disabled, Solana reports DEGRADED even where balance reads work. solana: READY additionally permits sponsored sends. Treat a confirmed deposit record or signed transfer.received webhook as evidence of an observed credit.

What your customer needs

Nothing native. Rach pays the Solana transaction fee and creates the customer’s USDC and USDT Associated Token Accounts (ATAs) before a provision request succeeds. Your customer can receive, hold, and send USDC/USDT while their owner address holds 0 SOL. This differs from an ordinary raw Solana address: SPL tokens need a recipient token account, and many exchanges will not create one for an empty recipient. Rach creates both supported ATAs first, so the address is ready for USDC and USDT deposits from the moment you receive it.

1. Provision a deposit-ready customer address

Only use an address for deposits when token_accounts_ready is true. A 503 means Rach’s sponsor capacity is being restored; retry the same provision request before giving the address to your customer or an exchange. The retry uses the same customer key and idempotent ATA creation. Use address as the customer’s normal Solana owner address. The ATA values are included for a deposit provider that explicitly asks for a token-account address. They are deterministic and belong to the customer, not to Rach.

2. Read both balances

Amounts are decimal strings with six decimal places. The rail recognizes only canonical SPL USDC and USDT; a native SOL balance or another SPL mint is not a CaaS balance and is not available through this endpoint. For privacy, this endpoint returns an unlinked wallet as not provisioned; use the customer consent linking flow before reading or sending from a wallet another business created.

3. Receive and reconcile deposits

When receipt monitoring is enabled for your environment, Rach scans finalized Solana receipts and writes an immutable deposit record before it sends transfer.received. The notification is at-least-once, so deduplicate on transfer_id—the durable Rach deposit UUID—not on the Solana signature alone. One Solana transaction can credit USDC and USDT, or more than one customer account. Do not treat health status alone as proof of a specific deposit.
Every business currently authorized to operate the wallet receives the same receipt event. Verify the normal X-Rach-Signature HMAC and keep webhook processing idempotent; see Webhooks.

4. Send USDC or USDT without customer SOL

Once readiness reports solana: READY, submit a sponsored send:
The customer signs only as the SPL token authority. Rach is the transaction fee payer. If the recipient does not yet have the requested token account, Rach creates it in the same transaction and the final transfer includes created_recipient_ata: true. Use a normal on-curve wallet address as recipient_address; Rach rejects program-derived addresses because funds sent to one can be unrecoverable to a customer. Reuse the same idempotency_key on every retry. SETTLED and FAILED are terminal; never issue a new key while a transfer is QUEUED, SUBMITTING, SUBMITTED, or SUBMISSION_UNKNOWN.

Fees and boundaries

Rach sponsors Solana network and ATA costs in this release. There is no hidden native-Solana product fee deducted from the transfer amount. A product fee would require an explicit business policy and is not inferred from EVM merchant-pricing settings. The current rail does not support native SOL payments, SOL swaps, or a Solana swap program. Use it for USDC/USDT deposits, balances, and sponsored outbound SPL transfers only.