System
Liveness, server time and the network configuration your integration reads at startup. Guidance on using the configuration is in network configuration; this page states the shapes.
Health
/v1/healthReturns the service status. This endpoint takes no key, so send no Authorization header.
curl https://sandbox-api.myrt.money/v1/healthconst res = await fetch("https://sandbox-api.myrt.money/v1/health");
const health = await res.json();import requests
res = requests.get("https://sandbox-api.myrt.money/v1/health", timeout=30)
health = res.json()Response 200 OK
{
"ok": true,
"service": "myrt-api",
"apiVersion": "v1",
"status": "healthy",
"timestamp": "2026-09-10T04:12:33.918Z"
}Errors
This endpoint returns no application errors.
Server time
/v1/system/timeReturns the current server time in UTC. This endpoint takes no key, so send no Authorization header. Use it to detect clock skew before verifying webhook timestamps.
curl https://sandbox-api.myrt.money/v1/system/timeconst res = await fetch("https://sandbox-api.myrt.money/v1/system/time");
const time = await res.json();import requests
res = requests.get("https://sandbox-api.myrt.money/v1/system/time", timeout=30)
time = res.json()Response 200 OK
{
"ok": true,
"serverTime": "2026-09-10T04:12:33.918Z",
"timezone": "UTC"
}Errors
This endpoint returns no application errors.
Configuration
/v1/configReturns the chains MYRT is issued on, the token decimals and a map of the order endpoints. Read it once at startup and cache it for the process lifetime. A chainId you send in a request must be one of chains[].chainId; omit chainId to use defaultChainId.
curl https://sandbox-api.myrt.money/v1/config \
-H "Authorization: Bearer $MYRT_API_KEY"const res = await fetch("https://sandbox-api.myrt.money/v1/config", {
headers: { Authorization: `Bearer ${process.env.MYRT_API_KEY}` },
});
const config = await res.json();import os, requests
res = requests.get(
"https://sandbox-api.myrt.money/v1/config",
headers={"Authorization": f"Bearer {os.environ['MYRT_API_KEY']}"},
timeout=30,
)
config = res.json()Response 200 OK
{
"ok": true,
"apiVersion": "v1",
"defaultChainId": 1,
"decimals": 6,
"chains": [
{
"key": "ethereum",
"name": "Ethereum",
"chainId": 1,
"caip2": "eip155:1",
"nativeCurrency": { "name": "Ether", "symbol": "ETH", "decimals": 18 },
"explorerBaseUrl": "https://etherscan.io",
"explorerAddressUrl": "https://etherscan.io/address/",
"explorerTxUrl": "https://etherscan.io/tx/",
"confirmations": 15,
"myrt": { "address": "0x...", "decimals": 6, "name": "MYR Stablecoin", "symbol": "MYRT" }
}
],
"endpoints": {
"mints": "/v1/mints",
"redeems": "/v1/redeems",
"transfers": "/v1/transfers",
"balances": "/v1/balances/{walletAddress}",
"transactions": "/v1/transactions/{referenceId}"
}
}Errors
| Code | HTTP |
|---|---|
UNAUTHORIZED | 401 |
SCOPE_DENIED | 403 |
See errors for the meaning of each code.
Tokens
/v1/tokensReturns the MYRT token contract on each chain. Read tokenAddress from the host you are talking to rather than hardcoding it; sandbox and live run on different chains.
curl https://sandbox-api.myrt.money/v1/tokens \
-H "Authorization: Bearer $MYRT_API_KEY"const res = await fetch("https://sandbox-api.myrt.money/v1/tokens", {
headers: { Authorization: `Bearer ${process.env.MYRT_API_KEY}` },
});
const tokens = await res.json();import os, requests
res = requests.get(
"https://sandbox-api.myrt.money/v1/tokens",
headers={"Authorization": f"Bearer {os.environ['MYRT_API_KEY']}"},
timeout=30,
)
tokens = res.json()Response 200 OK
{
"ok": true,
"tokens": [
{
"symbol": "MYRT",
"name": "MYR Stablecoin",
"chainId": 1,
"network": "Ethereum",
"tokenAddress": "0x...",
"decimals": 6,
"explorerUrl": "https://etherscan.io/address/0x..."
}
]
}Errors
| Code | HTTP |
|---|---|
UNAUTHORIZED | 401 |
SCOPE_DENIED | 403 |
See errors for the meaning of each code.
