How it works
Smart routing
Every transfer is evaluated against the assets and chains involved, and
routed however it completes fastest and most reliably — no wrapped
assets, no manual liquidity-pool slippage to account for.
One endpoint, always
Same-asset transfers between chains and cross-asset swaps both go
through the same call. You never choose the mechanism yourself.
POST /bridge/quote tells you the network fee and an ETA before you commit
— route in the response is an internal routing identifier for support
purposes only; it’s not something you need to branch on client-side.
Quote, then execute
ourFee is Puffin’s platform + gas-recovery charge on top of the quoted
network fee — see Pricing for how
it’s configured. When you’re ready:
bridgeTransfer
you can poll — or just wait for the webhook.
Webhooks
Subscribe tobridge.completed and bridge.failed — see Webhooks
for the full payload shape.
Bridging is USDC/USDT-only today, matching the Wallet-as-a-Service
chain/token matrix (Solana, Polygon, BSC, Base). A bridge request for an
unconfigured route returns
bridge_not_configured — this is an operational
gate on our side while a corridor is being rolled out, not something you can
work around client-side.