Variables

envless.variables.list_all_history()

Collect the full audit trail for a variable

def list_all_history(
    project: str,
    environment: str,
    name: str,
    *,
    limit: int | None = None,
    offset: int | None = None,
    product: str | None = None,
    timeout: float | None = None,
) -> list[VariableHistoryEvent]

Walks every page of the audit trail for a variable and returns one list, newest event first.

The trail grows with every write, so a long lived variable in an active environment can cost many round trips and a large list. Reach for list_history when you only need the most recent changes.

No values appear in any event, so this is safe to log or ship to an audit sink without decrypting anything.

Example

from envless import envless

events = envless.variables.list_all_history(
    'api', 'production', 'STRIPE_SECRET_KEY'
)

print(len(events), events[0]['type'] if events else None)

Parameters

ParameterTypeRequiredDescription
projectstrYesProject slug the environment belongs to.
environmentstrYesEnvironment slug the variable lives in.
namestrYesName of a live variable, matched without regard to case.
limitintNoPage size for each underlying request, clamped to 100.
offsetintNoOffset the walk starts from, defaults to 0.
productstrNoProduct slug, needed when the project slug is not unique in the workspace.
timeoutfloatNoSeconds each attempt of this call may take, the response body included, before it raises EnvlessNetworkError with is_timeout set. Overrides the client's timeout for this call, and 0 turns the limit off.

Returns

list[VariableHistoryEvent] with the complete audit trail, newest first.

Reads the events collection. list returns one page as a dict with items and pagination, list_all collects every page into a list, and iterate yields one item at a time, fetching the next page only when the loop reaches it. On AsyncEnvless, iterate is an async iterator for async for.

Worth knowing

  • Events keep their order across page boundaries, so events[0] is the most recent change.
  • On the Free plan only the latest event is returned (the API's historyLimited and hiddenCount flags are not surfaced on the returned list, so a one-item result on Free is the plan, not an empty history); the full trail needs Dev or above.

Required scopes

variables:read

Underlying endpoint

GET /projects/{slug}/environments/{environmentSlug}/variables/{name}/history

Request and response schema, every error code, and a live playground.

In TypeScript

envless.variables.listAllHistory()

The same method in @goenvless/sdk, with the same request, retries and errors.