> ## Documentation Index
> Fetch the complete documentation index at: https://docs.offthehook.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Supported TRON Networks

> Off the Hook monitors three TRON networks identified by CAIP-2 chain IDs. Use tron:mainnet for production and tron:nile or tron:shasta for testing.

Off the Hook uses [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) identifiers everywhere chains appear — in address filters, webhook payloads, and API responses. This gives you a single, unambiguous way to refer to a network regardless of context. Three TRON networks are currently supported: one production chain and two testnets for development and QA.

## Supported networks

| Chain        | CAIP-2 ID      | Purpose    | RPC host                 |
| ------------ | -------------- | ---------- | ------------------------ |
| TRON Mainnet | `tron:mainnet` | Production | `api.trongrid.io`        |
| TRON Nile    | `tron:nile`    | Testnet    | `nile.trongrid.io`       |
| TRON Shasta  | `tron:shasta`  | Testnet    | `api.shasta.trongrid.io` |

<Info>
  Non-TRON chains (Ethereum, TON, Solana, etc.) are not currently supported. Off the Hook is focused on TRON, which processes more USDT volume than Ethereum and has historically been underserved by webhook infrastructure.
</Info>

## Chain IDs in address filters

Every entry in your subscription's `filters.addresses` list includes a `chainId`. The same base58check address on mainnet and Nile is treated as two separate watched addresses — a transfer on one chain does not fire events for the other. If you want to monitor an address across multiple networks, add one entry per chain.

```json theme={null}
{
  "add": [
    { "chainId": "tron:mainnet", "address": "TLsV52sRDL79HXGGm9yzwKibb6BeruhUzy" },
    { "chainId": "tron:nile", "address": "TLsV52sRDL79HXGGm9yzwKibb6BeruhUzy" }
  ]
}
```

This pattern is useful when you want to test your webhook handler against activity on Nile before enabling mainnet monitoring.

## TRON address format

TRON addresses use base58check encoding and always start with the letter `T`. Off the Hook validates every address you submit and rejects malformed inputs before they are stored.

<Note>
  Off the Hook validates addresses on submission and returns an `invalid_address` error for any input that fails base58check decoding. Fix the address before retrying — the error will not resolve on its own.
</Note>

## Chain-related error codes

If your request includes an unrecognized or unavailable chain, the API returns one of the following errors:

| Error code          | Meaning                                                                    |
| ------------------- | -------------------------------------------------------------------------- |
| `invalid_chain`     | The `chainId` is not a recognized CAIP-2 identifier. Check for typos.      |
| `chain_not_enabled` | The `chainId` is valid but that network is not yet active in Off the Hook. |

Both errors appear as items in the `skipped` array when you use `PATCH /v1/subscriptions/:id/filters/addresses`, so a batch with mixed valid and invalid entries still processes the valid ones.
