# Health & Status Endpoints

bindcar provides health check and status endpoints for monitoring and orchestration.

## Health Check

**GET** `/api/v1/health`

Simple health check endpoint that returns the service health status.

### No Authentication Required

This endpoint does not require authentication.

### Request

```bash
curl http://localhost:8080/api/v1/health
```

### Response

```json
{
  "healthy": true
}
```

### Status Codes

- `200 OK` - Service is healthy
- `503 Service Unavailable` - Service is unhealthy

### Use Cases

- Kubernetes liveness probes
- Load balancer health checks
- Monitoring systems
- Simple uptime checks

## Readiness Check

**GET** `/api/v1/ready`

Readiness check that verifies the service is ready to accept traffic.

### No Authentication Required

This endpoint does not require authentication.

### Request

```bash
curl http://localhost:8080/api/v1/ready
```

### Response

```json
{
  "ready": true,
  "checks": {
    "zone_directory": "ok",
    "rndc_binary": "ok"
  }
}
```

### Status Codes

- `200 OK` - Service is ready
- `503 Service Unavailable` - Service is not ready

### Readiness Checks

The service performs these checks:
1. Zone directory is accessible and writable
2. RNDC binary is executable
3. Service has started successfully

### Use Cases

- Kubernetes readiness probes
- Rolling deployments
- Traffic routing decisions

## Server Status

**GET** `/api/v1/server/status`

Get BIND9 server status via rndc.

### Authentication Required

Requires Bearer token authentication.

### Request

```bash
curl http://localhost:8080/api/v1/server/status \
  -H "Authorization: Bearer $TOKEN"
```

### Response

```json
{
  "status": "version: 9.18.10\nCPUs found: 4\nworker threads: 4\nUDP listeners per interface: 4\nnumber of zones: 12 (0 automatic)\ndebug level: 0\nxfers running: 0\nxfers deferred: 0\nsoa queries in progress: 0\nquery logging is OFF\nrecursive clients: 0/900/1000\ntcp clients: 0/150/150\nTCP high-water: 0\nserver is up and running"
}
```

### Status Codes

- `200 OK` - Status retrieved successfully
- `401 Unauthorized` - Missing or invalid token
- `500 Internal Server Error` - RNDC command failed

### Use Cases

- Monitoring BIND9 server status
- Checking number of zones
- Verifying BIND9 is running
- Performance monitoring

## Kubernetes Integration

### Liveness Probe

```yaml
livenessProbe:
  httpGet:
    path: /api/v1/health
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 10
  timeoutSeconds: 3
  failureThreshold: 3
```

### Readiness Probe

```yaml
readinessProbe:
  httpGet:
    path: /api/v1/ready
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 5
  timeoutSeconds: 3
  successThreshold: 1
  failureThreshold: 3
```

### Startup Probe

```yaml
startupProbe:
  httpGet:
    path: /api/v1/ready
    port: 8080
  initialDelaySeconds: 0
  periodSeconds: 5
  timeoutSeconds: 3
  failureThreshold: 30
```

## Monitoring Examples

### Simple Health Check Script

```bash
#!/bin/bash
if curl -f -s http://localhost:8080/api/v1/health > /dev/null; then
  echo "Service is healthy"
  exit 0
else
  echo "Service is unhealthy"
  exit 1
fi
```

### Prometheus Monitoring

While bindcar doesn't currently export Prometheus metrics, you can use blackbox_exporter to monitor the health endpoint.

## Next Steps

- [Zone Operations](./zone-operations.md) - Zone management endpoints
- [API Reference](../reference/api.md) - Complete API documentation
- [Monitoring](../operations/monitoring.md) - Monitoring and observability
