Integrations
sfp server API reference for Integrations: 15 endpoints.
/sfp/api/integrationsSecurely store credentials for external integrations. Credentials are encrypted at rest using AES-256.
Authentication: Requires Owner role. Application tokens are not permitted for credential creation.
Scope options:
- Global (
isGlobal: true): Credentials available to all projects. Use for shared services like a company-wide Jira. - Project-scoped (
projects: [...]): Credentials only for specific repositories. Projects must be registered first viaPOST /projects.
Common setups:
- Jira:
provider: "jira", authType: "basic_auth", credentials: { base_url, username, api_token } - GitHub PAT:
provider: "github", authType: "pat", credentials: { token }
See full guide: https://docs.flxbl.io/sfp/api-reference/integrations
Authorization
access-token In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
curl -X POST "https://example.com/sfp/api/integrations" \ -H "Content-Type: application/json" \ -d '{ "provider": "github", "authType": "pat", "credentials": { "token": "ghp_xxxx" } }'/sfp/api/integrationsList all configured integrations. Returns integration metadata without credentials.
Authentication: Requires Owner role. This endpoint is for administrative purposes to view and manage integrations.
Authorization
access-token In: header
Query Parameters
Filter by provider: github or jira
Value in
- "github"
- "azuredevops"
- "jfrog"
- "gitlab"
- "npm"
- "github_packages"
- "jira"
- "azure-devops"
- "servicenow"
- "ai_anthropic"
- "ai_openai"
- "ai_google"
- "ai_github_copilot"
- "ai_amazon_bedrock"
- "ai_google_vertex"
- "ai_cloudflare_gateway"
- "ai_anthropic_platform"
- "datadog"
- "newrelic"
- "splunk"
- "browserbase"
- "slack"
- "teams"
Response Body
curl -X GET "https://example.com/sfp/api/integrations"/sfp/api/integrations/defaultsList all integrations marked as system defaults. One default per provider category (AI providers are grouped — only one default across all AI providers). Default integrations are used as fallback when a project has no project-specific integration.
Authentication: Requires Owner role.
Authorization
access-token In: header
Response Body
curl -X GET "https://example.com/sfp/api/integrations/defaults"/sfp/api/integrations/credentialsFetch integrations matching the filter criteria. All access is logged for audit purposes.
Authentication: Requires Owner role or Application token. Application tokens must specify a provider or project filter to prevent unscoped credential enumeration.
Secret material is returned to application tokens only (workers/CI — the machinery that consumes the credential). Human callers (Owners) receive integration METADATA only — credentials is omitted from every entry, so no stored secret ever reaches a browser or terminal session.
Authorization
access-token In: header
Query Parameters
Filter by service: github or jira
Value in
- "github"
- "azuredevops"
- "jfrog"
- "gitlab"
- "npm"
- "github_packages"
- "jira"
- "azure-devops"
- "servicenow"
- "ai_anthropic"
- "ai_openai"
- "ai_google"
- "ai_github_copilot"
- "ai_amazon_bedrock"
- "ai_google_vertex"
- "ai_cloudflare_gateway"
- "ai_anthropic_platform"
- "datadog"
- "newrelic"
- "splunk"
- "browserbase"
- "slack"
- "teams"
Filter by registered project identifier (e.g., flxbl-io/sf-core). List projects via GET /projects.
Response Body
curl -X GET "https://example.com/sfp/api/integrations/credentials?feature=string&workItemRef=string"/sfp/api/integrations/ai/modelsThe manually-maintained APPROVED model catalog, per AI provider, in each provider's own model-id format. Newest first — the first entry is the provider's automatic default. Feeds the AI integration card's model chooser.
Authentication: Requires Owner role (same audience as the integration forms).
Authorization
access-token In: header
Response Body
curl -X GET "https://example.com/sfp/api/integrations/ai/models"/sfp/api/integrations/ai/cherry-to-policyReturns a non-secret, deterministic policy result for the cherry-to CLI. Credential material is never included; application callers retrieve the selected integration through the audited credentials endpoint.
Authorization
access-token In: header
Query Parameters
Registered repository identifier
Target branch to evaluate against cherryTo.targetBranches
Response Body
application/json
curl -X GET "https://example.com/sfp/api/integrations/ai/cherry-to-policy?project=string"{ "enabled": true, "targetAllowed": true, "status": "available", "reason": "cherry_to_not_configured", "integrationProvider": "ai_anthropic", "runtimeProvider": "anthropic", "model": "string", "integrationId": "string"}/sfp/api/integrations/{id}Update credentials, config, or default status of an existing integration. Only provided fields are updated — omitted fields remain unchanged.
Authentication: Requires Owner role.
Updatable fields:
credentials: Credential fields to update — merged onto the stored credentials. Omitted keys and blank strings keep their stored value; an explicitnullclears a field.config: Provider-specific configurationisDefault: Toggle default status for this provider category
Immutable fields (cannot be changed after creation):
providerauthTypeprojects/isGlobal
Authorization
access-token In: header
Path Parameters
Integration ID (UUID)
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
curl -X PATCH "https://example.com/sfp/api/integrations/string" \ -H "Content-Type: application/json" \ -d '{}'/sfp/api/integrations/{id}Permanently delete an integration and its encrypted credentials.
Authentication: Requires Owner role. This action cannot be undone.
Effects:
- Removes the integration configuration
- Deletes encrypted credentials from secure storage
- Removes integration reference from associated projects
- Logs deletion in audit trail
Authorization
access-token In: header
Path Parameters
Integration ID (UUID)
Response Body
curl -X DELETE "https://example.com/sfp/api/integrations/string"/sfp/api/integrations/servicenow/release-gateInternal worker-only endpoint: used by the request-release flow to decide whether a release must be gated by a ServiceNow change request, and to retrieve the connection + change-request text (including the candidate baseline changelog). Restricted to the internal worker (application token).
Authorization
access-token In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
curl -X POST "https://example.com/sfp/api/integrations/servicenow/release-gate" \ -H "Content-Type: application/json" \ -d '{ "repositoryIdentifier": "string", "environments": [ "string" ], "releaseCandidate": "string" }'/sfp/api/integrations/servicenow/release-gate/openInternal worker-only endpoint: resolves release-gate policy, opens/reuses the shared ServiceNow CR for the release candidate set, and registers the generic approval-gate record without returning ServiceNow credentials to the worker.
Authorization
access-token In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
curl -X POST "https://example.com/sfp/api/integrations/servicenow/release-gate/open" \ -H "Content-Type: application/json" \ -d '{ "repositoryIdentifier": "string", "environments": [ "string" ], "releaseCandidate": "string" }'/sfp/api/integrations/servicenow/release-gate/statusInternal worker-only endpoint: returns the cached ServiceNow gate decision and refreshes it from ServiceNow only when the per-gate cache is due.
Authorization
access-token In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
curl -X POST "https://example.com/sfp/api/integrations/servicenow/release-gate/status" \ -H "Content-Type: application/json" \ -d '{ "repositoryIdentifier": "string", "releaseCandidate": "string", "environment": "string", "correlationId": "string" }'/sfp/api/integrations/servicenow/release-gate/eventInternal worker-only endpoint: posted by the request-release worker when the change request is opened and when it is approved/rejected/timed out, so the gate appears in sfp_approval_audit. Does not create a pending approval. Restricted to the internal worker (application token).
Authorization
access-token In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
curl -X POST "https://example.com/sfp/api/integrations/servicenow/release-gate/event" \ -H "Content-Type: application/json" \ -d '{ "event": "requested", "repositoryIdentifier": "string", "releaseCandidate": "string", "environments": [ "string" ], "correlationId": "string" }'/sfp/api/integrations/servicenow/change-requests/testCreates a real ServiceNow change request using the project integration and the same configured field rendering as the release gate. Stored credentials are never returned.
Authorization
access-token In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
curl -X POST "https://example.com/sfp/api/integrations/servicenow/change-requests/test" \ -H "Content-Type: application/json" \ -d '{ "repositoryIdentifier": "string" }'/sfp/api/integrations/servicenow/field-catalogReturns the server-owned merge fields available to serviceNowChangeRequest.fieldTemplate.
Authorization
access-token In: header
Response Body
curl -X GET "https://example.com/sfp/api/integrations/servicenow/field-catalog"/sfp/api/integrations/platforms/healthVerifies that the source control platform (GitHub or Azure DevOps) is reachable and that credentials are valid for each registered project.
How it works
Each project registered via POST /projects declares a platform field (github or azure-devops). This endpoint resolves the credentials for each project's platform and makes a lightweight API call to confirm access.
Credential resolution
| Platform | What is checked |
|---|---|
| GitHub | Uses the GitHub App credentials (user-configured integration first, falls back to built-in App from server environment). Calls GET /repos/{owner}/{repo} to confirm repository access. |
| Azure DevOps | Uses the Service Principal credentials from the configured integration. Calls GET /_apis/connectiondata to confirm API connectivity. |
Modes
| Parameter | Behavior |
|---|---|
No project | Lists all registered projects and checks each one. Useful for a full integration health overview. |
project=flxbl-io/sf-core | Checks only the specified project. Useful for verifying a single onboarding. |
Response statuses
| Overall status | Meaning |
|---|---|
healthy | All projects have working platform integrations |
degraded | Some projects are healthy, others are not |
unhealthy | No project has a working platform integration |
Common failure causes
- GitHub: App not installed on the organization, or repository is private and not accessible to the App
- Azure DevOps: Service Principal not registered via
POST /integrations, invalid client credentials, or organization URL is wrong
Authentication
Requires any authenticated role (Owner, Member, or Application token).
Authorization
access-token In: header
Query Parameters
Project identifier to check (e.g., flxbl-io/sf-core for GitHub, org/project/repo for Azure DevOps). Omit to check all registered projects.
Response Body
application/json
curl -X GET "https://example.com/sfp/api/integrations/platforms/health"{ "status": "healthy", "timestamp": "2026-02-20T08:35:53.050Z", "platforms": [ { "provider": "github", "project": "flxbl-io/sf-core", "status": "healthy", "message": "GitHub App has access to flxbl-io/sf-core", "latency": 482 } ]}