Ensure product (config-as-code converge)

Idempotently converge a repo-defined product definition onto the platform. Identity is name + account scope. Hash-only probes skip the payload in the steady state (a miss is a normal 200 `definitionRequired` response, not an error); full requests create the product or update it when the canonical content hash differs. The converge covers the top-level product record only (description, icon, spec) — not nested capabilities/surfaces/tools or canvas layout. The response always carries the server-computed canonical hash. Set dryRun to plan without writing (CI drift gate), and onConflict: "overwrite" to converge over dashboard/API edits. Products have no version snapshots, so there is no publish option.

Authentication

AuthorizationBearer
API key or Clerk session token

Request

This endpoint expects an object.
namestringRequired>=1 character
contentHashstringOptionalformat: "^[0-9a-f]{64}$"
definitionobjectOptional
dryRunbooleanOptional
expectedRemoteHashstringOptionalformat: "^[0-9a-f]{64}$"
onConflictenumOptional
Allowed values:

Response

Converge result: unchanged | created | updated | definitionRequired (hash miss — retry with the full definition) | plan (dryRun)

object
OR
object
OR
object

Errors

400
Bad Request Error
401
Unauthorized Error
403
Forbidden Error
409
Conflict Error
422
Unprocessable Entity Error
500
Internal Server Error