Release Candidates

sfp server API reference for Release Candidates: 21 endpoints.

GET/sfp/api/release-candidates/branches

Authorization

access-token
AuthorizationBearer <token>

In: header

Query Parameters

repositoryIdentifier*string

Response Body

application/json

curl -X GET "https://example.com/sfp/api/release-candidates/branches?repositoryIdentifier=string"
[  "string"]
POST/sfp/api/release-candidates

Authorization

access-token
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/sfp/api/release-candidates" \  -H "Content-Type: application/json" \  -d '{    "repositoryIdentifier": "string",    "domain": "string",    "releaseName": "string",    "commitSha": "string",    "value": {}  }'
{  "id": "string",  "repositoryIdentifier": "string",  "domain": "string",  "releaseName": "string",  "commitSha": "string",  "branch": "string",  "tag": "string",  "value": {},  "version": 0,  "createdAt": "string",  "updatedAt": "string",  "createdBy": "string",  "updatedBy": "string",  "status": "pending",  "statusChangedAt": "string",  "statusChangedBy": "string"}
GET/sfp/api/release-candidates

Authorization

access-token
AuthorizationBearer <token>

In: header

Query Parameters

repositoryIdentifier*string

Repository identifier (e.g., flxbl-io/sf-core)

domain?string

Filter by domain (e.g., core, auth, origination)

branch?string

Filter by branch (e.g., main, develop)

limit?number

Limit results (1-200, default: 50)

offset?number

Offset for pagination (default: 0)

includeFinalized?boolean

Include finalized candidates, for example when associating manual deployment steps

status?string

Filter by status. Statuses: pending, in_progress, aborted. Note: finalized candidates are excluded by default.

Response Body

application/json

curl -X GET "https://example.com/sfp/api/release-candidates?repositoryIdentifier=string"
{  "items": [    {      "id": "string",      "repositoryIdentifier": "string",      "domain": "string",      "releaseName": "string",      "commitSha": "string",      "branch": "string",      "tag": "string",      "value": {},      "version": 0,      "createdAt": "string",      "updatedAt": "string",      "createdBy": "string",      "updatedBy": "string",      "status": "pending",      "statusChangedAt": "string",      "statusChangedBy": "string"    }  ],  "total": 0,  "limit": 0,  "offset": 0}
GET/sfp/api/release-candidates/domains

Authorization

access-token
AuthorizationBearer <token>

In: header

Query Parameters

repositoryIdentifier*string

Response Body

curl -X GET "https://example.com/sfp/api/release-candidates/domains?repositoryIdentifier=string"
Empty
GET/sfp/api/release-candidates/latest

Authorization

access-token
AuthorizationBearer <token>

In: header

Query Parameters

repositoryIdentifier*string

Repository identifier (e.g., flxbl-io/sf-core)

domain*string

Domain name (e.g., core, auth, origination)

branch?string

Filter by branch (e.g., main, develop)

Response Body

application/json

curl -X GET "https://example.com/sfp/api/release-candidates/latest?repositoryIdentifier=string&domain=string"
{  "id": "string",  "repositoryIdentifier": "string",  "domain": "string",  "releaseName": "string",  "commitSha": "string",  "branch": "string",  "tag": "string",  "value": {},  "version": 0,  "createdAt": "string",  "updatedAt": "string",  "createdBy": "string",  "updatedBy": "string",  "status": "pending",  "statusChangedAt": "string",  "statusChangedBy": "string"}
GET/sfp/api/release-candidates/by-commit/{commitSha}

Authorization

access-token
AuthorizationBearer <token>

In: header

Path Parameters

commitSha*string

Git commit SHA

Query Parameters

repositoryIdentifier*string

Repository identifier (e.g., flxbl-io/sf-core)

Response Body

curl -X GET "https://example.com/sfp/api/release-candidates/by-commit/string?repositoryIdentifier=string"
Empty
GET/sfp/api/release-candidates/{id}

Authorization

access-token
AuthorizationBearer <token>

In: header

Path Parameters

id*string

Release candidate ID

Response Body

application/json

curl -X GET "https://example.com/sfp/api/release-candidates/string"
{  "id": "string",  "repositoryIdentifier": "string",  "domain": "string",  "releaseName": "string",  "commitSha": "string",  "branch": "string",  "tag": "string",  "value": {},  "version": 0,  "createdAt": "string",  "updatedAt": "string",  "createdBy": "string",  "updatedBy": "string",  "status": "pending",  "statusChangedAt": "string",  "statusChangedBy": "string"}
DELETE/sfp/api/release-candidates/{id}

Authorization

access-token
AuthorizationBearer <token>

In: header

Path Parameters

id*string

Release candidate ID

Response Body

curl -X DELETE "https://example.com/sfp/api/release-candidates/string"
Empty
POST/sfp/api/release-candidates/{id}/compare

Compares the release candidate packages against packages installed in a registered environment. When includeChangelog=true, computes detailed changelog with commits and work items for changed packages.

Authorization

access-token
AuthorizationBearer <token>

In: header

Path Parameters

id*string

Release candidate ID

Query Parameters

includeChangelog?boolean

Include detailed changelog with commits and work items (default: false)

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/sfp/api/release-candidates/string/compare" \  -H "Content-Type: application/json" \  -d '{}'
{  "releaseCandidate": {    "id": "string",    "repositoryIdentifier": "string",    "domain": "string",    "releaseName": "string",    "commitSha": "string",    "branch": "string",    "tag": "string",    "value": {},    "version": 0,    "createdAt": "string",    "updatedAt": "string",    "createdBy": "string",    "updatedBy": "string",    "status": "pending",    "statusChangedAt": "string",    "statusChangedBy": "string"  },  "environment": {},  "comparison": {    "packagesToInstall": [      {        "name": "string",        "type": "string",        "isOutOfSync": true,        "versions": {          "property1": {},          "property2": {}        }      }    ],    "packagesToUpdate": [      {        "name": "string",        "type": "string",        "isOutOfSync": true,        "versions": {          "property1": {},          "property2": {}        }      }    ],    "unchanged": [      {        "name": "string",        "type": "string",        "isOutOfSync": true,        "versions": {          "property1": {},          "property2": {}        }      }    ],    "totalChanges": 0  },  "estimatedDeploymentTime": 0,  "changelog": {},  "linkedCandidates": {}}
POST/sfp/api/release-candidates/{id}/compare-to-packages

Compares the release candidate packages against a provided set of package versions. Useful for comparing RC against local git state (from artifact tags at a specific ref). When includeChangelog=true, computes detailed changelog with commits and work items for changed packages.

Authorization

access-token
AuthorizationBearer <token>

In: header

Path Parameters

id*string

Release candidate ID

Query Parameters

includeChangelog?boolean

Include detailed changelog with commits and work items (default: false)

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/sfp/api/release-candidates/string/compare-to-packages" \  -H "Content-Type: application/json" \  -d '{    "packages": {      "sales-pkg": "1.4.44.10",      "core-pkg": "2.0.0"    }  }'
{  "releaseCandidate": {    "id": "string",    "repositoryIdentifier": "string",    "domain": "string",    "releaseName": "string",    "commitSha": "string",    "branch": "string",    "tag": "string",    "value": {},    "version": 0,    "createdAt": "string",    "updatedAt": "string",    "createdBy": "string",    "updatedBy": "string",    "status": "pending",    "statusChangedAt": "string",    "statusChangedBy": "string"  },  "baseLabel": "string",  "comparison": {},  "changelog": {},  "linkedCandidates": {}}
GET/sfp/api/release-candidates/{id}/changes

Authorization

access-token
AuthorizationBearer <token>

In: header

Path Parameters

id*string

Release candidate ID

Query Parameters

since?string

Compare changes since this commit SHA or date

Response Body

application/json

curl -X GET "https://example.com/sfp/api/release-candidates/string/changes"
{  "packages": [    "string"  ],  "workItems": [    "string"  ],  "commits": [    "string"  ]}
DELETE/sfp/api/release-candidates/by-branch/{branchName}

Bulk-deletes all release candidates associated with a given branch. Rejects if the branch is a configured project branch or part of a cascade.

Authorization

access-token
AuthorizationBearer <token>

In: header

Path Parameters

branchName*string

Branch name (e.g., unbundle-sales-15MAR26)

Query Parameters

repositoryIdentifier*string

Repository identifier (e.g., flxbl-io/sf-core)

Response Body

application/json

curl -X DELETE "https://example.com/sfp/api/release-candidates/by-branch/string?repositoryIdentifier=string"
{  "branch": "string",  "deletedCandidates": [    {      "id": "string",      "releaseName": "string",      "domain": "string"    }  ],  "deletedCount": 0}
PATCH/sfp/api/release-candidates/{id}/status

Authorization

access-token
AuthorizationBearer <token>

In: header

Path Parameters

id*string

Release candidate ID

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X PATCH "https://example.com/sfp/api/release-candidates/string/status" \  -H "Content-Type: application/json" \  -d '{    "status": "pending"  }'
{  "id": "string",  "repositoryIdentifier": "string",  "domain": "string",  "releaseName": "string",  "commitSha": "string",  "branch": "string",  "tag": "string",  "value": {},  "version": 0,  "createdAt": "string",  "updatedAt": "string",  "createdBy": "string",  "updatedBy": "string",  "status": "pending",  "statusChangedAt": "string",  "statusChangedBy": "string"}
POST/sfp/api/release-candidates/find

Authorization

access-token
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/sfp/api/release-candidates/find" \  -H "Content-Type: application/json" \  -d '{    "repositoryIdentifier": "string",    "domain": "string",    "releaseName": "string"  }'
{  "id": "string",  "repositoryIdentifier": "string",  "domain": "string",  "releaseName": "string",  "commitSha": "string",  "branch": "string",  "tag": "string",  "value": {},  "version": 0,  "createdAt": "string",  "updatedAt": "string",  "createdBy": "string",  "updatedBy": "string",  "status": "pending",  "statusChangedAt": "string",  "statusChangedBy": "string"}
PATCH/sfp/api/release-candidates/status-by-name

Authorization

access-token
AuthorizationBearer <token>

In: header

Response Body

application/json

curl -X PATCH "https://example.com/sfp/api/release-candidates/status-by-name"
{  "id": "string",  "repositoryIdentifier": "string",  "domain": "string",  "releaseName": "string",  "commitSha": "string",  "branch": "string",  "tag": "string",  "value": {},  "version": 0,  "createdAt": "string",  "updatedAt": "string",  "createdBy": "string",  "updatedBy": "string",  "status": "pending",  "statusChangedAt": "string",  "statusChangedBy": "string"}
POST/sfp/api/release-candidates/abort

Marks a release candidate as aborted. Once aborted, the release candidate's status cannot be changed. Note: Finalized release candidates cannot be aborted.

Authorization

access-token
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/sfp/api/release-candidates/abort" \  -H "Content-Type: application/json" \  -d '{    "repositoryIdentifier": "string",    "domain": "string",    "releaseName": "string"  }'
{  "id": "string",  "repositoryIdentifier": "string",  "domain": "string",  "releaseName": "string",  "commitSha": "string",  "branch": "string",  "tag": "string",  "value": {},  "version": 0,  "createdAt": "string",  "updatedAt": "string",  "createdBy": "string",  "updatedBy": "string",  "status": "pending",  "statusChangedAt": "string",  "statusChangedBy": "string"}
PATCH/sfp/api/release-candidates/update-packages

Allows excluding packages from a release candidate or overriding their versions. Note: Cannot update release candidates with locked statuses (finalized, aborted).

Authorization

access-token
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X PATCH "https://example.com/sfp/api/release-candidates/update-packages" \  -H "Content-Type: application/json" \  -d '{    "repositoryIdentifier": "string",    "domain": "string",    "releaseName": "string"  }'
{  "id": "string",  "repositoryIdentifier": "string",  "domain": "string",  "releaseName": "string",  "commitSha": "string",  "branch": "string",  "tag": "string",  "value": {},  "version": 0,  "createdAt": "string",  "updatedAt": "string",  "createdBy": "string",  "updatedBy": "string",  "status": "pending",  "statusChangedAt": "string",  "statusChangedBy": "string"}
POST/sfp/api/release-candidates/release-event

Called when a release is deployed to an environment. This endpoint automatically updates the release candidate status based on the environment category and deployment status: - Only successful deployments (Success) trigger status progression - Any successful deployment → status becomes 'in_progress' (if currently pending) - Auto-finalization occurs only when deployed to ALL release category environments for the domain (if autoReleaseFinalization is enabled in project settings)

Authorization

access-token
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/sfp/api/release-candidates/release-event" \  -H "Content-Type: application/json" \  -d '{    "repositoryIdentifier": "string",    "domain": "string",    "releaseName": "string",    "environmentName": "string"  }'
{  "updated": true,  "newStatus": {},  "previousStatus": {},  "intermediateCandidatesFinalized": 0,  "finalizationPending": true,  "message": "string"}
GET/sfp/api/release-candidates/rolling-analysis/{repository}/{domain}

Performs comprehensive rolling analysis showing progression from last completed release to latest candidate. Results are cached (TTL configurable via ROLLING_ANALYSIS_CACHE_TTL_SECONDS env var, default 15 minutes).

Authorization

access-token
AuthorizationBearer <token>

In: header

Path Parameters

repository*string

Repository identifier (e.g., flxbl-io/sf-core)

domain*string

Domain name (e.g., core, auth, origination)

Query Parameters

branch?string

Filter by branch (e.g., main, develop)

includeChangelog?boolean

Include package changelogs (default: false)

force?boolean

Bypass cache and fetch fresh data (default: false)

Header Parameters

X-Cache-Key?string

Cache key used for this request

X-Cache-Status?string

HIT if served from cache, MISS if freshly computed

Response Body

application/json

curl -X GET "https://example.com/sfp/api/release-candidates/rolling-analysis/string/string"
{  "repository": "string",  "domain": "string",  "baseline": {    "releaseName": "string",    "createdAt": "string",    "completedAt": "string",    "deployedEnvironments": [      "string"    ],    "packages": {      "property1": "string",      "property2": "string"    },    "isDefaultBaseline": true,    "branch": "string"  },  "orchestrationOrder": [    "string"  ],  "currentEnvironmentStates": {    "property1": {      "currentRelease": "string",      "packages": {        "property1": "string",        "property2": "string"      }    },    "property2": {      "currentRelease": "string",      "packages": {        "property1": "string",        "property2": "string"      }    }  },  "candidates": [    {      "id": "string",      "releaseName": "string",      "branch": "string",      "commitSha": "string",      "createdAt": "string",      "incrementalChanges": {        "packages": {          "added": [            {              "name": "string",              "version": "string"            }          ],          "updated": [            {              "name": "string",              "fromVersion": "string",              "toVersion": "string"            }          ],          "removed": [            {              "name": "string",              "version": "string"            }          ]        },        "summary": {          "totalPackageChanges": 0,          "totalCommits": 0,          "totalWorkItems": 0        }      },      "cumulativeChanges": {        "packages": {          "added": [            {              "name": "string",              "version": "string"            }          ],          "updated": [            {              "name": "string",              "fromVersion": "string",              "toVersion": "string"            }          ],          "removed": [            {              "name": "string",              "version": "string"            }          ]        },        "summary": {          "totalPackageChanges": 0,          "totalCommits": 0,          "totalWorkItems": 0        },        "cumulativeSummary": {          "estimatedDeploymentTime": 0        }      }    }  ],  "candidatesByBranch": {    "byBranch": {      "property1": [        {          "id": "string",          "releaseName": "string",          "branch": "string",          "commitSha": "string",          "createdAt": "string",          "incrementalChanges": {            "packages": {              "added": [                {                  "name": "string",                  "version": "string"                }              ],              "updated": [                {                  "name": "string",                  "fromVersion": "string",                  "toVersion": "string"                }              ],              "removed": [                {                  "name": "string",                  "version": "string"                }              ]            },            "summary": {              "totalPackageChanges": 0,              "totalCommits": 0,              "totalWorkItems": 0            }          },          "cumulativeChanges": {            "packages": {              "added": [                {                  "name": "string",                  "version": "string"                }              ],              "updated": [                {                  "name": "string",                  "fromVersion": "string",                  "toVersion": "string"                }              ],              "removed": [                {                  "name": "string",                  "version": "string"                }              ]            },            "summary": {              "totalPackageChanges": 0,              "totalCommits": 0,              "totalWorkItems": 0            },            "cumulativeSummary": {              "estimatedDeploymentTime": 0            }          }        }      ],      "property2": [        {          "id": "string",          "releaseName": "string",          "branch": "string",          "commitSha": "string",          "createdAt": "string",          "incrementalChanges": {            "packages": {              "added": [                {                  "name": "string",                  "version": "string"                }              ],              "updated": [                {                  "name": "string",                  "fromVersion": "string",                  "toVersion": "string"                }              ],              "removed": [                {                  "name": "string",                  "version": "string"                }              ]            },            "summary": {              "totalPackageChanges": 0,              "totalCommits": 0,              "totalWorkItems": 0            }          },          "cumulativeChanges": {            "packages": {              "added": [                {                  "name": "string",                  "version": "string"                }              ],              "updated": [                {                  "name": "string",                  "fromVersion": "string",                  "toVersion": "string"                }              ],              "removed": [                {                  "name": "string",                  "version": "string"                }              ]            },            "summary": {              "totalPackageChanges": 0,              "totalCommits": 0,              "totalWorkItems": 0            },            "cumulativeSummary": {              "estimatedDeploymentTime": 0            }          }        }      ]    },    "all": [      {        "id": "string",        "releaseName": "string",        "branch": "string",        "commitSha": "string",        "createdAt": "string",        "incrementalChanges": {          "packages": {            "added": [              {                "name": "string",                "version": "string"              }            ],            "updated": [              {                "name": "string",                "fromVersion": "string",                "toVersion": "string"              }            ],            "removed": [              {                "name": "string",                "version": "string"              }            ]          },          "summary": {            "totalPackageChanges": 0,            "totalCommits": 0,            "totalWorkItems": 0          }        },        "cumulativeChanges": {          "packages": {            "added": [              {                "name": "string",                "version": "string"              }            ],            "updated": [              {                "name": "string",                "fromVersion": "string",                "toVersion": "string"              }            ],            "removed": [              {                "name": "string",                "version": "string"              }            ]          },          "summary": {            "totalPackageChanges": 0,            "totalCommits": 0,            "totalWorkItems": 0          },          "cumulativeSummary": {            "estimatedDeploymentTime": 0          }        }      }    ]  },  "summary": {    "deploymentPipeline": {      "environmentStatus": [        {          "environment": "string",          "currentRelease": "string",          "candidatesInQueue": [            "string"          ]        }      ],      "blockers": [        {          "environment": "string",          "blockedCandidate": "string",          "reason": "string"        }      ]    },    "progressMetrics": {      "candidatesFullyDeployed": 0,      "candidatesInProgress": 0,      "candidatesPending": 0,      "estimatedTimeToFullDeployment": 0    },    "baselineToLatestSummary": {      "totalCandidates": 0,      "totalUniqueWorkItems": 0,      "totalUniqueCommits": 0,      "packageProgressions": [        {          "name": "string",          "journey": [            {              "version": "string",              "candidateIndex": 0            }          ]        }      ]    },    "branchAnalysis": {      "mainBranch": "string",      "featureBranches": [        {          "branch": "string",          "candidateCount": 0,          "firstCandidate": "string",          "lastCandidate": "string"        }      ]    }  },  "analyzedAt": "string"}
GET/sfp/api/release-candidates/rolling-analysis/{repository}/{domain}/environment/{environment}

Analyzes progression for a specific environment including pending candidates

Authorization

access-token
AuthorizationBearer <token>

In: header

Path Parameters

repository*string

Repository identifier (e.g., myorg/myrepo)

domain*string

Domain name

environment*string

Environment name

Query Parameters

includeChangelog?boolean

Include package changelogs

Response Body

curl -X GET "https://example.com/sfp/api/release-candidates/rolling-analysis/string/string/environment/string"
Empty
GET/sfp/api/release-candidates/rolling-analysis/{repository}/{domain}/environment/{environment}/risk

Provides risk assessment for the next deployment to a specific environment

Authorization

access-token
AuthorizationBearer <token>

In: header

Path Parameters

repository*string

Repository identifier (e.g., myorg/myrepo)

domain*string

Domain name

environment*string

Environment name

Response Body

curl -X GET "https://example.com/sfp/api/release-candidates/rolling-analysis/string/string/environment/string/risk"
Empty