Developers

Deneb REST API v1 — chain data

Public read-only REST API of the Deneb network. It serves network status, addresses, transactions and validators from our own node's current state. Everything here is a GET; the API never takes a body and never writes.

Conventions

  • Base URL: https://api.denebnav.app/v1. All paths below are relative to it. Use only this host; internal paths change.

  • Format: JSON, UTF-8. Every answer carries X-Content-Type-Options: nosniff.

  • Amounts are decimal strings with 18 fractional digits ("2380.721002496072294651"), never JSON numbers. 1 coin = 10^18 pip; the API returns coin units, so parse them as strings or bigint, never Number. The only JSON-number fields are display values such as bip_price_usd, market_cap, avg_block_time and transactions_per_second.

  • Block height is a JSON number. Time is RFC 3339 in UTC ("2026-10-20T08:18:49Z").

  • Identifiers: an address is Mx + 40 hex, a validator public key Mp + 64 hex, a transaction hash Mt + 64 hex, a block hash Mh + 64 hex.

  • Pagination (only where a list is paged):

  • /v1/validators/{pk}/stakes — explorer-style: page (1-based, up to 100000) and limit (default 50, max 150); the answer is {data, links, meta} with meta.current_page, meta.last_page, meta.per_page, meta.total.

  • /v1/transactions — a cursor over blocks: pass before_height (the value of meta.next_before_height) to walk history; page is always 1.

  • Errors have one shape, {"error": {"code": "...", "message": "..."}}, and Cache-Control: no-store. The message is for developers; pick UI text by code. Common codes: bad_request (400), not_found (404), unavailable (503), upstream (502), internal (500).

  • Caching: successful answers from the node come with Cache-Control: public, max-age=5. /v1/health is no-store. /v1/analytics/* is public, max-age=3600 for a fully closed range and public, max-age=60 while the range still includes a partial day.

  • source object. Every answer except /v1/health carries source: where the data came from and how fresh it is. Fields: height (head height the node parts were read at), time, parts (field group → data source, e.g. "node", "pools", "explorer-api"), stale (groups whose last refresh failed and are served older), and optional coverage, price and note. Ignore it in a first integration; it is not a request parameter.

Access

The API is open now: no key, no authentication. There is a per-IP rate limit. Keys issued in the portal cabinet are not checked yet — send requests without one. Per-key quotas will come later; the open, keyless tier described on this page stays available.

Endpoints

GET /v1/health

Service and node readiness.

No parameters.

curl https://api.denebnav.app/v1/health
{
  "ok": true,
  "version": "0.1.0",
  "uptime_s": 91234,
  "head": { "height": 42105678, "time": "2026-10-20T08:18:49Z" },
  "registry": { "ready": true, "coins": 4021, "swept_height": 42105678, "swept_at": "2026-10-20T08:18:45Z" }
}
FieldTypeMeaning
okbooleanthe node's head was read without error
versionstringservice version
uptime_snumberseconds since the service started
head.heightnumberchain head height
head.timestringhead block time, RFC 3339 UTC
registry.readybooleanthe coin registry is loaded
registry.coinsnumbercoins in the registry
registry.swept_heightnumberheight the registry was last swept to
registry.swept_atstringtime of that sweep, RFC 3339 UTC
errorstringpresent only when the node is unreachable

When the node head cannot be read the status is 503 and the body is the same object with "ok": false and an error string. Cache-Control: no-store.

GET /v1/status

Network status: the head, BIP/USD price, market cap and throughput.

curl https://api.denebnav.app/v1/status
{
  "data": {
    "avg_block_time": 5.02,
    "bip_price_change": 1.24,
    "bip_price_usd": 0.0312,
    "latest_block_height": 42105678,
    "latest_block_time": "2026-10-20T08:18:49Z",
    "market_cap": 312000000,
    "total_transactions": 87213456,
    "transactions_per_second": 0.11,
    "current_emission": "89558.137234329718283132"
  },
  "source": { "height": 42105678, "time": "2026-10-20T08:18:49Z", "parts": {}, "stale": [] }
}
FieldTypeMeaning
avg_block_timenumberaverage block time, seconds
bip_price_changenumber \nullBIP/USD change over 24 h, percent
bip_price_usdnumbercurrent BIP/USD price
latest_block_heightnumberhead height
latest_block_timestringhead block time, RFC 3339 UTC
market_capnumberBIP price × current emission, USD
total_transactionsnumber \nulltotal transactions, from explorer-api
transactions_per_secondnumberrolling daily TPS, from explorer-api
current_emissionstringemitted BIP so far, decimal string (18 digits)
legacyobject \nullexplorer-api's view of the same numbers, kept for comparison

Cache-Control: public, max-age=5.

GET /v1/addresses/{addr}

Balances and the stake summary of one address.

Path parameter addr: Mx + 40 hex (the hex part is case-insensitive). Query parameter min_height (optional): a block height 1 or more. The answer is rebuilt to be at least that fresh — useful right after the wallet saw its own transaction in block N. At most head + 2, otherwise 400.

curl 'https://api.denebnav.app/v1/addresses/Mx0000000000000000000000000000000000000001?min_height=40000000'
{
  "data": {
    "address": "mx0000000000000000000000000000000000000001",
    "balances": [
      {
        "coin": { "id": 0, "symbol": "BIP", "type": "coin" },
        "amount": "2380.721002496072294651",
        "bip_amount": "2380.721002496072294651",
        "valuation": "base"
      }
    ],
    "total_balance_sum": "2380.721002496072294651",
    "total_balance_sum_usd": "74.278495277886",
    "stake_balance_sum": "0.000000000000000000",
    "stake_balance_sum_usd": "0",
    "stake_delegated_sum": "0.000000000000000000",
    "stake_waitlisted_sum": "0.000000000000000000",
    "stake_weight_sum": "0.000000000000000000",
    "transaction_count": 42,
    "locked_stake_until_block": null
  },
  "latest_block_time": "2026-10-20T08:18:49Z",
  "source": { "height": 42105678, "time": "2026-10-20T08:18:49Z", "parts": {}, "stale": [] }
}
FieldTypeMeaning
addressstringthe address, lower-case hex
balances[].coinobject{id, symbol, type}; type is coin, token or pool_token
balances[].amountstringbalance of that coin, decimal string
balances[].bip_amountstringits BIP value, decimal string
balances[].valuationstringhow bip_amount was computed: base, node_sell, pool, curve, route, lp or none
total_balance_sumstringsum of all bip_amount, decimal string
total_balance_sum_usdstringthat sum in USD, decimal string
stake_balance_sumstringtotal stake (delegated + waitlisted), decimal string
stake_balance_sum_usdstringthat stake in USD, decimal string
stake_delegated_sumstringdelegated stake, decimal string
stake_waitlisted_sumstringwaitlisted stake, decimal string
stake_weight_sumstringnetwork stake weight (delegate_bip_value), decimal string
transaction_countnumbertransactions sent from this address
locked_stake_until_blocknumber \nullend block of an address-wide stake lock, if any

Cache-Control: public, max-age=5; with min_height it is no-store (the client re-asks until source.height reaches N).

GET /v1/addresses/{addr}/delegations

The address's stake per validator, waitlisted stake and unbonding (releasing) stake.

Path parameter addr: as above.

curl 'https://api.denebnav.app/v1/addresses/Mx0000000000000000000000000000000000000001/delegations'
{
  "data": [
    {
      "coin": { "id": 0, "symbol": "BIP" },
      "value": "5000.000000000000000000",
      "bip_value": "5000.000000000000000000",
      "validator": {
        "public_key": "mp0000000000000000000000000000000000000000000000000000000000000000",
        "name": null,
        "description": null,
        "icon_url": "",
        "site_url": null,
        "status": 2,
        "commission": 10
      },
      "is_waitlisted": false,
      "stake_weight_bip": "5000.000000000000000000"
    }
  ],
  "meta": {
    "additional": {
      "total_delegated_bip_value": "5000.000000000000000000",
      "total_waitlisted_bip_value": "0.000000000000000000",
      "total_stake_weight_bip": "5000.000000000000000000",
      "locked_data": null,
      "unbonding": []
    }
  },
  "source": { "height": 42105678, "time": "2026-10-20T08:18:49Z", "parts": {}, "stale": [] }
}
FieldTypeMeaning
data[].coinobject{id, symbol} of the staked coin
data[].valuestringstaked amount, decimal string
data[].bip_valuestringits BIP value, decimal string
data[].validatorobjectvalidator metadata, see the validators section
data[].is_waitlistedbooleanthe stake is still waitlisted
data[].stake_weight_bipstringnetwork stake weight of this stake, decimal string
meta.additional.total_delegated_bip_valuestringtotal delegated, decimal string
meta.additional.total_waitlisted_bip_valuestringtotal waitlisted, decimal string
meta.additional.total_stake_weight_bipstringtotal stake weight, decimal string
meta.additional.locked_dataobject \null{end_block} of an address-wide stake lock
meta.additional.unbonding[]arraystakes being released: height, validator, coin, value, move_to_public_key

Cache-Control: public, max-age=5 (with min_height it is no-store).

GET /v1/transactions

Network transactions, newest first. Without before_height it is the latest-transactions feed; with it, a page of history from blocks strictly below that height.

Query parameters:

ParameterDefaultLimitsMeaning
limit251..50transactions per page
before_height—≥ 1start of the next page (pass meta.next_before_height)
page1only 1always 1; use before_height for older transactions
curl 'https://api.denebnav.app/v1/transactions?limit=2'
{
  "data": [
    {
      "txn": 0,
      "hash": "mt0000000000000000000000000000000000000000000000000000000000000000",
      "nonce": 12,
      "height": 42105678,
      "timestamp": "2026-10-20T08:18:49Z",
      "type": 1,
      "payload": "",
      "from": "mx0000000000000000000000000000000000000001",
      "data": { "coin": { "id": 0, "symbol": "BIP" }, "to": "mx0000000000000000000000000000000000000002", "value": "100.000000000000000000" },
      "gas": "1",
      "gas_price": 1,
      "gas_coin": { "id": 0, "symbol": "BIP" },
      "fee": "0.010000000000000000",
      "commission_in_base_coin": "0.010000000000000000",
      "commission_in_gas_coin": "0.010000000000000000",
      "commission_price": "0.010000000000000000",
      "commission_price_coin": { "id": 0, "symbol": "BIP" },
      "raw_tx": "f8..."
    }
  ],
  "links": { "first": "/v1/transactions?limit=2&page=1", "last": "/v1/transactions?limit=2&page=1", "prev": null, "next": "/v1/transactions?limit=2&before_height=42105677" },
  "meta": {
    "current_page": 1,
    "last_page": 1,
    "path": "/v1/transactions",
    "per_page": 2,
    "total": 2,
    "next_before_height": 42105677
  },
  "source": { "height": 42105678, "time": "2026-10-20T08:18:49Z", "parts": {}, "stale": [] }
}
FieldTypeMeaning
txnnumberexplorer sequence number; always 0 here (the node does not know it)
hashstringtransaction hash, Mt + 64 hex
noncenumbersender nonce
heightnumberblock height
timestampstringblock time, RFC 3339 UTC
typenumbertransaction type id (1 Send … 38 Lock)
payloadstringbase64-encoded payload, empty if none
fromstringsender address
dataobjecttype-specific payload; coin ids numeric, amounts decimal strings
gasstringgas units, numeric string
gas_pricenumbergas price
gas_coinobject{id, symbol} of the coin the fee is paid in
feestringfee, decimal string
commission_in_base_coinstringfee in BIP, decimal string
commission_in_gas_coinstringfee in the gas coin, decimal string
commission_pricestringfee in the price coin, decimal string
commission_price_coinobject{id, symbol} of the price coin
raw_txstringRLP-encoded signed transaction, hex
meta.next_before_heightnumber \nullbefore_height of the next page; null = start of the node's history

Pages are block-aligned, so a page can be shorter than limit and still have a next page, and one page can repeat a few transactions from the previous one — deduplicate by hash. Cache-Control: public, max-age=5.

GET /v1/validators

All validators and candidates, sorted by stake, highest first.

curl 'https://api.denebnav.app/v1/validators'
{
  "data": [
    {
      "public_key": "mp0000000000000000000000000000000000000000000000000000000000000000",
      "name": "Validator One",
      "description": null,
      "icon_url": "",
      "site_url": null,
      "status": 2,
      "commission": 10,
      "stake": "5000000.000000000000000000",
      "part": "31.86067233",
      "delegator_count": 128,
      "min_stake": "100.000000000000000000",
      "reward_address": "mx0000000000000000000000000000000000000001",
      "owner_address": "mx0000000000000000000000000000000000000001",
      "control_address": "mx0000000000000000000000000000000000000001",
      "uniq_users": 128,
      "used_slots": 12,
      "jailed_until": 0,
      "in_active_set": true
    }
  ],
  "source": { "height": 42105678, "time": "2026-10-20T08:18:49Z", "parts": {}, "stale": [] }
}
FieldTypeMeaning
public_keystringvalidator public key, Mp + 64 hex
namestring \nulldisplay name
descriptionstring \nulldescription
icon_urlstringicon URL
site_urlstring \nullwebsite
statusnumber1 = offline, 2 = online
commissionnumbercommission, percent (0–100)
stakestringtotal stake, decimal string
partstringshare of the online stake, percent as a decimal string
delegator_countnumbernumber of delegators
min_stakestringminimum stake, decimal string
reward_addressstringreward address
owner_addressstringowner address
control_addressstringcontrol address
uniq_usersnumberunique delegators
used_slotsnumberused slots
jailed_untilnumberblock height until which the validator is jailed
in_active_setbooleanin the active set

Cache-Control: public, max-age=5.

GET /v1/validators/{pk}

One validator. Path parameter pk: Mp + 64 hex (the hex part is case-insensitive). 404 not_found if unknown.

curl 'https://api.denebnav.app/v1/validators/Mp0000000000000000000000000000000000000000000000000000000000000000'

The data object has exactly the same fields as a row of GET /v1/validators. Cache-Control: public, max-age=5.

GET /v1/validators/{pk}/stakes

The stakes held at one validator, paged. Path parameter pk as above; 404 not_found if unknown. Query parameters page (1-based, up to 100000) and limit (default 50, max 150).

curl 'https://api.denebnav.app/v1/validators/Mp0000000000000000000000000000000000000000000000000000000000000000/stakes?limit=2'
{
  "data": [
    {
      "coin": { "id": 0, "symbol": "BIP" },
      "address": "mx0000000000000000000000000000000000000001",
      "value": "5000.000000000000000000",
      "bip_value": "5000.000000000000000000",
      "is_waitlisted": false
    }
  ],
  "links": { "first": "/v1/validators/mp.../stakes?page=1", "last": "/v1/validators/mp.../stakes?page=3", "prev": null, "next": "/v1/validators/mp.../stakes?page=2" },
  "meta": { "current_page": 1, "last_page": 3, "path": "/v1/validators/mp.../stakes", "per_page": 2, "total": 6 },
  "source": { "height": 42105678, "time": "2026-10-20T08:18:49Z", "parts": {}, "stale": [] }
}
FieldTypeMeaning
data[].coinobject{id, symbol} of the staked coin
data[].addressstringthe delegator's address
data[].valuestringstaked amount, decimal string
data[].bip_valuestringits BIP value, decimal string
data[].is_waitlistedbooleanthe stake is still waitlisted

Cache-Control: public, max-age=5.

GET /v1/stats

One request for the whole Statistics page: network summary, BIP/USD, validators, pools, coin counts and the daily transaction history.

curl 'https://api.denebnav.app/v1/stats'
{
  "data": {
    "network": {
      "height": 42105678,
      "avg_block_time": 5.02,
      "tps": 0.11,
      "total_transactions": 87213456,
      "current_emission": "89558.137234329718283132",
      "emission_max": "10000000000.000000000000000000"
    },
    "bip": { "price_usd": 0.0312, "change_24h": 1.24, "market_cap": 312000000 },
    "validators": {
      "active_count": 64,
      "total_stake": "120000000.000000000000000000",
      "top10": [
        { "public_key": "mp...", "name": "Validator One", "icon": "", "stake": "5000000.000000000000000000", "share": 31.86 }
      ]
    },
    "pools": {
      "count": 120,
      "volume_24h_bip": "1250000.000000000000000000",
      "volume_24h_usd": "39000",
      "top10": [
        { "pool_id": 1, "coin0": { "id": 0, "symbol": "BIP" }, "coin1": { "id": 1902, "symbol": "HUB" }, "volume_24h_bip": "500000.000000000000000000" }
      ]
    },
    "coins": { "coins": 200, "tokens": 3800, "lp": 120, "total": 4120 },
    "tx_daily": {
      "history_from": "2021-04-01",
      "days": [ { "date": "2026-10-19", "transaction_count": 12040 } ]
    }
  },
  "source": { "height": 42105678, "time": "2026-10-20T08:18:49Z", "parts": {}, "stale": [] }
}
FieldTypeMeaning
network.heightnumberhead height
network.avg_block_timenumberaverage block time, seconds
network.tpsnumberrolling daily TPS
network.total_transactionsnumbertotal transactions
network.current_emissionstringemitted BIP so far, decimal string
network.emission_maxstringprotocol maximum, 10 000 000 000 BIP, decimal string
bip.price_usdnumbercurrent BIP/USD price
bip.change_24hnumber \null24 h change, percent
bip.market_capnumberBIP price × current emission, USD
validators.active_countnumbersize of the active set
validators.total_stakestringtotal stake of the active set, decimal string
validators.top10[].public_keystringvalidator public key
validators.top10[].namestring \nulldisplay name
validators.top10[].iconstringicon URL
validators.top10[].stakestringstake, decimal string
validators.top10[].sharenumberpercent of the active set's stake
pools.countnumbernumber of pools
pools.volume_24h_bipstring24 h swap volume in BIP, decimal string
pools.volume_24h_usdstring24 h swap volume in USD, decimal string
pools.top10[].pool_idnumberpool id
pools.top10[].coin0 / .coin1object{id, symbol} of the pool's coins
pools.top10[].volume_24h_bipstringthat pool's 24 h volume, decimal string
coins.coinsnumberbonding-curve coins in the registry
coins.tokensnumbertokens in the registry
coins.lpnumberpool (LP) tokens in the registry
coins.totalnumbertotal coins in the registry
tx_daily.history_fromstringfirst date of the daily history, YYYY-MM-DD
tx_daily.days[]array{date, transaction_count} per day

Cache-Control: public, max-age=5.

GET /v1/analytics/{metric}

One daily or monthly analytics series (ADR 0033). Path parameter metric is one of the names below.

Query parameters:

ParameterDefaultLimitsMeaning
bucketdayday \monthpoint granularity
fromto − 89 days (days) or the history start (months)YYYY-MM-DDfirst day of the range
totoday (UTC)YYYY-MM-DDlast day of the range

from must not be after to; the range is at most 400 days or 240 months.

curl 'https://api.denebnav.app/v1/analytics/fees?bucket=month&from=2026-01-01&to=2026-10-01'
{
  "metric": "fees",
  "agg": "sum",
  "unit": "BIP",
  "bucket": "month",
  "from": "2026-01-01",
  "to": "2026-10-31",
  "points": [
    ["2026-01", "102.250000000000000000"],
    ["2026-02", "98.000000000000000000"]
  ],
  "source": { "index": "postgres:1000…", "history_from": "2026-01-01", "partial_from": "2026-10-20", "updated_at": "2026-10-20T08:18:49Z" }
}
FieldTypeMeaning
metricstringthe metric name
aggstringsum, avg or last
unitstringvalue unit: addresses, tx, BIP, %, coins, …
bucketstringday or month
keysarray \—names of the vector components, for vector metrics
from / tostringthe range, YYYY-MM-DD
pointsarray[date, value] pairs; a day is YYYY-MM-DD, a month its first day YYYY-MM-01
source.indexstringidentifier of the rollup database
source.history_fromstringfirst day of the history
source.partial_fromstringfirst day that is not complete yet
source.updated_atstringlast write, RFC 3339 UTC

Metrics (a value is an integer, a vector of integers, a BIP amount as a decimal string, or a percent with 2 decimals):

metricaggunitvalue
active_addressesavgaddressesinteger
new_addressessumaddressesinteger
tx_by_typesumtxvector [transfer, swap, stake, liquidity, other]
feessumBIPdecimal string
swap_volumesumBIPdecimal string
stake_sharelast%number with 2 decimals
delegatorslastdelegatorsinteger
nakamotolastvalidatorsinteger
new_coinssumcoinsvector [coin, token]

bridge_flows and market_cap are not computed yet and answer 404 not_available. Unknown metric — 404 not_found. A wrong parameter — 400 bad_request. Cache-Control: public, max-age=3600 when the range is fully closed, public, max-age=60 while it includes a partial day.

Estimates

Read-only quotes from the node: what a swap would give or cost, what a transaction would cost in commission, and the current network fee table. Nothing here signs or sends a transaction. Amounts in the request are decimal coin units ("100", "0.5"), amounts in the answer are decimal strings with 18 fractional digits.

GET /v1/estimate/swap

One swap quote. Coins may be given by symbol or numeric id; a router that has not built the transaction yet uses this to choose the path.

ParameterRequiredMeaning
coin_to_sellyescoin to sell: symbol (BIP, USDTE) or id (0, 1993)
coin_to_buyyescoin to buy: symbol or id
value_to_sellone ofexact amount to sell, positive decimal
value_to_buyone ofexact amount to buy, positive decimal
swap_fromnooptimal (default), pool or bancor
routenointermediate coins, repeated (route=1993&route=3494) or comma-separated (route=1993,3494); at most 3. Empty — direct pool or the coin's reserve

Exactly one of value_to_sell / value_to_buy is required. swap_from=optimal lets the node compare the pool path with the coin's reserve (bancor) and answer which one it used. The node does not search routes: route is what the caller asked for, and the answer repeats it.

curl 'https://api.denebnav.app/v1/estimate/swap?coin_to_sell=BIP&coin_to_buy=USDTE&value_to_sell=100&swap_from=optimal'
{
  "data": {
    "coin_to_sell": { "id": 0, "symbol": "BIP" },
    "coin_to_buy": { "id": 1993, "symbol": "USDTE" },
    "value_to_sell": "100.000000000000000000",
    "will_get": "0.008596965612352558",
    "commission": "346.833116928590165264",
    "commission_coin": { "id": 0, "symbol": "BIP" },
    "swap_from": "pool",
    "route": []
  },
  "source": { "height": 42105678, "time": "2026-10-20T08:18:49Z", "parts": { "estimate": "node" }, "stale": [] }
}
FieldTypeMeaning
coin_to_sell / coin_to_buyobject{id, symbol} of the pair
value_to_sell + will_getstringsell quote: amount sold and amount the swap yields
value_to_buy + will_paystringbuy quote: amount wanted and amount it costs
commissionstringnetwork commission of the swap transaction, in commission_coin
commission_coinobjectcoin the commission is charged in (BIP)
swap_fromstringpool or bancor: where the node found the price
routearrayintermediate coins ({id, symbol}), in the order asked; empty for a direct swap

A valid request for a pair the node cannot exchange by this path is 404 not_found (no route). An unknown coin is 404; a malformed or contradictory request (both value parameters, a non-positive amount, more than 3 hops, swap_from outside the list, equal coins) is 400 bad_request. Cache-Control: public, max-age=5.

GET /v1/estimate/tx-commission

The commission the node would charge for a prepared transaction — signed or unsigned — priced at the current state. Useful to show an exact fee before signing and to compare it with the fee table.

ParameterRequiredMeaning
txyesraw transaction hex, with or without 0x
gas_coinnothe transaction's gas coin: symbol or id, default BIP. The API does not decode the raw transaction, so it cannot read the gas coin itself; name it here to get the BIP value
TX=0xf8…   # your prepared transaction, raw hex
curl "https://api.denebnav.app/v1/estimate/tx-commission?tx=$TX"
{
  "data": {
    "commission": "139.046831617890511004",
    "gas_coin": { "id": 0, "symbol": "BIP" },
    "commission_bip": "139.046831617890511004"
  },
  "source": { "height": 42105678, "time": "2026-10-20T08:18:49Z", "parts": { "commission": "node" }, "stale": [] }
}
FieldTypeMeaning
commissionstringcommission in gas_coin
gas_coinobjectgas coin of the transaction
commission_bipstring \nullthe same commission in BIP; null when the gas coin has no BIP price (then commission_bip is in source.stale)

An undecodable or malformed tx is 400 bad_request; Cache-Control: public, max-age=5.

GET /v1/commissions

The network's current commission price table (price_commissions): one row per transaction type, plus the payload byte price. Field names are the node's; every amount is a decimal string with 18 digits, coin is the coin the table is denominated in.

curl 'https://api.denebnav.app/v1/commissions'
{
  "data": {
    "coin": { "id": 1993, "symbol": "USDTE" },
    "payload_byte": "0.000200000000000000",
    "send": "0.010000000000000000",
    "multisend_base": "0.010000000000000000",
    "multisend_delta": "0.005000000000000000",
    "delegate": "0.100000000000000000",
    "unbond": "0.100000000000000000",
    "move_stake": "0.200000000000000000",
    "sell_pool_base": "0.100000000000000000",
    "sell_pool_delta": "0.050000000000000000",
    "create_swap_pool": "1.000000000000000000",
    "failed_tx": "0.010000000000000000"
  },
  "source": { "height": 42105678, "time": "2026-10-20T08:18:49Z", "parts": { "commissions": "node" }, "stale": [] }
}

The table is voted by validators and changes without a release: take prices from here, never from code. A fee for a concrete transaction is type row + payload_byte × bytes, in coin; GET /v1/estimate/tx-commission gives the exact number for a prepared transaction. Cache-Control: public, max-age=5.

Address and validator events

Rewards, slashes, unbond releases and bans of one address or validator, read from the Deneb chain index, newest first. The index stores rewards aggregated by day; there is no per-block reward list. Amounts are decimal strings with 18 fractional digits.

Query parameters (every list below):

ParameterDefaultLimitsMeaning
page11..1000001-based page
limit501..150items per page

All lists are explorer-paginated ({data, links, meta}) and carry the standard source object: height and time are the index head, and parts.events names the index (an opaque label). page × limit must not exceed 10000 (a deeper page would make the index scan a huge prefix) — beyond that the answer is 400 bad_request. While the index is unavailable every route answers 503 unavailable. Cache-Control: public, max-age=5.

GET /v1/addresses/{addr}/events/rewards/aggregated

The address's rewards, aggregated by day (role is Validator, Delegator, DAO or Developers). Path parameter addr: Mx + 40 hex (the hex part is case-insensitive). This is explorer-api v2 /addresses/{a}/events/rewards/aggregated (the @minter/core addressRewards method).

curl 'https://api.denebnav.app/v1/addresses/Mx0000000000000000000000000000000000000001/events/rewards/aggregated?limit=2'
{
  "data": [
    {
      "time_id": "2026-10-20T00:00:00Z",
      "timestamp": "2026-10-20T00:00:00Z",
      "role": "Delegator",
      "amount": "1.234567890123456789",
      "address": "Mx0000000000000000000000000000000000000001",
      "validator": { "public_key": "Mp0000000000000000000000000000000000000000000000000000000000000000", "name": null, "description": null, "icon_url": "", "site_url": null, "status": 2, "commission": 10 }
    }
  ],
  "links": { "first": "/v1/addresses/Mx.../events/rewards/aggregated?page=1", "last": "/v1/addresses/Mx.../events/rewards/aggregated?page=1", "prev": null, "next": null },
  "meta": { "current_page": 1, "last_page": 1, "path": "/v1/addresses/Mx.../events/rewards/aggregated", "per_page": 50, "total": 1 },
  "source": { "height": 40200123, "time": "2026-10-20T08:18:49Z", "parts": { "events": "index" }, "stale": [] }
}
FieldTypeMeaning
data[].time_id / data[].timestampstringthe aggregation day/time, RFC 3339 UTC
data[].rolestringreward role: Validator, Delegator, DAO or Developers
data[].amountstringreward amount, decimal string
data[].addressstringthe rewarded address
data[].validatorobjectvalidator metadata, see the validators section

GET /v1/addresses/{addr}/events/slashes

The address's slashes (stake penalties). Path parameter addr as above.

curl 'https://api.denebnav.app/v1/addresses/Mx0000000000000000000000000000000000000001/events/slashes'
{
  "data": [
    {
      "height": 42100000,
      "coin": { "id": 0, "symbol": "BIP" },
      "amount": "0.500000000000000000",
      "address": "Mx0000000000000000000000000000000000000001",
      "timestamp": "2026-10-20T08:18:49Z",
      "validator": { "public_key": "Mp...", "name": null, "description": null, "icon_url": "", "site_url": null, "status": 2, "commission": 10 }
    }
  ],
  "links": { "first": "...", "last": "...", "prev": null, "next": null },
  "meta": { "current_page": 1, "last_page": 1, "path": "/v1/addresses/Mx.../events/slashes", "per_page": 50, "total": 1 },
  "source": { "height": 40200123, "time": "2026-10-20T08:18:49Z", "parts": { "events": "index" }, "stale": [] }
}
FieldTypeMeaning
data[].heightnumberblock height of the slash
data[].coinobject{id, symbol} of the slashed coin
data[].amountstringslashed amount, decimal string
data[].addressstringthe slashed address
data[].timestampstringblock time, RFC 3339 UTC
data[].validatorobjectvalidator metadata

GET /v1/addresses/{addr}/events/unbonds

The address's unbond releases: a stake that left unbonding and is returned to the address. The index stores the release block; start_height is end_height − 518400 (the 30-day unbond period). Path parameter addr as above.

curl 'https://api.denebnav.app/v1/addresses/Mx0000000000000000000000000000000000000001/events/unbonds'
{
  "data": [
    {
      "coin": { "id": 0, "symbol": "BIP" },
      "address": "Mx0000000000000000000000000000000000000001",
      "value": "100.000000000000000000",
      "validator": { "public_key": "Mp...", "name": null, "description": null, "icon_url": "", "site_url": null, "status": 2, "commission": 10 },
      "end_height": 42100000,
      "start_height": 41581600,
      "type": "unbond"
    }
  ],
  "links": { "first": "...", "last": "...", "prev": null, "next": null },
  "meta": { "current_page": 1, "last_page": 1, "path": "/v1/addresses/Mx.../events/unbonds", "per_page": 50, "total": 1 },
  "source": { "height": 40200123, "time": "2026-10-20T08:18:49Z", "parts": { "events": "index" }, "stale": [] }
}
FieldTypeMeaning
data[].coinobject{id, symbol} of the released coin
data[].addressstringthe address
data[].valuestringreleased amount, decimal string
data[].validatorobjectvalidator metadata
data[].end_heightnumberblock the stake is released at
data[].start_heightnumberblock the unbond started at (end_height − 518400)
data[].typestringalways unbond

GET /v1/validators/{pk}/events/{rewards|slashes|bans}

The same data per validator. Path parameter pk: Mp + 64 hex (the hex part is case-insensitive). rewards is the validator's daily reward rows (all roles); slashes and bans are the validator's slashes and jailing bans. A validator that the index does not know answers an empty list.

curl 'https://api.denebnav.app/v1/validators/Mp0000000000000000000000000000000000000000000000000000000000000000/events/bans'
{
  "data": [
    { "height": 42100000, "timestamp": "2026-10-20T08:18:49Z", "to_block_id": 42123456 }
  ],
  "links": { "first": "...", "last": "...", "prev": null, "next": null },
  "meta": { "current_page": 1, "last_page": 1, "path": "/v1/validators/Mp.../events/bans", "per_page": 50, "total": 1 },
  "source": { "height": 40200123, "time": "2026-10-20T08:18:49Z", "parts": { "events": "index" }, "stale": [] }
}

rewards rows have the same fields as the address rewards; slashes rows the same as the address slashes. A ban row is {height, timestamp, to_block_id}: the block the validator was jailed at and the block it is jailed until.