---
title: "Function Runtime Health"
method: GET
path: "/functions/health"
tags: ["functions"]
---

# Function Runtime Health

`GET /functions/health`

## Headers

- `x-notte-request-origin` string, nullable
- `x-notte-sdk-version` string, nullable

## Response `200`

Successful Response

- FunctionRuntimeHealthResponse
  - `status` 'ok' | 'degraded' | 'unreachable', required — 'ok' when the runtime reported itself, 'degraded' when it is alive but too old to describe itself (its image predates this endpoint), 'unreachable' when it did not answer.
  - `reachable` boolean, required — Whether the runtime answered an HTTP request at all.
  - `latency_ms` number, nullable — Round trip to the runtime, null when unreachable.
  - `python_version` string, nullable — Python the sandbox executes under, e.g. '3.12.0'.
  - `packages` RuntimePackage[] — Non-stdlib imports the sandbox allows, with versions.
    - `import_name` string, required — The name a function writes in its `import` statement, e.g. `notte_sdk`.
    - `package` string, nullable — Distribution providing it, e.g. `notte-sdk`. Null when nothing on disk claims the name.
    - `version` string, nullable — Installed version of `package`, or null if unknown.
    - `source` string, nullable — Installable reference this came from when it did not come from an index, e.g. `git+https://github.com/nottelabs/notte@<sha>#subdirectory=packages/notte-sdk`. Null for an ordinary index install, where `version` is the whole identity. Read from the install's own PEP 610 record: the runner pins notte-sdk and notte-core to git SHAs, so those share a version number with a PyPI build that behaves differently, and reproducing the sandbox from `version` alone gets you the wrong code.
    - `installed` boolean — False for a name the upload validator accepts but the runtime image does not ship: such an import passes validation and then fails mid-run with ModuleNotFoundError.
  - `stdlib_modules` string[] — Standard-library modules the sandbox allows. Versionless: the Python version covers them.
  - `reserved_env_names` string[] — `function_env` names the platform owns, rejected at write time. Served here so a client validating secret names before pushing them does not have to vendor its own copy and watch it drift.
  - `runtime_digest` string, nullable — Digest of the reproducible contract - Python version, packages with their sources, allowed imports, reserved names - and nothing volatile, so it changes if and only if an environment built against it would now be wrong. Cache against it to detect a runner rebuild. Null unless `status` is 'ok', since a partial report is not a contract. Also returned as the response ETag.
  - `error` string, nullable — Why the probe failed, when it did.

## Other responses

- `422` — Validation Error

## Changes

- **2026-09-01** `442ff5940528` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/notte/apis/notte-api/changes/functions/health/get.md)

---

[API](https://skmtc.dev/notte/apis/notte-api.md) · [All operations](https://skmtc.dev/notte/apis/notte-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/notte/notte-api/revisions/442ff5940528/schema)
