Supported Assets & Networks
GStable has built a payment routing network covering multiple blockchains. Unlike traditional payment gateways, we have implemented a complete decoupling of Payment Assets and Settlement Assets.
This means that merchants can specify one asset (such as USDC on Polygon) as the settlement currency, while payers can use any token on any chain supported by the GStable network (such as USDT on Arbitrum) to pay. The system automatically handles cross-chain exchange and routing.
Core Concepts
Before calling the API, please familiarize yourself with GStable's definition of assets:
Token ID Format
To uniquely identify an asset in a multi-chain environment, we use the format network::symbol (all lowercase) as the unique identifier (tokenId) for the asset.
| Token ID | Chain | Token | Decimals |
|---|---|---|---|
ethereum::usdt | Ethereum Mainnet (Chain ID 1) | USDT | 6 |
ethereum::usdc | Ethereum Mainnet (Chain ID 1) | USDC | 6 |
base::usdc | Base (Chain ID 8453) | USDC | 6 |
arbitrumone::usdt | Arbitrum One (Chain ID 42161) | USDT | 6 |
arbitrumone::usdc | Arbitrum One (Chain ID 42161) | USDC | 6 |
polygon::usdt | Polygon PoS (Chain ID 137) | USDT | 6 |
polygon::usdc | Polygon PoS (Chain ID 137) | USDC | 6 |
The list of supported assets will expand continuously with protocol upgrades. It is recommended that developers dynamically retrieve the latest list via the API rather than hardcoding it.
Routing & Fee Mechanisms
GStable's routing engine automatically calculates fees and routing paths based on the settlement asset chosen by the merchant and the payment asset chosen by the user.
The fee model is mainly divided into two categories:
1. Same-chain Payment
When the asset paid by the user is on the same blockchain as the merchant's settlement asset, the fee is the lowest.
- Same Token: 0.2% (2000 PPM) - Direct transfer with the same token.
- Different Token (Swap): 0.3% (3000 PPM) - Requires on-chain token swap.
- Arrival Time: Extremely fast (depends on block confirmation time, typically < 10 seconds).
2. Cross-chain Payment
When the asset paid by the user is on a different blockchain from the merchant's settlement asset, the system automatically performs cross-chain bridging.
- Fee Rate: 0.6% (6000 PPM).
- Arrival Time: Includes source chain confirmation and cross-chain transmission time (typically 30 - 40 seconds).
Limits
To ensure the success rate of routing, each transaction path has minimum and maximum payment amounts.
Same-chain Settlement Limits
- Range: $0.50 ~ $50,000.00 (e.g., 5,000,000 ~ 50,000,000,000 for USDC/USDT with 6 decimals).
Cross-chain Settlement Limits (by receiving chain)
- Ethereum: $3,500 ~ $50,000
- Arbitrum: $10 ~ $50,000
- Base: $5 ~ $50,000
- Polygon: $20 ~ $50,000
Payment Capabilities
"Payment Capability" defines: When a merchant decides to receive a certain asset, what can the user use to pay.
Here are examples of major routing paths currently supported on Mainnet:
Settlement Target: Ethereum USDT (ethereum::usdt)
If a merchant specifies currency as ethereum::usdt when creating a Product, payment options available to the user include:
| Payment Network | Payment Token | Mode | Fee Rate |
|---|---|---|---|
| Ethereum | USDT | Same-chain | 0.2% |
| Ethereum | USDC | Same-chain Swap | 0.3% |
| Base | USDC | Cross-chain | 0.6% |
| Arbitrum | USDC | Cross-chain | 0.6% |
| Arbitrum | USDT | Cross-chain | 0.6% |
| Polygon | USDC | Cross-chain | 0.6% |
| Polygon | USDT | Cross-chain | 0.6% |
Settlement Target: Base USDC (base::usdc)
If a merchant wishes to receive USDC on Base, payment options available to the user include:
| Payment Network | Payment Token | Mode | Fee Rate |
|---|---|---|---|
| Base | USDC | Same-chain | 0.2% |
| Ethereum | USDT | Cross-chain | 0.6% |
| Ethereum | USDC | Cross-chain | 0.6% |
| Arbitrum | USDC | Cross-chain | 0.6% |
| Arbitrum | USDT | Cross-chain | 0.6% |
| Polygon | USDC | Cross-chain | 0.6% |
| Polygon | USDT | Cross-chain | 0.6% |
Settlement Target: Arbitrum USDC (arbitrumone::usdc)
If a merchant wishes to receive USDC on Arbitrum, payment options available to the user include:
| Payment Network | Payment Token | Mode | Fee Rate |
|---|---|---|---|
| Arbitrum | USDC | Same-chain | 0.2% |
| Arbitrum | USDT | Same-chain Swap | 0.3% |
| Ethereum | USDT | Cross-chain | 0.6% |
| Ethereum | USDC | Cross-chain | 0.6% |
| Base | USDC | Cross-chain | 0.6% |
| Polygon | USDC | Cross-chain | 0.6% |
| Polygon | USDT | Cross-chain | 0.6% |
Settlement Target: Polygon USDC (polygon::usdc)
If a merchant specifies currency as polygon::usdc when creating a Product, payment options available to the user include:
| Payment Network | Payment Token | Mode | Fee Rate |
|---|---|---|---|
| Polygon | USDC | Same-chain | 0.2% |
| Polygon | USDT | Same-chain Swap | 0.3% |
| Ethereum | USDT | Cross-chain | 0.6% |
| Ethereum | USDC | Cross-chain | 0.6% |
| Base | USDC | Cross-chain | 0.6% |
| Arbitrum | USDC | Cross-chain | 0.6% |
| Arbitrum | USDT | Cross-chain | 0.6% |
Capability Query API
Since supported networks and trading pairs are frequently updated, GStable provides a public interface to query the current system's complete routing capabilities.
Get Capability Configuration
GET [/api/v1/common/capability](https://api.gstable.io/public/api/v1/capabilities/all)
This interface returns all currently supportedTokens and a detailed paymentCapabilities matrix, containing the latest fee rates (feeRatePPM) and limit configurations.
Response Example:
{
"code": 0,
"message": "",
"data": {
"supportedTokens": [
{
"tokenId": "ethereum::usdt",
"symbol": "USDT",
"chainId": "1",
"decimals": 6
},
{
"tokenId": "ethereum::usdc",
"symbol": "USDC",
"chainId": "1",
"decimals": 6
},
{
"tokenId": "base::usdc",
"symbol": "USDC",
"chainId": "8453",
"decimals": 6
},
{
"tokenId": "arbitrumone::usdt",
"symbol": "USDT",
"chainId": "42161",
"decimals": 6
},
{
"tokenId": "arbitrumone::usdc",
"symbol": "USDC",
"chainId": "42161",
"decimals": 6
},
{
"tokenId": "polygon::usdt",
"symbol": "USDT",
"chainId": "137",
"decimals": 6
},
{
"tokenId": "polygon::usdc",
"symbol": "USDC",
"chainId": "137",
"decimals": 6
}
],
"paymentCapabilities": {
"polygon::usdc": {
"POL": [
{
"tokenId": "polygon::usdc",
"crosschain": false,
"feeRatePPM": 2000, // 0.2% - Same-chain, same token
"minPaymentValue": 5000000, // $5 minimum
"maxPaymentValue": 50000000000 // $50,000 maximum
},
{
"tokenId": "polygon::usdt",
"crosschain": false,
"feeRatePPM": 3000, // 0.3% - Same-chain, swap required
"minPaymentValue": 5000000,
"maxPaymentValue": 50000000000
}
],
"ARB": [
{
"tokenId": "arbitrumone::usdc",
"crosschain": true,
"feeRatePPM": 6000, // 0.6% - Cross-chain
"minPaymentValue": 10000000, // $10 minimum for Arbitrum
"maxPaymentValue": 50000000000
}
],
"ETH": [
{
"tokenId": "ethereum::usdc",
"crosschain": true,
"feeRatePPM": 6000,
"minPaymentValue": 20000000, // $20 minimum for Polygon
"maxPaymentValue": 50000000000
}
]
}
}
}
}
If you are building a custom frontend, you should call this interface to render the user's "Payment Method Selector" and display estimated fees to the user based on feeRatePPM.