Products

Envless.products.update

Update a product name, slug or privacy

def update(slug, patch = nil, timeout: nil, **fields)

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

ruby
require "envless/sdk"

product = Envless.products.update("billing", isPrivate: true)

puts "#{product[:isPrivate]} #{product[:updatedAt]}"

Parameters

ParameterTypeRequiredDescription
slugStringYesProduct slug, or the product uniqueId when the value is UUID shaped.
patchproduct_patchNoThe fields below as one Hash, with Symbol or String keys, in place of the keywords.
name:StringNoNew display name.
slug:StringNoNew slug, unique across the workspace.
isPrivate:boolNoSwitches grant enforcement on or off for the product.
timeout:Integer | Float | RationalNoSeconds each attempt of this call may take, redirects and the response body included, before it raises Envless::NetworkError with timeout? set. Overrides the client's timeout for this call, and 0 turns the limit off.

Returns

product_resource reflecting the patched product.

Worth knowing

  • An icon key of any value, including nil, 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.