Test tokens

Free, valueless tokens on real networks. Everything about a payment made with them is real — the transfer, the confirmations, the webhook timing — except the value.

What they are

Two families of test asset, both ordinary tokens on real public networks:

  • TESTCOIN (TEST) — a plain test token. Use it wherever your live flow would use a volatile asset.
  • TESTSTABLECOIN (TESTUSD) — a test stablecoin with 6 decimals, so 100000000 is 100 TESTUSD. Use it wherever your live flow would use USDT or USDC.

They have no value and no market. Nobody sells them; you mint them yourself, free. → Mint test coins

Where they live

Test assets exist on a subset of the supported networks. Read the live list rather than copying one — assets and networks are added over time:

terminal
curl https://api.suward.com/v1/assets
GroupNetworksAsset ids
TESTCOIN3TESTCOIN_ETHEREUM TESTCOIN_OPTIMISM TESTCOIN_PLASMA
TESTSTABLECOIN3TESTSTABLECOIN_ETHEREUM TESTSTABLECOIN_OPTIMISM TESTSTABLECOIN_PLASMA

Test assets declared by the specification. Decimals and availability: GET /v1/assets.

Using one in a payment

Nothing changes except the asset id:

terminal
curl -X POST https://api.suward.com/v1/payments \
  -H "X-Api-Key: $SUWARD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": "100000000",
    "asset": "TESTSTABLECOIN_OPTIMISM",
    "externalId": "test-order-1"
  }'

The payment gets a real address on a real network, and paying it produces real confirmations at that network's real speed — which is exactly what makes the test worth running. Confirmation requirements per network: GET /v1/blockchainsrequiredConfirmations.

Minting is a normal on-chain transaction

Your wallet needs a small amount of the network's native token for gas; the test tokens themselves are free and valueless.

Amounts are still integer strings

Test assets follow the same rule as every other asset: amounts are integer strings in the smallest unit, and decimals comes from GET /v1/assets. Getting this wrong in test is much cheaper than getting it wrong in production — which is the point.

You meanYou sendBecause
100 TESTUSD"100000000"6 decimals
0.50 TESTUSD"500000"6 decimals
Never100.0Floats are not accepted — amounts are strings

Next: Mint test coins to get some · Simulate if you'd rather skip the chain entirely.

Something unclear? payments@suward.com — we treat every integration question as a documentation defect.