Skip to main content
POST
/
api
/
apps
/
v1
/
apps
/
{appId}
/
publish
Publish content from a draft App (v1)
curl --request POST \
  --url https://api.example.com/api/apps/v1/apps/{appId}/publish \
  --header 'Content-Type: application/json' \
  --header 'X-Domino-Api-Key: <api-key>' \
  --data '
{
  "sendNotifications": true,
  "start": false,
  "startOverrides": {
    "deployment": {
      "hardwareTierId": "<string>",
      "renderIFrame": true,
      "vanityUrl": "<string>"
    }
  },
  "targetAppId": "<string>",
  "vanityUrl": "<string>",
  "versionOverrides": {
    "bundleId": "<string>",
    "dataPlaneId": "<string>",
    "description": "<string>",
    "dfsCommitId": "<string>",
    "entryScript": "<string>",
    "environmentId": "<string>",
    "environmentRevisionId": "<string>",
    "extendedIdentityPropagationToAppsEnabled": true,
    "externalVolumeMountIds": [
      "<string>"
    ],
    "hardwareTierId": "<string>",
    "mountDatasets": true,
    "netAppVolumeIds": [
      "<string>"
    ],
    "resolvedDfsCommitId": "<string>",
    "resolvedGitCommitId": "<string>",
    "resolvedImportedGitRepos": [
      {
        "ref": "<string>",
        "repoId": "<string>",
        "repoName": "<string>"
      }
    ],
    "resolvedImportedProjects": [
      {
        "commitId": "<string>",
        "directoryName": "<string>",
        "ownerId": "<string>",
        "projectId": "<string>",
        "projectName": "<string>",
        "release": "<string>"
      }
    ],
    "tags": [
      {
        "key": "<string>",
        "value": "<string>"
      }
    ]
  }
}
'
{
  "app": {
    "accessControl": {
      "accessStatuses": [
        {
          "userId": "<string>"
        }
      ],
      "discoverable": true
    },
    "authorship": {
      "isDraft": true,
      "author": {
        "id": "<string>",
        "name": "<string>"
      }
    },
    "configurationType": "STANDARD",
    "entryPoint": "<string>",
    "id": "<string>",
    "mountDatasets": true,
    "name": "<string>",
    "project": {
      "id": "<string>",
      "name": "<string>",
      "ownerId": "<string>",
      "ownerUsername": "<string>"
    },
    "renderIFrame": true,
    "url": "<string>",
    "views": 123,
    "currentVersion": {
      "createdAt": 123,
      "id": "<string>",
      "tags": [
        {
          "key": "<string>",
          "value": "<string>"
        }
      ],
      "updatedAt": 123,
      "bundle": {
        "id": "<string>",
        "name": "<string>"
      },
      "content": {
        "mountDatasets": true,
        "dataPlaneId": "<string>",
        "dfsCommitId": "<string>",
        "entryScript": "<string>",
        "environmentId": "<string>",
        "environmentRevisionId": "<string>",
        "extendedIdentityPropagationToAppsEnabled": true,
        "externalVolumeMountIds": [
          "<string>"
        ],
        "gitRef": {
          "value": "<string>"
        },
        "netAppVolumeIds": [
          "<string>"
        ],
        "resolvedCommits": {
          "dfsCommitId": "<string>",
          "gitCommitId": "<string>",
          "importedGitRepos": [
            {
              "ref": "<string>",
              "repoId": "<string>",
              "repoName": "<string>"
            }
          ],
          "importedProjects": [
            {
              "commitId": "<string>",
              "directoryName": "<string>",
              "ownerId": "<string>",
              "projectId": "<string>",
              "projectName": "<string>",
              "release": "<string>"
            }
          ]
        }
      },
      "currentInstance": {
        "createdAt": 123,
        "id": "<string>",
        "status": "<string>",
        "describeUrl": "<string>",
        "dfsCommitId": "<string>",
        "gitCommitId": "<string>",
        "publisher": {
          "id": "<string>",
          "name": "<string>"
        }
      },
      "deployment": {
        "autoscalingSpecification": {
          "enabled": true,
          "maxReplicas": 15,
          "minReplicas": 15,
          "scaleDownStabilizationWindowSeconds": 1800,
          "scaleUpStabilizationWindowSeconds": 1800,
          "targetCpuAvgUtilizationPct": 50,
          "targetMemoryAvgUtilizationPct": 50,
          "useSessionAffinity": true
        },
        "hardwareTierId": "<string>",
        "vanityUrl": "<string>"
      },
      "description": "<string>",
      "versionNumber": 123
    },
    "customFields": [
      {
        "fields": [
          {
            "customFieldId": "<string>",
            "customFieldLabel": "<string>",
            "updatedAt": 123,
            "updatedBy": {
              "userId": "<string>",
              "username": "<string>"
            },
            "value": "<string>"
          }
        ],
        "groupName": "<string>"
      }
    ],
    "description": "<string>",
    "taxonomyTags": [
      {
        "id": "<string>",
        "label": "<string>",
        "namespaceId": "<string>",
        "description": "<string>",
        "fullPath": [
          "<string>"
        ],
        "namespaceLabel": "<string>"
      }
    ],
    "thumbnailEtag": "<string>",
    "updatedAt": 123,
    "vanityUrl": "<string>"
  },
  "version": {
    "createdAt": 123,
    "id": "<string>",
    "tags": [
      {
        "key": "<string>",
        "value": "<string>"
      }
    ],
    "updatedAt": 123,
    "bundle": {
      "id": "<string>",
      "name": "<string>"
    },
    "content": {
      "mountDatasets": true,
      "dataPlaneId": "<string>",
      "dfsCommitId": "<string>",
      "entryScript": "<string>",
      "environmentId": "<string>",
      "environmentRevisionId": "<string>",
      "extendedIdentityPropagationToAppsEnabled": true,
      "externalVolumeMountIds": [
        "<string>"
      ],
      "gitRef": {
        "value": "<string>"
      },
      "netAppVolumeIds": [
        "<string>"
      ],
      "resolvedCommits": {
        "dfsCommitId": "<string>",
        "gitCommitId": "<string>",
        "importedGitRepos": [
          {
            "ref": "<string>",
            "repoId": "<string>",
            "repoName": "<string>"
          }
        ],
        "importedProjects": [
          {
            "commitId": "<string>",
            "directoryName": "<string>",
            "ownerId": "<string>",
            "projectId": "<string>",
            "projectName": "<string>",
            "release": "<string>"
          }
        ]
      }
    },
    "currentInstance": {
      "createdAt": 123,
      "id": "<string>",
      "status": "<string>",
      "describeUrl": "<string>",
      "dfsCommitId": "<string>",
      "gitCommitId": "<string>",
      "publisher": {
        "id": "<string>",
        "name": "<string>"
      }
    },
    "deployment": {
      "autoscalingSpecification": {
        "enabled": true,
        "maxReplicas": 15,
        "minReplicas": 15,
        "scaleDownStabilizationWindowSeconds": 1800,
        "scaleUpStabilizationWindowSeconds": 1800,
        "targetCpuAvgUtilizationPct": 50,
        "targetMemoryAvgUtilizationPct": 50,
        "useSessionAffinity": true
      },
      "hardwareTierId": "<string>",
      "vanityUrl": "<string>"
    },
    "description": "<string>",
    "versionNumber": 123
  },
  "instance": {
    "createdAt": 123,
    "id": "<string>",
    "status": "<string>",
    "describeUrl": "<string>",
    "dfsCommitId": "<string>",
    "gitCommitId": "<string>",
    "publisher": {
      "id": "<string>",
      "name": "<string>"
    }
  },
  "warnings": [
    "<string>"
  ]
}

Authorizations

X-Domino-Api-Key
string
header
required

Path Parameters

appId
string
required

Body

application/json

Request body for POST /apps/{appId}/publish. The mode is implicit: the presence of targetAppId selects publish-into-existing, absence selects publish-as-new. vanityUrl is consumed only on publish-as-new (publish-into- existing inherits the target App's vanity); versionOverrides is consumed by both branches and lets the caller override content (reproducibility) fields on a copy of the draft's last-run version before it is written to the destination App. start=true optionally launches the resulting App's newest version after the publish persists, with startOverrides carrying deployment (run-time) overrides.

sendNotifications
boolean

Publish-as-new only. When true and the draft carried accessStatuses, the granted users on the newly-published App receive an email notification (the published App is a fresh insert, so every Allowed entry is treated as a new grant). Ignored on publish-into-existing, which doesn't touch the target App's accessStatuses. Defaults to false when omitted.

start
boolean
default:false

When true, the resulting App's newest version is started after the publish persists. Start initiation failures are surfaced as warnings on the response rather than rolling back the publish.

startOverrides
object

Deployment-only run-time overrides for the optional start initiation (deployment.hardwareTierId, deployment.autoscalingSpecification, deployment.vanityUrl, deployment.renderIFrame). Consumed only when start=true.

targetAppId
string

Optional. Present -> publish-into-existing (new version added to the target App; vanityUrl is ignored). Absent -> publish-as-new (a brand- new published App is inserted).

vanityUrl
string

Publish-as-new only. The new published App's vanity in the Apps namespace. If omitted, a random fallback is generated server-side. Ignored when targetAppId is present.

versionOverrides
object

Content (reproducibility) version-field overrides applied to a copy of the draft's last-run AppVersion during publish. Consumed only by PublishAppRequestV1. Override semantics is field-by-field orElse(publishBase.value); an unset override falls back to whatever the draft's last-run version carries. bundleId interplay with publish flows:

  • Publish-as-new: new version's bundleId = versionOverrides.bundleId.orElse(null). - Publish-into-existing: new version's bundleId = versionOverrides.bundleId.orElse(targetApp.latestVersion.bundleId), matching the legacy update path's carry-forward semantic so governance continuity is preserved across republishes. Explicit override wins.

A supplied bundleId is validated via the Guardrails API; missing bundle -> 404.

Response

Publish succeeded. Returns the resulting App (newly inserted for publish-as-new, the target App for publish-into-existing) plus the newly inserted version. When start=true the started instance is also returned (or a warning if start initiation failed; the version is durably persisted in either case).

Response body for POST /apps/{appId}/publish. app is the resulting destination App (newly inserted for publish-as-new, the target App for publish-into- existing). version is the newly inserted AppVersion. instance is populated only when request.start=true AND start initiation succeeded; if the version was persisted but start initiation failed, the response carries version plus a non-empty warnings array. The draft App itself is unchanged and is not returned in this response -- clients that still need it can read it via GET /apps/{draftId}.

app
object
required
version
object
required
instance
object

Present only when start initiation succeeded.

warnings
string[]

Non-fatal warnings (e.g., start initiation failure).