Skip to main content

GET /supply/

Returns the total minted, burned, and circulating supply for an asset. Individual account balances are not exposed. Supply totals are the only publicly queryable financial quantity in the protocol.
curl https://your-node/api/v1/supply/usdc

Response

{
  "asset_id": "usdc",
  "total_minted": 10000000000,
  "total_burned": 500000000,
  "total_supply": 9500000000,
  "updated_at": 1741651200
}
FieldDescription
total_mintedSum of all TxTypeMint amounts for this asset
total_burnedSum of all TxTypeBurn amounts for this asset
total_supplytotal_minted - total_burned; invariant enforced by state
updated_atUnix timestamp of the last Mint or Burn

Invariant

total_supply == total_minted - total_burned
This is enforced on every TxTypeMint and TxTypeBurn. A burn that would take total_supply below zero is rejected with a 422 error.

GET /assets

Returns all registered assets.
curl https://your-node/api/v1/assets
[
  {
    "asset_id": "usdc",
    "name": "USD Coin",
    "decimals": 6,
    "total_supply": 9500000000,
    "created_at": 1741000000
  }
]

Admin: POST /assets

Register a new asset type. Requires operator JWT.
{
  "asset_id": "usdc",
  "name": "USD Coin",
  "decimals": 6
}
asset_id is immutable after registration. Choose a short, stable identifier.

Admin: POST /mint

Mint new supply to an account. Requires operator JWT.
{
  "asset_id": "usdc",
  "account_commitment": "abc123...",
  "amount": 1000000,
  "timestamp": 1741651200
}
Increases total_minted by amount and credits account_commitment with amount.

Admin: POST /burn

Burn supply from an account. Requires operator JWT.
{
  "asset_id": "usdc",
  "account_commitment": "abc123...",
  "amount": 500000,
  "timestamp": 1741651200
}
Increases total_burned by amount and debits account_commitment by amount. Returns 422 if the account balance is insufficient.