Projects

sfp server API reference for Projects: 9 endpoints.

GET/sfp/api/projects/config/manual-steps

Authorization

access-token
AuthorizationBearer <token>

In: header

Query Parameters

repositoryIdentifier*string
environment*string

Response Body

curl -X GET "https://example.com/sfp/api/projects/config/manual-steps?repositoryIdentifier=string&environment=string"
Empty
PUT/sfp/api/projects/config/manual-steps

Authorization

access-token
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

curl -X PUT "https://example.com/sfp/api/projects/config/manual-steps" \  -H "Content-Type: application/json" \  -d '{    "repositoryIdentifier": "string",    "environment": "string",    "manualSteps": {}  }'
Empty
PUT/sfp/api/projects/config/build-on-merge

Replaces all branch-scoped domain allow-list rules for the build-on-merge flow.

When build-on-merge runs for a branch, only the domains allow-listed for the first matching branchPattern are built; every other impacted domain is skipped. No matching rule (or an empty list) imposes no restriction.

Branch patterns support wildcards: main, release/*, *. Domains are matched by exact, case-insensitive name (a release config's releaseName).

Authorization

access-token
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

curl -X PUT "https://example.com/sfp/api/projects/config/build-on-merge" \  -H "Content-Type: application/json" \  -d '{    "repositoryIdentifier": "flxbl-io/sf-core",    "domainRules": [      {        "branchPattern": "main",        "allowedDomains": [          "core",          "sales"        ]      }    ]  }'
Empty
PUT/sfp/api/projects/config/changesets

Replaces the project-scoped changeset selection mode and template list.

Authorization

access-token
AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

curl -X PUT "https://example.com/sfp/api/projects/config/changesets" \  -H "Content-Type: application/json" \  -d '{    "selectionMode": "any",    "repositoryIdentifier": "string"  }'
Empty
POST/sfp/api/projects

Creates a new project entry for repository onboarding. Fails if the project already exists to prevent accidental updates through POST requests. Use this endpoint to register repositories with the SFP server for future operations. Only users with the "owner" role can create projects.

Authorization

access-token
AuthorizationBearer <token>

In: header

Request Body

application/json

Project details

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

curl -X POST "https://example.com/sfp/api/projects" \  -H "Content-Type: application/json" \  -d '{    "identifier": "flxbl-io/sf-core",    "remoteUrl": "https://github.com/flxbl-io/sf-core"  }'
{  "identifier": "flxbl-io/sf-core",  "remoteUrl": "https://github.com/flxbl-io/sf-core",  "platform": "github",  "createdAt": "2025-06-21T10:00:00.000Z",  "updatedAt": "2025-06-21T10:00:00.000Z",  "version": 1,  "configuration": {    "displayName": "SFP Pro",    "description": "Enterprise Salesforce build system",    "branches": [      "main",      "develop"    ],    "devHubs": [      "devhub1@example.com",      "devhub2@example.com"    ],    "autoReleaseFinalization": true,    "workItems": {      "provider": "jira",      "jiraProjects": [        "DP",        "PROJ"      ],      "baseUrl": "https://company.atlassian.net/browse"    },    "metricsAlertConfig": {      "validation.successRate": {        "warning": 0.85,        "alert": 0.7      },      "build.avgCreationTime": {        "warning": 15,        "alert": 30      }    },    "settings": {      "buildTimeout": 3600,      "parallelBuilds": 4    }  },  "integrations": [    {      "id": "uuid",      "provider": "ai_anthropic",      "authType": "api_key",      "created_at": "2025-01-01T00:00:00.000Z"    }  ]}
GET/sfp/api/projects

Returns a list of all projects that have been onboarded to the system. Projects are returned in no particular order. This endpoint is useful for discovering available projects before performing operations on them.

Authorization

access-token
AuthorizationBearer <token>

In: header

Response Body

application/json

curl -X GET "https://example.com/sfp/api/projects"
[  {    "identifier": "flxbl-io/sf-core",    "remoteUrl": "https://github.com/flxbl-io/sf-core",    "platform": "github",    "createdAt": "2025-06-21T10:00:00.000Z",    "updatedAt": "2025-06-21T10:00:00.000Z",    "version": 1,    "configuration": {      "displayName": "SFP Pro",      "description": "Enterprise Salesforce build system",      "branches": [        "main",        "develop"      ],      "devHubs": [        "devhub1@example.com",        "devhub2@example.com"      ],      "autoReleaseFinalization": true,      "workItems": {        "provider": "jira",        "jiraProjects": [          "DP",          "PROJ"        ],        "baseUrl": "https://company.atlassian.net/browse"      },      "metricsAlertConfig": {        "validation.successRate": {          "warning": 0.85,          "alert": 0.7        },        "build.avgCreationTime": {          "warning": 15,          "alert": 30        }      },      "settings": {        "buildTimeout": 3600,        "parallelBuilds": 4      }    },    "integrations": [      {        "id": "uuid",        "provider": "ai_anthropic",        "authType": "api_key",        "created_at": "2025-01-01T00:00:00.000Z"      }    ]  }]
GET/sfp/api/projects/{identifier}

Retrieves a project by its repository identifier (e.g., "org/repo"). The identifier must match exactly what was used during project creation. This endpoint supports identifiers with slashes for GitHub-style repositories.

Authorization

access-token
AuthorizationBearer <token>

In: header

Path Parameters

identifier*string

Repository identifier (e.g., "org/repo")

Response Body

application/json

application/json

curl -X GET "https://example.com/sfp/api/projects/flxbl-io/sf-core"
{  "identifier": "flxbl-io/sf-core",  "remoteUrl": "https://github.com/flxbl-io/sf-core",  "platform": "github",  "createdAt": "2025-06-21T10:00:00.000Z",  "updatedAt": "2025-06-21T10:00:00.000Z",  "version": 1,  "configuration": {    "displayName": "SFP Pro",    "description": "Enterprise Salesforce build system",    "branches": [      "main",      "develop"    ],    "devHubs": [      "devhub1@example.com",      "devhub2@example.com"    ],    "autoReleaseFinalization": true,    "workItems": {      "provider": "jira",      "jiraProjects": [        "DP",        "PROJ"      ],      "baseUrl": "https://company.atlassian.net/browse"    },    "metricsAlertConfig": {      "validation.successRate": {        "warning": 0.85,        "alert": 0.7      },      "build.avgCreationTime": {        "warning": 15,        "alert": 30      }    },    "settings": {      "buildTimeout": 3600,      "parallelBuilds": 4    }  },  "integrations": [    {      "id": "uuid",      "provider": "ai_anthropic",      "authType": "api_key",      "created_at": "2025-01-01T00:00:00.000Z"    }  ]}
PATCH/sfp/api/projects/{identifier}

Updates an existing project's configuration. Supports partial updates via PATCH semantics. Only owners can update projects. Includes optimistic concurrency control through version checking to prevent concurrent update conflicts.

Renaming: Pass identifier in the body to rename the project. The old identifier is deleted and a new one is created with all existing data.

Authorization

access-token
AuthorizationBearer <token>

In: header

Path Parameters

identifier*string

Repository identifier (e.g., "org/repo")

Request Body

application/json

Fields to update

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X PATCH "https://example.com/sfp/api/projects/flxbl-io/sf-core" \  -H "Content-Type: application/json" \  -d '{    "remoteUrl": "https://github.com/flxbl-io/sf-core-renamed"  }'
{  "identifier": "flxbl-io/sf-core",  "remoteUrl": "https://github.com/flxbl-io/sf-core",  "platform": "github",  "createdAt": "2025-06-21T10:00:00.000Z",  "updatedAt": "2025-06-21T10:00:00.000Z",  "version": 1,  "configuration": {    "displayName": "SFP Pro",    "description": "Enterprise Salesforce build system",    "branches": [      "main",      "develop"    ],    "devHubs": [      "devhub1@example.com",      "devhub2@example.com"    ],    "autoReleaseFinalization": true,    "workItems": {      "provider": "jira",      "jiraProjects": [        "DP",        "PROJ"      ],      "baseUrl": "https://company.atlassian.net/browse"    },    "metricsAlertConfig": {      "validation.successRate": {        "warning": 0.85,        "alert": 0.7      },      "build.avgCreationTime": {        "warning": 15,        "alert": 30      }    },    "settings": {      "buildTimeout": 3600,      "parallelBuilds": 4    }  },  "integrations": [    {      "id": "uuid",      "provider": "ai_anthropic",      "authType": "api_key",      "created_at": "2025-01-01T00:00:00.000Z"    }  ]}
DELETE/sfp/api/projects/{identifier}

Permanently deletes a project and its stored configuration. Only owners can delete projects. This does not delete external resources (webhooks, environments, etc.).

Authorization

access-token
AuthorizationBearer <token>

In: header

Path Parameters

identifier*string

Repository identifier (e.g., "org/repo")

Response Body

application/json

curl -X DELETE "https://example.com/sfp/api/projects/flxbl-io/sf-core"
Empty