> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tattoo.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Health

> Operational health status for the current TattooAPI runtime.

<Info>
  **Posture:** Public no-auth read. This endpoint is part of the current promoted public surface.
</Info>

Canonical request URL: `https://api.tattooapi.com/api/v1/health`.

`GET /health/live`, `GET /health/ready`, and legacy `GET /health` are public and return direct objects, not success wrappers.

Production operators should distinguish three health layers:

* `GET /api/v1/health/live` is the liveness check. It returns `200` when the API process is running.
* `GET /api/v1/health/ready` is the production readiness check. It reports configured and missing dependency groups for hosting, media staging, communications intake, identity evidence, private workers, approved portfolio storage, runtime mapping, partner auth, and observability. It does not expose secret values.
* `GET /api/v1/health` is the deeper legacy/runtime compatibility report while Wave D cutover still contains older routes. It can report `503` while `/live` and `/ready` are still green.

Use `/api/v1/health/ready` before treating `api.tattooapi.com` as production-ready for intake, private worker, or approved portfolio flows.

The legacy compatibility endpoint includes a runtime block derived from the internal data SDK. That block is useful for diagnosing fallback posture, but production release decisions should use `/live` and `/ready`.

## Response Shape

```json theme={"dark"}
{
  "status": "healthy",
  "timestamp": "2026-04-20T12:00:00.000Z",
  "version": "v1",
  "uptime": 1234.56,
  "environment": "development",
  "services": {
    "database": {
      "status": "healthy",
      "responseTime": 12
    },
    "api": {
      "status": "healthy",
      "version": "v1"
    },
    "configuration": {
      "legacyDataUrl": true,
      "anonKey": true,
      "serviceKey": false,
      "ready": false
    }
  },
  "runtime": {
    "targetBackend": "tattooapi_runtime",
    "currentPersistence": "mixed_runtime_and_legacy",
    "apiCutoverStage": "d3_internal_runtime_authoritative",
    "publicReadSurface": "internal_runtime_proof_only",
    "notes": [
      "TattooAPI runtime is currently authoritative for internal runtime proof."
    ]
  }
}
```

## Notes

* `200` means healthy or degraded-but-operational.
* `503` means unhealthy.
* The endpoint also returns system info, endpoint URLs, and feature flags for the local runtime.
* `services.configuration` still reports legacy environment readiness during the Wave D cutover.
* `runtime.currentPersistence` is the field to use when checking TattooAPI runtime authority.

## Production Readiness Shape

`GET /api/v1/health/ready` returns safety posture and flow status without secret values:

Ready response:

```json theme={"dark"}
{
  "status": "ready",
  "service": "tattoo-api",
  "publicApiBaseUrl": "https://api.tattooapi.com",
  "dependencies": [
    {
      "id": "private_worker",
      "status": "ready",
      "configuredEnv": ["PRIVATE_WORKER_MODE", "TATTOO_API_BASE_URL", "TATTOO_PARTNER_API_KEY"],
      "missingEnv": []
    }
  ],
  "flows": [
    {
      "id": "private_worker_context",
      "status": "ready",
      "blockedBy": []
    }
  ],
  "safetyPosture": {
    "publicWritesAllowed": false,
    "directPortfolioStorageWritesFromWorkersAllowed": false,
    "directRuntimeMutationsFromWorkersAllowed": false,
    "publicSurfaceActivationAllowedFromWorkers": false,
    "highLevelCanPublishDirectly": false,
    "r2BucketPublicAccessAllowed": false
  }
}
```

Blocked response:

```json theme={"dark"}
{
  "status": "blocked",
  "service": "tattoo-api",
  "publicApiBaseUrl": "https://api.tattooapi.com",
  "dependencies": [
    {
      "id": "portfolio_intake_staging",
      "status": "ready",
      "configuredEnv": ["PORTFOLIO_INTAKE_STORAGE_BUCKET"],
      "missingEnv": []
    }
  ],
  "flows": [
    {
      "id": "approved_portfolio_write",
      "status": "blocked",
      "blockedBy": ["approved_portfolio_storage", "identity_evidence_lookup", "partner_auth"]
    }
  ],
  "safetyPosture": {
    "publicWritesAllowed": false,
    "directPortfolioStorageWritesFromWorkersAllowed": false,
    "directRuntimeMutationsFromWorkersAllowed": false,
    "publicSurfaceActivationAllowedFromWorkers": false,
    "highLevelCanPublishDirectly": false,
    "r2BucketPublicAccessAllowed": false
  }
}
```
