Products

envless.products.update()

Update a product name, slug or privacy

def update(
    slug: str,
    patch: ProductPatch,
    *,
    timeout: float | None = None,
) -> ProductResource

Partial update: only the keys present in the patch are touched. A new slug is validated against the whole workspace rather than against the product being renamed, so any collision is reported as a conflict.

Flipping isPrivate to True also records a grant for the key owner, so an integration cannot lock itself out in one call. Flipping it back to False leaves every stored grant in place, and those grants start applying again the moment the product is made private.

A product beyond the plan allowance refuses every patch, including a rename. Delete something or upgrade the plan to get back under the cap.

Example

from envless import envless

product = envless.products.update(
    'billing', {'isPrivate': True}
)

print(product['isPrivate'], product['updatedAt'])

Parameters

ParameterTypeRequiredDescription
slugstrYesProduct slug, or the product uniqueId when the value is UUID shaped.
patch['name']strNoNew display name.
patch['slug']strNoNew slug, unique across the workspace.
patch['isPrivate']boolNoSwitches grant enforcement on or off for the product.
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

ProductResource reflecting the patched product.

Worth knowing

  • An icon key of any value, including None, is rejected before the product is resolved, so an unknown slug plus icon reports the body error and not a missing product.

Required scopes

products:write

Underlying endpoint

PATCH /products/{slug}

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

In TypeScript

envless.products.update()

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