Skip to content

Get health status​

GET
/v2/_hc

GET /v2/_hc returns either an anonymous summary or authenticated details. GET /_hc uses the same handler and response formats. When CP Auth is enabled, detail authorization is checked against the actual request path, so a token can be allowed on one path and denied on the other. This endpoint has no query parameters.

Request authentication

Header Required Meaning
Authorization No Optional. Bearer <token> with the oracle scope enables details after CP Auth validation. Without this header, returns the summary. When CP Auth is disabled, always returns the summary even if credentials are supplied. Query-string tokens do not enable details.

Anonymous response

Without a token, returns only these three status fields. All three also appear in the authenticated response.

Response field Type Description
status string Overall status: ok, degraded, or unhealthy.
server.status string Server status: ok, degraded, or unavailable.
worker.status string Worker status: starting, ok, degraded, stale, or unavailable.
{
  "status": "ok",
  "server": {
    "status": "ok"
  },
  "worker": {
    "status": "ok"
  }
}

Authenticated response

A validated Bearer token returns the following additional fields. CP Auth must be enabled. All timestamps are RFC 3339 UTC strings. A type ending in ? marks an optional field; empty feed maps may be omitted.

Response field Type Description
version string Server version.
commit string Build commit.
server.components object Component health, keyed by component name. Includes api, websocket, and configured components such as market_overview.
server.components.api.status string API dependency health: starting, ok, degraded, or unavailable.
server.components.market_overview.status string Market overview refresh health: ok or unavailable. Present when monitored.
server.components.websocket.status string Realtime feed health: starting, ok, stale, or unavailable.
server.components.websocket.last_message_at string? Last realtime market event received by this API server.
server.components.websocket.tickers object? Aggregate ticker health, keyed by base symbol such as BTC.
server.components.websocket.tickers.<symbol>.status string Asset ticker status: starting, ok, idle, or stale.
server.components.websocket.tickers.<symbol>.last_message_at string? Last aggregate ticker event received for this asset.
server.components.websocket.klines object? Aggregate 1m Kline event health, keyed by base symbol.
server.components.websocket.klines.<symbol>.status string Asset 1m Kline feed status: starting, ok, idle, or stale.
server.components.websocket.klines.<symbol>.last_message_at string? Last aggregate 1m Kline event received for this asset.
server.components.websocket.source_tickers object? Observed source ticker health, keyed by exchange:pair:quote.
server.components.websocket.source_tickers.<market>.status string Source event delivery status: ok or stale.
server.components.websocket.source_tickers.<market>.symbol string Base symbol such as BTC.
server.components.websocket.source_tickers.<market>.last_message_at string? Last source ticker event received by this API server.
server.components.websocket.source_tickers.<market>.source_time string? Original exchange quote time (T in the WebSocket event).
worker.heartbeat_at string? Worker heartbeat time; omitted when unavailable.
{
  "status": "ok",
  "version": "dev",
  "commit": "none",
  "server": {
    "status": "ok",
    "components": {
      "api": {
        "status": "ok"
      },
      "market_overview": {
        "status": "ok"
      },
      "websocket": {
        "status": "ok",
        "last_message_at": "2026-10-02T04:00:00Z",
        "tickers": {
          "BTC": {
            "status": "ok",
            "last_message_at": "2026-10-02T04:00:00Z"
          }
        },
        "klines": {
          "BTC": {
            "status": "ok",
            "last_message_at": "2026-10-02T04:00:00Z"
          }
        },
        "source_tickers": {
          "gmo_coin:BTC_JPY:JPY": {
            "status": "ok",
            "symbol": "BTC",
            "last_message_at": "2026-10-02T04:00:00Z",
            "source_time": "2026-10-02T03:59:50Z"
          }
        }
      }
    }
  },
  "worker": {
    "status": "ok",
    "heartbeat_at": "2026-10-02T04:00:00Z"
  }
}

Feed maps use base symbols such as BTC; <market> means an exchange:pair:quote key, such as gmo_coin:BTC_JPY:JPY. A source ticker becomes stale after 30 seconds without an event; this diagnostic status and an old source_time do not degrade overall health. Repeated source heartbeats update last_message_at, while source_time remains the original quote time. idle indicates a quiet connected market.

HTTP status and authentication failures

Both response variants use the same health status: 200 can include degraded health; required dependencies that are unavailable or have stale checks produce 503. When CP Auth is enabled, malformed credentials or invalid keys return 401; expired or revoked keys can return 403. Other CP Auth failures retain their HTTP status and error code, with sanitized messages. Authentication failures return errors rather than a summary. Uptime monitors should omit Authorization to read public health independently of CP Auth availability and token permissions. If no health snapshot is available, returns 503 with the public JSON shape and unavailable server/worker statuses. Responses use Cache-Control: no-store and Vary: Authorization.

Authorizations​

or
bearerAuth

Required when cp_auth.enabled=true. The token must have the oracle scope.

Type
HTTP (bearer)

Responses​

Cached health summary, or detailed health after successful Bearer authentication.

application/json
JSON
{
  
"status": "ok",
  
"server": {
  
  
"status": "ok"
  
},
  
"worker": {
  
  
"status": "ok"
  
}
}

Playground​

Authorization
(Optional)

Samples​