---
layout: api
page_title: /sys/health - HTTP API
description: The `/sys/health` endpoint is used to check the health status of Vault.
---

> [!IMPORTANT]  
> **Documentation Update:** Product documentation, which were located in this repository under `/website`, are now located in [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs), colocated with all other product documentation. Contributions to this content should be done in the `web-unified-docs` repo, and not this one. Changes made to `/website` content in this repo will not be reflected on the developer.hashicorp.com website.

# `/sys/health`

@include 'alerts/restricted-root.mdx'

The `/sys/health` endpoint is used to check the health status of Vault.

## Read health information

This endpoint returns the health status of Vault. This matches the semantics of
a Consul HTTP health check and provides a simple way to monitor the health of a
Vault instance.

| Method | Path          |
| :----- | :------------ |
| `HEAD` | `/sys/health` |
| `GET`  | `/sys/health` |

The default status codes are:

- `200` if initialized, unsealed, and active
- `429` if unsealed and standby
- `472` if disaster recovery secondary (both active and standby nodes within the DR secondary)
- `473` if performance standby
- `474` if standby node but cannot connect to the active node
- `501` if not initialized
- `503` if sealed
- `530` if removed

<Note>
  In rare occasions such as during cluster instability, a node may return 429 even when it was part of a DR secondary (472) or a perf-standby (473). When configuring a Load Balancer based on health status API, it's important to recognize that a 429 indicates a standby node that doesn't process the request itself, read or write.
</Note>

### Parameters

- `standbyok` `(bool: false)` – Specifies if being a standby should still return
  the active status code instead of the standby status code. This is useful when
  Vault is behind a non-configurable load balancer that just wants a 200-level
  response. This will not apply if the node is a performance standby.

- `perfstandbyok` `(bool: false)` – Specifies if being a performance standby should
  still return the active status code instead of the performance standby status code.
  This is useful when Vault is behind a non-configurable load balancer that just wants
  a 200-level response.

- `activecode` `(int: 200)` – Specifies the status code that should be returned
  for an active node.

- `standbycode` `(int: 429)` – Specifies the status code that should be returned
  for a standby node.

- `drsecondarycode` `(int: 472)` – Specifies the status code that should be
  returned for a DR secondary node.

- `haunhealthycode` `(int: 474)` - Specifies the status code that should be
  returned when the node is a standby/performance standby node that cannot
  connect to the active node, so the node isn't able to be part of the high
  availability cluster.

- `performancestandbycode` `(int: 473)` – Specifies the status code that should be
  returned for a performance standby node.

- `removedcode` `(int: 530)` - Specifies the status code when the node has been
  removed from the HA cluster.

- `sealedcode` `(int: 503)` – Specifies the status code that should be returned
  for a sealed node.

- `uninitcode` `(int: 501)` – Specifies the status code that should be returned
  for a uninitialized node.

### Sample request

```shell-session
$ curl \
    http://127.0.0.1:8200/v1/sys/health
```

### Sample request to customize the status code being returned

```shell-session
$ curl -i https://127.0.0.1:8200/v1/sys/health\?drsecondarycode\=200

HTTP/2 200
cache-control: no-store
content-type: application/json
strict-transport-security: max-age=31536000; includeSubDomains
content-length: 364
date: Wed, 26 Jan 2022 09:21:13 GMT
```

### Sample response - CE active node

```json
{
  "clock_skew_ms": 0,
  "cluster_id": "995f749a-9bc3-fbe0-a185-ccba6999fc73",
  "cluster_name": "vault-cluster-e65c0563",
  "echo_duration_ms": 0,
  "enterprise": false,
  "initialized": true,
  "performance_standby": false,
  "replication_dr_mode": "disabled",
  "replication_performance_mode": "disabled",
  "sealed": false,
  "server_time_utc": 1709559327,
  "standby": false,
  "version": "1.16.0-rc2"
}
```

### Sample response - CE standby node

```json
{
  "clock_skew_ms": 0,
  "cluster_id": "78d0e173-090f-feae-f245-caa8f39287f6",
  "cluster_name": "vault-cluster-0f6e3348",
  "echo_duration_ms": 1,
  "enterprise": false,
  "ha_connection_healthy": true,
  "initialized": true,
  "last_request_forwarding_heartbeat_ms": 815,
  "performance_standby": false,
  "removed_from_cluster": false,
  "replication_dr_mode": "disabled",
  "replication_performance_mode": "disabled",
  "replication_primary_canary_age_ms": 0,
  "sealed": false,
  "server_time_utc": 1732544415,
  "standby": true,
  "version": "1.19.0-beta1"
}
```

### Sample response - Enterprise active node

This response is only returned for a `GET` request.

Note: `replication_performance_mode` and `replication_dr_mode` reflect the state of
the active node in the cluster; if you are querying it for a standby that has
just come up, it may take time for the active node to inform the
standby of its status.

```json
{
  "clock_skew_ms": 0,
  "cluster_id": "e278ff10-60da-4248-0b0a-dd174d22172d",
  "cluster_name": "vault-cluster-88b4e092",
  "echo_duration_ms": 0,
  "enterprise": true,
  "initialized": true,
  "last_wal": 362,
  "license": {
    "expiry_time": "2024-08-03T23:59:59Z",
    "state": "autoloaded",
    "terminated": false
  },
  "performance_standby": false,
  "replication_dr_mode": "disabled",
  "replication_performance_mode": "disabled",
  "replication_primary_canary_age_ms": 0,
  "sealed": false,
  "server_time_utc": 1709558830,
  "standby": false,
  "version": "1.17.0-beta1+ent"

}
```
