def update(
slug: str,
patch: ProductPatch,
*,
timeout: float | None = None,
) -> ProductResourceasync def update(
slug: str,
patch: ProductPatch,
*,
timeout: float | None = None,
) -> ProductResourcePartial 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'])import asyncio
from envless import AsyncEnvless
async def main() -> None:
async with AsyncEnvless() as envless:
product = await envless.products.update(
'billing', {'isPrivate': True}
)
print(product['isPrivate'], product['updatedAt'])
asyncio.run(main())Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
slug | str | Yes | Product slug, or the product uniqueId when the value is UUID shaped. |
patch['name'] | str | No | New display name. |
patch['slug'] | str | No | New slug, unique across the workspace. |
patch['isPrivate'] | bool | No | Switches grant enforcement on or off for the product. |
timeout | float | No | Seconds 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
iconkey of any value, includingNone, is rejected before the product is resolved, so an unknown slug plusiconreports 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.