Health Check
curl --request GET \
--url https://api.trynawa.com/v1/healthimport requests
url = "https://api.trynawa.com/v1/health"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.trynawa.com/v1/health', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));Endpoints
Health Check
Check the operational status of the NAWA API and its dependencies.
GET
/
v1
/
health
Health Check
curl --request GET \
--url https://api.trynawa.com/v1/healthimport requests
url = "https://api.trynawa.com/v1/health"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.trynawa.com/v1/health', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));Check the operational status of the NAWA API. This endpoint is free and does not require authentication.
Unlike every other endpoint, this one returns a bare object, not the
{ success, result, errors, request_id } envelope. It is designed to be read by uptime monitors, which generally cannot unwrap a payload.Request
curl https://api.trynawa.com/v1/health
Response
Healthy (200)
{
"status": "healthy",
"version": "v1",
"services": {
"database": { "status": "healthy", "latency_ms": 64 },
"redis": { "status": "healthy", "latency_ms": 21 },
"nagl": { "status": "healthy" }
},
"timestamp": "2026-09-13T13:42:53.077Z",
"latency_ms": 65
}
Degraded (200)
A non-core dependency is unavailable. The API is serving normally.{
"status": "degraded",
"version": "v1",
"services": {
"database": { "status": "healthy", "latency_ms": 64 },
"redis": { "status": "down", "latency_ms": 20 },
"nagl": { "status": "healthy" }
},
"timestamp": "2026-09-13T13:42:54.410Z",
"latency_ms": 65
}
Down (503)
A core dependency has failed and the API cannot serve requests.{
"status": "down",
"version": "v1",
"services": {
"database": { "status": "down" },
"redis": { "status": "healthy", "latency_ms": 18 },
"nagl": { "status": "healthy" }
},
"timestamp": "2026-09-13T13:42:55.221Z",
"latency_ms": 2043
}
Fields
| Field | Type | Description |
|---|---|---|
status | string | healthy, degraded, or down. See the status contract below. |
version | string | API version, currently v1 |
services.database | object | Postgres reachability, with latency_ms |
services.redis | object | Cache and rate-limit store. Non-core: see below. |
services.nagl | object | The routing and classification layer. Core. |
timestamp | string | ISO 8601 UTC |
latency_ms | number | Total time to run all checks |
The status contract
This matters if you are wiring up an uptime monitor.status | HTTP | Meaning | Should a monitor alert? |
|---|---|---|---|
healthy | 200 | Everything nominal | No |
degraded | 200 | redis is unavailable. Rate limiting and caching fail open, so requests still succeed, just without cache hits. | No |
down | 503 | database or nagl has failed. Requests cannot be served. | Yes |
Key your monitor on the HTTP status code, not on the
status string in the body.A degraded response is a deliberate 200: the API is up and answering. A monitor that treats the body’s "degraded" as an outage will report the API as down while it is serving every request normally. Only a 503 means requests are actually failing.For real-time status monitoring, visit status.trynawa.com.
Was this page helpful?