← 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/eventsReturns tax events for one or more addresses, optionally filtered by type and date range.
| Param | Required | Description |
|---|---|---|
| address | required | Comma-separated public address(es), e.g. cosmos1abc,cosmos1def |
| chain | optional | Chain id. Default: cosmoshub (the only enabled chain today). |
| type | optional | Event category. Default: all. One of: all, rewards, staking, income, transfers, swaps, fees. |
| start | optional | Inclusive start, YYYY-MM-DD or RFC3339. Default: all time. |
| end | optional | Inclusive end, YYYY-MM-DD or RFC3339. Default: all time. |
| format | optional | json (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/balancesReturns 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.
| Param | Required | Description |
|---|---|---|
| address | required | A single public address, e.g. cosmos1abc… |
| chain | optional | Chain id. Default: cosmoshub. |
| date | optional | Holdings as of this date, YYYY-MM-DD. Default: latest snapshot. |
| history | optional | Set 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
- Cosmos Hub mainnet only today. Cosmos Hub testnet is planned.
- Indexing covers recent history; older periods may be incomplete while backfill is in progress.
- The data does not distinguish IBC transfers from bank sends. Cross-chain activity is out of scope: you will need to account for the other side of an IBC transfer using that chain's records.
- Non-taxable activity such as governance votes is not included.
- This API returns transaction records for tax preparation. It is not tax advice.
