Mesh Managed Account Authentication API
The recommended approach for account authentication. Front manages multiple authentication flows and handles all authentication steps such as MFA codes and OAuth redirect through our web and mobile SDKs.
The recommended approach for account authentication. Front manages multiple authentication flows and handles all authentication steps such as MFA codes and OAuth redirect through our web and mobile SDKs.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/mesh-managed-account-authentication-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
title: Mesh Connect Integration Assets Managed Account Authentication API
description: '
Mesh allows users to connect accounts of financial institutions,
crypto exchanges, and self-custody wallets. Mesh handles credential
validation, MFA, and error handling for each integration. After
an account is connected, Mesh allows client applications to read holdings,
transaction history and balances and execute crypto transfers (with user approval).'
version: '1.0'
servers:
- url: https://integration-api.meshconnect.com
security:
- Client-Secret: []
Client-Id: []
tags:
- name: Managed Account Authentication
description: The recommended approach for account authentication. Front manages multiple authentication flows and handles all authentication steps such as MFA codes and OAuth redirect through our web and mobile SDKs.
paths:
/api/v1/cataloglink:
get:
tags:
- Managed Account Authentication
summary: Get catalog link
description: Get personalized catalog link for client
parameters:
- name: UserId
in: query
description: 'A unique Id representing the end user. Typically this will be a user Id from the
client application. Personally identifiable information, such as an email address or phone number,
should not be used. 50 characters length maximum.'
required: true
schema:
maxLength: 50
type: string
- name: BrokerType
in: query
description: 'Type of integration to redirect to. Will redirect to catalog if not provided.
Not supported types: DeFiWallet, CryptocurrencyAddress, CryptocurrencyWallet.'
schema:
allOf:
- $ref: '#/components/schemas/BrokerType'
- name: EnableTransfers
in: query
description: 'Link Configuration identifier - an optional paramater for used configuration.
If not provided default configuration with all avaialbe integrations will be used.'
schema:
type: boolean
- name: RestrictMultipleAccounts
in: query
description: 'The final screen of Link allows users to “continue” back to your app or “Link another account.”
If this param is present then this button will be hidden.'
schema:
type: boolean
responses:
'200':
description: Catalog link created.
content:
application/json:
schema:
$ref: '#/components/schemas/CatalogLinkApiResult'
example:
content:
url: https://web.meshconnect.com/broker-connect?auth_code={authCode}
iFrameUrl: https://web.meshconnect.com/b2b-iframe/{clientId}/broker-connect?auth_code={authCode}
status: ok
message: ''
errorType: ''
'404':
description: API Client not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResult'
example:
status: notFound
message: Error message
displayMessage: Optional display message
errorType: missingField
'400':
description: 'BadRequest can happen in following cases:
<list type="number"><item><description>userId parameter not specified</description></item><item><description>Callback url parameter is invalid</description></item><item><description>Client does not have callback url specified</description></item></list>'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResult'
example:
status: badRequest
message: Error message
displayMessage: Optional display message
errorType: missingField
'401':
description: 'Unauthorized: Client Id or Client Secret are not correct or missing.'
content:
application/json:
schema: {}
deprecated: true
post:
tags:
- Managed Account Authentication
summary: Get catalog link with parameters
description: Get personalized catalog link for client supplying parameters for Link actions, such as transfers
parameters:
- name: UserId
in: query
description: 'A unique Id representing the end user. Typically this will be a user Id from the
client application. Personally identifiable information, such as an email address or phone number,
should not be used. 50 characters length maximum.'
required: true
schema:
maxLength: 50
type: string
- name: BrokerType
in: query
description: 'Type of integration to redirect to. Will redirect to catalog if not provided.
Not supported types: DeFiWallet, CryptocurrencyAddress, CryptocurrencyWallet.'
schema:
allOf:
- $ref: '#/components/schemas/BrokerType'
- name: EnableTransfers
in: query
description: 'Link Configuration identifier - an optional paramater for used configuration.
If not provided default configuration with all avaialbe integrations will be used.'
schema:
type: boolean
- name: RestrictMultipleAccounts
in: query
description: 'The final screen of Link allows users to “continue” back to your app or “Link another account.”
If this param is present then this button will be hidden.'
schema:
type: boolean
requestBody:
description: Data to execute transfer.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/InitializeTransfersForLinkRequest'
example:
toAddresses:
- networkId: e3c7fdd8-b1fc-4e51-85ae-bb276e075611
symbol: ETH
address: '0x00000000000000000000000'
- networkId: e3c7fdd8-b1fc-4e51-85ae-bb276e075611
symbol: USDC
address: '0x00000000000000000000000'
- networkId: 7436e9d0-ba42-4d2b-b4c0-8e4e606b2c12
symbol: MATIC
address: '0x00000000000000000000000'
- networkId: 7436e9d0-ba42-4d2b-b4c0-8e4e606b2c12
symbol: USDC
address: '0x00000000000000000000000'
clientFee: 0
isCustomClientFeeProvided: false
isInclusiveFeeEnabled: false
text/json:
schema:
allOf:
- $ref: '#/components/schemas/InitializeTransfersForLinkRequest'
example:
toAddresses:
- networkId: e3c7fdd8-b1fc-4e51-85ae-bb276e075611
symbol: ETH
address: '0x00000000000000000000000'
- networkId: e3c7fdd8-b1fc-4e51-85ae-bb276e075611
symbol: USDC
address: '0x00000000000000000000000'
- networkId: 7436e9d0-ba42-4d2b-b4c0-8e4e606b2c12
symbol: MATIC
address: '0x00000000000000000000000'
- networkId: 7436e9d0-ba42-4d2b-b4c0-8e4e606b2c12
symbol: USDC
address: '0x00000000000000000000000'
clientFee: 0
isCustomClientFeeProvided: false
isInclusiveFeeEnabled: false
application/*+json:
schema:
allOf:
- $ref: '#/components/schemas/InitializeTransfersForLinkRequest'
example:
toAddresses:
- networkId: e3c7fdd8-b1fc-4e51-85ae-bb276e075611
symbol: ETH
address: '0x00000000000000000000000'
- networkId: e3c7fdd8-b1fc-4e51-85ae-bb276e075611
symbol: USDC
address: '0x00000000000000000000000'
- networkId: 7436e9d0-ba42-4d2b-b4c0-8e4e606b2c12
symbol: MATIC
address: '0x00000000000000000000000'
- networkId: 7436e9d0-ba42-4d2b-b4c0-8e4e606b2c12
symbol: USDC
address: '0x00000000000000000000000'
clientFee: 0
isCustomClientFeeProvided: false
isInclusiveFeeEnabled: false
responses:
'200':
description: Catalog link created.
content:
application/json:
schema:
$ref: '#/components/schemas/CatalogLinkApiResult'
example:
content:
url: https://web.meshconnect.com/broker-connect?auth_code={authCode}
iFrameUrl: https://web.meshconnect.com/b2b-iframe/{clientId}/broker-connect?auth_code={authCode}
status: ok
message: ''
errorType: ''
'404':
description: API Client not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResult'
example:
status: notFound
message: Error message
displayMessage: Optional display message
errorType: missingField
'400':
description: 'BadRequest can happen in following cases:
<list type="number"><item><description>userId parameter not specified</description></item><item><description>Callback url parameter is invalid</description></item><item><description>Client does not have callback url specified</description></item></list>'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResult'
example:
status: badRequest
message: Error message
displayMessage: Optional display message
errorType: missingField
'401':
description: 'Unauthorized: Client Id or Client Secret are not correct or missing.'
content:
application/json:
schema: {}
deprecated: true
/api/v1/linktoken:
post:
tags:
- Managed Account Authentication
summary: Get Link token with parameters
description: Get a short lived, one-time use token for initializing a Link session using the client-side SDKs
requestBody:
description: Create Link token request.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/GetLinkTokenRequest'
example:
userId: UserId
configurationId: 18a20b11-e47f-43b9-8546-94284e9ee547
restrictMultipleAccounts: true
transferOptions:
toAddresses:
- networkId: e3c7fdd8-b1fc-4e51-85ae-bb276e075611
symbol: ETH
address: '0x00000000000000000000000'
- networkId: e3c7fdd8-b1fc-4e51-85ae-bb276e075611
symbol: USDC
address: '0x00000000000000000000000'
- networkId: 7436e9d0-ba42-4d2b-b4c0-8e4e606b2c12
symbol: MATIC
address: '0x00000000000000000000000'
- networkId: 7436e9d0-ba42-4d2b-b4c0-8e4e606b2c12
symbol: USDC
address: '0x00000000000000000000000'
amountInFiat: 10
isInclusiveFeeEnabled: false
text/json:
schema:
allOf:
- $ref: '#/components/schemas/GetLinkTokenRequest'
example:
userId: UserId
configurationId: 18a20b11-e47f-43b9-8546-94284e9ee547
restrictMultipleAccounts: true
transferOptions:
toAddresses:
- networkId: e3c7fdd8-b1fc-4e51-85ae-bb276e075611
symbol: ETH
address: '0x00000000000000000000000'
- networkId: e3c7fdd8-b1fc-4e51-85ae-bb276e075611
symbol: USDC
address: '0x00000000000000000000000'
- networkId: 7436e9d0-ba42-4d2b-b4c0-8e4e606b2c12
symbol: MATIC
address: '0x00000000000000000000000'
- networkId: 7436e9d0-ba42-4d2b-b4c0-8e4e606b2c12
symbol: USDC
address: '0x00000000000000000000000'
amountInFiat: 10
isInclusiveFeeEnabled: false
application/*+json:
schema:
allOf:
- $ref: '#/components/schemas/GetLinkTokenRequest'
example:
userId: UserId
configurationId: 18a20b11-e47f-43b9-8546-94284e9ee547
restrictMultipleAccounts: true
transferOptions:
toAddresses:
- networkId: e3c7fdd8-b1fc-4e51-85ae-bb276e075611
symbol: ETH
address: '0x00000000000000000000000'
- networkId: e3c7fdd8-b1fc-4e51-85ae-bb276e075611
symbol: USDC
address: '0x00000000000000000000000'
- networkId: 7436e9d0-ba42-4d2b-b4c0-8e4e606b2c12
symbol: MATIC
address: '0x00000000000000000000000'
- networkId: 7436e9d0-ba42-4d2b-b4c0-8e4e606b2c12
symbol: USDC
address: '0x00000000000000000000000'
amountInFiat: 10
isInclusiveFeeEnabled: false
responses:
'200':
description: Link token created.
content:
application/json:
schema:
$ref: '#/components/schemas/LinkTokenModelApiResult'
example:
content:
linkToken: aHR0cHM6Ly93ZWIuZ2V0ZnJvbnQuY29tL2IyYi1pZnJhbWUve2NsaWVudElkfS9icm9rZXItY29ubmVjdD9hdXRoX2NvZGU9e2F1dGhDb2RlfQ==
status: ok
message: ''
errorType: ''
'404':
description: API Client not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResult'
example:
status: notFound
message: Error message
displayMessage: Optional display message
errorType: missingField
'400':
description: 'BadRequest can happen in following cases:
<list type="number"><item><description>userId parameter not specified</description></item></list>'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResult'
example:
status: badRequest
message: Error message
displayMessage: Optional display message
errorType: missingField
'401':
description: 'Unauthorized: Client Id or Client Secret are not correct or missing.'
content:
application/json:
schema: {}
/api/v1/token/refresh:
post:
tags:
- Managed Account Authentication
summary: Refresh auth token
description: "Refresh auth token of the connected institution.\nSome institutions do not require tokens to be refreshed.\n \nThe following institutions require custom flows:\n \nWeBull: AuthToken should be provided along with the RefreshToken\n \nVanguard: security settings may activate MFA, requiring user action.\nIf MFA is triggered, a second refresh request should be sent.\nSecond request should contain MFA code and access token obtained from initial response.\n \nBitfinex Direct: Expired Access Token is used as Refresh token. Use this endpoint to\ntrade it for a new one"
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/BrokerRefreshTokenRequest'
example:
refreshToken: Secret refresh token
type: coinbase
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/B2BBrokerRefreshTokenResponseApiResult'
example:
content:
status: succeeded
expiresInSeconds: 86400
brokerAccountTokens:
- accessToken: New secret token
refreshToken: New secret refresh token
status: ok
message: ''
errorType: ''
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResult'
example:
status: badRequest
message: Unauthorized token
displayMessage: Could not refresh the authentication token. The provided data is not correct
errorType: badRequest
'401':
description: Unauthorized
content:
application/json:
schema: {}
/api/v1/account:
delete:
tags:
- Managed Account Authentication
summary: Remove connection
description: Remove connection to the financial institution and erase all related data completely.
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/BrokerBaseRequest'
example:
authToken: Secret authentication token
type: robinhood
text/json:
schema:
allOf:
- $ref: '#/components/schemas/BrokerBaseRequest'
example:
authToken: Secret authentication token
type: robinhood
application/*+json:
schema:
allOf:
- $ref: '#/components/schemas/BrokerBaseRequest'
example:
authToken: Secret authentication token
type: robinhood
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResult'
example:
status: ok
message: ''
errorType: ''
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResult'
example:
status: badRequest
message: Error message
displayMessage: Optional display message
errorType: missingField
'401':
description: Unauthorized
content:
application/json:
schema: {}
/api/v1/status:
get:
tags:
- Managed Account Authentication
summary: Get health status
description: Get the list of supported institutions and their health statuses.
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/B2BBrokersHealthStatusListApiResult'
example:
content:
- type: robinhood
name: Robinhood
isUp: true
supportedProducts:
- balance
- holdings
- identity
- orders
- transfers
- type: celsius
name: Celsius
isUp: false
description: Temporarily disabled
downTimeStart: 1655891444
supportedProducts:
- balance
- orders
- transfers
- holdings
- type: deFiWallet
name: MetaMask
isUp: false
supportedProducts:
- transfers
- holdings
deFiWalletData:
id: 00000000-0000-0000-0000-000000000000
name: MetaMask
status: ok
message: ''
errorType: ''
'401':
description: Unauthorized
content:
application/json:
schema: {}
/api/v1/integrations:
get:
tags:
- Managed Account Authentication
summary: Retrieve the list of all available integrations.
description: 'Returns a list of integrations with details including the integration ID, name, type,
DeFi wallet provider ID, and categories.'
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationsResponseApiResult'
example:
content:
items:
- id: b7efa542-0b16-4a2a-8f89-00143298e615
name: CoinbasePro
type: coinbasePro
logo:
logoWhiteUrl: https://frontuserfilecdn.azureedge.net/public/logos/Coinbase_Logo_White.svg
logoBlackUrl: https://frontuserfilecdn.azureedge.net/public/logos/Coinbase_Logo_Black.svg
logoColorUrl: https://frontuserfilecdn.azureedge.net/public/logos/Coinbase_Logo_Color.svg
iconWhiteUrl: https://frontuserfilecdn.azureedge.net/public/logos/Coinbase_Icon_White.svg
iconBlackUrl: https://frontuserfilecdn.azureedge.net/public/logos/Coinbase_Icon_Black.svg
iconColorUrl: https://frontuserfilecdn.azureedge.net/public/logos/Coinbase_Icon_Color.svg
cryptoTransfersSupported: true
- id: 3d8f5c31-9fc0-4b61-bdfb-00fb18cbb9ad
name: CoinCircle
type: deFiWallet
deFiWalletProviderId: 36d8d9c0c7fe2957149ce8e878f3a01...
categories:
- deFiWallet
logo:
logoColorUrl: https://frontuserfilecdn.azureedge.net/public/logos/CoinCircle_Logo_Color.svg
iconColorUrl: https://frontuserfilecdn.azureedge.net/public/logos/CoinCircle_Icon_Color.svg
cryptoTransfersSupported: true
status: ok
message: ''
errorType: ''
components:
schemas:
LinkTokenModelApiResult:
type: object
properties:
status:
enum:
- ok
- serverFailure
- permissionDenied
- badRequest
- notFound
- conflict
- tooManyRequest
- locked
allOf:
- $ref: '#/components/schemas/ApiResultStatus'
readOnly: true
message:
type:
- string
- 'null'
description: A message generated by the API
displayMessage:
type:
- string
- 'null'
description: User-friendly display message that can be presented to the end user
errorType:
type:
- string
- 'null'
description: 'Strictly-typed error type that is explaining the reason of an unsuccessful status of the operation.
All possible error types are available in the documentation.'
errorData:
readOnly: true
content:
allOf:
- $ref: '#/components/schemas/LinkTokenModel'
additionalProperties: false
BrokerAccountTokens:
type: object
properties:
account:
allOf:
- $ref: '#/components/schemas/BrokerAccount'
accessToken:
type:
- string
- 'null'
refreshToken:
type:
- string
- 'null'
additionalProperties: false
TransferToAddressWithAmount:
type: object
properties:
networkId:
type: string
description: 'The Id of the network in Front system. The list of all available networks can be obtained by
using `GET /transfers/managed/networks` endpoint.'
format: uuid
symbol:
type:
- string
- 'null'
description: The symbol of the digital asset.
address:
type:
- string
- 'null'
description: The address to send the asset to.
addressTag:
type:
- string
- 'null'
description: Secondary address identifier for coins like XRP,XMR etc.
amount:
type:
- number
- 'null'
description: Amount of tokens to transfer by specified network.
format: double
additionalProperties: false
IntegrationsResponseApiResult:
type: object
properties:
status:
enum:
- ok
- serverFailure
- permissionDenied
- badRequest
- notFound
- conflict
- tooManyRequest
- locked
allOf:
- $ref: '#/components/schemas/ApiResultStatus'
readOnly: true
message:
type:
- string
- 'null'
description: A message generated by the API
displayMessage:
type:
- string
- 'null'
description: User-friendly display message that can be presented to the end user
errorType:
type:
- string
- 'null'
description: 'Strictly-typed error type that is explaining the reason of an unsuccessful status of the operation.
All possible error types are available in the documentation.'
errorData:
readOnly: true
content:
allOf:
- $ref: '#/components/schemas/IntegrationsResponse'
description: Integration response.
additionalProperties: false
FinancialInstitutionIntegrationType:
enum:
- brokerage
- bank
- exchange
- wallet
- address
- nftMarketplace
- deFiWallet
type: string
B2BBrokerAuthStatus:
enum:
- failed
- succeeded
- mfaRequired
type: string
B2BBrokerRefreshTokenResponseApiResult:
type: object
properties:
status:
enum:
- ok
- serverFailure
- permissionDenied
- badRequest
- notFound
- conflict
- tooManyRequest
- locked
allOf:
- $ref: '#/components/schemas/ApiResultStatus'
readOnly: true
message:
type:
- string
- 'null'
description: A message generated by the API
displayMessage:
type:
- string
- 'null'
description: User-friendly display message that can be presented to the end user
errorType:
type:
- string
- 'null'
description: 'Strictly-typed error type that is explaining the reason of an unsuccessful status of the operation.
All possible error types are available in the documentation.'
errorData:
readOnly: true
content:
allOf:
- $ref: '#/components/schemas/B2BBrokerRefreshTokenResponse'
additionalProperties: false
TransferTypeEnum:
enum:
- deposit
- payment
- onramp
type: string
ApiResultStatus:
enum:
- ok
- serverFailure
- permissionDenied
- badRequest
- notFound
- conflict
- tooManyRequest
- locked
type: string
BrokerFeature:
enum:
- holdings
- balance
- orders
- transfers
- identity
- cryptocurrencyDepositAddresses
- accountNumber
- paymentMethods
- conversions
type: string
LinkTokenTransferOptions:
type: object
properties:
toAddresses:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/TransferToAddressWithAmount'
description: 'The list of destination addresses with corresponding networks are asset symbols that
can be used to initiate incoming transfers. If this parameter is present, the Link
session will continue to transfer flow after connecting the origin account.'
amountInFiat:
type:
- number
- 'null'
description: Amount in USD to transfer. If not provided users can specify amount by themselves.
format: double
transactionId:
maxLength: 128
minLength: 0
type:
- string
- 'null'
description: Transaction ID Provided by client to track transaction in future calls
clientFee:
maximum: 1
minimum: 0
type:
- number
- 'null'
description: 'A percentage fee (input as a ratio, eg. 0.02500 = 2.500%) added onto your users'' gross payments to your company.
This will override any default fee entered in your Mesh dashboard for an individual transaction.
Please note: this fee should only be used for Payments (when the transfer destination is an address owned by your company),
and not for Deposits (when the transfer destination is an address owned by the end user).
If used for Deposits, it will increase the size of the user''s Deposit by the fee amount,
but will incorrectly show to the user as a fee.'
format: double
transferType:
allOf:
- $ref: '#/components/schemas/TransferTypeEnum'
description: 'Deposit: The user is transferring crypto to a wallet they own on your platform.
Payment: The user is transferring crypto to a wallet your company owns in exchange for receiving a good or service.
Onramp: The user is using balances and linked payment methods in an exchange account to fund the purchase of crypto in their wallet on your platform.'
fundingOptions:
allOf:
- $ref: '#/components/schemas/TransferCryptocurrencyFundingOptions'
description: 'Specifies the permitted options to use the end user''s available buying power
and/or payment methods to supplement the cryptocurrency balance if it is insufficient
for the transfer.'
isInclusiveFeeEnabled:
type: boolean
description: Specifies if all the fees are included in the amount to transfer.
additionalProperties: false
IntegrationsResponse:
type: object
properties:
items:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/IntegrationModel'
description: Integrations list.
additionalProperties: false
description: Integration response.
TransferCryptocurrencyFundingOptions:
type: object
properties:
enabled:
type: boolean
description: 'Indicates whether the Link is permitted to use the end user''s available buying power
and/or payment methods to supplement the cryptocurrency balance if it is insufficient
for the transfer.'
additionalProperties: false
CatalogLinkApiResult:
type: object
properties:
status:
enum:
- ok
- serverFailure
- permissionDenied
- badRequest
- notFound
- conflict
- tooManyRequest
- locked
allOf:
- $ref: '#/components/schemas/ApiResultStatus'
readOnly: true
message:
type:
- string
- 'null'
description: A message generated by the API
displayMessage:
type:
- string
- 'null'
description: User-friendly display message that can be presented to the end user
errorType:
type:
- string
- 'null'
description: 'Strictly-typed
# --- truncated at 32 KB (51 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/mesh/refs/heads/main/openapi/mesh-managed-account-authentication-api-openapi.yml