# Lithe Public API

The public API is intentionally small and read-only for agents and integrations.

## Base URLs

- Stable: `https://ni.lithe.team/api/v1`
- OpenAPI: `https://ni.lithe.team/openapi.json`
- Interactive docs: `https://ni.lithe.team/docs`
- Agent manifest: `https://ni.lithe.team/agent-manifest.json`

## Endpoints

### `GET /api/v1/health`

Returns `{ "status": "ok" }` when the API can reach its database.

### `GET /api/v1/public-config`

Returns runtime configuration used by the storefront, including support channels, coordinated meetup zones, and the public payment instructions shown during checkout. It does not return passwords, Turnstile tokens, or API credentials.

## Response behavior

JSON responses use the normal HTTP status code and OpenAPI schema. API errors include a machine-readable `error.code`, human-readable `error.message`, and actionable `error.resolution`; validation failures may include `error.details`. The legacy `detail` field remains for storefront compatibility.

Unknown API endpoints return `404` JSON. Unknown site paths return `404`; Markdown clients can use `Accept: text/markdown` on `https://ni.lithe.team/pricing.md` and receive `Vary: Accept, Accept-Encoding`.

Rate-limited responses include `RateLimit-Limit`, `RateLimit-Remaining`, and `RateLimit-Reset`. A `429` response also includes `Retry-After`, in seconds.

## Write operations

Order, lead, and tracking write routes are storefront workflows protected by validation, bot protection, session or code checks where applicable, and rate limits. They are not an unattended agent API. See https://ni.lithe.team/auth.md and https://ni.lithe.team/agent-instructions.md.
