Skip to content

Upgrade apply products

POST /api/v1/products/upgrade-apply: request fields and declared response contract.

POST/api/v1/products/upgrade-apply

Authorization
Permissionproducts.install
Workspace scoperequired
Scope targetworkspace

Request body

Request body fields
FieldTypeRequiredNullableDefault
installationIdstringrequirednon-null—
targetVersionstringrequirednon-null—
expectedCurrentPlanobjectoptionalnon-null—
expectedCurrentPlan.planSchemaVersionnumberrequirednon-null—
expectedCurrentPlan.planHashstringrequirednon-null—
expectedTargetPlanobjectoptionalnon-null—
expectedTargetPlan.planSchemaVersionnumberrequirednon-null—
expectedTargetPlan.planHashstringrequirednon-null—
expectedInstallUpdatedAtstringrequirednon-null—
expectedManifestDigeststringrequirednon-null—
expectedConfigurationRevisionstringrequirednon-null—
bindingsobjectoptionalnon-null—
productConfigobjectoptionalnon-null—
planIdstringrequirednon-null—
idempotencyKeystringrequirednon-null—

Response

201

Response fields
FieldTypeRequiredNullableDefault
dataobjectrequirednon-null—
data.attemptobjectrequirednon-null—
data.attempt.idstringrequirednon-null—
data.attempt.companyIdstringrequirednon-null—
data.attempt.workspaceIdstringrequirednon-null—
data.attempt.installationIdstringrequirednon-null—
data.attempt.planIdstringrequirednon-null—
data.attempt.attemptKeyintegerrequirednon-null—
data.attempt.invocationKeystringrequirednon-null—
data.attempt.operation"install" | "upgrade"requirednon-null"install"
data.attempt.state"running" | "succeeded" | "failed_retryable" | "failed_permanent" | "requires_resolution"requirednon-null—
data.attempt.executionFenceintegerrequirednon-null0
data.attempt.executionClaimIdunknownrequirednon-null—
data.attempt.executionClaimedAtunknownrequirednon-null—
data.attempt.executionClaimExpiresAtunknownrequirednon-null—
data.attempt.startedAtunknownrequirednon-null—
data.attempt.completedAtunknownrequirednon-null—
data.attemptState"running" | "succeeded" | "failed_retryable" | "failed_permanent" | "requires_resolution"requirednon-null—
data.installationState"installing" | "partial" | "installed" | "requires_resolution" | "failed" | "retired"requirednon-null—
data.completedUnitCountintegerrequirednon-null—
data.failedNodeKeystringoptionalnon-null—
data.failedUnitKind"identity" | "owned_content"optionalnon-null—
data.terminalReceiptobjectoptionalnon-null—
data.previewobjectoptionalnon-null—
data.preview.disposition"ready" | "requires_resolution"requirednon-null—
data.preview.baselineunknownrequirednon-null—
data.preview.planobjectrequirednon-null—
data.preview.plan.schemaVersionnumberrequirednon-null—
data.preview.plan.rootobjectrequirednon-null—
data.preview.plan.grapharrayrequirednon-null—
data.preview.plan.referencesarrayrequirednon-null—
data.preview.plan.ownedContentOrderarrayrequirednon-null—
data.preview.plan.planHashstringrequirednon-null—
data.preview.deltaunknownrequirednon-null—
data.preview.staleGuardobjectrequirednon-null—
data.preview.staleGuard.currentobjectrequirednon-null—
data.preview.staleGuard.targetobjectrequirednon-null—
data.preview.staleGuard.currentManifestDigeststringrequirednon-null—
data.preview.staleGuard.currentInstallUpdatedAtstringrequirednon-null—
data.preview.staleGuard.currentConfigurationRevisionstringrequirednon-null—
data.preview.targetInputsobjectrequirednon-null—
data.preview.targetInputs.bindingsobjectrequirednon-null—
data.preview.targetInputs.roleSatisfactionsobjectoptionalnon-null—
data.preview.targetInputs.productConfigobjectoptionalnon-null—
data.preview.targetInputs.configurationProjectionDigeststringoptionalnon-null—
data.preview.targetInputs.profileobjectoptionalnon-null—
data.preview.targetInputs.configurationResolutionobjectoptionalnon-null—
data.preview.targetInputs.referenceInputsobjectoptionalnon-null—
data.preview.blockersarrayrequirednon-null—

Declared failures

Declared failures
PRODUCT_OPERATION_FAILED500 — not retryable
PRODUCT_REQUIRES_RESOLUTION409 — not retryable
PRODUCT_STALE409 — not retryable

Readback

Read the result back with:

  • products.inspectInstalled

Request example

Schematic only. Replace placeholders with real values and include all required nested fields.

POST /api/v1/products/upgrade-apply HTTP/1.1
Authorization: Bearer <token>
x-merulan-workspace-id: <workspace-id>
Content-Type: application/json

{
  "installationId": "<installationId>",
  "targetVersion": "<targetVersion>",
  "expectedInstallUpdatedAt": "<expectedInstallUpdatedAt>",
  "expectedManifestDigest": "<expectedManifestDigest>",
  "expectedConfigurationRevision": "<expectedConfigurationRevision>",
  "planId": "<planId>",
  "idempotencyKey": "<idempotencyKey>"
}