# Regions (/platform/regions)

> Corvus metros and which products run in each: Solana RPC in five, Falcon, aRPC and Shredstream in all nine.



Falcon, aRPC and Shredstream run in all nine Corvus metros. Solana RPC (JSON-RPC, WebSocket and Yellowstone gRPC) is offered in five of them.

## Product availability by metro

| Metro               | Code  | Solana RPC | Falcon | aRPC | Shredstream |
| ------------------- | ----- | :--------: | :----: | :--: | :---------: |
| 🇩🇪 Frankfurt      | `fra` |      ✓     |    ✓   |   ✓  |      ✓      |
| 🇳🇱 Amsterdam      | `ams` |      ✓     |    ✓   |   ✓  |      ✓      |
| 🇬🇧 London         | `lon` |      ✓     |    ✓   |   ✓  |      ✓      |
| 🇺🇸 New York       | `nyc` |      ✓     |    ✓   |   ✓  |      ✓      |
| 🇯🇵 Tokyo          | `tyo` |      ✓     |    ✓   |   ✓  |      ✓      |
| 🇮🇪 Dublin         | `dub` |      —     |    ✓   |   ✓  |      ✓      |
| 🇸🇬 Singapore      | `sgp` |      —     |    ✓   |   ✓  |      ✓      |
| 🇺🇸 Salt Lake City | `slc` |      —     |    ✓   |   ✓  |      ✓      |
| 🇱🇹 Šiauliai       | `sqq` |      —     |    ✓   |   ✓  |      ✓      |

Submission and reads don't have to share a metro, so a submitter in `sgp` reading from `tyo` is a normal arrangement.

## Choosing a region

Measure from the host that's actually going to run the client:

```bash
curl --silent --output /dev/null \
  --write-out 'connect=%{time_connect}s total=%{time_total}s\n' \
  --header 'content-type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"getSlot"}' \
  'http://fra.corvus-labs.io:8899'
```

Sample it under traffic that looks like yours, and read `time_connect` against `time_total` before you pick a metro.

## Regional failover

Failover is built into the endpoint. We health-check every regional host's backends, and when they degrade we serve you from the nearest healthy region instead: same hostname, same credentials, nothing to do on your side, whether or not you rent the region that steps in. Expect the extra round trip while it lasts.

Renting a second region yourself buys your own redundancy, a separate network path from your infrastructure or a warm standby for the metro your traffic depends on. Access stays per endpoint either way, so dialing the hostname of a region you haven't rented gets `401` / `-32002` `Unauthorized`.

Live connections don't survive a backend switch: sockets, Yellowstone channels and aRPC streams all reconnect and re-register every filter. On Yellowstone gRPC you can replay the gap with `from_slot` ([replay on reconnect](/solana-rpc/grpc/usage#reconnect-after-a-failure)); WebSocket and aRPC have no replay, and aRPC's `sequence` is connection-local and restarts from zero. For a transaction in flight, check the signature before you resend ([Transactions](/solana-rpc/transactions)).
