Use XCM SDK🪄 within XCM API
The following guide guides you through the XCM SDK functionality implemented in XCM API.
Send XCM
This functionality allows you to send XCM messages across the Paraverse.
Package-less implementation of XCM API XCM features into your application
NOTE:
We recently introduced a new, much simpler way to implement XCM API! You can now request a hashed response to the built call, which will offlift you from parsing and work right away!
//Chain WS API instance that will send generated XCM Call
const wsProvider = new WsProvider('YourChainWSPort'); //Specify "YourChainWSPort" with WS Port of sender chain
const api = await ApiPromise.create({ provider: wsProvider });
const response = await fetch(
"http://localhost:3001/x-transfer”,
{
method: ‘POST’,
body: JSON.stringify({
"from": "origin",
"to": "destination",
"address": "address",
"currency": {currencySpec, amount: amount},
})
});
const hash = await response.json();
//Received response is parsed to the call
const call = api.tx(hash)
//Call is then signed and can be subscribed to extrinsics
call.signAndSend(address, { signer: injector.signer }, ({ status, txHash }) => {
Relay chain to Parachain (DMP)
The following endpoint constructs the Relay chain to the Parachain XCM message.
Endpoint: POST /x-transfer
Parameters:
from
(Inside JSON body): (required): Represents the Relay chain from which the assets will be transferred.to
(Inside JSON body): (required): Represents the Parachain to which the assets will be transferred.currency
(Inside JSON body): (required): Specifies the currency and amount of assets to transfer.address
(Inside JSON body): (required): Specifies the address of the recipient.xcmVersion
(Inside JSON body): (optional): Specifies manually selected XCM version if pre-selected does not work. Format: Vx - where x = version number eg. V4.
Errors:
400
(Bad request exception) - Returned when parameter 'to' is not provided400
(Bad request exception) - Returned when parameter 'to' is not a valid Parachain400
(Bad request exception) - Returned when parameter 'amount' is expected but not provided400
(Bad request exception) - Returned when parameter 'amount' is not a valid amount400
(Bad request exception) - Returned when parameter 'address' is not a valid address500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/x-transfer", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
from: "Polkadot" // Or Kusama
to: "Parachain", // Replace "Parachain" with destination Parachain, e.g., "Moonbeam" or custom Multilocation
currency: { symbol: 'DOT', amount: amount},
address: "Address", // Replace "Address" with destination wallet address (In AccountID32 or AccountKey20 Format) or custom Multilocation
//xcmVersion: "Vx" //Optional parameter - replace "Vx" with V and version number eg. "V4"
})
});
AccountId32 and AccountKey20 addresses can be directly copied from PolkadotJS as our SDK has a handler to convert it into the desired hex string automatically.
Eg. use standard public key 141NGS2jjZca5Ss2Nysth2stJ6rimcnufCNHnh5ExSsftn7U
Instead of 0x84fc49ce30071ea611731838cc7736113c1ec68fbc47119be8a0805066df9b2b
Parachain chain to Relay chain (UMP)
The following endpoint constructs Parachain to Relay chain XCM message.
Endpoint: POST /x-transfer
Parameters:
from
(Inside JSON body): (required): Represents the Parachain from which the assets will be transferred.to
(Inside JSON body): (required): Represents the Relay chain to which the assets will be transferred.currency
(Inside JSON body): (required): Specifies the currency and amount of assets to transfer.address
(Inside JSON body): (required): Specifies the address of the recipient.xcmVersion
(Inside JSON body): (optional): Specifies manually selected XCM version if pre-selected does not work. Format: Vx - where x = version number eg. V4.
Errors:
400
(Bad request exception) - Returned when parameter 'from' is not provided400
(Bad request exception) - Returned when parameter 'from' is not a valid Parachain400
(Bad request exception) - Returned when parameter 'amount' is expected but not provided400
(Bad request exception) - Returned when parameter 'amount' is not a valid amount400
(Bad request exception) - Returned when parameter 'address' is not a valid address500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/x-transfer", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
from: "Parachain" // Replace "Parachain" with destination Parachain, e.g., "Moonbeam" or custom Multilocation
to: "Polkadot", // Or Kusama
currency: { symbol: 'DOT', amount: amount},
address: "Address", // Replace "Address" with destination wallet address (In AccountID32 or AccountKey20 Format) or custom Multilocation
//xcmVersion: "Vx" //Optional parameter - replace "Vx" with V and version number eg. "V4"
})
});
AccountId32 and AccountKey20 addresses can be directly copied from PolkadotJS as our SDK has a handler to convert it into the desired hex string automatically.
Eg. use standard public key 141NGS2jjZca5Ss2Nysth2stJ6rimcnufCNHnh5ExSsftn7U
Instead of 0x84fc49ce30071ea611731838cc7736113c1ec68fbc47119be8a0805066df9b2b
Parachain to Parachain (HRMP)
The following endpoint allows got creation of Parachain to Parachain XCM call. This call is specified by Parachains selected as origin - from
and destination - to
parameters.
Endpoint: POST /x-transfer
Parameters:
from
(Inside JSON body): (required): Represents the Parachain from which the assets will be transferred.to
(Inside JSON body): (required): Represents the Parachain to which the assets will be transferred.currency
(Inside JSON body): (required): Represents the asset being sent. It should be a string value.address
(Inside JSON body): (required): Specifies the address of the recipient.xcmVersion
(Inside JSON body): (optional): Specifies manually selected XCM version if pre-selected does not work. Format: Vx - where x = version number eg. V4.
Errors:
400
(Bad request exception) - Returned when query parameters 'from' or 'to' are not provided400
(Bad request exception) - Returned when query parameters 'from' or 'to' are not a valid Parachains400
(Bad request exception) - Returned when query parameter 'currency' is expected but not provided400
(Bad request exception) - Returned when query parameter 'currency' is not a valid currency400
(Bad request exception) - Returned when entered nodes 'from' and 'to' are not compatible for the transaction400
(Bad request exception) - Returned when query parameter 'amount' is expected but not provided400
(Bad request exception) - Returned when query parameter 'amount' is not a valid amount400
(Bad request exception) - Returned when query parameter 'address' is not a valid address500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
NOTE If you wish to transfer from Parachain that uses long IDs for example Moonbeam you have to add character 'n' the end of currencyID. Eg: currency: "42259045809535163221576417993425387648n"
will mean you wish to transfer xcDOT.
Example of request:
const response = await fetch("http://localhost:3001/x-transfer", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
from: "Parachain", // Replace "Parachain" with sender Parachain, e.g., "Acala"
to: "Parachain", // Replace "Parachain" with destination Parachain, e.g., "Moonbeam" or custom Multilocation
currency: {id: currencyID, amount: amount} | {symbol: currencySymbol, amount: amount} | {symbol: Native('currencySymbol'), amount: amount} | {symbol: Foreign('currencySymbol'), amount: amount} | {symbol: ForeignAbstract('currencySymbol'), amount: amount} | {multilocation: AssetMultilocationString, amount: amount | AssetMultilocationJson, amount: amount} | {multilocation: Override('Custom Multilocation'), amount: amount} | {multiasset: {currencySelection, isFeeAsset?: true /* for example symbol: symbol or id: id, or multilocation: multilocation*/, amount: amount}}
address: "Address" // Replace "Address" with destination wallet address (In AccountID32 or AccountKey20 Format) or custom Multilocation
//xcmVersion: "Vx" //Optional parameter - replace "Vx" with V and version number eg. "V4"
})
});
AccountId32 and AccountKey20 addresses can be directly copied from PolkadotJS as our SDK has a handler to convert it into the desired hex string automatically.
Eg. use standard public key 141NGS2jjZca5Ss2Nysth2stJ6rimcnufCNHnh5ExSsftn7U
Instead of 0x84fc49ce30071ea611731838cc7736113c1ec68fbc47119be8a0805066df9b2b
Custom multilocation call
You can now customize multilocations for Address, Currency and Destination within all three scenarios (where possible).
- Parameters:
- Same as in above scenarios
- Errors:
- Same as in above scenarios
Example of request:
const response = await fetch("http://localhost:3001/x-transfer", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
from: "Parachain", // Replace "Parachain" with sender Parachain, e.g., "Acala"
to: "Parachain", // Replace "Parachain" with destination Parachain, e.g., "Moonbeam" or custom Multilocation
address: "Address", // Replace "Address" with destination wallet address (In AccountID32 or AccountKey20 Format) or custom Multilocation
currency: {
multilocation:
type: 'Override',
value: {
parents: 0,
interior: {
X2: [{ PalletInstance: '50' }, { GeneralIndex: '41' }],
},
},
amount: amount
},
//xcmVersion: "Vx" //Optional parameter - replace "Vx" with V and version number eg. "V4"
})
});
Ecosystem Bridges
This section sums up currently available and implemented ecosystem bridges that are offered in the XCM API. Implementing cross-ecosystem asset transfers was never this easy!
Kusama<>Polkadot bridge
Latest API versions support Polkadot <> Kusama bridge in very native and intuitive way. You just construct the Polkadot <> Kusama transfer as standard Parachain to Parachain scenario transfer.
- Parameters:
- Same as in Parachain -> Parachain scenario
- Errors:
- Same as in Parachain -> Parachain scenario
Example of request:
const response = await fetch("http://localhost:3001/x-transfer", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
from: "AssetHubPolkadot", // Or AssetHubKusama
to: "AssetHubKusama", // Or AssetHubPolkadot
currency: {symbol: "KSM", amount: amount}, // Or DOT
address: "Address" // AccountID 32 address
})
});
Snowbridge Ethereum -> AssetHubPolkadot
Just like Polkadot <> Kusama bridge the Snowbridge is implemented in as intuitive and native form as possible. The implementations for Polkadot -> Ethereum and Ethereum -> Polkadot differ due to different architecture, so we will mention both scenarios.
- Parameters:
- Same as in Parachain -> Parachain scenario
- Errors:
- Same as in Parachain -> Parachain scenario
Example of request:
//As Ethereum module is different from Polkadot modules (Thus Ethereum is not compatible with new hash response system), we provide complete implementation snippet.
const provider = new ethers.BrowserProvider(window.ethereum);
const signer = await provider.getSigner();
const response = await axios(`https://api.lightspell.xyz/x-transfer-eth`, {
method: "POST",
data: {
to: 'AssetHubPolkadot',
destAddress: address,
address: await signer.getAddress(),
currency: {currencySpec}, // {symbol: currencySymbol, amount: amount} | {id: currencyID, amount: amount}
}
});
const apiResponse = response.data;
const GATEWAY_CONTRACT = "0xEDa338E4dC46038493b885327842fD3E301CaB39";
const contract = IGateway__factory.connect(GATEWAY_CONTRACT, signer);
const abi = ethers.AbiCoder.defaultAbiCoder();
const address: MultiAddressStruct = {
data: abi.encode(["bytes32"], [formValues.address]),
kind: 1,
};
const response = await contract.sendToken(
apiResonse.token,
apiResonse.destinationParaId,
address,
apiResonse.destinationFee,
apiResonse.amount,
{
value: apiResonse.fee,
}
);
const receipt = await response.wait(1);
if (receipt === null) {
throw new Error("Error waiting for transaction completion");
}
if (receipt?.status !== 1) {
throw new Error("Transaction failed");
}
const events: LogDescription[] = [];
receipt.logs.forEach((log) => {
const event = contract.interface.parseLog({
topics: [...log.topics],
data: log.data,
});
if (event !== null) {
events.push(event);
}
});
Snowbridge AssetHubPolkadot -> Ethereum
- Parameters:
- Same as in Parachain -> Parachain scenario
- Errors:
- Same as in Parachain -> Parachain scenario
Example of request:
const response = await fetch("http://localhost:3001/x-transfer", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
from: "AssetHubPolkadot",
to: "Ethereum",
currency: {symbol: "WETH", amount: amount}, // Any supported asset - WBTC, WETH.. - {symbol: currencySymbol} | {id: currencyID}
address: "Address" // Ethereum Address
})
});
Batch call
XCM API allows you to batch your XCM calls and send multiple at the same time via batch feature.
Endpoint POST /x-transfer-batch
Parameters
transfers
(Inside JSON body): (required): Represents array of XCM calls along with optional parameter "options" which contains "mode" to switch between BATCH and BATCH_ALL call forms.
Errors:
400
(Bad request exception) - Returned when query parameter 'transfers' is expected but not provided500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
//mode options: - BATCH
// - BATCH_ALL
const response = await fetch("http://localhost:3001/x-transfer-batch", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
transfers: "Parachain", // Replace "transfers" with array of XCM transfers
})
});
//Example of JSON body
/*{
"transfers": [
{
"from": "Kusama"
"to": "Moonriver",
"currency": { symbol: "DOT", amount: amount},
"address": "0x939229F9c6E2b97589c4a5A0B3Eb8664FFc00502"
},
{
"from": "Kusama"
"to": "Basilisk",
"currency": { symbol: "DOT", amount: amount},
"address": "bXgnPigqWnUTb9PxgCvnt61bsQoRQFnzLYYyRPV1bvB6DLu87"
}
],
"options": {
"mode": "BATCH"
}
}*/
Asset claim
Assets that have been trapped in the cross-chain transfers can now be recovered through the asset claim feature.
Endpoint: POST /asset-claim
Parameters:
from
(Inside JSON body): (required): Represents the Parachain on which the asset will be claimed.address
(Inside JSON body): (required): Specifies the address of the recipient.fungible
(Inside JSON body): (required): Represents the asset being claimed. It should be a multilocation.
Errors:
400
(Bad request exception) - Returned when parameter 'from' is not provided400
(Bad request exception) - Returned when parameter 'address' is not provided400
(Bad request exception) - Returned when query parameter 'fungible' is expected but not provided500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/asset-claim", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
from: "Parachain", // Replace "from" with the numeric value you wish to transfer
address: "Address", // Replace "address" with destination wallet address (In AccountID32 or AccountKey20 Format) or custom Multilocation
fungible: "Asset Multilocation array" //Replace "Asset Multilocation array" with specific asset multilocation along with amount specification
})
});
//Example of asset multilocation array:
/*"fungible": [
{
"id": {
"Concrete": {
"parents": 0,
"interior": {
"Here": null
}
}
},
"fun": {
"Fungible": "10000"
}
}]*/
AccountId32 and AccountKey20 addresses can be directly copied from PolkadotJS as our SDK has a handler to convert it into the desired hex string automatically.
Eg. use standard public key 141NGS2jjZca5Ss2Nysth2stJ6rimcnufCNHnh5ExSsftn7U
Instead of 0x84fc49ce30071ea611731838cc7736113c1ec68fbc47119be8a0805066df9b2b
Transfer info query
The following functionality gives you all the necessary information about your transfer, including fees, sufficiency to transfer and more.
Endpoint: GET /transfer-info
Parameters:
origin
(Inside JSON body): (required): Represents the Parachain from which the assets will be transferred.destination
(Inside JSON body): (required): Represents the Parachain to which the assets will be transferred.currency
: (Inside JSON body): (required): Represents the asset being sent. It should be a string value.amount
: (Inside JSON body): (required): Specifies the amount of assets to transfer. It should be a numeric value.accountOrigin
: (Inside JSON body): (required): Specifies the address of the origin.accountDestination
: (Inside JSON body): (required): Specifies the recipient's address.
Errors:
400
(Bad request exception) - Returned when parameter 'origin/destination' is not provided or existing400
(Bad request exception) - Returned when parameter 'accountOrigin/accountDestination' is not provided or correct400
(Bad request exception) - Returned when query parameter 'currency/amount' is expected but not provided400
(Bad request exception) - Returned when query parameter 'amount' is not positive number500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch(
'http://localhost:3001/transfer-info?' , {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
origin: 'Parachain', // Replace "Parachain" with chain you wish to query transfer info for as origin
destination: 'Parachain', // Replace "destination" with chain you wish to query transfer info for as destination
currency: {currencySpec}, //{id: currencyID} | {symbol: currencySymbol} | {"symbol": {"type": "Native","value": "currencySymbol"} | {"symbol": {"type": "Foreign","value": "currencySymbol"} | {"symbol": {"type": "ForeignAbstract","value": "currencySymbolAlias"} | {multilocation: AssetMultilocationString} | {multilocation: AssetMultilocationJson} | {multilocation: "type": "Override","value": "CustomAssetMultilocationJson"}
amount: 'Amount', // Replace "Amount" with the numeric value you wish to transfer
accountOrigin: 'Account address', // Replace "Address" with origin wallet address (In AccountID32 or AccountKey20 Format)
accountDestination: 'Account address', // Replace "Address" with destination wallet address (In AccountID32 or AccountKey20 Format)
}),
});
AccountId32 and AccountKey20 addresses can be directly copied from PolkadotJS as our SDK has a handler to convert it into the desired hex string automatically.
Eg. use standard public key 141NGS2jjZca5Ss2Nysth2stJ6rimcnufCNHnh5ExSsftn7U
Instead of 0x84fc49ce30071ea611731838cc7736113c1ec68fbc47119be8a0805066df9b2b
Asset query
This functionality allows you to perform various asset queries with compatible Parachains.
Package-less implementation of XCM API Asset features into your application
const response = await fetch(
"http://localhost:3001/assets/<action>" + //Replace "action" with your desired action eg. "Acala/native"
);
console.log(response) //use response data as necessary
Query native asset balance
The following endpoint allows you to query native asset balance for on specific chain.
Endpoint: POST /balance/:node/native
Parameters:
node
(Path parameter): Specifies the name of the Parachain.address
(Inside JSON body): (required): Specifies the address of the account.
Errors:
400
(Bad request exception) - Returned when parameter 'address' is not provided500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/balance/:node/native", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
address: "Address" // Replace "Address" with wallet address (In AccountID32 or AccountKey20 Format)
})
});
Query foreign asset balance
The following endpoint allows you to query foreign asset balance for on specific chain.
Endpoint: POST /balance/:node/foreign
Parameters:
node
(Path parameter): Specifies the name of the Parachain.address
(Inside JSON body): (required): Specifies the address of the account.currency
(Inside JSON body): (required): Specifies the currency to query.
Errors:
400
(Bad request exception) - Returned when parameter 'address' is not provided500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/balance/:node/foreign", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
address: "Address", // Replace "Address" with wallet address (In AccountID32 or AccountKey20 Format)
currency: "Currency" //Replace "Currency" with {id: currencyID} | {symbol: currencySymbol} | {"symbol": {"type": "Native","value": "currencySymbol"} | {"symbol": {"type": "Foreign","value": "currencySymbol"} | {"symbol": {"type": "ForeignAbstract","value": "currencySymbolAlias"} | {multilocation: AssetMultilocationString} | {multilocation: AssetMultilocationJson}
})
});
Query max foreign currency transferable amount
The following endpoint allows you to query the maximum native currency transferable amount for a specific chain.
Endpoint: POST /balance/:node/max-foreign-transferable-amount
Parameters:
node
(Path parameter): Specifies the name of the Parachain.address
(Inside JSON body): (required): Specifies the address of the account.currency
(Inside JSON body): (required): Specifies the currency to query.
Errors:
400
(Bad request exception) - Returned when parameter 'node' is not provided400
(Bad request exception) - Returned when body parameter 'address' is not provided400
(Bad request exception) - Returned when body parameter 'currency' is not provided500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/balance/:node/max-foreign-transferable-amount", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
address: "Address", // Replace "Address" with wallet address (In AccountID32 or AccountKey20 Format)
currency: "Currency" //Replace "Currency" with {id: currencyID} | {symbol: currencySymbol} | {"symbol": {"type": "Native","value": "currencySymbol"} | {"symbol": {"type": "Foreign","value": "currencySymbol"} | {"symbol": {"type": "ForeignAbstract","value": "currencySymbolAlias"} | {multilocation: AssetMultilocationString} | {multilocation: AssetMultilocationJson}
})
});
Query max native currency transferable amount
The following endpoint allows you to query the maximum native currency transferable amount for a specific chain.
Endpoint: POST /balance/:node/max-native-transferable-amount
Parameters:
node
(Path parameter): Specifies the name of the Parachain.address
(Inside JSON body): (required): Specifies the address of the account.currency
(Inside JSON body): (optional): Specifies the currency to query (Has to be currency symbol as native assets do not have IDs).
Errors:
400
(Bad request exception) - Returned when parameter 'node' is not provided400
(Bad request exception) - Returned when body parameter 'address' is not provided400
(Bad request exception) - Returned when body parameter 'currency' is not provided and has to be provided (Otherwise optional)500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/balance/:node/max-native-transferable-amount", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
address: "Address", // Replace "Address" with wallet address (In AccountID32 or AccountKey20 Format)
currency?: "Currency" //Replace "Currency" with {symbol: currencySymbol}
})
});
Query max transferable amount
The following endpoint allows you to query the maximum currency transferable amount for a specific chain.
Endpoint: POST /balance/:node/transferable-amount
Parameters:
node
(Path parameter): Specifies the name of the Parachain.address
(Inside JSON body): (required): Specifies the address of the account.currency
(Inside JSON body): (required): Specifies the currency to query.
Errors:
400
(Bad request exception) - Returned when parameter 'node' is not provided400
(Bad request exception) - Returned when body parameter 'address' is not provided400
(Bad request exception) - Returned when body parameter 'currency' is not provided500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/balance/:node/transferable-amount", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
address: "Address", // Replace "Address" with wallet address (In AccountID32 or AccountKey20 Format)
currency: "Currency" //Replace "Currency" with {id: currencyID} | {symbol: currencySymbol} | {"symbol": {"type": "Native","value": "currencySymbol"} | {"symbol": {"type": "Foreign","value": "currencySymbol"} | {"symbol": {"type": "ForeignAbstract","value": "currencySymbolAlias"} | {multilocation: AssetMultilocationString} | {multilocation: AssetMultilocationJson}
})
});
Query asset existential deposit
The following endpoint allows you to query the existential deposit for currency in a specific chain.
Endpoint: POST /balance/:node/existential-deposit
Parameters:
node
(Path parameter): Specifies the name of the Parachain.currency
(Inside JSON body): (required): Specifies the currency to query.
Errors:
400
(Bad request exception) - Returned when parameter 'node' is not provided400
(Bad request exception) - Returned when body parameter 'currency' is not provided500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/balance/:node/existential-deposit", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
currency: "Currency" //Replace "Currency" with {id: currencyID} | {symbol: currencySymbol} | {"symbol": {"type": "Native","value": "currencySymbol"} | {"symbol": {"type": "Foreign","value": "currencySymbol"} | {"symbol": {"type": "ForeignAbstract","value": "currencySymbolAlias"} | {multilocation: AssetMultilocationString} | {multilocation: AssetMultilocationJson}
})
});
Query assets object
The following endpoint retrieves all assets on a specific Parachain as an object.
Endpoint: GET /assets/:node
Parameters:
node
(path parameter): Specifies the name of the Parachain.
Errors:
400
(Bad request): When a specified Parachain does not exist.500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/assets/Statemint");
Query asset ID
The following endpoint returns the asset id for the specific asset on a specific Parachain.
Endpoint: GET /assets/:node/id?symbol=:symbol
Parameters:
node
(path parameter): Specifies the name of the Parachain.symbol
(path parameter): Specifies the currency symbol of the asset.
Errors:
400
(Bad request): When a specified Parachain does not exist.404
(Bad request): When an asset with a specified currency symbol does not exist.500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/assets/Interlay/id?symbol=USDT");
Query Relay chain asset symbol
The following endpoint returns the Relay chain asset symbol for a specific Parachain.
Endpoint: GET /assets/:node/relay-chain-symbol
Parameters:
node
(path parameter): Specifies the name of the Parachain.
Errors:
400
(Bad request): When a specified Parachain does not exist.500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/assets/Astar/relay-chain-symbol");
Query native assets
The following endpoint returns native assets of specific Parachain.
Endpoint: GET /assets/:node/native
Parameters:
node
(path parameter): Specifies the name of the Parachain.
Errors:
400
(Bad request): When a specified Parachain does not exist.500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/assets/Kylin/native");
Query foreign assets
The following endpoint returns foreign assets of specific Parachain.
Endpoint: GET /assets/:node/other
Parameters:
node
(path parameter): Specifies the name of the Parachain.
Errors:
400
(Bad request): When a specified Parachain does not exist.500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/assets/Statemine/other");
Query all asset symbols
The following endpoint returns all asset symbols for specific Parachain.
Endpoint: GET /assets/:node/all-symbols
Parameters:
node
(path parameter): Specifies the name of the Parachain.
Errors:
400
(Bad request): When a specified Parachain does not exist.500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/assets/Moonbeam/all-symbols");
Query asset support
The following endpoint returns a boolean value that confirms if the asset is registered on a specific Parachain or not.
Endpoint: GET /assets/:node/has-support?symbol=:symbol
Parameters:
node
(path parameter): Specifies the name of the Parachain.symbol
(path parameter): Specifies the symbol of the asset.
Errors:
400
(Bad request): When a specified Parachain does not exist.404
(Bad request): When an asset with a specified currency symbol does not exist.500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/assets/HydraDX/has-support?symbol=DOT");
Query asset support between two chains
The following endpoint retrieves assets supported by both chains.
Endpoint: GET /supported-assets?origin=:node&destination=:node
Parameters:
node
(path parameter): Specifies the name of the Parachain.
Errors:
400
(Bad request): When a specified Parachain does not exist.500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/supported-assets?origin=Acala&destination=Astar");
Query asset decimals
The following endpoint retrieves specific asset decimals on specific Parachain.
Endpoint: GET /assets/:node/decimals?symbol=:symbol
Parameters:
node
(path parameter): Specifies the name of the Parachain.symbol
(path parameter): Specifies the currency symbol.
Errors:
400
(Bad request): When a specified Parachain does not exist.404
(Bad request): When an asset with a specified currency symbol does not exist.500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/assets/Basilisk/decimals?symbol=BSX");
Query Parachain ws endpoints
The following endpoint retrieves the Parachain's WS endpoints.
Endpoint: GET /nodes/:node/ws-endpoints
Parameters:
parachain
(path parameter): Specifies the parachain ID.
Errors:
404
(Bad request): When a Parachain with a specified name does not exist.500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/nodes/Acala/ws-endpoints");
Query Parachain ID
The following endpoint retrieves Parachain's ID from Parachain's name
Endpoint: GET /assets/:node/para-id
- Parameters:
node
(path parameter): Specifies the name of the Parachain.
- Errors:
400
(Bad request): When a specified Parachain does not exist.500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/assets/Acala/para-id");
Query Parachain name
The following endpoint retrieves the Parachain's name from the Parachain's ID.
Endpoint: GET /nodes/:paraId?ecosystem=eco
Parameters:
paraId
(path parameter): Specifies the parachain ID.
Errors:
404
(Bad request): When a Parachain with a specified Parachain ID does not exist.500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/nodes/2090?ecosystem=polkadot");
Query list of implemented Parachains
The following endpoint retrieves an array of implemented Parachains.
Endpoint: GET /nodes
- Parameters: None.
- Errors:
500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/nodes");
Query XCM pallets
This functionality allows you to query the XCM pallets
that Parachains currently support.
Package-less implementation of XCM API XCM Pallet Query features into your application
const response = await fetch(
"http://localhost:3001/pallets/<action>" + //Replace "action" with your desired action eg. "Acala/default"
);
console.log(response) //use response data as necessary
Get default XCM pallet
The following endpoint returns the default pallet for specific Parachain
Endpoint: GET /pallets/:node/default
Parameters:
node
(path parameter): Specifies the name of the Parachain.
Errors:
400
(Bad request exception) - Returned when path parameter 'node' is not a valid Parachain500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/pallets/Acala/default");
Get all supported XCM pallets
The following endpoint returns all XCM Pallets that are supported on specific Parachain
Endpoint: GET /pallets/:node
Parameters:
node
(path parameter): Specifies the name of the Parachain.
Errors:
400
(Bad request exception) - Returned when path parameter 'node' is not a valid Parachain500
(Internal server error) - Returned when an unknown error has occurred. In this case please open an issue.
Example of request:
const response = await fetch("http://localhost:3001/pallets/Basilisk");