Ensure full product (config-as-code converge of the whole FPO)

Idempotently converge an entire Full Product Object (the nested product graph) in one shot. Fans out to the per-entity ensure services in dependency order (product → capability backing flows/agents → capability links), returning a per-entity report. Identity is the product name + account scope. NON-atomic by design: a per-entity failure is reported in `entities[].result = "failed"` (and `hasFailures`) and a re-run self-heals; only a top-level product reject aborts. Set dryRun to plan without writing. PR1 scope: surfaces/records/schedules/secrets and capability-as-tool composition are not yet converged.

Authentication

AuthorizationBearer
API key or Clerk session token

Request

This endpoint expects an object.
fpomap from strings to anyRequired

A complete Full Product Object (FPO): the nested product graph (product, capabilities, tools, surfaces, …). Validated server-side via the shared FPO validator.

dryRunbooleanOptional

Plan without writing — returns a per-entity plan (CI drift gate).

onConflictenumOptional

Per nested entity: “overwrite” converges over dashboard/API edits.

Allowed values:

Response

Converge result: unchanged | converged | plan (dryRun), with a per-entity report.

contentHashstring

Server-computed canonical whole-FPO content hash.

entitieslist of objects
hasFailuresboolean

True when one or more entities failed to converge (re-run to self-heal).

resultenum

unchanged when every entity was unchanged, converged when at least one was created/updated, plan for dryRun.

productIdstring

Errors

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