- Your core Mesh integration is working end-to-end (see Prepare for go-live)
- You have a “Buy” or onramp flow in your app that you want to extend with Mesh integrations
Overview
Mesh supports multiple onramp products. If you have a “lineup” of onramps in your app, these Mesh integrations can be added directly to your UX alongside other onramps in your “Buy” flow.Add exchanges to the “lineup” in your “Buy” tab
Why?: If a user has an exchange account, there’s less friction for them to buy through that account (they’re already KYC’d and have added payment methods). That’s in contrast to a separate provider where they have to create an account, KYC, and add payment methods. You can simply add the Mesh integration (eg.Binance) into your UX the same way you have other providers.
Pro tip: You can also pull the exchange’s icon or logo from Mesh’s Integrations endpoint (/api/v1/integrations) if you’d like to add that next to the exchange name in your UX.
Use Mesh’s quote API to show “You receive” quotes
Endpoint: /api/v1/transfers/managed/quote Why?: This is optional and likely not necessary (if a user has an account with a certain exchange, they’ll probably choose that option anyway). But if you’d like to show a “You receive” estimate for each option, you can fetch quotes using this endpoint.Quote request structure
Quote request structure
Parameter reference
Parameter reference
X-Client-Id requiredX-Client-Secret requiredamountInFiat requiredfiatCurrency to be transferred.fiatCurrency requiredsymbol requirednetworkId requiredMesh’s unique identifier for the network to be used for this toAddress.
Use the Get networks endpoint (/api/v1/transfers/managed/networks) to pull a list of all supported networks and the corresponding Mesh networkId. These values won’t change, so you do not have to hit this endpoint before each Link Token request.
toAddress requiredsymbol can be sent on the specified networkId.brokerType requiredbinanceInternationalDirect or coinbase.- There are two quotes returned in the response:
minAmountFiat&maxAmountFiat. DisplayminAmountFiatas the more conservative estimate — it assumes the user doesn’t already hold that token and will need to fund the purchase from scratch. - Be sure to pay attention to the
isEligiblefield in the response to know if you can show a quote (theminEligibleAmount&minEligibleAmountInFiatindicate the exchange’s minimum withdrawal for that token on that network).
Launch Link directly into the chosen provider’s flow
Why?: If the user has already selected the integration in your UX, there’s no need to see the Mesh catalog. You can launch them directly into their chosen provider’s flow.Link Token request structure
Link Token request structure
Parameter reference
Parameter reference
X-Client-Id requiredX-Client-Secret requireduserId requiredrestrictMultipleAccounts optionalDefaults to true, which is standard used for any transfer flow.
On some non-transfer flows (ie. “read” use cases), a user could connect multiple accounts in a row if this value were false. Sometimes valuable for withdrawal use cases to let the user create an external “address book”.
integrationId optionalA unique Mesh identifier representing a specific integration.
Use the Get integrations endpoint (/api/v1/transfers/managed/integrations) to pull a list of integrations and the corresponding Mesh integrationId. These values won’t change, so you do not have to hit this endpoint before each Link Token request.
To be used if the user selects the integration in your UX before launching Mesh (most commonly in an onramp flow).
transferOptions.transactionId optionaltransferOptions.transferType optionaldeposit.transferOptions.isInclusiveFeeEnabled optionalSpecifies if fees should be included in the amount to transfer.
false is standard for deposit and payment, meaning any applicable fees are on top of the deposit/payment amount. true is standard for onramp, meaning the amount the user receives is the amount specified minus applicable fees.
transferOptions.generatePayLink optionalWhen true, this request will return a url in addition to the Link token that can be used to launch Mesh Link in a separate web page.
This should only be used if you’re launching Mesh in a separate webpage (see more about “PayLinks” in the Launch the Mesh SDK guide).
transferOptions.amountInFiat optionalThe fiat-equivalent amount of the symbol to be purchased.
To be used if the user enters an amount in your UX before launching Mesh (most commonly in an onramp flow).
transferOptions.toAddresses.networkId optional required for transfersMesh’s unique identifier for the network to be used for this toAddress.
Use the Get networks endpoint (/api/v1/transfers/managed/networks) to pull a list of all supported networks and the corresponding Mesh networkId. These values won’t change, so you do not have to hit this endpoint before each Link Token request.
transferOptions.toAddresses.symbol optional required for transferstoAddress.transferOptions.toAddresses.address optional required for transferssymbol can be sent on the specified networkId.transferOptions.toAddresses.amount optional required for paymentsExact amount of the asset that should be transferred.
This parameter is optional for deposit and onramp, but required when transferType: payment. Not to be used in combination with the amountInFiat field.
transferOptions.toAddresses.displayAmountInFiat optionalA fiat-equivalent amount that will be shown to the user in the Mesh UI.
This ensures a consistent experience from your checkout experience to Mesh. It will only be used if is within 1% of the amountInFiat Mesh determines based on it pricing data. This is generally used for non-stablecoin payments, as Mesh maps stablecoins to a 1:1 price with USD for display purposes.
What’s next
Explore the other Extend guides:- Add Mesh to your withdrawal flow — enable automated address retrieval for user withdrawals.
- Verify self-hosted wallets — add wallet ownership verification for compliance or security.
AI coding reference (llms.txt)
AI coding reference (llms.txt)
POST /api/v1/transfers/managed/quote
Params: amountInFiat | fiatCurrency (USD only) | symbol | networkId | toAddress | brokerType
Response: minAmountFiat (show this — conservative estimate) | maxAmountFiat | isEligible | minEligibleAmount | minEligibleAmountInFiatGet networkIds: Use GET /api/v1/transfers/managed/networks to fetch the full list of supported networks and their networkId values. These values don’t change — safe to cache permanently, no need to call this endpoint before every Link Token request.Deep-link to provider: Pass integrationId in Link Token request. Get IDs from GET /api/v1/transfers/managed/integrations (stable, safe to cache).Link Token params for onramp: transferType: "onramp" | isInclusiveFeeEnabled: true (user receives amount minus fees) | amountInFiat (if user selected amount in your UX) | integrationId (if user selected provider in your UX)Exchange icons: Pull logoUrl from GET /api/v1/integrations response for display in your lineup.Note: Quote API is optional — users with exchange accounts tend to self-select their preferred provider anyway.Quote API — request body: