Promotions
Operations about promotion providers, connections, and package operations
Returns a cursor-paginated list of providers, without their public keys.
The maximum number of items to return.
100Example: 100Paginate by setting the cursor parameter to the nextCursor attribute returned by the previous request's response. Default value fetches the first "page" of the collection. See pagination for more detail.
Operation successful.
The request is invalid or provides malformed data.
Unauthorized
Forbidden
The requested service is temporarily unavailable.
GET /api/v1/promotions/providers HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Accept: */*
{
"data": [
{
"id": "text",
"name": "text",
"type": "git",
"authType": "ssh-key",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"nextCursor": "text"
}Creates a provider and its authentication material. An SSH provider returns the generated public key; add it to the remote as a deploy key.
Operation successful.
The request is invalid or provides malformed data.
Unauthorized
Forbidden
Unsupported media type.
The requested service is temporarily unavailable.
POST /api/v1/promotions/providers HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 78
{
"name": "text",
"type": "git",
"auth": {
"authType": "ssh-key",
"keyType": "ed25519"
}
}{
"provider": {
"id": "text",
"name": "text",
"type": "git",
"authType": "ssh-key",
"config": {
"schemaVersion": 1,
"publicKey": "text",
"keyType": "ed25519"
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"publicKey": "text"
}Returns the provider with its public configuration. Secrets are never returned.
The ID of the promotion provider.
Operation successful.
Unauthorized
Forbidden
The specified resource was not found.
The requested service is temporarily unavailable.
GET /api/v1/promotions/providers/{promotionProviderId} HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Accept: */*
{
"id": "text",
"name": "text",
"type": "git",
"authType": "ssh-key",
"config": {
"schemaVersion": 1,
"publicKey": "text",
"keyType": "ed25519"
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}Renames the provider, and replaces its credentials when auth is sent. New credentials apply to every connection that uses this provider. The authentication method cannot change.
The ID of the promotion provider.
Operation successful.
The request is invalid or provides malformed data.
Unauthorized
Forbidden
The specified resource was not found.
Unsupported media type.
The requested service is temporarily unavailable.
PUT /api/v1/promotions/providers/{promotionProviderId} HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 65
{
"name": "text",
"auth": {
"authType": "ssh-key",
"keyType": "ed25519"
}
}{
"id": "text",
"name": "text",
"type": "git",
"authType": "ssh-key",
"config": {
"schemaVersion": 1,
"publicKey": "text",
"keyType": "ed25519"
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}A provider used by a connection cannot be deleted.
The ID of the promotion provider.
Operation successful.
No content
Unauthorized
Forbidden
The specified resource was not found.
Conflict
The requested service is temporarily unavailable.
DELETE /api/v1/promotions/providers/{promotionProviderId} HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Accept: */*
No content
Returns a cursor-paginated list of connections with their configurations. Filter by scope for the instance connection, or by providerId to see which connections a provider edit affects.
The maximum number of items to return.
100Example: 100Paginate by setting the cursor parameter to the nextCursor attribute returned by the previous request's response. Default value fetches the first "page" of the collection. See pagination for more detail.
Operation successful.
The request is invalid or provides malformed data.
Unauthorized
Forbidden
The requested service is temporarily unavailable.
GET /api/v1/promotions/connections HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Accept: */*
{
"data": [
{
"id": "text",
"name": "text",
"scope": "instance",
"target": {
"schemaVersion": 1,
"remoteUrl": "text"
},
"provider": {
"id": "text",
"name": "text",
"type": "git",
"authType": "ssh-key",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"configs": {
"apply": {
"id": "text",
"name": "text",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z",
"settings": {
"schemaVersion": 1,
"branchName": "text"
}
},
"promote": {
"id": "text",
"name": "text",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z",
"settings": {
"schemaVersion": 1,
"baseBranchName": "text",
"createBranchOnPromotion": true
}
}
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"nextCursor": "text"
}Creates a connection on an existing provider, with up to one initial configuration for each direction. Only one instance connection can exist.
Operation successful.
The request is invalid or provides malformed data.
Unauthorized
Forbidden
The specified resource was not found.
Conflict
Unsupported media type.
The requested service is temporarily unavailable.
POST /api/v1/promotions/connections HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 301
{
"name": "text",
"scope": "instance",
"providerId": "text",
"target": {
"schemaVersion": 1,
"remoteUrl": "text"
},
"configs": {
"apply": {
"name": "text",
"settings": {
"schemaVersion": 1,
"branchName": "text"
}
},
"promote": {
"name": "text",
"settings": {
"schemaVersion": 1,
"baseBranchName": "text",
"createBranchOnPromotion": true
}
}
}
}{
"id": "text",
"name": "text",
"scope": "instance",
"target": {
"schemaVersion": 1,
"remoteUrl": "text"
},
"provider": {
"id": "text",
"name": "text",
"type": "git",
"authType": "ssh-key",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"configs": {
"apply": {
"id": "text",
"name": "text",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z",
"checkout": {
"hasCheckout": true,
"matchesConfig": true
},
"settings": {
"schemaVersion": 1,
"branchName": "text"
}
},
"promote": {
"id": "text",
"name": "text",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z",
"checkout": {
"hasCheckout": true,
"matchesConfig": true
},
"settings": {
"schemaVersion": 1,
"baseBranchName": "text",
"createBranchOnPromotion": true
}
}
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}Returns the connection with its provider summary and its configurations.
The ID of the promotion connection.
Operation successful.
Unauthorized
Forbidden
The specified resource was not found.
The requested service is temporarily unavailable.
GET /api/v1/promotions/connections/{promotionConnectionId} HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Accept: */*
{
"id": "text",
"name": "text",
"scope": "instance",
"target": {
"schemaVersion": 1,
"remoteUrl": "text"
},
"provider": {
"id": "text",
"name": "text",
"type": "git",
"authType": "ssh-key",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"configs": {
"apply": {
"id": "text",
"name": "text",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z",
"checkout": {
"hasCheckout": true,
"matchesConfig": true
},
"settings": {
"schemaVersion": 1,
"branchName": "text"
}
},
"promote": {
"id": "text",
"name": "text",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z",
"checkout": {
"hasCheckout": true,
"matchesConfig": true
},
"settings": {
"schemaVersion": 1,
"baseBranchName": "text",
"createBranchOnPromotion": true
}
}
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}Updates the name, target, or provider. Scope cannot change, and configurations have their own routes.
The ID of the promotion connection.
Operation successful.
The request is invalid or provides malformed data.
Unauthorized
Forbidden
The specified resource was not found.
Unsupported media type.
The requested service is temporarily unavailable.
PUT /api/v1/promotions/connections/{promotionConnectionId} HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 83
{
"name": "text",
"target": {
"schemaVersion": 1,
"remoteUrl": "text"
},
"providerId": "text"
}{
"id": "text",
"name": "text",
"scope": "instance",
"target": {
"schemaVersion": 1,
"remoteUrl": "text"
},
"provider": {
"id": "text",
"name": "text",
"type": "git",
"authType": "ssh-key",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"configs": {
"apply": {
"id": "text",
"name": "text",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z",
"checkout": {
"hasCheckout": true,
"matchesConfig": true
},
"settings": {
"schemaVersion": 1,
"branchName": "text"
}
},
"promote": {
"id": "text",
"name": "text",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z",
"checkout": {
"hasCheckout": true,
"matchesConfig": true
},
"settings": {
"schemaVersion": 1,
"baseBranchName": "text",
"createBranchOnPromotion": true
}
}
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}Deletes the connection with its configurations, project links, and local checkouts. Its provider is kept.
The ID of the promotion connection.
Operation successful.
No content
Unauthorized
Forbidden
The specified resource was not found.
The requested service is temporarily unavailable.
DELETE /api/v1/promotions/connections/{promotionConnectionId} HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Accept: */*
No content
Create or replace the Apply configuration
Replaces the whole configuration, so an omitted name resets it to "Apply". Answers 200 whether it created or replaced.
The ID of the promotion connection.
Operation successful.
The request is invalid or provides malformed data.
Unauthorized
Forbidden
The specified resource was not found.
Conflict
Unsupported media type.
The requested service is temporarily unavailable.
PUT /api/v1/promotions/connections/{promotionConnectionId}/configs/apply HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 66
{
"name": "text",
"settings": {
"schemaVersion": 1,
"branchName": "text"
}
}{
"id": "text",
"name": "text",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z",
"checkout": {
"hasCheckout": true,
"matchesConfig": true
},
"settings": {
"schemaVersion": 1,
"branchName": "text"
}
}Create or replace the Promote configuration
Replaces the whole configuration, so an omitted name resets it to "Promote" and createBranchOnPromotion is always required. Answers 200 whether it created or replaced.
The ID of the promotion connection.
Operation successful.
The request is invalid or provides malformed data.
Unauthorized
Forbidden
The specified resource was not found.
Conflict
Unsupported media type.
The requested service is temporarily unavailable.
PUT /api/v1/promotions/connections/{promotionConnectionId}/configs/promote HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 101
{
"name": "text",
"settings": {
"schemaVersion": 1,
"baseBranchName": "text",
"createBranchOnPromotion": true
}
}{
"id": "text",
"name": "text",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z",
"checkout": {
"hasCheckout": true,
"matchesConfig": true
},
"settings": {
"schemaVersion": 1,
"baseBranchName": "text",
"createBranchOnPromotion": true
}
}Deletes the configuration and its local checkout. Nothing in Git changes.
The ID of the promotion connection.
The direction of the promotion: apply or promote.
Operation successful.
No content
Unauthorized
Forbidden
The specified resource was not found.
The requested service is temporarily unavailable.
DELETE /api/v1/promotions/connections/{promotionConnectionId}/configs/{direction} HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Accept: */*
No content
Clone one direction's repository
Clones the configured branch into local storage on the instance that handles the request. Safe to call repeatedly. Cloning one direction does not make the other ready.
The ID of the promotion connection.
The direction of the promotion: apply or promote.
Operation successful.
The request is invalid or provides malformed data.
Unauthorized
Forbidden
The specified resource was not found.
The requested service is temporarily unavailable.
POST /api/v1/promotions/connections/{promotionConnectionId}/{direction}/clone HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Accept: */*
{
"connectionId": "text",
"configId": "text",
"direction": "apply",
"branchName": "text",
"hasCheckout": true
}Remove one direction's local checkout
Removes the local checkout and keeps the configuration, its credentials, and the trusted SSH host keys.
The ID of the promotion connection.
The direction of the promotion: apply or promote.
Operation successful.
Unauthorized
Forbidden
The specified resource was not found.
The requested service is temporarily unavailable.
POST /api/v1/promotions/connections/{promotionConnectionId}/{direction}/disconnect HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Accept: */*
{
"connectionId": "text",
"configId": "text",
"direction": "apply",
"branchName": "text",
"hasCheckout": true
}List projects linked to a promotion connection
The ID of the promotion connection.
Operation successful.
Unauthorized
Forbidden
The specified resource was not found.
The requested service is temporarily unavailable.
GET /api/v1/promotions/connections/{promotionConnectionId}/projects HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Accept: */*
{
"projectIds": [
"text"
]
}Link a project to a promotion connection
Links a team project to a project-scoped connection. A project can be linked to only one connection.
The ID of the promotion connection.
The ID of the project.
Operation successful.
The request is invalid or provides malformed data.
Unauthorized
Forbidden
The specified resource was not found.
Conflict
The requested service is temporarily unavailable.
POST /api/v1/promotions/connections/{promotionConnectionId}/projects/{projectId} HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Accept: */*
{
"projectId": "text",
"connectionId": "text"
}Unlink a project from a promotion connection
The ID of the promotion connection.
The ID of the project.
Operation successful.
No content
Unauthorized
Forbidden
The specified resource was not found.
Conflict
The requested service is temporarily unavailable.
DELETE /api/v1/promotions/connections/{promotionConnectionId}/projects/{projectId} HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Accept: */*
No content
Exports every team project, commits it, and pushes to the configured base branch or a new timestamped branch. The response reports the target branch in git.branchName. Personal projects are ignored. Requires the Promote direction to be cloned first, and is available on the instance connection only. The API key also needs variable:list when the workflows reference variables.
The ID of the promotion connection.
Operation successful.
The request is invalid or provides malformed data.
Unauthorized
Forbidden
The specified resource was not found.
Unsupported media type.
The requested service is temporarily unavailable.
POST /api/v1/promotions/connections/{promotionConnectionId}/promote HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 37
{
"commitMessage": "text",
"force": true
}{
"connectionId": "text",
"configId": "text",
"counts": {
"workflows": 1,
"folders": 1,
"credentials": 1,
"dataTables": 1,
"variables": 1,
"tags": 1
},
"git": {
"commitSha": "text",
"branchName": "text"
}
}Checks the full package at the configured branch tip. Optionally send expectedSource with the configId, branchName, and full commitSha from the reviewed change preview; status source-changed means the branch moved since that review and nothing was imported. Returns status blocked before import writes if bindings need setup. Retain configId and git for Continue. Status applied includes counts and warnings. Inspect status before reading counts. Existing target variable values, including empty strings, are preserved. Requires a cloned Apply direction on an instance connection. The API key needs the gitConnection:pull scope. The importer checks user write permissions; granular API-key write scopes are not passed to it.
The ID of the promotion connection.
Operation successful.
The request is invalid or provides malformed data.
Unauthorized
Forbidden
The specified resource was not found.
Conflict
Unsupported media type.
Unprocessable Entity
The requested service is temporarily unavailable.
POST /api/v1/promotions/connections/{promotionConnectionId}/apply HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 77
{
"expectedSource": {
"configId": "text",
"branchName": "text",
"commitSha": "text"
}
}{
"connectionId": "text",
"configId": "text",
"git": {
"commitSha": "text",
"branchName": "text"
},
"status": "applied",
"counts": {
"projects": {
"created": 1,
"updated": 1,
"skipped": 1,
"deleted": 1
},
"folders": {
"created": 1,
"skipped": 1,
"removed": 1
},
"workflows": {
"created": 1,
"updated": 1,
"skipped": 1,
"archived": 1,
"deleted": 1,
"publishing": {
"published": 1,
"unpublished": 1,
"unchanged": 1,
"blocked": 1,
"failed": 1
}
},
"credentials": {
"matched": 1,
"stubbed": 1
},
"dataTables": {
"matched": 1,
"created": 1
},
"variables": {
"matched": 1,
"created": 1,
"updated": 1,
"stubbed": 1,
"missing": 1
},
"tags": {
"matched": 1,
"created": 1,
"renamed": 1,
"reconciled": 1,
"skipped": 1
}
},
"warnings": [
{
"kind": "variable",
"code": "variable-shadowed",
"name": "text",
"scope": {
"kind": "global"
},
"consumers": [
{
"project": {
"id": "text",
"name": "text"
},
"workflows": [
{
"id": "text",
"name": "text"
}
]
}
]
}
]
}Continue Apply after binding setup
Rechecks the configured source and current target bindings. Send expectedSource with the configId, branchName, and full commitSha from the reviewed Apply result. Status source-changed requires a new Apply review. Status blocked returns fresh binding details without import writes. Status applied includes counts and warnings. Inspect status before reading counts. Existing target variable values are preserved. Requires the same cloned instance connection and permissions as Apply. The importer checks user write permissions; granular API-key write scopes are not passed to it. No server session or exactly-once guarantee is provided.
The ID of the promotion connection.
Operation successful.
The request is invalid or provides malformed data.
Unauthorized
Forbidden
The specified resource was not found.
Conflict
Unsupported media type.
Unprocessable Entity
The requested service is temporarily unavailable.
POST /api/v1/promotions/connections/{promotionConnectionId}/apply/continue HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 77
{
"expectedSource": {
"configId": "text",
"branchName": "text",
"commitSha": "text"
}
}{
"connectionId": "text",
"configId": "text",
"git": {
"commitSha": "text",
"branchName": "text"
},
"status": "applied",
"counts": {
"projects": {
"created": 1,
"updated": 1,
"skipped": 1,
"deleted": 1
},
"folders": {
"created": 1,
"skipped": 1,
"removed": 1
},
"workflows": {
"created": 1,
"updated": 1,
"skipped": 1,
"archived": 1,
"deleted": 1,
"publishing": {
"published": 1,
"unpublished": 1,
"unchanged": 1,
"blocked": 1,
"failed": 1
}
},
"credentials": {
"matched": 1,
"stubbed": 1
},
"dataTables": {
"matched": 1,
"created": 1
},
"variables": {
"matched": 1,
"created": 1,
"updated": 1,
"stubbed": 1,
"missing": 1
},
"tags": {
"matched": 1,
"created": 1,
"renamed": 1,
"reconciled": 1,
"skipped": 1
}
},
"warnings": [
{
"kind": "variable",
"code": "variable-shadowed",
"name": "text",
"scope": {
"kind": "global"
},
"consumers": [
{
"project": {
"id": "text",
"name": "text"
},
"workflows": [
{
"id": "text",
"name": "text"
}
]
}
]
}
]
}List the changes of a project in one direction
Compares a team project on this instance with the branch of its promotion configuration and lists the workflows that differ. For promote the rows are what a promotion sends to the branch, and the key needs the gitConnection:push scope. For apply the rows are what applying the branch changes on this instance, and the key needs the gitConnection:pull scope. commitSha is the commit the rows were read from. Requires the direction to be cloned first.
The ID of the project.
The direction of the promotion: apply or promote.
namePossible values: ascPossible values: Operation successful.
The request is invalid or provides malformed data.
Unauthorized
Forbidden
The specified resource was not found.
The requested service is temporarily unavailable.
GET /api/v1/promotions/projects/{projectId}/changes/{direction} HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Accept: */*
{
"commitSha": "text",
"changes": [
{
"id": "text",
"name": "text",
"type": "workflow",
"status": "new",
"version": 1,
"updatedAt": "text",
"updatedBy": "text",
"dependencyCount": 1
}
]
}Promotes a chosen set of a team project's workflows to the Promote branch of the project's promotion configuration. Send workflow ids only; the server reads each one now, so the push carries the current state. Live and archived workflows the project owns are exported, so an archived id stays on the branch as archived; an id the project no longer owns (its workflow is gone, or moved to another project) leaves the branch, matching the project's change list. A deletion the branch does not hold under this project rejects the whole request before any write. Requires the Promote direction to be cloned first, and a promotion connection to resolve for the project (its own connection, otherwise the instance connection). The API key also needs variable:list when the workflows reference variables.
The ID of the project.
Message for the promotion commit. A default is used when omitted.
Operation successful.
The request is invalid or provides malformed data.
Unauthorized
Forbidden
The specified resource was not found.
Unsupported media type.
The requested service is temporarily unavailable.
POST /api/v1/promotions/projects/{projectId}/promote HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 47
{
"workflowIds": [
"text"
],
"commitMessage": "text"
}{
"connectionId": "text",
"configId": "text",
"counts": {
"workflows": 1,
"folders": 1,
"credentials": 1,
"dataTables": 1,
"variables": 1,
"tags": 1
},
"git": {
"commitSha": "text",
"branchName": "text"
}
}Applies selected workflow changes from the project's Apply branch. Send the selected change-list IDs in workflowIds. The server imports IDs present on the branch for this project. It removes instance workflows owned by this project when their IDs are absent from the branch. Duplicate or invalid IDs reject the whole request. Unselected content stays unchanged. Optionally send expectedSource with the configId, branchName, and full commitSha from the reviewed change preview. Status source-changed means the source changed since that review and nothing was imported. Status blocked returns binding details before import writes when the selection needs binding setup. Retain configId and git for Continue. Status applied includes counts and warnings. Inspect status before reading counts. Requires a cloned Apply direction for the project's resolved promotion connection. The API key needs the gitConnection:pull scope. The importer checks user write permissions.
The ID of the project.
Operation successful.
The request is invalid or provides malformed data.
Unauthorized
Forbidden
The specified resource was not found.
Conflict
Unsupported media type.
Unprocessable Entity
The requested service is temporarily unavailable.
POST /api/v1/promotions/projects/{projectId}/apply HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 100
{
"workflowIds": [
"text"
],
"expectedSource": {
"configId": "text",
"branchName": "text",
"commitSha": "text"
}
}{
"connectionId": "text",
"configId": "text",
"git": {
"commitSha": "text",
"branchName": "text"
},
"status": "applied",
"counts": {
"projects": {
"created": 1,
"updated": 1,
"skipped": 1,
"deleted": 1
},
"folders": {
"created": 1,
"skipped": 1,
"removed": 1
},
"workflows": {
"created": 1,
"updated": 1,
"skipped": 1,
"archived": 1,
"deleted": 1,
"publishing": {
"published": 1,
"unpublished": 1,
"unchanged": 1,
"blocked": 1,
"failed": 1
}
},
"credentials": {
"matched": 1,
"stubbed": 1
},
"dataTables": {
"matched": 1,
"created": 1
},
"variables": {
"matched": 1,
"created": 1,
"updated": 1,
"stubbed": 1,
"missing": 1
},
"tags": {
"matched": 1,
"created": 1,
"renamed": 1,
"reconciled": 1,
"skipped": 1
}
},
"warnings": [
{
"kind": "variable",
"code": "variable-shadowed",
"name": "text",
"scope": {
"kind": "global"
},
"consumers": [
{
"project": {
"id": "text",
"name": "text"
},
"workflows": [
{
"id": "text",
"name": "text"
}
]
}
]
}
]
}Continue applying a selection after binding setup
Rechecks the project's Apply source and the current bindings for the selection. Resend the full selection in workflowIds. Send the required expectedSource with the configId, branchName, and full commitSha from the reviewed Apply result. The server does not keep a session. Status source-changed requires a new Apply review. Status blocked returns fresh binding details before import writes. Status applied includes counts and warnings. Inspect status before reading counts. Unselected content stays unchanged. Requires the same cloned Apply direction and permissions as the initial selection apply. The API key needs the gitConnection:pull scope. The importer checks user write permissions.
The ID of the project.
Operation successful.
The request is invalid or provides malformed data.
Unauthorized
Forbidden
The specified resource was not found.
Conflict
Unsupported media type.
Unprocessable Entity
The requested service is temporarily unavailable.
POST /api/v1/promotions/projects/{projectId}/apply/continue HTTP/1.1
X-N8N-API-KEY: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 100
{
"workflowIds": [
"text"
],
"expectedSource": {
"configId": "text",
"branchName": "text",
"commitSha": "text"
}
}{
"connectionId": "text",
"configId": "text",
"git": {
"commitSha": "text",
"branchName": "text"
},
"status": "applied",
"counts": {
"projects": {
"created": 1,
"updated": 1,
"skipped": 1,
"deleted": 1
},
"folders": {
"created": 1,
"skipped": 1,
"removed": 1
},
"workflows": {
"created": 1,
"updated": 1,
"skipped": 1,
"archived": 1,
"deleted": 1,
"publishing": {
"published": 1,
"unpublished": 1,
"unchanged": 1,
"blocked": 1,
"failed": 1
}
},
"credentials": {
"matched": 1,
"stubbed": 1
},
"dataTables": {
"matched": 1,
"created": 1
},
"variables": {
"matched": 1,
"created": 1,
"updated": 1,
"stubbed": 1,
"missing": 1
},
"tags": {
"matched": 1,
"created": 1,
"renamed": 1,
"reconciled": 1,
"skipped": 1
}
},
"warnings": [
{
"kind": "variable",
"code": "variable-shadowed",
"name": "text",
"scope": {
"kind": "global"
},
"consumers": [
{
"project": {
"id": "text",
"name": "text"
},
"workflows": [
{
"id": "text",
"name": "text"
}
]
}
]
}
]
}Last updated
Was this helpful?