# Release Candidates

## GET /sfp/api/release-candidates

> List active release candidates (excludes finalized)

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"ReleaseCandidateListDto":{"type":"object","properties":{"items":{"description":"List of release candidates","type":"array","items":{"$ref":"#/components/schemas/ReleaseCandidateDto"}},"total":{"type":"number","description":"Total count of release candidates"},"limit":{"type":"number","description":"Number of items returned"},"offset":{"type":"number","description":"Offset for pagination"}},"required":["items","total","limit","offset"]},"ReleaseCandidateDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"repositoryIdentifier":{"type":"string","description":"Repository identifier"},"domain":{"type":"string","description":"Domain/release configuration name"},"releaseName":{"type":"string","description":"Release name"},"commitSha":{"type":"string","description":"Git commit SHA"},"branch":{"type":"string","description":"Git branch name"},"tag":{"type":"string","description":"Git tag"},"value":{"type":"object","description":"Release definition and metadata"},"version":{"type":"number","description":"Version number"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"},"createdBy":{"type":"string","description":"Created by (email or \"application\")"},"updatedBy":{"type":"string","description":"Updated by (email or \"application\")"},"status":{"type":"object","description":"Release candidate status. Reserved statuses: pending, in_progress, finalized, aborted. Custom statuses are also allowed."},"statusChangedAt":{"type":"string","description":"Timestamp when status was last changed"},"statusChangedBy":{"type":"string","description":"Who changed the status"}},"required":["id","repositoryIdentifier","domain","releaseName","commitSha","value","version","createdAt","updatedAt","createdBy","updatedBy","status"]}}},"paths":{"/sfp/api/release-candidates":{"get":{"operationId":"ReleaseCandidatesController_listReleaseCandidates","summary":"List active release candidates (excludes finalized)","parameters":[{"name":"repositoryIdentifier","required":true,"in":"query","description":"Repository identifier (e.g., flxbl-io/sf-core)","schema":{"type":"string"}},{"name":"domain","required":false,"in":"query","description":"Filter by domain (e.g., core, auth, origination)","schema":{"type":"string"}},{"name":"branch","required":false,"in":"query","description":"Filter by branch (e.g., main, develop)","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Limit results (1-200, default: 50)","schema":{"type":"number"}},{"name":"offset","required":false,"in":"query","description":"Offset for pagination (default: 0)","schema":{"type":"number"}},{"name":"status","required":false,"in":"query","description":"Filter by status. Statuses: pending, in_progress, aborted. Note: finalized candidates are excluded by default.","schema":{"type":"string"}}],"responses":{"200":{"description":"List of release candidates","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseCandidateListDto"}}}},"400":{"description":"Bad request"},"403":{"description":"Forbidden - Requires role: member, owner, application"}},"tags":["Release Candidates"]}}}}
```

## POST /sfp/api/release-candidates

> Create or update a release candidate

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"CreateReleaseCandidateDto":{"type":"object","properties":{"repositoryIdentifier":{"type":"string","description":"Repository identifier (e.g., \"owner/repo\")"},"domain":{"type":"string","description":"Domain/release configuration name"},"releaseName":{"type":"string","description":"Release name"},"commitSha":{"type":"string","description":"Git commit SHA"},"branch":{"type":"string","description":"Git branch name"},"tag":{"type":"string","description":"Git tag"},"value":{"type":"object","description":"Release definition and metadata"},"status":{"type":"object","description":"Initial status for the release candidate. Reserved statuses: pending, in_progress, finalized, aborted. Custom statuses are also allowed (e.g., testing, staging).","default":"pending"}},"required":["repositoryIdentifier","domain","releaseName","commitSha","value"]},"ReleaseCandidateDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"repositoryIdentifier":{"type":"string","description":"Repository identifier"},"domain":{"type":"string","description":"Domain/release configuration name"},"releaseName":{"type":"string","description":"Release name"},"commitSha":{"type":"string","description":"Git commit SHA"},"branch":{"type":"string","description":"Git branch name"},"tag":{"type":"string","description":"Git tag"},"value":{"type":"object","description":"Release definition and metadata"},"version":{"type":"number","description":"Version number"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"},"createdBy":{"type":"string","description":"Created by (email or \"application\")"},"updatedBy":{"type":"string","description":"Updated by (email or \"application\")"},"status":{"type":"object","description":"Release candidate status. Reserved statuses: pending, in_progress, finalized, aborted. Custom statuses are also allowed."},"statusChangedAt":{"type":"string","description":"Timestamp when status was last changed"},"statusChangedBy":{"type":"string","description":"Who changed the status"}},"required":["id","repositoryIdentifier","domain","releaseName","commitSha","value","version","createdAt","updatedAt","createdBy","updatedBy","status"]}}},"paths":{"/sfp/api/release-candidates":{"post":{"operationId":"ReleaseCandidatesController_createReleaseCandidate","summary":"Create or update a release candidate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReleaseCandidateDto"}}}},"responses":{"201":{"description":"Release candidate created/updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseCandidateDto"}}}},"400":{"description":"Bad request"},"403":{"description":"Forbidden - Requires role: member, owner, application"},"409":{"description":"Conflict - version mismatch"}},"tags":["Release Candidates"]}}}}
```

## GET /sfp/api/release-candidates/latest

> Get the latest release candidate for a domain

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"ReleaseCandidateDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"repositoryIdentifier":{"type":"string","description":"Repository identifier"},"domain":{"type":"string","description":"Domain/release configuration name"},"releaseName":{"type":"string","description":"Release name"},"commitSha":{"type":"string","description":"Git commit SHA"},"branch":{"type":"string","description":"Git branch name"},"tag":{"type":"string","description":"Git tag"},"value":{"type":"object","description":"Release definition and metadata"},"version":{"type":"number","description":"Version number"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"},"createdBy":{"type":"string","description":"Created by (email or \"application\")"},"updatedBy":{"type":"string","description":"Updated by (email or \"application\")"},"status":{"type":"object","description":"Release candidate status. Reserved statuses: pending, in_progress, finalized, aborted. Custom statuses are also allowed."},"statusChangedAt":{"type":"string","description":"Timestamp when status was last changed"},"statusChangedBy":{"type":"string","description":"Who changed the status"}},"required":["id","repositoryIdentifier","domain","releaseName","commitSha","value","version","createdAt","updatedAt","createdBy","updatedBy","status"]}}},"paths":{"/sfp/api/release-candidates/latest":{"get":{"operationId":"ReleaseCandidatesController_getLatestReleaseCandidate","summary":"Get the latest release candidate for a domain","parameters":[{"name":"repositoryIdentifier","required":true,"in":"query","description":"Repository identifier (e.g., flxbl-io/sf-core)","schema":{"type":"string"}},{"name":"domain","required":true,"in":"query","description":"Domain name (e.g., core, auth, origination)","schema":{"type":"string"}},{"name":"branch","required":false,"in":"query","description":"Filter by branch (e.g., main, develop)","schema":{"type":"string"}}],"responses":{"200":{"description":"Latest release candidate","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseCandidateDto"}}}},"403":{"description":"Forbidden - Requires role: member, owner, application"},"404":{"description":"No release candidates found"}},"tags":["Release Candidates"]}}}}
```

## GET /sfp/api/release-candidates/by-commit/{commitSha}

> Get release candidates for a specific commit, grouped by domain

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}}},"paths":{"/sfp/api/release-candidates/by-commit/{commitSha}":{"get":{"operationId":"ReleaseCandidatesController_getByCommit","summary":"Get release candidates for a specific commit, grouped by domain","parameters":[{"name":"commitSha","required":true,"in":"path","description":"Git commit SHA","schema":{"type":"string"}},{"name":"repositoryIdentifier","required":true,"in":"query","description":"Repository identifier (e.g., flxbl-io/sf-core)","schema":{"type":"string"}}],"responses":{"200":{"description":"Release candidates grouped by domain"},"403":{"description":"Forbidden - Requires role: member, owner, application"}},"tags":["Release Candidates"]}}}}
```

## GET /sfp/api/release-candidates/{id}

> Get a specific release candidate

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"ReleaseCandidateDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"repositoryIdentifier":{"type":"string","description":"Repository identifier"},"domain":{"type":"string","description":"Domain/release configuration name"},"releaseName":{"type":"string","description":"Release name"},"commitSha":{"type":"string","description":"Git commit SHA"},"branch":{"type":"string","description":"Git branch name"},"tag":{"type":"string","description":"Git tag"},"value":{"type":"object","description":"Release definition and metadata"},"version":{"type":"number","description":"Version number"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"},"createdBy":{"type":"string","description":"Created by (email or \"application\")"},"updatedBy":{"type":"string","description":"Updated by (email or \"application\")"},"status":{"type":"object","description":"Release candidate status. Reserved statuses: pending, in_progress, finalized, aborted. Custom statuses are also allowed."},"statusChangedAt":{"type":"string","description":"Timestamp when status was last changed"},"statusChangedBy":{"type":"string","description":"Who changed the status"}},"required":["id","repositoryIdentifier","domain","releaseName","commitSha","value","version","createdAt","updatedAt","createdBy","updatedBy","status"]}}},"paths":{"/sfp/api/release-candidates/{id}":{"get":{"operationId":"ReleaseCandidatesController_getReleaseCandidate","summary":"Get a specific release candidate","parameters":[{"name":"id","required":true,"in":"path","description":"Release candidate ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Release candidate details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseCandidateDto"}}}},"403":{"description":"Forbidden - Requires role: member, owner, application"},"404":{"description":"Release candidate not found"}},"tags":["Release Candidates"]}}}}
```

## DELETE /sfp/api/release-candidates/{id}

> Delete a release candidate

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}}},"paths":{"/sfp/api/release-candidates/{id}":{"delete":{"operationId":"ReleaseCandidatesController_deleteReleaseCandidate","summary":"Delete a release candidate","parameters":[{"name":"id","required":true,"in":"path","description":"Release candidate ID","schema":{"type":"string"}}],"responses":{"204":{"description":"Release candidate deleted"},"403":{"description":"Forbidden - Requires role: owner, application"},"404":{"description":"Release candidate not found"}},"tags":["Release Candidates"]}}}}
```

## Compare release candidate with an environment

> 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.

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"CompareWithEnvironmentDto":{"type":"object","properties":{"environmentId":{"type":"string","description":"Environment ID to compare against"},"environmentName":{"type":"string","description":"Environment name to compare against (alternative to environmentId)"}}},"ReleaseComparisonDto":{"type":"object","properties":{"releaseCandidate":{"description":"Release candidate being compared","allOf":[{"$ref":"#/components/schemas/ReleaseCandidateDto"}]},"environment":{"type":"object","description":"Environment being compared against"},"comparison":{"type":"object","description":"Comparison results (only includes packages in the RC, not other packages in org)","properties":{"packagesToInstall":{"type":"array","items":{"$ref":"#/components/schemas/PackageComparisonDto"}},"packagesToUpdate":{"type":"array","items":{"$ref":"#/components/schemas/PackageComparisonDto"}},"unchanged":{"type":"array","items":{"$ref":"#/components/schemas/PackageComparisonDto"}},"totalChanges":{"type":"number"}}},"estimatedDeploymentTime":{"type":"number","description":"Estimated deployment time in minutes"},"changelog":{"type":"object","description":"Changelog data if includeChangelog=true was specified"},"linkedCandidates":{"type":"object","description":"Linked release candidates from other domains (non-finalized only)"}},"required":["releaseCandidate","environment","comparison","estimatedDeploymentTime","linkedCandidates"]},"ReleaseCandidateDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"repositoryIdentifier":{"type":"string","description":"Repository identifier"},"domain":{"type":"string","description":"Domain/release configuration name"},"releaseName":{"type":"string","description":"Release name"},"commitSha":{"type":"string","description":"Git commit SHA"},"branch":{"type":"string","description":"Git branch name"},"tag":{"type":"string","description":"Git tag"},"value":{"type":"object","description":"Release definition and metadata"},"version":{"type":"number","description":"Version number"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"},"createdBy":{"type":"string","description":"Created by (email or \"application\")"},"updatedBy":{"type":"string","description":"Updated by (email or \"application\")"},"status":{"type":"object","description":"Release candidate status. Reserved statuses: pending, in_progress, finalized, aborted. Custom statuses are also allowed."},"statusChangedAt":{"type":"string","description":"Timestamp when status was last changed"},"statusChangedBy":{"type":"string","description":"Who changed the status"}},"required":["id","repositoryIdentifier","domain","releaseName","commitSha","value","version","createdAt","updatedAt","createdBy","updatedBy","status"]},"PackageComparisonDto":{"type":"object","properties":{"name":{"type":"string","description":"Package name"},"type":{"type":"string","description":"Package type (e.g., Unlocked, Source/Data, Managed)"},"isOutOfSync":{"type":"boolean","description":"Whether the package is out of sync across environments"},"versions":{"type":"object","description":"Version information per environment. Key is environment name, value is version info or null if not installed.","additionalProperties":{"oneOf":[{"$ref":"#/components/schemas/ArtifactVersionInfoDto"},{"type":"null"}]}}},"required":["name","type","isOutOfSync","versions"]}}},"paths":{"/sfp/api/release-candidates/{id}/compare":{"post":{"operationId":"ReleaseCandidatesController_compareWithEnvironment","summary":"Compare release candidate with an environment","description":"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.","parameters":[{"name":"id","required":true,"in":"path","description":"Release candidate ID","schema":{"type":"string"}},{"name":"includeChangelog","required":false,"in":"query","description":"Include detailed changelog with commits and work items (default: false)","schema":{"type":"boolean"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareWithEnvironmentDto"}}}},"responses":{"200":{"description":"Comparison results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseComparisonDto"}}}},"403":{"description":"Forbidden - Requires role: member, owner, application"},"404":{"description":"Release candidate or environment not found"}},"tags":["Release Candidates"]}}}}
```

## Compare release candidate with provided package versions

> 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.

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"CompareToPackagesDto":{"type":"object","properties":{"packages":{"type":"object","description":"Package versions to compare against. Key is package name, value is version."},"baseLabel":{"type":"string","description":"Label for the comparison base (e.g., git ref, environment name)"}},"required":["packages"]},"CompareToPackagesResponseDto":{"type":"object","properties":{"releaseCandidate":{"description":"Release candidate being compared","allOf":[{"$ref":"#/components/schemas/ReleaseCandidateDto"}]},"baseLabel":{"type":"string","description":"Label for the comparison base"},"comparison":{"type":"object","description":"Comparison results"},"changelog":{"type":"object","description":"Changelog data if available"},"linkedCandidates":{"type":"object","description":"Linked release candidates from other domains (non-finalized only)"}},"required":["releaseCandidate","baseLabel","comparison","linkedCandidates"]},"ReleaseCandidateDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"repositoryIdentifier":{"type":"string","description":"Repository identifier"},"domain":{"type":"string","description":"Domain/release configuration name"},"releaseName":{"type":"string","description":"Release name"},"commitSha":{"type":"string","description":"Git commit SHA"},"branch":{"type":"string","description":"Git branch name"},"tag":{"type":"string","description":"Git tag"},"value":{"type":"object","description":"Release definition and metadata"},"version":{"type":"number","description":"Version number"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"},"createdBy":{"type":"string","description":"Created by (email or \"application\")"},"updatedBy":{"type":"string","description":"Updated by (email or \"application\")"},"status":{"type":"object","description":"Release candidate status. Reserved statuses: pending, in_progress, finalized, aborted. Custom statuses are also allowed."},"statusChangedAt":{"type":"string","description":"Timestamp when status was last changed"},"statusChangedBy":{"type":"string","description":"Who changed the status"}},"required":["id","repositoryIdentifier","domain","releaseName","commitSha","value","version","createdAt","updatedAt","createdBy","updatedBy","status"]}}},"paths":{"/sfp/api/release-candidates/{id}/compare-to-packages":{"post":{"operationId":"ReleaseCandidatesController_compareToPackages","summary":"Compare release candidate with provided package versions","description":"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.","parameters":[{"name":"id","required":true,"in":"path","description":"Release candidate ID","schema":{"type":"string"}},{"name":"includeChangelog","required":false,"in":"query","description":"Include detailed changelog with commits and work items (default: false)","schema":{"type":"boolean"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareToPackagesDto"}}}},"responses":{"200":{"description":"Comparison results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareToPackagesResponseDto"}}}},"403":{"description":"Forbidden - Requires role: member, owner, application"},"404":{"description":"Release candidate not found"}},"tags":["Release Candidates"]}}}}
```

## GET /sfp/api/release-candidates/{id}/changes

> Get change analysis for a release candidate

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"ChangeAnalysisDto":{"type":"object","properties":{"packages":{"description":"Package changes","type":"array","items":{"type":"string"}},"workItems":{"description":"Work items extracted from commits","type":"array","items":{"type":"string"}},"commits":{"description":"Commit information","type":"array","items":{"type":"string"}}},"required":["packages","workItems","commits"]}}},"paths":{"/sfp/api/release-candidates/{id}/changes":{"get":{"operationId":"ReleaseCandidatesController_getChangeAnalysis","summary":"Get change analysis for a release candidate","parameters":[{"name":"id","required":true,"in":"path","description":"Release candidate ID","schema":{"type":"string"}},{"name":"since","required":false,"in":"query","description":"Compare changes since this commit SHA or date","schema":{"type":"string"}}],"responses":{"200":{"description":"Change analysis","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeAnalysisDto"}}}},"403":{"description":"Forbidden - Requires role: member, owner, application"},"404":{"description":"Release candidate not found"}},"tags":["Release Candidates"]}}}}
```

## Delete all release candidates on a branch

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

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"DeleteByBranchResultDto":{"type":"object","properties":{"branch":{"type":"string","description":"Branch name whose RCs were deleted"},"deletedCandidates":{"description":"List of deleted release candidate summaries","type":"array","items":{"$ref":"#/components/schemas/DeletedReleaseCandidateSummaryDto"}},"deletedCount":{"type":"number","description":"Number of deleted release candidates"}},"required":["branch","deletedCandidates","deletedCount"]},"DeletedReleaseCandidateSummaryDto":{"type":"object","properties":{"id":{"type":"string","description":"Release candidate ID"},"releaseName":{"type":"string","description":"Release name"},"domain":{"type":"string","description":"Domain"}},"required":["id","releaseName","domain"]}}},"paths":{"/sfp/api/release-candidates/by-branch/{branchName}":{"delete":{"operationId":"ReleaseCandidatesController_deleteByBranch","summary":"Delete all release candidates on a branch","description":"Bulk-deletes all release candidates associated with a given branch. Rejects if the branch is a configured project branch or part of a cascade.","parameters":[{"name":"branchName","required":true,"in":"path","description":"Branch name (e.g., unbundle-sales-15MAR26)","schema":{"type":"string"}},{"name":"repositoryIdentifier","required":true,"in":"query","description":"Repository identifier (e.g., flxbl-io/sf-core)","schema":{"type":"string"}}],"responses":{"200":{"description":"Release candidates deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteByBranchResultDto"}}}},"400":{"description":"Branch is protected (configured or cascade)"},"403":{"description":"Forbidden - Requires role: owner, application"}},"tags":["Release Candidates"]}}}}
```

## PATCH /sfp/api/release-candidates/{id}/status

> Update release candidate status

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"UpdateReleaseCandidateStatusDto":{"type":"object","properties":{"status":{"type":"object","description":"New status for the release candidate. Reserved statuses: pending, in_progress, finalized, aborted. Custom statuses are also allowed (e.g., testing, staging). Note: aborted and finalized statuses are locked and cannot be changed once set."}},"required":["status"]},"ReleaseCandidateDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"repositoryIdentifier":{"type":"string","description":"Repository identifier"},"domain":{"type":"string","description":"Domain/release configuration name"},"releaseName":{"type":"string","description":"Release name"},"commitSha":{"type":"string","description":"Git commit SHA"},"branch":{"type":"string","description":"Git branch name"},"tag":{"type":"string","description":"Git tag"},"value":{"type":"object","description":"Release definition and metadata"},"version":{"type":"number","description":"Version number"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"},"createdBy":{"type":"string","description":"Created by (email or \"application\")"},"updatedBy":{"type":"string","description":"Updated by (email or \"application\")"},"status":{"type":"object","description":"Release candidate status. Reserved statuses: pending, in_progress, finalized, aborted. Custom statuses are also allowed."},"statusChangedAt":{"type":"string","description":"Timestamp when status was last changed"},"statusChangedBy":{"type":"string","description":"Who changed the status"}},"required":["id","repositoryIdentifier","domain","releaseName","commitSha","value","version","createdAt","updatedAt","createdBy","updatedBy","status"]}}},"paths":{"/sfp/api/release-candidates/{id}/status":{"patch":{"operationId":"ReleaseCandidatesController_updateStatus","summary":"Update release candidate status","parameters":[{"name":"id","required":true,"in":"path","description":"Release candidate ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateReleaseCandidateStatusDto"}}}},"responses":{"200":{"description":"Status updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseCandidateDto"}}}},"403":{"description":"Forbidden - Requires role: member, owner, application"},"404":{"description":"Release candidate not found"}},"tags":["Release Candidates"]}}}}
```

## POST /sfp/api/release-candidates/find

> Find release candidate by repository, domain, and name

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"FindReleaseCandidateDto":{"type":"object","properties":{"repositoryIdentifier":{"type":"string","description":"Repository identifier"},"domain":{"type":"string","description":"Domain name"},"releaseName":{"type":"string","description":"Release name"}},"required":["repositoryIdentifier","domain","releaseName"]},"ReleaseCandidateDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"repositoryIdentifier":{"type":"string","description":"Repository identifier"},"domain":{"type":"string","description":"Domain/release configuration name"},"releaseName":{"type":"string","description":"Release name"},"commitSha":{"type":"string","description":"Git commit SHA"},"branch":{"type":"string","description":"Git branch name"},"tag":{"type":"string","description":"Git tag"},"value":{"type":"object","description":"Release definition and metadata"},"version":{"type":"number","description":"Version number"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"},"createdBy":{"type":"string","description":"Created by (email or \"application\")"},"updatedBy":{"type":"string","description":"Updated by (email or \"application\")"},"status":{"type":"object","description":"Release candidate status. Reserved statuses: pending, in_progress, finalized, aborted. Custom statuses are also allowed."},"statusChangedAt":{"type":"string","description":"Timestamp when status was last changed"},"statusChangedBy":{"type":"string","description":"Who changed the status"}},"required":["id","repositoryIdentifier","domain","releaseName","commitSha","value","version","createdAt","updatedAt","createdBy","updatedBy","status"]}}},"paths":{"/sfp/api/release-candidates/find":{"post":{"operationId":"ReleaseCandidatesController_findReleaseCandidate","summary":"Find release candidate by repository, domain, and name","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindReleaseCandidateDto"}}}},"responses":{"200":{"description":"Release candidate found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseCandidateDto"}}}},"403":{"description":"Forbidden - Requires role: member, owner, application"},"404":{"description":"Release candidate not found"}},"tags":["Release Candidates"]}}}}
```

## PATCH /sfp/api/release-candidates/status-by-name

> Update release candidate status by repository, domain, and name

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"ReleaseCandidateDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"repositoryIdentifier":{"type":"string","description":"Repository identifier"},"domain":{"type":"string","description":"Domain/release configuration name"},"releaseName":{"type":"string","description":"Release name"},"commitSha":{"type":"string","description":"Git commit SHA"},"branch":{"type":"string","description":"Git branch name"},"tag":{"type":"string","description":"Git tag"},"value":{"type":"object","description":"Release definition and metadata"},"version":{"type":"number","description":"Version number"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"},"createdBy":{"type":"string","description":"Created by (email or \"application\")"},"updatedBy":{"type":"string","description":"Updated by (email or \"application\")"},"status":{"type":"object","description":"Release candidate status. Reserved statuses: pending, in_progress, finalized, aborted. Custom statuses are also allowed."},"statusChangedAt":{"type":"string","description":"Timestamp when status was last changed"},"statusChangedBy":{"type":"string","description":"Who changed the status"}},"required":["id","repositoryIdentifier","domain","releaseName","commitSha","value","version","createdAt","updatedAt","createdBy","updatedBy","status"]}}},"paths":{"/sfp/api/release-candidates/status-by-name":{"patch":{"operationId":"ReleaseCandidatesController_updateStatusByName","summary":"Update release candidate status by repository, domain, and name","parameters":[],"responses":{"200":{"description":"Status updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseCandidateDto"}}}},"403":{"description":"Forbidden - Requires role: member, owner, application"},"404":{"description":"Release candidate not found"}},"tags":["Release Candidates"]}}}}
```

## Abort a release candidate

> Marks a release candidate as aborted. Once aborted, the release candidate's status cannot be changed.\
> &#x20;       Note: Finalized release candidates cannot be aborted.

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"AbortReleaseCandidateDto":{"type":"object","properties":{"repositoryIdentifier":{"type":"string","description":"Repository identifier"},"domain":{"type":"string","description":"Domain name"},"releaseName":{"type":"string","description":"Release name"},"reason":{"type":"string","description":"Reason for aborting the release candidate"}},"required":["repositoryIdentifier","domain","releaseName"]},"ReleaseCandidateDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"repositoryIdentifier":{"type":"string","description":"Repository identifier"},"domain":{"type":"string","description":"Domain/release configuration name"},"releaseName":{"type":"string","description":"Release name"},"commitSha":{"type":"string","description":"Git commit SHA"},"branch":{"type":"string","description":"Git branch name"},"tag":{"type":"string","description":"Git tag"},"value":{"type":"object","description":"Release definition and metadata"},"version":{"type":"number","description":"Version number"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"},"createdBy":{"type":"string","description":"Created by (email or \"application\")"},"updatedBy":{"type":"string","description":"Updated by (email or \"application\")"},"status":{"type":"object","description":"Release candidate status. Reserved statuses: pending, in_progress, finalized, aborted. Custom statuses are also allowed."},"statusChangedAt":{"type":"string","description":"Timestamp when status was last changed"},"statusChangedBy":{"type":"string","description":"Who changed the status"}},"required":["id","repositoryIdentifier","domain","releaseName","commitSha","value","version","createdAt","updatedAt","createdBy","updatedBy","status"]}}},"paths":{"/sfp/api/release-candidates/abort":{"post":{"operationId":"ReleaseCandidatesController_abortReleaseCandidate","summary":"Abort a release candidate","description":"Marks a release candidate as aborted. Once aborted, the release candidate's status cannot be changed.\n        Note: Finalized release candidates cannot be aborted.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AbortReleaseCandidateDto"}}}},"responses":{"200":{"description":"Release candidate aborted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseCandidateDto"}}}},"400":{"description":"Cannot abort (already finalized)"},"403":{"description":"Forbidden - Requires role: member, owner, application"},"404":{"description":"Release candidate not found"}},"tags":["Release Candidates"]}}}}
```

## Update packages in a release candidate

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

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"UpdateReleaseCandidatePackagesDto":{"type":"object","properties":{"repositoryIdentifier":{"type":"string","description":"Repository identifier"},"domain":{"type":"string","description":"Domain name"},"releaseName":{"type":"string","description":"Release name"},"excludePackages":{"description":"Package names to exclude from the release candidate","type":"array","items":{"type":"string"}},"overrideVersions":{"type":"object","description":"Package versions to override. Key is package name, value is new version."}},"required":["repositoryIdentifier","domain","releaseName"]},"ReleaseCandidateDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier"},"repositoryIdentifier":{"type":"string","description":"Repository identifier"},"domain":{"type":"string","description":"Domain/release configuration name"},"releaseName":{"type":"string","description":"Release name"},"commitSha":{"type":"string","description":"Git commit SHA"},"branch":{"type":"string","description":"Git branch name"},"tag":{"type":"string","description":"Git tag"},"value":{"type":"object","description":"Release definition and metadata"},"version":{"type":"number","description":"Version number"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"},"createdBy":{"type":"string","description":"Created by (email or \"application\")"},"updatedBy":{"type":"string","description":"Updated by (email or \"application\")"},"status":{"type":"object","description":"Release candidate status. Reserved statuses: pending, in_progress, finalized, aborted. Custom statuses are also allowed."},"statusChangedAt":{"type":"string","description":"Timestamp when status was last changed"},"statusChangedBy":{"type":"string","description":"Who changed the status"}},"required":["id","repositoryIdentifier","domain","releaseName","commitSha","value","version","createdAt","updatedAt","createdBy","updatedBy","status"]}}},"paths":{"/sfp/api/release-candidates/update-packages":{"patch":{"operationId":"ReleaseCandidatesController_updatePackages","summary":"Update packages in a release candidate","description":"Allows excluding packages from a release candidate or overriding their versions.\n        Note: Cannot update release candidates with locked statuses (finalized, aborted).","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateReleaseCandidatePackagesDto"}}}},"responses":{"200":{"description":"Release candidate updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseCandidateDto"}}}},"400":{"description":"Cannot update (status locked or invalid packages)"},"403":{"description":"Forbidden - Requires role: member, owner, application"},"404":{"description":"Release candidate not found"},"409":{"description":"Conflict - concurrent modification"}},"tags":["Release Candidates"]}}}}
```

## Notify release candidate of a deployment event

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

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"ReleaseEventDto":{"type":"object","properties":{"repositoryIdentifier":{"type":"string","description":"Repository identifier (e.g., \"owner/repo\")"},"domain":{"type":"string","description":"Domain/release configuration name"},"releaseName":{"type":"string","description":"Release name that was deployed"},"environmentName":{"type":"string","description":"Environment name where the release was deployed"},"deploymentStatus":{"type":"string","description":"Deployment status: Success, PartialSuccess, or Failure. Only successful deployments trigger status progression.","enum":["Success","PartialSuccess","Failure"],"default":"Success"}},"required":["repositoryIdentifier","domain","releaseName","environmentName"]},"ReleaseEventResponseDto":{"type":"object","properties":{"updated":{"type":"boolean","description":"Whether the release candidate was updated"},"newStatus":{"type":"object","description":"The new status of the release candidate"},"previousStatus":{"type":"object","description":"Previous status before the update"},"intermediateCandidatesFinalized":{"type":"number","description":"Number of intermediate candidates auto-finalized"},"finalizationPending":{"type":"boolean","description":"Whether finalization is pending (changelog computation in progress)"},"message":{"type":"string","description":"Message explaining what happened"}},"required":["updated"]}}},"paths":{"/sfp/api/release-candidates/release-event":{"post":{"operationId":"ReleaseCandidatesController_handleReleaseEvent","summary":"Notify release candidate of a deployment event","description":"Called when a release is deployed to an environment. This endpoint automatically updates\n        the release candidate status based on the environment category and deployment status:\n        - Only successful deployments (Success) trigger status progression\n        - Any successful deployment → status becomes 'in_progress' (if currently pending)\n        - Auto-finalization occurs only when deployed to ALL release category environments for the domain\n          (if autoReleaseFinalization is enabled in project settings)","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseEventDto"}}}},"responses":{"200":{"description":"Release event processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseEventResponseDto"}}}},"403":{"description":"Forbidden - Requires role: member, owner, application"},"404":{"description":"Release candidate or environment not found"}},"tags":["Release Candidates"]}}}}
```

## Get rolling analysis from baseline to latest candidate

> 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).

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}},"schemas":{"RollingAnalysisDto":{"type":"object","properties":{"repository":{"type":"string","description":"Repository identifier"},"domain":{"type":"string","description":"Domain name"},"baseline":{"description":"Baseline release information","allOf":[{"$ref":"#/components/schemas/BaselineReleaseDto"}]},"orchestrationOrder":{"description":"Environment orchestration order","type":"array","items":{"type":"string"}},"currentEnvironmentStates":{"type":"object","description":"Current state of each environment","additionalProperties":{"type":"object","properties":{"currentRelease":{"type":"string","nullable":true},"packages":{"type":"object","additionalProperties":{"type":"string"}}}}},"candidates":{"description":"All candidates from baseline to latest (deprecated: use candidatesByBranch for branch-grouped data)","deprecated":true,"type":"array","items":{"$ref":"#/components/schemas/SimplifiedCandidateDto"}},"candidatesByBranch":{"description":"Candidates grouped by branch","allOf":[{"$ref":"#/components/schemas/BranchGroupedCandidatesDto"}]},"summary":{"description":"Comprehensive analysis summary","allOf":[{"$ref":"#/components/schemas/RollingAnalysisSummaryDto"}]},"analyzedAt":{"type":"string","description":"Analysis timestamp"}},"required":["repository","domain","baseline","orchestrationOrder","currentEnvironmentStates","candidates","candidatesByBranch","summary","analyzedAt"]},"BaselineReleaseDto":{"type":"object","properties":{"releaseName":{"type":"string","description":"Release name"},"createdAt":{"type":"string","description":"When the baseline release candidate was created"},"completedAt":{"type":"string","description":"When the release was completed/deployed"},"deployedEnvironments":{"description":"Environments where this release is fully deployed","type":"array","items":{"type":"string"}},"packages":{"type":"object","description":"Package versions in this release","additionalProperties":{"type":"string"}},"isDefaultBaseline":{"type":"boolean","description":"Whether this baseline was synthesized from default package baselines (no completed release exists)"},"branch":{"type":"string","description":"Git branch the baseline release candidate was created on (if known)"}},"required":["releaseName","createdAt","completedAt","deployedEnvironments","packages"]},"SimplifiedCandidateDto":{"type":"object","properties":{"id":{"type":"string","description":"Candidate ID"},"releaseName":{"type":"string","description":"Release name"},"branch":{"type":"string","description":"Git branch"},"commitSha":{"type":"string","description":"Git commit SHA"},"createdAt":{"type":"string","description":"Creation timestamp"},"incrementalChanges":{"description":"Changes from previous candidate","allOf":[{"$ref":"#/components/schemas/IncrementalChangesDto"}]},"cumulativeChanges":{"description":"Total changes from baseline","allOf":[{"$ref":"#/components/schemas/CumulativeChangesDto"}]}},"required":["id","releaseName","commitSha","createdAt","incrementalChanges","cumulativeChanges"]},"IncrementalChangesDto":{"type":"object","properties":{"packages":{"description":"Package changes","allOf":[{"$ref":"#/components/schemas/PackageChangesDto"}]},"summary":{"type":"object","description":"Summary metrics","properties":{"totalPackageChanges":{"type":"number"},"totalCommits":{"type":"number"},"totalWorkItems":{"type":"number"}}}},"required":["packages","summary"]},"PackageChangesDto":{"type":"object","properties":{"added":{"type":"array","description":"Added packages","items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}}}},"updated":{"type":"array","description":"Updated packages","items":{"type":"object","properties":{"name":{"type":"string"},"fromVersion":{"type":"string"},"toVersion":{"type":"string"}}}},"removed":{"type":"array","description":"Removed packages","items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}}}}},"required":["added","updated","removed"]},"CumulativeChangesDto":{"type":"object","properties":{"packages":{"description":"Package changes","allOf":[{"$ref":"#/components/schemas/PackageChangesDto"}]},"summary":{"type":"object","description":"Summary metrics","properties":{"totalPackageChanges":{"type":"number"},"totalCommits":{"type":"number"},"totalWorkItems":{"type":"number"}}},"cumulativeSummary":{"type":"object","description":"Additional cumulative metrics","properties":{"estimatedDeploymentTime":{"type":"number","description":"Estimated time in minutes"}}}},"required":["packages","summary","cumulativeSummary"]},"BranchGroupedCandidatesDto":{"type":"object","properties":{"byBranch":{"type":"object","description":"Candidates grouped by branch","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/SimplifiedCandidateDto"}}},"all":{"description":"Flat list of all candidates (for backward compatibility)","type":"array","items":{"$ref":"#/components/schemas/SimplifiedCandidateDto"}}},"required":["byBranch","all"]},"RollingAnalysisSummaryDto":{"type":"object","properties":{"deploymentPipeline":{"description":"Deployment pipeline state","allOf":[{"$ref":"#/components/schemas/DeploymentPipelineDto"}]},"progressMetrics":{"description":"Progress tracking metrics","allOf":[{"$ref":"#/components/schemas/ProgressMetricsDto"}]},"baselineToLatestSummary":{"description":"Summary from baseline to latest","allOf":[{"$ref":"#/components/schemas/BaselineToLatestSummaryDto"}]},"branchAnalysis":{"description":"Branch analysis if multiple branches involved","allOf":[{"$ref":"#/components/schemas/BranchAnalysisDto"}]}},"required":["deploymentPipeline","progressMetrics","baselineToLatestSummary"]},"DeploymentPipelineDto":{"type":"object","properties":{"environmentStatus":{"description":"Status of each environment","type":"array","items":{"$ref":"#/components/schemas/EnvironmentPipelineStatusDto"}},"blockers":{"description":"Identified blockers","type":"array","items":{"$ref":"#/components/schemas/PipelineBlockerDto"}}},"required":["environmentStatus"]},"EnvironmentPipelineStatusDto":{"type":"object","properties":{"environment":{"type":"string","description":"Environment name"},"currentRelease":{"type":"string","description":"Currently deployed release"},"candidatesInQueue":{"description":"Release candidates queued for this environment","type":"array","items":{"type":"string"}}},"required":["environment","candidatesInQueue"]},"PipelineBlockerDto":{"type":"object","properties":{"environment":{"type":"string","description":"Blocked environment"},"blockedCandidate":{"type":"string","description":"Blocked candidate release name"},"reason":{"type":"string","description":"Reason for blockage"}},"required":["environment","blockedCandidate","reason"]},"ProgressMetricsDto":{"type":"object","properties":{"candidatesFullyDeployed":{"type":"number","description":"Number of fully deployed candidates"},"candidatesInProgress":{"type":"number","description":"Number of candidates in progress"},"candidatesPending":{"type":"number","description":"Number of pending candidates"},"estimatedTimeToFullDeployment":{"type":"number","description":"Estimated time to deploy all candidates (minutes)"}},"required":["candidatesFullyDeployed","candidatesInProgress","candidatesPending"]},"BaselineToLatestSummaryDto":{"type":"object","properties":{"totalCandidates":{"type":"number","description":"Total number of candidates"},"totalUniqueWorkItems":{"type":"number","description":"Total unique work items"},"totalUniqueCommits":{"type":"number","description":"Total unique commits"},"packageProgressions":{"description":"How packages evolved through candidates","type":"array","items":{"$ref":"#/components/schemas/PackageProgressionDto"}}},"required":["totalCandidates","totalUniqueWorkItems","totalUniqueCommits","packageProgressions"]},"PackageProgressionDto":{"type":"object","properties":{"name":{"type":"string","description":"Package name"},"journey":{"type":"array","description":"Version journey through candidates","items":{"type":"object","properties":{"version":{"type":"string"},"candidateIndex":{"type":"number","description":"-1 for baseline"}}}}},"required":["name","journey"]},"BranchAnalysisDto":{"type":"object","properties":{"mainBranch":{"type":"string","description":"Main branch name"},"featureBranches":{"type":"array","description":"Feature branch analysis","items":{"type":"object","properties":{"branch":{"type":"string"},"candidateCount":{"type":"number"},"firstCandidate":{"type":"string"},"lastCandidate":{"type":"string"}}}}},"required":["mainBranch","featureBranches"]}}},"paths":{"/sfp/api/release-candidates/rolling-analysis/{repository}/{domain}":{"get":{"operationId":"ReleaseCandidatesController_getRollingAnalysis","summary":"Get rolling analysis from baseline to latest candidate","description":"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).","parameters":[{"name":"repository","required":true,"in":"path","description":"Repository identifier (e.g., flxbl-io/sf-core)","schema":{"type":"string"}},{"name":"domain","required":true,"in":"path","description":"Domain name (e.g., core, auth, origination)","schema":{"type":"string"}},{"name":"branch","required":false,"in":"query","description":"Filter by branch (e.g., main, develop)","schema":{"type":"string"}},{"name":"includeChangelog","required":false,"in":"query","description":"Include package changelogs (default: false)","schema":{"type":"boolean"}},{"name":"force","required":false,"in":"query","description":"Bypass cache and fetch fresh data (default: false)","schema":{"type":"boolean"}},{"name":"X-Cache-Key","in":"header","description":"Cache key used for this request","required":false,"schema":{"type":"string"}},{"name":"X-Cache-Status","in":"header","description":"HIT if served from cache, MISS if freshly computed","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Rolling analysis data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RollingAnalysisDto"}}}},"403":{"description":"Forbidden - Requires role: member, owner, application"}},"tags":["Release Candidates"]}}}}
```

## Get environment-specific progression analysis

> Analyzes progression for a specific environment including pending candidates

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}}},"paths":{"/sfp/api/release-candidates/rolling-analysis/{repository}/{domain}/environment/{environment}":{"get":{"operationId":"ReleaseCandidatesController_getEnvironmentProgression","summary":"Get environment-specific progression analysis","description":"Analyzes progression for a specific environment including pending candidates","parameters":[{"name":"repository","required":true,"in":"path","description":"Repository identifier (e.g., myorg/myrepo)","schema":{"type":"string"}},{"name":"domain","required":true,"in":"path","description":"Domain name","schema":{"type":"string"}},{"name":"environment","required":true,"in":"path","description":"Environment name","schema":{"type":"string"}},{"name":"includeChangelog","required":false,"in":"query","description":"Include package changelogs","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Environment progression analysis"},"403":{"description":"Forbidden - Requires role: member, owner, application"}},"tags":["Release Candidates"]}}}}
```

## Assess deployment risk for next candidate

> Provides risk assessment for the next deployment to a specific environment

```json
{"openapi":"3.0.0","info":{"title":"sfp server","version":"51.9.0"},"security":[{"access-token":[]}],"components":{"securitySchemes":{"access-token":{"scheme":"bearer","bearerFormat":"JWT","type":"http","in":"header"}}},"paths":{"/sfp/api/release-candidates/rolling-analysis/{repository}/{domain}/environment/{environment}/risk":{"get":{"operationId":"ReleaseCandidatesController_assessDeploymentRisk","summary":"Assess deployment risk for next candidate","description":"Provides risk assessment for the next deployment to a specific environment","parameters":[{"name":"repository","required":true,"in":"path","description":"Repository identifier (e.g., myorg/myrepo)","schema":{"type":"string"}},{"name":"domain","required":true,"in":"path","description":"Domain name","schema":{"type":"string"}},{"name":"environment","required":true,"in":"path","description":"Environment name","schema":{"type":"string"}}],"responses":{"200":{"description":"Deployment risk assessment"},"403":{"description":"Forbidden - Requires role: member, owner, application"}},"tags":["Release Candidates"]}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.flxbl.io/flxbl/sfp-server/api-reference/release-candidates.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
