---
title: "Which keys a repository's .env.example names that the node lacks"
method: GET
path: "/api/github/nodes/{node_id}/deploy/env-check"
tags: ["github"]
---

# Which keys a repository's .env.example names that the node lacks

`GET /api/github/nodes/{node_id}/deploy/env-check`

## Request

- Base URL: `https://app.nerdit.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://app.nerdit.ai/api/github/nodes/{node_id}/deploy/env-check`
- Auth: none declared

Read ``.env.example`` from the repo, compare it with the node's keys.

Advisory and read-only, in both directions: it is never audited, it
has no entitlement gate, and every way it can fail — no manifest, an
offline node, a silent one — is a ``checked: false`` with a reason
rather than an error, because a check that refuses harder than the
deploy it precedes would stop deploys that work.

Names only. The manifest's values are dropped inside
:func:`~nerdit_cloud.github.envkeys.parse_env_keys` and the daemon
answers with names by contract, so no secret and no line of somebody
else's repository reaches this response or a log record.

## Path parameters

- `node_id` string, uuid, required

## Query parameters

- `repo` string, required
- `name` string, nullable
- `ref` string, nullable

## Response `200`

Successful Response

- DeployEnvCheckView: Which keys the repository's ``.env.example`` names that the node lacks. ``checked`` is whether the comparison happened at all; when it did not, ``reason`` says why and both lists are empty. The vocabulary is ``no_manifest`` (the repository has no ``.env.example`` — the common case, and not an error), ``node_offline``, ``node_silent`` (the node did not answer) and ``shared_unavailable`` (the daemon holds a legacy service literally named ``shared``), plus ``github_silent``. ``needed`` is the manifest's key *names*, in the order it lists them, and ``missing`` is the ones neither the shared set nor the service's own set holds. Values are never read out of the manifest, so nothing here can carry one.
  - `checked` boolean, required
  - `reason` string, nullable, required
  - `needed` string[], required
  - `missing` string[], required

## Other responses

- `401`: Unauthorized
- `404`: Not Found
- `422`: Unprocessable Content

---

[API](https://skmtc.dev/nerdit/apis/nerdit-cloud-web.md) · [All operations](https://skmtc.dev/nerdit/apis/nerdit-cloud-web/llms.txt) · [OpenAPI document](https://skmtc.dev/nerdit/apis/nerdit-cloud-web/revisions/06e3b44b58be?raw)
