BryanLabsBryanLabs
← Back to Cosmos Tax

Cosmos Tax API

A public, no-auth read API for pulling Cosmos tax events programmatically. Query staking rewards, income, transfers, swaps, and fees for any public Cosmos address over a date range, as JSON or CSV.

GET/api/tax/v1/events

Returns tax events for one or more addresses, optionally filtered by type and date range.

ParamRequiredDescription
addressrequiredComma-separated public address(es), e.g. cosmos1abc,cosmos1def
chainoptionalChain id. Default: cosmoshub (the only enabled chain today).
typeoptionalEvent category. Default: all. One of: all, rewards, staking, income, transfers, swaps, fees.
startoptionalInclusive start, YYYY-MM-DD or RFC3339. Default: all time.
endoptionalInclusive end, YYYY-MM-DD or RFC3339. Default: all time.
formatoptionaljson (default) or csv.

Examples

# All staking rewards for a wallet in 2026
curl "https://bryanlabs.net/api/tax/v1/events?address=cosmos1...&type=rewards&start=2026-01-01&end=2026-12-31"

# Every transfer (bank/IBC send) across two wallets, as CSV
curl "https://bryanlabs.net/api/tax/v1/events?address=cosmos1...,cosmos1...&type=transfers&format=csv"

# Everything, all time
curl "https://bryanlabs.net/api/tax/v1/events?address=cosmos1..."

Response (JSON)

{
  "chain": "cosmoshub",
  "type": "rewards",
  "addresses": ["cosmos1..."],
  "start": "2026-01-01T00:00:00Z",
  "end": "2026-12-31T23:59:59Z",
  "summary": {
    "taxableEvents": 42,
    "stakingRewards": 12.34,
    "totalReceived": 12.34,
    "totalSent": 0,
    "totalFees": 0.01,
    "symbol": "ATOM",
    "firstDate": "2026-01-02 09:14:00",
    "lastDate": "2026-06-20 21:03:00"
  },
  "count": 42,
  "events": [
    {
      "date": "2026-01-02 09:14:00",
      "sentAmount": "", "sentCurrency": "",
      "receivedAmount": "0.91", "receivedCurrency": "ATOM",
      "feeAmount": "", "feeCurrency": "",
      "label": "reward", "description": "", "txHash": "ABC123..."
    }
  ]
}
GET/api/tax/v1/balances

Returns pre-indexed Cosmos Hub ATOM holdings (liquid, staked, unclaimed rewards) for an address, at the latest snapshot, as of a date, or as a full daily series.

ParamRequiredDescription
addressrequiredA single public address, e.g. cosmos1abc…
chainoptionalChain id. Default: cosmoshub.
dateoptionalHoldings as of this date, YYYY-MM-DD. Default: latest snapshot.
historyoptionalSet to true to return the full daily series instead of a single point.

Examples

# Latest holdings for a wallet
curl "https://bryanlabs.net/api/tax/v1/balances?address=cosmos1..."

# Holdings as of a specific date
curl "https://bryanlabs.net/api/tax/v1/balances?address=cosmos1...&date=2026-04-15"

# Full daily history
curl "https://bryanlabs.net/api/tax/v1/balances?address=cosmos1...&history=true"

Response (JSON)

{
  "date": "2026-06-20",
  "liquid": 12.5,
  "staked": 480.0,
  "reward": 3.21,
  "total": 495.71
}

// With history=true:
{
  "history": [
    { "date": "2026-06-19", "liquid": 12.4, "staked": 480.0, "reward": 3.10, "total": 495.50 },
    { "date": "2026-06-20", "liquid": 12.5, "staked": 480.0, "reward": 3.21, "total": 495.71 }
  ]
}

Tax-software CSV export

For ready-to-import files in Koinly, CoinTracker, TaxBit, Accointing, or Crypto Tax Calculator format, generate a report in the web app and use the download menu.

Coverage & limits