# Bitcoin

> Bitcoin Mainnet and Testnet through RPC Gateway, with Bitcoin Core-style JSON-RPC, cached block reads, and per-network provider coverage.

Canonical page: https://rpc.aurpay.net/docs/chains/bitcoin

Bitcoin reaches the Gateway as Bitcoin Core-style JSON-RPC over HTTP, covering chain, block, and transaction reads. Its native asset is BTC.

## Networks and hosts

| Network | JSON-RPC Host |
|---|---|
| Mainnet | `btc-jsonrpc` |
| Testnet | `btc-testnet-jsonrpc` |

Bitcoin carries no EVM chain ID, so network identity is confirmed from the response body rather than from a chain-ID call. Copy the complete Access Point from the dashboard.

The Gateway wraps Bitcoin Core calls in a strict JSON-RPC 2.0 envelope: `jsonrpc` must be `"2.0"`, `method` a non-empty string, and `params` an array or object. Clients written against a node's own HTTP interface may need their envelope adjusted; the method names and parameters stay the same.

## Provider coverage

Testnet coverage is thinner than Mainnet here, and dRPC reaches Bitcoin Mainnet only.

| Provider | Mainnet | Testnet |
|---|:---:|:---:|
| [Alchemy](https://rpc.aurpay.net/docs/providers/alchemy.md) | Yes | Yes |
| [QuickNode](https://rpc.aurpay.net/docs/providers/quicknode.md) | Yes | Yes |
| [Chainstack](https://rpc.aurpay.net/docs/providers/chainstack.md) | Yes | Yes |
| [dRPC](https://rpc.aurpay.net/docs/providers/drpc.md) | Yes | No |
| [Tenderly](https://rpc.aurpay.net/docs/providers/tenderly.md) | No | No |

For a Bitcoin Testnet Route built on dRPC alone, add a second Provider or register the node as a [manual Endpoint](https://rpc.aurpay.net/docs/endpoints.md#add-a-manual-endpoint).

## Reads without an Endpoint

Three UTXO request shapes check the shared cache first:

- `getblockchaininfo` with parameters omitted or `[]`;
- `getblockhash` with a single non-negative block height;
- `getblock` with a block hash and verbosity `3`.

Verbosity `3` is the only accepted form, so a request using `0`, `1`, or `2` continues to the Route. The two-step pattern of `getblockhash` followed by `getblock` therefore stays inside the cached set. See [Endpoint-free RPC](https://rpc.aurpay.net/docs/endpoint-free-rpc.md).

## Verify the network

```bash
curl '<bitcoin_access_point>' \
  -H 'Authorization: Bearer <app_api_key>' \
  -H 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"getblockchaininfo","params":[]}'
```

`chain` reads `main` on Mainnet and is normally `test` on Testnet. This call can be answered from the shared cache, so confirm your own upstream through its health check and the Route state instead of treating the response as proof that the Endpoint is live.

## Coverage boundary

One JSON-RPC 2.0 object per HTTP `POST`. Wallet methods, the transaction index, pruning depth, and mempool visibility depend entirely on how the upstream node was configured — a pruned node cannot serve historical blocks regardless of routing. Manage wallets in the upstream, and keep Mainnet and Testnet on independent Routes.

See [Errors and recovery](https://rpc.aurpay.net/docs/errors.md) for Gateway error codes and [Endpoints](https://rpc.aurpay.net/docs/endpoints.md) for inventory management.
