> For the complete documentation index, see [llms.txt](https://docs.solanavibestation.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.solanavibestation.com/developers/getting-started/health-check-api.md).

# Health Check API

Solana Vibe Station exposes a public health endpoint on every edge location. It reports whether each backend service at that location has at least one healthy upstream host, making it easy to see which parts of the service are operating normally and which are degraded or down.

This endpoint is **public** — no API key is required.

### Endpoint

```
https://health.<service>.<location>.solanavibestation.com/health
```

* `<service>` — the service group you want to check (for example, `rpc` or `swqos`).
* `<location>` — the edge location code (for example, `atl` or `ams`).

The health endpoint is available at every edge location independently, so you can probe each location on its own to isolate where an issue is occurring.

Example:

```bash
curl -i https://health.rpc.atl1.solanavibestation.com/health
```

### Responses

The endpoint evaluates every upstream at the queried location. An upstream is considered **up** if at least one of its hosts is healthy; if all primary hosts are down, backup hosts are checked before the upstream is marked down.

**Healthy** — all upstreams have at least one host up:

```http
HTTP/1.1 200 OK
Content-Type: text/plain

OK
```

**Degraded or down** — one or more upstreams have no healthy hosts:

```http
HTTP/1.1 503 Service Unavailable
Content-Type: application/json

{
  "status": "unhealthy",
  "down": ["<upstream-name>", "<upstream-name>"]
}
```

The `down` array lists the names of every upstream at that location that currently has no healthy hosts. Upstreams not listed are operating normally — a `503` does **not** mean the entire location is offline, only that the named upstreams are affected.

**Error** — the health checker could not enumerate upstreams:

```http
HTTP/1.1 500 Internal Server Error
Content-Type: application/json

{
  "status": "error",
  "message": "failed to get upstreams: <reason>"
}
```

### Status code summary

| Status | Meaning                                                                      |
| ------ | ---------------------------------------------------------------------------- |
| `200`  | All upstreams at this location have at least one healthy host.               |
| `503`  | One or more upstreams have no healthy hosts. See the `down` array for which. |
| `500`  | The health checker failed to enumerate upstreams at this location.           |

### Interpreting upstream names

When an upstream appears in the `down` array, the name identifies which portion of the service is affected. Use the table below to map upstream names to the functionality or RPC methods they serve.

| Upstream name     | Description / methods handled                                                                                                                                                                                                            |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `rpc`             | General-purpose Solana JSON-RPC. Handles all standard read methods that are not explicitly routed elsewhere (e.g. `getAccountInfo`, `getBalance`, `getMultipleAccounts`, `getSlot`, `getLatestBlockhash`, `getSignatureStatuses`, etc.). |
| `websockets`      | WebSocket subscriptions (e.g. `accountSubscribe`, `logsSubscribe`, `programSubscribe`, `signatureSubscribe`).                                                                                                                            |
| `jet`             | Transaction submission. Handles `sendTransaction`, with fallback to the general RPC nodes.                                                                                                                                               |
| `spl_rpc`         | SPL / program-account methods that allow fallback to general RPC nodes: `getProgramAccounts`, `getTokenLargestAccounts`, `getTokenSupply`, `getSupply`.                                                                                  |
| `spl_rpc_primary` | Primary-only SPL methods with **no** backup: `getTokenAccountsByDelegate`, `getLargestAccounts`. These methods are blocked if the primary host is offline rather than falling back to general RPC nodes.                                 |
| `historical`      | Historical / archival data, with fallback to general RPC nodes.                                                                                                                                                                          |
| `lightspeed`      | Lightspeed transaction sending service.                                                                                                                                                                                                  |

### Usage notes

* **Polling.** The endpoint is lightweight and safe to poll on a short interval for monitoring or alerting. Because health is reported per location, point your monitors at each location's hostname to get full coverage.
* **Automation.** Check the HTTP status code for a quick up/down signal, and parse the `down` array when you need to know exactly which upstreams are affected.
* **Dashboard.** A hosted status dashboard built on this endpoint is planned. Until then, this public API is the canonical source of real-time health.
