Pools

Get all pool configurations

get

Retrieve all pool configurations (both sandbox and scratch org pools), optionally filtered by repository and/or pool type

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Query parameters
repositoryIdentifierstringOptional

Repository identifier in format org/repo

Example: flxbl-io/sf-core
poolTypestring · enumOptional

Filter by pool type (SANDBOX or SCRATCH_ORG)

Possible values:
hasAssignmentRulesbooleanOptional

Filter by assignment rules: true = only pools with rules, false = only pools without rules (no branchPattern or domainPatterns)

Responses
chevron-right
200

Pool configurations retrieved successfully

application/json
repositoryIdentifierstringRequired

Repository identifier in format org/repo

Example: flxbl-io/sf-core
namestringRequired

User-friendly display name for the pool

Example: Development Pool
poolTagstringRequired

Unique machine-readable tag for this pool

Example: dev-pool
branchPatternstringOptional

Optional Git branch pattern this pool serves

Example: feature/*
devHubUsernamestringRequired

Registered Dev Hub alias/username

Example: [email protected]
sandboxDefinitionobjectOptional

Sandbox definition configuration. Either specify licenseType to create from production OR sourceSandboxName to clone an existing sandbox. Key fields: sandboxName (array of prefixes), licenseType (Developer/Developer_Pro/Partial/Full), sourceSandboxName (for cloning), autoActivate (default true)

Example: {"autoActivate":true,"licenseType":"Developer","description":"Dev sandbox for feature development","sandboxName":["DEV","QA"]}
sourceSandboxNamestringOptionalDeprecated

Source sandbox name for cloning. Use this to clone from an existing sandbox instead of creating from production. Either use sandboxDefinition.sourceSandboxName or this field (deprecated)

Example: TEMPLATE_SB
daysToKeepUnassignedAvailablenumberRequired

TTL in days for available sandboxes before refresh/delete

Example: 30
isActivebooleanRequired

Whether this pool configuration is active for monitoring

Example: true
additionalConfigobjectOptional

Additional configuration for user activation and data seeding

lastMonitoredAtstringOptional

Timestamp when this pool was last monitored

Example: 2025-01-01T12:00:00Z
currentProvisionRunIdstringOptional

Unique identifier for the current provision run

Example: run-123456
currentMonitorRunIdstringOptional

Unique identifier for the current monitor run

Example: mon-123456
defaultExpirationHoursnumberOptional

Default expiration hours for assigned sandboxes

Example: 168
extendedExpirationHoursnumberOptional

Extended expiration hours for assigned sandboxes

Example: 336
averageOrgCreationTimenumberOptional

Average time in minutes it takes to create a sandbox

Example: 45
lastProvisionedAtstringOptional

Timestamp when the last provision action was triggered

Example: 2025-01-01T12:00:00Z
minAvailableInstancesnumberRequired

Target number of AVAILABLE sandboxes

Example: 3
maxTotalInstancesnumberRequired

Hard cap for total sandboxes in this pool

Example: 10
refreshOrDeleteStrategystring · enumRequired

Strategy for handling expired sandboxes. DELETE_EXPIRED (recommended) - automatically delete expired sandboxes. AUTO_REFRESH_EXPIRED - automatically refresh expired sandboxes (uses more resources). FLAG_EXPIRED - mark expired sandboxes for manual refresh. NOTIFY_ONLY - only notify about expired sandboxes without taking action

Example: DELETE_EXPIREDPossible values:
refreshStrategystring · enumOptional

Refresh strategy for sandboxes

Example: ALWAYSPossible values:
refreshIntervalHoursnumberOptional

Interval in hours between sandbox refreshes (for STAGGER strategy)

Example: 24
minActiveInstancesnumberOptional

Minimum number of active instances to maintain

Example: 3
maxActiveInstancesnumberOptional

Maximum number of active instances allowed

Example: 10
minRetentionDaysnumberOptional

Minimum retention days for sandboxes

Example: 7
returnToPoolOnUnassignbooleanOptional

When true, unassigned sandboxes return to pool as AVAILABLE with reset timer. When false (default), they are marked as EXPIRED.

Example: false
metadataobjectOptional

Additional metadata for the pool configuration for custom filtering and tagging

Example: {"environment":"dev","team":"platform","region":"us-west"}
monitoringCronPatternstringOptional

Cron pattern for monitoring schedule (5-field standard cron)

Example: */30 * * * *
poolStatusstring · enumOptional

Pool lifecycle status. ACTIVE = normal operation, DELETING = cleanup in progress

Default: ACTIVEPossible values:
cleanupJobIdstringOptional

Windmill job ID for the cleanup flow when poolStatus is DELETING

get
/sfp/api/pools/configs

Create a new pool configuration

post

Create a new configuration for a sandbox or scratch org pool. Use poolType=SCRATCH_ORG for scratch org pools.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Query parameters
poolTypestring · enumOptional

Pool type: SANDBOX (default) or SCRATCH_ORG

Possible values:
Responses
post
/sfp/api/pools/configs

No content

Get a pool configuration

get

Retrieve a specific pool configuration (sandbox or scratch org) by tag and repository

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
poolTagstringRequired

The tag of the pool to retrieve

Query parameters
repositoryIdentifierstringRequired

Repository identifier in format org/repo

Example: flxbl-io/sf-core
poolTypestring · enumOptional

Pool type hint for faster lookup (SANDBOX or SCRATCH_ORG). If not specified, both types are checked

Possible values:
Responses
chevron-right
200

Pool configuration retrieved successfully

application/json
repositoryIdentifierstringRequired

Repository identifier in format org/repo

Example: flxbl-io/sf-core
namestringRequired

User-friendly display name for the pool

Example: Development Pool
poolTagstringRequired

Unique machine-readable tag for this pool

Example: dev-pool
branchPatternstringOptional

Optional Git branch pattern this pool serves

Example: feature/*
devHubUsernamestringRequired

Registered Dev Hub alias/username

Example: [email protected]
sandboxDefinitionobjectOptional

Sandbox definition configuration. Either specify licenseType to create from production OR sourceSandboxName to clone an existing sandbox. Key fields: sandboxName (array of prefixes), licenseType (Developer/Developer_Pro/Partial/Full), sourceSandboxName (for cloning), autoActivate (default true)

Example: {"autoActivate":true,"licenseType":"Developer","description":"Dev sandbox for feature development","sandboxName":["DEV","QA"]}
sourceSandboxNamestringOptionalDeprecated

Source sandbox name for cloning. Use this to clone from an existing sandbox instead of creating from production. Either use sandboxDefinition.sourceSandboxName or this field (deprecated)

Example: TEMPLATE_SB
daysToKeepUnassignedAvailablenumberRequired

TTL in days for available sandboxes before refresh/delete

Example: 30
isActivebooleanRequired

Whether this pool configuration is active for monitoring

Example: true
additionalConfigobjectOptional

Additional configuration for user activation and data seeding

lastMonitoredAtstringOptional

Timestamp when this pool was last monitored

Example: 2025-01-01T12:00:00Z
currentProvisionRunIdstringOptional

Unique identifier for the current provision run

Example: run-123456
currentMonitorRunIdstringOptional

Unique identifier for the current monitor run

Example: mon-123456
defaultExpirationHoursnumberOptional

Default expiration hours for assigned sandboxes

Example: 168
extendedExpirationHoursnumberOptional

Extended expiration hours for assigned sandboxes

Example: 336
averageOrgCreationTimenumberOptional

Average time in minutes it takes to create a sandbox

Example: 45
lastProvisionedAtstringOptional

Timestamp when the last provision action was triggered

Example: 2025-01-01T12:00:00Z
minAvailableInstancesnumberRequired

Target number of AVAILABLE sandboxes

Example: 3
maxTotalInstancesnumberRequired

Hard cap for total sandboxes in this pool

Example: 10
refreshOrDeleteStrategystring · enumRequired

Strategy for handling expired sandboxes. DELETE_EXPIRED (recommended) - automatically delete expired sandboxes. AUTO_REFRESH_EXPIRED - automatically refresh expired sandboxes (uses more resources). FLAG_EXPIRED - mark expired sandboxes for manual refresh. NOTIFY_ONLY - only notify about expired sandboxes without taking action

Example: DELETE_EXPIREDPossible values:
refreshStrategystring · enumOptional

Refresh strategy for sandboxes

Example: ALWAYSPossible values:
refreshIntervalHoursnumberOptional

Interval in hours between sandbox refreshes (for STAGGER strategy)

Example: 24
minActiveInstancesnumberOptional

Minimum number of active instances to maintain

Example: 3
maxActiveInstancesnumberOptional

Maximum number of active instances allowed

Example: 10
minRetentionDaysnumberOptional

Minimum retention days for sandboxes

Example: 7
returnToPoolOnUnassignbooleanOptional

When true, unassigned sandboxes return to pool as AVAILABLE with reset timer. When false (default), they are marked as EXPIRED.

Example: false
metadataobjectOptional

Additional metadata for the pool configuration for custom filtering and tagging

Example: {"environment":"dev","team":"platform","region":"us-west"}
monitoringCronPatternstringOptional

Cron pattern for monitoring schedule (5-field standard cron)

Example: */30 * * * *
poolStatusstring · enumOptional

Pool lifecycle status. ACTIVE = normal operation, DELETING = cleanup in progress

Default: ACTIVEPossible values:
cleanupJobIdstringOptional

Windmill job ID for the cleanup flow when poolStatus is DELETING

get
/sfp/api/pools/configs/{poolTag}

Delete a pool configuration

delete

Delete an existing pool configuration. For sandbox pools, deletes the configuration and all sandboxes. For scratch org pools, deletes all scratch orgs in the pool from Salesforce.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
poolTagstringRequired

The tag of the pool to delete

Query parameters
repositoryIdentifierstringRequired

Repository identifier in format org/repo

Example: flxbl-io/sf-core
Responses
delete
/sfp/api/pools/configs/{poolTag}

No content

Update a pool configuration

patch

Update an existing configuration for a sandbox or scratch org pool

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
poolTagstringRequired

The tag of the pool to update

Query parameters
repositoryIdentifierstringRequired

Repository identifier in format org/repo

Example: flxbl-io/sf-core
poolTypestring · enumOptional

Pool type hint for routing (SANDBOX or SCRATCH_ORG)

Possible values:
Responses
patch
/sfp/api/pools/configs/{poolTag}

No content

Get pool status

get

Retrieve current status of pools (sandbox or scratch org) and their instances. Supports filtering by status, pool type, and entity assignment.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Query parameters
repositoryIdentifierstringOptional

Repository identifier in format org/repo

Example: flxbl-io/sf-core
poolTagstringOptional

Optional. If provided, returns detailed status for the specified pool.

instanceStatusstring · enumOptional

Optional. Filter instances by status (used with poolTag).

Possible values:
assignmentIdstringOptional

Optional. Filter by assignment UUID (sandbox pools only).

poolTypestring · enumOptional

Optional. Pool type hint for faster lookup (SANDBOX or SCRATCH_ORG).

Possible values:
refreshbooleanOptional

Optional. Force refresh of cached data for scratch org pools.

Responses
get
/sfp/api/pools/status

No content

Cleanup zombie sandbox instances

post

Identify and optionally cleanup sandbox instances that exist in the database but not in Salesforce

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Body
devHubUsernamestringRequired

DevHub username to check for zombies

Example: devhub_main_org
dryRunbooleanOptional

If true, only identify zombies without deleting them

Example: true
Responses
post
/sfp/api/pools/cleanup-zombies

No content

Get current sandbox service mode

get

Returns whether the system is using mock or real Salesforce sandbox service. All authenticated users can view the service mode.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Responses
chevron-right
200

Current mode information

application/json
modestring · enumOptionalPossible values:
descriptionstringOptional
mockModeEnvVarstringOptional
get
/sfp/api/pools/mode

Get pool monitoring status

get

Retrieve information about all repository-specific pool monitoring jobs. All authenticated users can view monitoring job status.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Responses
chevron-right
200

Monitoring job status retrieved successfully

application/json
totalJobsnumberRequired

Total number of monitoring jobs

Example: 3
get
/sfp/api/pools/monitoring-jobs

List pool instances

get

Get a list of all instances in a specific pool (sandbox or scratch org)

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
poolTagstringRequired

Pool tag to get instances for (works with both sandbox and scratch org pools)

Example: core_dev or ci
Query parameters
repositoryIdentifierstringRequired

Repository identifier in format org/repo

Example: flxbl-io/sf-core
poolTypestring · enumOptional

Optional pool type hint for faster lookup (SANDBOX or SCRATCH_ORG). If not specified, the pool type is auto-detected

Possible values:
refreshbooleanOptional

Optional. Force refresh of cached data for scratch org pools (ignored for sandbox pools).

Responses
chevron-right
200

List of pool instances (either SandboxPoolInstance or BasePoolInstance depending on pool type)

application/json
itemsone ofOptional
get
/sfp/api/pools/{poolTag}/instances

Delete all instances in a pool

delete

Delete all org instances in a pool while keeping the pool configuration intact. Useful for draining a pool before reprovisioning.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
poolTagstringRequired

Pool tag to delete all instances from

Example: core_dev
Query parameters
repositoryIdentifierstringRequired

Repository identifier in format org/repo

Example: flxbl-io/sf-core
Responses
chevron-right
200

All instances deleted

No content

delete
/sfp/api/pools/{poolTag}/instances

No content

Provision pool instances

post

Trigger provisioning for a specific pool or all pools. For sandbox pools, triggers the orchestrator monitoring flow. For scratch org pools, triggers the Windmill provisioning flow on a long-running worker.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
poolTagstringRequired

Pool tag to target, or "all" to target all active pools

Example: core_dev
Query parameters
repositoryIdentifierstringRequired

Repository identifier in format org/repo

Example: flxbl-io/sf-core
poolTypestring · enumOptional

Optional pool type hint (SANDBOX or SCRATCH_ORG). Auto-detected if not specified.

Possible values:
Responses
post
/sfp/api/pools/{poolTag}/provision

No content

Fetch and assign sandbox from pool

post

Assign an available sandbox from the pool using a unique assignment ID. If a sandbox is already assigned to the provided assignment ID, it will be reused.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
poolTagstringRequired

Pool tag to fetch sandbox from

Example: core_dev
Query parameters
repositoryIdentifierstringRequired

Repository identifier in format org/repo

Example: flxbl-io/sf-core
Body
assignmentIdstringOptional

UUID identifying the assignment. If not provided, a new UUID will be generated.

Example: 550e8400-e29b-41d4-a716-446655440000
isImmortalbooleanOptional

If true, the sandbox will not expire automatically

Default: false
assignedToUserEmailstringOptional

Email of the user to assign the sandbox to. Only applicable when using application tokens. If not provided, defaults to app:<token_creator>

Example: [email protected]
Responses
post
/sfp/api/pools/{poolTag}/fetch

No content

Unassign instance from user

post

Release an assigned instance (sandbox or scratch org) and return it to the available pool. Provide either instanceId for direct unassignment, or assignmentId to find and unassign the instance. The user must own the instance or have Owner role.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
poolTagstringRequired

Pool tag where the instance belongs (works with both sandbox and scratch org pools)

Example: core_dev or ci
Query parameters
repositoryIdentifierstringRequired

Repository identifier in format org/repo

Example: flxbl-io/sf-core
Body
sandboxIdstringOptional

ID of the sandbox to unassign (required if assignmentId is not provided)

Example: sb-123456
assignmentIdstringOptional

UUID of the assignment to unassign (required if sandboxId is not provided)

Example: 550e8400-e29b-41d4-a716-446655440000
Responses
post
/sfp/api/pools/{poolTag}/unassign

No content

Extend sandbox expiration time

post

Extend the expiration time of a sandbox identified by its assignment ID. You can specify custom extension hours in the request body, otherwise it defaults to the pool configuration.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
poolTagstringRequired

Pool tag where the sandbox belongs

Example: core_dev
Query parameters
repositoryIdentifierstringRequired

Repository identifier in format org/repo

Example: flxbl-io/sf-core
Body
assignmentIdstringRequired

UUID of the assignment to extend

Example: 550e8400-e29b-41d4-a716-446655440000
extensionHoursnumber · min: 1 · max: 720Optional

Number of hours to extend the sandbox expiration. If not provided, uses the pool's configured extension hours.

Example: 24
isImmortalbooleanOptional

Set or change the immortal state of the sandbox. If not provided, immortal state remains unchanged.

Example: true
Responses
post
/sfp/api/pools/{poolTag}/extend

No content

Trigger pool replenishment workflow

post

Triggers the pool monitoring Windmill flow asynchronously. The flow performs state reconciliation with Salesforce, lifecycle processing (expiration/deletion), and quota maintenance (provisioning). Returns immediately with a job ID for tracking.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
poolTagstringRequired

The unique tag of the pool

Example: core_dev
Query parameters
repositoryIdentifierstringRequired

Repository identifier in format org/repo

Example: flxbl-io/sf-core
Responses
post
/sfp/api/pools/{poolTag}/replenish

No content

Delete an org instance from a pool

delete

Delete an org instance from the pool. For scratch orgs, deletes from DevHub and removes from tracking. For sandboxes, deletes from Salesforce and removes from database. ERROR status instances are always cleaned up from the database.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
poolTagstringRequired

Pool tag where the instance belongs

Example: core_dev
instanceNamestringRequired

Name/username of the org instance to delete

Example: [email protected]
Query parameters
repositoryIdentifierstringRequired

Repository identifier in format org/repo

Example: flxbl-io/sf-core
forcebooleanOptional

Force deletion even if instance is less than 24 hours old or is immortal

Example: true
Responses
chevron-right
200

Instance successfully deleted or marked for deletion

No content

delete
/sfp/api/pools/{poolTag}/instances/{instanceName}

No content

Last updated