Cash App and USDC/USDT
The SDK can bridge between Cash App and USDC/USDT on external chains (Ethereum-family, Solana, or Tron), in either direction:
- Cash App to USDC/USDT: a Cash App user pays over Lightning, and the recipient gets the stablecoin on an external chain.
- USDC/USDT to Cash App: a payer deposits the stablecoin on an external chain, and a Cash App user gets Bitcoin.
In both, the SDK only sets the bridge up. No wallet funds move, and nothing is written to the payment history: the payer funds the order outside the wallet and the cross-chain provider delivers it autonomously. There is no PaymentPaymentPaymentPaymentPaymentPaymentPaymentPaymentPayment row, no status tracking, and no event. Show the quote returned to the user so they know what to expect before they pay.
Developer note
Cash App is available in the US and UK only (excluding New York State for Bitcoin/Lightning features). Cash App handles region restrictions on their end, so no client-side gating is needed.Selecting a route
Both bridges move over Lightning on the Cash App side. List the routes with get_cross_chain_routesget_cross_chain_routesgetCrossChainRoutesgetCrossChainRoutesgetCrossChainRoutesgetCrossChainRoutesgetCrossChainRoutesGetCrossChainRoutesGetCrossChainRoutes, setting the filter's delivery_methoddelivery_methoddeliveryMethoddeliveryMethoddeliveryMethoddeliveryMethoddeliveryMethodDeliveryMethodDeliveryMethod to DeliveryMethod::LightningDeliveryMethod.LIGHTNINGDeliveryMethod.lightningDeliveryMethod.LightningDeliveryMethod.LightningDeliveryMethod.LightningDeliveryMethod.LightningDeliveryMethodLightningDeliveryMethod.Lightning:
CrossChainRouteFilter::SendCrossChainRouteFilter.SENDCrossChainRouteFilter.sendCrossChainRouteFilter.SendCrossChainRouteFilter.SendCrossChainRouteFilter.SendCrossChainRouteFilter.SendCrossChainRouteFilterSendCrossChainRouteFilter.Sendlists the stablecoin destinations Cash App can fund.CrossChainRouteFilter::ReceiveCrossChainRouteFilter.RECEIVECrossChainRouteFilter.receiveCrossChainRouteFilter.ReceiveCrossChainRouteFilter.ReceiveCrossChainRouteFilter.ReceiveCrossChainRouteFilter.ReceiveCrossChainRouteFilterReceiveCrossChainRouteFilter.Receivelists the stablecoin sources that can pay a Cash App user.
Pick the CrossChainRoutePairCrossChainRoutePairCrossChainRoutePairCrossChainRoutePairCrossChainRoutePairCrossChainRoutePairCrossChainRoutePairCrossChainRoutePairCrossChainRoutePair whose CrossChainRoutePair.assetCrossChainRoutePair.assetCrossChainRoutePair.assetCrossChainRoutePair.assetCrossChainRoutePair.assetCrossChainRoutePair.assetCrossChainRoutePair.assetCrossChainRoutePair.AssetCrossChainRoutePair.Asset and CrossChainRoutePair.chainCrossChainRoutePair.chainCrossChainRoutePair.chainCrossChainRoutePair.chainCrossChainRoutePair.chainCrossChainRoutePair.chainCrossChainRoutePair.chainCrossChainRoutePair.ChainCrossChainRoutePair.Chain match the stablecoin you want. A route that can't move over Lightning fails fast, before any funds move.
Amounts and fees
The amountamountamountamountamountamountamountAmountAmount is in the stablecoin's base units, per the route's CrossChainRoutePair.decimalsCrossChainRoutePair.decimalsCrossChainRoutePair.decimalsCrossChainRoutePair.decimalsCrossChainRoutePair.decimalsCrossChainRoutePair.decimalsCrossChainRoutePair.decimalsCrossChainRoutePair.DecimalsCrossChainRoutePair.Decimals. These routes carry USD-pegged stablecoins, so at parity it is the USD value: 1_000_000 is 1 USDC (6 decimals), about $1.
fee_policyfee_policyfeePolicyfeePolicyfeePolicyfeePolicyfeePolicyFeePolicyFeePolicy controls who absorbs the provider fee, reusing the same FeePolicyFeePolicyFeePolicyFeePolicyFeePolicyFeePolicyFeePolicyFeePolicyFeePolicy as the send flow:
FeePolicy::FeesExcludedFeePolicy.FEES_EXCLUDEDFeePolicy.feesExcludedFeePolicy.FeesExcludedFeePolicy.FeesExcludedFeePolicy.FeesExcludedFeePolicy.FeesExcludedFeePolicyFeesExcludedFeePolicy.FeesExcluded(default) delivers about the amount to the recipient and adds the fee on top of what the payer pays.FeePolicy::FeesIncludedFeePolicy.FEES_INCLUDEDFeePolicy.feesIncludedFeePolicy.FeesIncludedFeePolicy.FeesIncludedFeePolicy.FeesIncludedFeePolicy.FeesIncludedFeePolicyFeesIncludedFeePolicy.FeesIncludedtakes the fee out of the amount, so the payer pays exactly the amount and the recipient receives less.
The fee includes your partner fee if you set one. max_slippage_bpsmax_slippage_bpsmaxSlippageBpsmaxSlippageBpsmaxSlippageBpsmaxSlippageBpsmaxSlippageBpsMaxSlippageBpsMaxSlippageBps bounds the price movement tolerated between quote and delivery, in basis points (1 bps = 0.01%). Left unset, the SDK default applies.
Paying Cash App from the wallet
To pay a Cash App user from the wallet's own balance, no bridge is needed. A Cash App username prefixed with $ (e.g. $alice) parses to the user's Lightning address, alice@cash.app, which you pay with LNURL-Pay. A wallet holding a stable balance converts it to Bitcoin for the payment automatically.
Limitations
- Mainnet only. Cash App and the cross-chain providers operate against live networks. There is no testnet equivalent.
- Not tracked. The bridge is funded outside the wallet, so it produces no
PaymentPaymentPaymentPaymentPaymentPaymentPaymentPaymentPaymentrow and no event. If you need delivery confirmation, observe the recipient's side directly.