STRATOSCAN

STRATOscan API

Etherscan-compatible HTTP API for STRATO mainnet. No API key required.

Overview

The STRATOscan API follows the Etherscan API’s request and response format, so tools written for Etherscan work against STRATO by changing the base URL. It serves the same chain data as the explorer.

Base URL
https://stratoscan.strato.nexus/api
Etherscan v2 style
https://stratoscan.strato.nexus/v2/api?chainid=123354377739506
Chain ID
123354377739506 (0x7030addddcf2)
Method
GET with query parameters. CORS is open (Access-Control-Allow-Origin: *).
API key
Not required. An apikey parameter is accepted and ignored.
JSON-RPC
https://app.strato.nexus/rpc

chainid is optional on both base URLs. If you send it, it must be 123354377739506. Any other value is an error. net_version on STRATO is the network name as a number, not the chain ID. Use eth_chainId.

curl "https://stratoscan.strato.nexus/api?module=account&action=balance&address=0x000000000000000000000000000000000000100d&tag=latest"

Response format

Every response is HTTP 200 with Etherscan’s envelope. status is "1" on success and "0" otherwise. On an error, result is the error message. An empty list is status 0 with an empty array.

Success

{
  "status": "1",
  "message": "OK",
  "result": "…"
}

Error

{
  "status": "0",
  "message": "NOTOK",
  "result": "Error! Invalid address format"
}

Empty list

{
  "status": "0",
  "message": "No transactions found",
  "result": []
}
  • Numbers are decimal strings in base units (no 0x). USDST and most tokens use 18 decimals.
  • Addresses and hashes are lowercase and 0x-prefixed.
  • Timestamps are unix seconds, as strings.
  • A field STRATO can’t provide is an empty string. Nothing is estimated or filled in.
  • The proxy module answers in JSON-RPC shape instead, as Etherscan’s does.

Rate limits

Limits are per client IP and shared with the rest of the explorer’s API. Past a limit, the response is {"status":"0","message":"NOTOK","result":"Max rate limit reached"} with a Retry-After header in seconds.

TierActionsLimit
Single readbalance, tokenbalance, getabi, getstatus, gettxreceiptstatus, proxy60 requests per minute, burst 60
Listtxlist, tokentx, balancemulti, getblocknobytime30 credits per minute, burst 30. txlist and tokentx cost 1 credit per 100 rows requested (offset=1000 costs 10); the others cost 1.

Accounts

Native balance
GET /api?module=account&action=balance

Balance of the chain's native token for one address, in base units (18 decimals). On STRATO the native token is USDST, and this is exactly what eth_getBalance and MetaMask report.

ParameterRequiredDescription
addressyesAccount address.
tagnoOnly latest (the default) is supported. STRATO has no historical state reads.

Example request

curl "https://stratoscan.strato.nexus/api?module=account&action=balance&address=0x000000000000000000000000000000000000100d&tag=latest"
Example response
{
  "status": "1",
  "message": "OK",
  "result": "59918362825378007997583"
}
Native balance, multiple addresses
list-tier limit
GET /api?module=account&action=balancemulti

Same as balance for up to 20 addresses in one call.

ParameterRequiredDescription
addressyesComma-separated addresses, at most 20.
tagnoOnly latest (the default) is supported. STRATO has no historical state reads.

Example request

curl "https://stratoscan.strato.nexus/api?module=account&action=balancemulti&address=0x000000000000000000000000000000000000100d,0x0000000000000000000000000000000000001005&tag=latest"
Example response
{
  "status": "1",
  "message": "OK",
  "result": [
    {
      "account": "0x000000000000000000000000000000000000100d",
      "balance": "59918362825378007997583"
    },
    {
      "account": "0x0000000000000000000000000000000000001005",
      "balance": "0"
    }
  ]
}
Normal transactions
list-tier limit
GET /api?module=account&action=txlist

Transactions sent from or to an address.

ParameterRequiredDescription
addressyesAccount address.
startblocknoFirst block to include. Default 0.
endblocknoLast block to include. Default latest; latest is accepted.
pageno1-based page number. Default 1.
offsetnoRows per page. Default 100, maximum 1000 (larger values are clamped). page × offset may not exceed 10,000.
sortnoasc (default) or desc by block, then position in block.
  • input is the raw calldata. SolidVM function calls carry a function name and arguments instead of ABI calldata, so for them input and methodId are 0x and functionName holds the bare function name (no parameter list).
  • gas is the gas limit. gasUsed is what STRATO reports, which today echoes the gas limit. cumulativeGasUsed is the sum of STRATO-reported gasUsed up to and including this transaction in its block. gasPrice is 0: fees are a flat 0.01 USDST per transaction, charged as a USDST transfer to the FeeCollector.
  • contractAddress is set only for contract-creation transactions.
  • confirmations is latest block − blockNumber + 1.

Example request

curl "https://stratoscan.strato.nexus/api?module=account&action=txlist&address=0x523fef378674d39363aa8b6ac5122e301c528432&startblock=385870&endblock=385870&page=1&offset=10&sort=asc"
Example response
{
  "status": "1",
  "message": "OK",
  "result": [
    {
      "blockNumber": "385870",
      "timeStamp": "1790438342",
      "hash": "0x4a9b8b9481d0d45e9bb81a7b3ddf67dff316692a48b3ad29111dfcfcb645e966",
      "nonce": "66966",
      "blockHash": "0xf732508b8cf3736fbee106006dbf80c13c7a2d57920d00f94d0ab7af25ba744c",
      "transactionIndex": "0",
      "from": "0x523fef378674d39363aa8b6ac5122e301c528432",
      "to": "0x0000000000000000000000000000000000001002",
      "value": "0",
      "gas": "32100000000",
      "gasPrice": "0",
      "isError": "0",
      "txreceipt_status": "1",
      "input": "0x",
      "contractAddress": "",
      "cumulativeGasUsed": "32100000000",
      "gasUsed": "32100000000",
      "confirmations": "286",
      "methodId": "0x",
      "functionName": "setExchangeRates"
    },
    {
      "blockNumber": "385870",
      "timeStamp": "1790438342",
      "hash": "0x0102d4a30f3c5920abe5c1f0c25fd91078b1e7f1a42a99aa604afcb89a34b884",
      "nonce": "66967",
      "blockHash": "0xf732508b8cf3736fbee106006dbf80c13c7a2d57920d00f94d0ab7af25ba744c",
      "transactionIndex": "1",
      "from": "0x523fef378674d39363aa8b6ac5122e301c528432",
      "to": "0x0000000000000000000000000000000000001002",
      "value": "0",
      "gas": "32100000000",
      "gasPrice": "0",
      "isError": "0",
      "txreceipt_status": "1",
      "input": "0x",
      "contractAddress": "",
      "cumulativeGasUsed": "64200000000",
      "gasUsed": "32100000000",
      "confirmations": "286",
      "methodId": "0x",
      "functionName": "setAssetPrices"
    },
    {
      "blockNumber": "385870",
      "timeStamp": "1790438342",
      "hash": "0x6476a87049a13cb6ccedbabcdd7d85c06514b1fe3fed326843403151918ae81f",
      "nonce": "66968",
      "blockHash": "0xf732508b8cf3736fbee106006dbf80c13c7a2d57920d00f94d0ab7af25ba744c",
      "transactionIndex": "2",
      "from": "0x523fef378674d39363aa8b6ac5122e301c528432",
      "to": "0x0000000000000000000000000000000000001002",
      "value": "0",
      "gas": "32100000000",
      "gasPrice": "0",
      "isError": "0",
      "txreceipt_status": "1",
      "input": "0x",
      "contractAddress": "",
      "cumulativeGasUsed": "96300000000",
      "gasUsed": "32100000000",
      "confirmations": "286",
      "methodId": "0x",
      "functionName": "setRebaseFactors"
    }
  ]
}
ERC-20 token transfers
list-tier limit
GET /api?module=account&action=tokentx

ERC-20 Transfer events where the address is the sender or recipient. Pass contractaddress to restrict to one token, or pass only contractaddress to list every transfer of that token.

ParameterRequiredDescription
addressnoAccount address. Required unless contractaddress is given.
contractaddressnoToken contract to filter by.
startblocknoFirst block to include. Default 0.
endblocknoLast block to include. Default latest; latest is accepted.
pageno1-based page number. Default 1.
offsetnoRows per page. Default 100, maximum 1000 (larger values are clamped). page × offset may not exceed 10,000.
sortnoasc (default) or desc by block, then position in block.
  • Token name, symbol and decimals come from the STRATO token registry, falling back to the token's own name()/symbol()/decimals(). A value neither can provide is an empty string.
  • Transaction-level fields (nonce, gas, gasPrice, gasUsed, input) follow the txlist notes above.
  • Pages whose transfers are spread across many blocks cost one block read per distinct block, so offset=1000 over scattered history can take several seconds. Keep offset at or below 100 where you can.

Example request

curl "https://stratoscan.strato.nexus/api?module=account&action=tokentx&address=0x000000000000000000000000000000000000100d&contractaddress=0x937efa7e3a77e20bbdbd7c0d32b6514f368c1010&startblock=385869&endblock=385869&page=1&offset=10&sort=asc"
Example response
{
  "status": "1",
  "message": "OK",
  "result": [
    {
      "blockNumber": "385869",
      "timeStamp": "1790438340",
      "hash": "0x9d851e17e1311f427ad519dba084225cac8a1984927e9311218e875f9823dbf2",
      "nonce": "54429",
      "blockHash": "0xd0d7f2ee1eb7d3ae428529feb797097d3230dda3f64cda0445eed90d063ca5ab",
      "from": "0x96156a5303cb2b54d983122cdf1ce809aa2e889f",
      "contractAddress": "0x937efa7e3a77e20bbdbd7c0d32b6514f368c1010",
      "to": "0x000000000000000000000000000000000000100d",
      "value": "10000000000000000",
      "tokenName": "USDST",
      "tokenSymbol": "USDST",
      "tokenDecimal": "18",
      "transactionIndex": "0",
      "gas": "1000000",
      "gasPrice": "0",
      "gasUsed": "1000000",
      "cumulativeGasUsed": "1000000",
      "input": "0x",
      "confirmations": "287"
    }
  ]
}
ERC-20 token balance
GET /api?module=account&action=tokenbalance

balanceOf(address) on a token contract, in the token's base units.

ParameterRequiredDescription
contractaddressyesToken contract address.
addressyesHolder address.
tagnoOnly latest (the default) is supported. STRATO has no historical state reads.
  • If the contract doesn't answer balanceOf, the result is an error rather than 0.

Example request

curl "https://stratoscan.strato.nexus/api?module=account&action=tokenbalance&contractaddress=0x937efa7e3a77e20bbdbd7c0d32b6514f368c1010&address=0x000000000000000000000000000000000000100d&tag=latest"
Example response
{
  "status": "1",
  "message": "OK",
  "result": "59918362825378007997583"
}

Contracts

Contract ABI
GET /api?module=contract&action=getabi

The contract's ABI as a JSON string (Etherscan convention: parse result with JSON.parse). Built from the metadata STRATO keeps for every SolidVM contract. There's no separate verification step.

ParameterRequiredDescription
addressyesContract address.
  • Includes public/external functions, the constructor, events, custom errors, and getters for public state variables with elementary types. Structs become tuples.
  • SolidVM-only Decimal values are reported as uint256.
  • BLOC's metadata doesn't say whether a named type from another file is a contract or an enum. Names that match a deployed contract, or follow the I… interface convention, are typed address; the rest are typed as enums (uint8).
  • Returns Contract source code not verified when STRATO has no metadata for the address (for example, an externally owned account).

Example request

curl "https://stratoscan.strato.nexus/api?module=contract&action=getabi&address=0x0000000000000000000000000000000000001012"
Example response (result truncated)
{
  "status": "1",
  "message": "OK",
  "result": "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_logicContract\",\"type\":\"address\"},{\"name\":\"_initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cdpEngine\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contract CDPEngine\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"cdpReserve\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contract C…"
}

Transactions

Execution status
GET /api?module=transaction&action=getstatus

isError is 1 when the transaction failed; errDescription carries the VM's reason.

ParameterRequiredDescription
txhashyesTransaction hash.

Example request

curl "https://stratoscan.strato.nexus/api?module=transaction&action=getstatus&txhash=0x4a9b8b9481d0d45e9bb81a7b3ddf67dff316692a48b3ad29111dfcfcb645e966"
Example response
{
  "status": "1",
  "message": "OK",
  "result": {
    "isError": "0",
    "errDescription": ""
  }
}
Receipt status
GET /api?module=transaction&action=gettxreceiptstatus

status is 1 for success, 0 for failure, empty for an unknown hash.

ParameterRequiredDescription
txhashyesTransaction hash.

Example request

curl "https://stratoscan.strato.nexus/api?module=transaction&action=gettxreceiptstatus&txhash=0x4a9b8b9481d0d45e9bb81a7b3ddf67dff316692a48b3ad29111dfcfcb645e966"
Example response
{
  "status": "1",
  "message": "OK",
  "result": {
    "status": "1"
  }
}

Blocks

Block number by timestamp
list-tier limit
GET /api?module=block&action=getblocknobytime

The last block at or before (or the first at or after) a unix timestamp.

ParameterRequiredDescription
timestampyesUnix time in seconds.
closestnobefore (default) or after.

Example request

curl "https://stratoscan.strato.nexus/api?module=block&action=getblocknobytime&timestamp=1790438340&closest=before"
Example response
{
  "status": "1",
  "message": "OK",
  "result": "385869"
}

Geth proxy

eth_blockNumber
GET /api?module=proxy&action=eth_blockNumber

JSON-RPC passthrough. Like Etherscan's proxy module, answers in JSON-RPC shape ({jsonrpc, id, result}), not the status envelope.

Example request

curl "https://stratoscan.strato.nexus/api?module=proxy&action=eth_blockNumber"
Example response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": "0x5e46b"
}
eth_getTransactionByHash
GET /api?module=proxy&action=eth_getTransactionByHash

JSON-RPC passthrough.

ParameterRequiredDescription
txhashyesTransaction hash.

Example request

curl "https://stratoscan.strato.nexus/api?module=proxy&action=eth_getTransactionByHash&txhash=0x4a9b8b9481d0d45e9bb81a7b3ddf67dff316692a48b3ad29111dfcfcb645e966"
Example response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "blockHash": "0xf732508b8cf3736fbee106006dbf80c13c7a2d57920d00f94d0ab7af25ba744c",
    "blockNumber": "0x5e34e",
    "from": "0x523fef378674d39363aa8b6ac5122e301c528432",
    "gas": "0x7794f2100",
    "gasPrice": "0x0",
    "hash": "0x4a9b8b9481d0d45e9bb81a7b3ddf67dff316692a48b3ad29111dfcfcb645e966",
    "input": "0x",
    "nonce": "0x10596",
    "r": "0xe146e940711d5407d993d947b17c3df41a6e5ff86cfa8a13110981e8642f04a1",
    "s": "0x3f82c5d053641ba96b13a113497893a58d04f31e6af9d52d6832cbe99687754c",
    "to": "0x0000000000000000000000000000000000001002",
    "transactionIndex": "0x0",
    "v": "0x1c",
    "value": "0x0"
  }
}
eth_getTransactionReceipt
GET /api?module=proxy&action=eth_getTransactionReceipt

JSON-RPC passthrough, returned as the node sends it. Known node issue: transactionIndex is always 0x0 and cumulativeGasUsed equals gasUsed. Use txlist or eth_getTransactionByHash for the index.

ParameterRequiredDescription
txhashyesTransaction hash.

Example request

curl "https://stratoscan.strato.nexus/api?module=proxy&action=eth_getTransactionReceipt&txhash=0x4a9b8b9481d0d45e9bb81a7b3ddf67dff316692a48b3ad29111dfcfcb645e966"
Example response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "blockHash": "0xf732508b8cf3736fbee106006dbf80c13c7a2d57920d00f94d0ab7af25ba744c",
    "blockNumber": "0x5e34e",
    "contractAddress": null,
    "cumulativeGasUsed": "0x7794f2100",
    "from": "0x523fef378674d39363aa8b6ac5122e301c528432",
    "gasUsed": "0x7794f2100",
    "logs": [
      {
        "address": "0x000000000000000000000000000000000000100e",
        "blockHash": "0xf732508b8cf3736fbee106006dbf80c13c7a2d57920d00f94d0ab7af25ba744c",
        "blockNumber": "0x5e34e",
        "data": "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000",
        "logIndex": "0x1",
        "removed": false,
        "topics": [
          "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
          "0x000000000000000000000000523fef378674d39363aa8b6ac5122e301c528432",
          "0x0000000000000000000000000000000000000000000000000000000000000000"
        ],
        "transactionHash": "0x4a9b8b9481d0d45e9bb81a7b3ddf67dff316692a48b3ad29111dfcfcb645e966",
        "transactionIndex": "0x0"
      },
      {
        "address": "0x000000000000000000000000000000000000100c",
        "blockHash": "0xf732508b8cf3736fbee106006dbf80c13c7a2d57920d00f94d0ab7af25ba744c",
        "blockNumber": "0x5e34e",
        "data": "0x0000000000000000000000000000000000000000000000000000000000001002000000000000000000000000523fef378674d39363aa8b6ac5122e301c528432000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000406436356137636331326665633938333234653630316239356530333935316138656435333166326437663864366333626135616230306332306232316631656600000000000000000000000000000000000000000000000000000000000010020000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001073657445786368616e67655261746573000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
        "logIndex": "0x3",
        "removed": false,
        "topics": [
          "0x92cfc217de862514036b98ee037574b1b32ab8924f553caf2bc18b652fa75092"
        ],
        "transactionHash": "0x4a9b8b9481d0d45e9bb81a7b3ddf67dff316692a48b3ad29111dfcfcb645e966",
        "transactionIndex": "0x0"
      }
    ],
    "logsBloom": "0x00000000000000000000000000004000000000000000000000000000000000800000000000000000000000000000000000000000400000000000020000000000000000000000000000000008000000000000080000000000000000000000000000000000020000000000000000000800000000000000000000000010200000000000000000000002000000000000000000000002000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000002000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000020000020000000000000800000",
    "status": "0x1",
    "to": "0x0000000000000000000000000000000000001002",
    "transactionHash": "0x4a9b8b9481d0d45e9bb81a7b3ddf67dff316692a48b3ad29111dfcfcb645e966",
    "transactionIndex": "0x0",
    "type": "0x0"
  }
}

Differences from Etherscan

  • The native balance is USDST. STRATO has no separate gas coin. eth_getBalance, balance and MetaMask all report the account’s USDST balance (0x937efa7e3a77e20bbdbd7c0d32b6514f368c1010), and a plain value transfer moves USDST.
  • Flat fees, no gas price. Every transaction costs 0.01 USDST, charged as a USDST transfer to the FeeCollector (0x…100d), so fee payments show up in tokentx. gasPrice is 0, and gasUsed echoes the gas limit rather than metering execution.
  • SolidVM contracts. Most transactions are SolidVM function calls identified by name, with no ABI calldata: input and methodId are 0x and functionName is the bare name. ABIs are generated from the metadata STRATO stores for every contract, so there is no separate verification step and no source code in the response.
  • No historical state. Only tag=latest is supported for balances.
  • Page size. Default 100 rows, maximum 1000. page × offset is capped at 10,000 as on Etherscan; use startblock/endblock to go further.
  • Not yet available: internal transactions (txlistinternal), ERC-721/1155 transfer lists, event logs (getLogs), source code (getsourcecode), and stats modules.

Example responses are real STRATO mainnet data, captured on 2026-09-26; confirmations will have grown since. See also the network stats and node info pages.

API Documentation — STRATOSCAN