Pools
Retrieve all sandbox pool configurations, optionally filtered by repository
Repository identifier in format org/repo
flxbl-io/sf-core
Pool configurations retrieved successfully
GET /sfp/api/pools/configs HTTP/1.1
Host:
Authorization: Bearer JWT
Accept: */*
Pool configurations retrieved successfully
[
{
"repositoryIdentifier": "flxbl-io/sf-core",
"name": "Development Pool",
"poolTag": "dev-pool",
"branchPattern": "feature/*",
"devHubUsername": "[email protected]",
"sandboxDefinition": {
"autoActivate": true,
"licenseType": "Developer",
"description": "Dev sandbox for feature development",
"sandboxName": [
"DEV",
"QA"
]
},
"daysToKeepUnassignedAvailable": 30,
"isActive": true,
"additionalConfig": {},
"lastMonitoredAt": "2025-01-01T12:00:00Z",
"currentProvisionRunId": "run-123456",
"currentMonitorRunId": "mon-123456",
"defaultExpirationHours": 168,
"extendedExpirationHours": 336,
"averageOrgCreationTime": 45,
"lastProvisionedAt": "2025-01-01T12:00:00Z",
"minAvailableInstances": 3,
"maxTotalInstances": 10,
"refreshOrDeleteStrategy": "DELETE_EXPIRED",
"refreshStrategy": "ALWAYS",
"refreshIntervalHours": 24,
"minActiveInstances": 3,
"maxActiveInstances": 10,
"minRetentionDays": 7,
"returnToPoolOnUnassign": false,
"metadata": {
"environment": "dev",
"team": "platform",
"region": "us-west"
}
}
]
Create a new configuration for a sandbox pool
Repository identifier in format org/repo
flxbl-io/sf-core
User-friendly display name for the pool
Development Pool
Unique machine-readable tag for this pool
dev-pool
Optional Git branch pattern this pool serves
feature/*
Sandbox definition configuration. Either specify licenseType to create from production OR sourceSandboxName to clone an existing sandbox
{"autoActivate":true,"licenseType":"Developer","description":"Dev sandbox for feature development","sandboxName":["DEV","QA"]}
Source sandbox name for cloning (deprecated - use sandboxDefinition.sourceSandboxName)
TEMPLATE_SB
Target number of AVAILABLE sandboxes
3
Hard cap for total sandboxes in this pool
10
TTL in days for available sandboxes before refresh/delete
30
Strategy for handling expired sandboxes
DELETE_EXPIRED
Possible values: Whether this pool configuration is active for monitoring
true
Additional configuration for user activation and data seeding
Default expiration hours for assigned sandboxes
24
Example: 24
Extended expiration hours for assigned sandboxes
168
Average time in minutes it takes to create a sandbox
45
When true, unassigned sandboxes return to pool as AVAILABLE. When false, they are marked as EXPIRED
false
Example: false
Additional metadata for the pool configuration for custom filtering and tagging
{"environment":"dev","team":"platform","region":"us-west"}
Pool configuration created successfully
{"accountId":"org-123","name":"Core Development Pool","poolTag":"core_dev","devHubUsername":"[email protected]","sandboxDefinition":{"autoActivate":true,"licenseType":"Developer","sandboxName":["DEV","CORE"],"description":"Development sandbox for core features"},"minAvailableInstances":3,"maxTotalInstances":10,"daysToKeepUnassignedAvailable":3,"refreshOrDeleteStrategy":"DELETE_EXPIRED","defaultExpirationHours":48,"isActive":true,"additionalConfig":{"usersToActivate":["[email protected]"],"dataSeedPlan":"standard"},"lastMonitoredAt":"2025-01-01T12:00:00Z","currentProvisionRunId":"prov-123456","currentMonitorRunId":"mon-123456"}
POST /sfp/api/pools/configs HTTP/1.1
Host:
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 655
{
"repositoryIdentifier": "flxbl-io/sf-core",
"name": "Development Pool",
"poolTag": "dev-pool",
"branchPattern": "feature/*",
"devHubUsername": "[email protected]",
"sandboxDefinition": {
"autoActivate": true,
"licenseType": "Developer",
"description": "Dev sandbox for feature development",
"sandboxName": [
"DEV",
"QA"
]
},
"minAvailableInstances": 3,
"maxTotalInstances": 10,
"daysToKeepUnassignedAvailable": 30,
"refreshOrDeleteStrategy": "DELETE_EXPIRED",
"isActive": true,
"additionalConfig": {},
"defaultExpirationHours": 24,
"extendedExpirationHours": 168,
"averageOrgCreationTime": 45,
"returnToPoolOnUnassign": false,
"metadata": {
"environment": "dev",
"team": "platform",
"region": "us-west"
}
}
Pool configuration created successfully
{
"accountId": "org-123",
"name": "Core Development Pool",
"poolTag": "core_dev",
"devHubUsername": "[email protected]",
"sandboxDefinition": {
"autoActivate": true,
"licenseType": "Developer",
"sandboxName": [
"DEV",
"CORE"
],
"description": "Development sandbox for core features"
},
"minAvailableInstances": 3,
"maxTotalInstances": 10,
"daysToKeepUnassignedAvailable": 3,
"refreshOrDeleteStrategy": "DELETE_EXPIRED",
"defaultExpirationHours": 48,
"isActive": true,
"additionalConfig": {
"usersToActivate": [
"[email protected]"
],
"dataSeedPlan": "standard"
},
"lastMonitoredAt": "2025-01-01T12:00:00Z",
"currentProvisionRunId": "prov-123456",
"currentMonitorRunId": "mon-123456"
}
Retrieve a specific sandbox pool configuration by tag and repository
The tag of the pool to retrieve
Repository identifier in format org/repo
flxbl-io/sf-core
Pool configuration retrieved successfully
GET /sfp/api/pools/configs/{poolTag}?repositoryIdentifier=flxbl-io%2Fsf-core HTTP/1.1
Host:
Authorization: Bearer JWT
Accept: */*
Pool configuration retrieved successfully
{
"repositoryIdentifier": "flxbl-io/sf-core",
"name": "Development Pool",
"poolTag": "dev-pool",
"branchPattern": "feature/*",
"devHubUsername": "[email protected]",
"sandboxDefinition": {
"autoActivate": true,
"licenseType": "Developer",
"description": "Dev sandbox for feature development",
"sandboxName": [
"DEV",
"QA"
]
},
"daysToKeepUnassignedAvailable": 30,
"isActive": true,
"additionalConfig": {},
"lastMonitoredAt": "2025-01-01T12:00:00Z",
"currentProvisionRunId": "run-123456",
"currentMonitorRunId": "mon-123456",
"defaultExpirationHours": 168,
"extendedExpirationHours": 336,
"averageOrgCreationTime": 45,
"lastProvisionedAt": "2025-01-01T12:00:00Z",
"minAvailableInstances": 3,
"maxTotalInstances": 10,
"refreshOrDeleteStrategy": "DELETE_EXPIRED",
"refreshStrategy": "ALWAYS",
"refreshIntervalHours": 24,
"minActiveInstances": 3,
"maxActiveInstances": 10,
"minRetentionDays": 7,
"returnToPoolOnUnassign": false,
"metadata": {
"environment": "dev",
"team": "platform",
"region": "us-west"
}
}
Delete an existing configuration for a sandbox pool and all its sandboxes
The tag of the pool to delete
Repository identifier in format org/repo
flxbl-io/sf-core
Pool deleted successfully
{"message":"Pool configuration core_dev deleted successfully","deletedAt":"2025-01-01T12:00:00Z"}
DELETE /sfp/api/pools/configs/{poolTag}?repositoryIdentifier=flxbl-io%2Fsf-core HTTP/1.1
Host:
Authorization: Bearer JWT
Accept: */*
Pool deleted successfully
{
"message": "Pool configuration core_dev deleted successfully",
"deletedAt": "2025-01-01T12:00:00Z"
}
Update an existing configuration for a sandbox pool
The tag of the pool to update
Repository identifier in format org/repo
flxbl-io/sf-core
User-friendly display name for the pool
Development Pool
Optional Git branch pattern this pool serves
feature/*
Sandbox definition configuration
Source sandbox name for cloning (deprecated)
TEMPLATE_SB
Target number of AVAILABLE sandboxes
3
Hard cap for total sandboxes in this pool
10
TTL in days for available sandboxes before refresh/delete
30
Strategy for handling expired sandboxes
DELETE_EXPIRED
Possible values: Whether this pool configuration is active for monitoring
true
Additional configuration for user activation and data seeding
Default expiration hours for assigned sandboxes
24
Extended expiration hours for assigned sandboxes
168
Average time in minutes it takes to create a sandbox
45
When true, unassigned sandboxes return to pool as AVAILABLE. When false, they are marked as EXPIRED
false
Additional metadata for the pool configuration for custom filtering and tagging
{"environment":"dev","team":"platform","region":"us-west"}
Pool configuration updated successfully
{"accountId":"org-123","name":"Core Development Pool","poolTag":"core_dev","devHubUsername":"[email protected]","sandboxDefinition":{"autoActivate":true,"licenseType":"Developer","sandboxName":["DEV","CORE"],"description":"Development sandbox for core features"},"minAvailableInstances":3,"maxTotalInstances":10,"daysToKeepUnassignedAvailable":3,"refreshOrDeleteStrategy":"DELETE_EXPIRED","defaultExpirationHours":48,"isActive":true,"additionalConfig":{"usersToActivate":["[email protected]"],"dataSeedPlan":"standard"},"lastMonitoredAt":"2025-01-01T12:00:00Z","currentProvisionRunId":"prov-123456","currentMonitorRunId":"mon-123456"}
PATCH /sfp/api/pools/configs/{poolTag}?repositoryIdentifier=flxbl-io%2Fsf-core HTTP/1.1
Host:
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 468
{
"name": "Development Pool",
"branchPattern": "feature/*",
"devHubUsername": "[email protected]",
"sandboxDefinition": {},
"minAvailableInstances": 3,
"maxTotalInstances": 10,
"daysToKeepUnassignedAvailable": 30,
"refreshOrDeleteStrategy": "DELETE_EXPIRED",
"isActive": true,
"additionalConfig": {},
"defaultExpirationHours": 24,
"extendedExpirationHours": 168,
"averageOrgCreationTime": 45,
"returnToPoolOnUnassign": false,
"metadata": {
"environment": "dev",
"team": "platform",
"region": "us-west"
}
}
Pool configuration updated successfully
{
"accountId": "org-123",
"name": "Core Development Pool",
"poolTag": "core_dev",
"devHubUsername": "[email protected]",
"sandboxDefinition": {
"autoActivate": true,
"licenseType": "Developer",
"sandboxName": [
"DEV",
"CORE"
],
"description": "Development sandbox for core features"
},
"minAvailableInstances": 3,
"maxTotalInstances": 10,
"daysToKeepUnassignedAvailable": 3,
"refreshOrDeleteStrategy": "DELETE_EXPIRED",
"defaultExpirationHours": 48,
"isActive": true,
"additionalConfig": {
"usersToActivate": [
"[email protected]"
],
"dataSeedPlan": "standard"
},
"lastMonitoredAt": "2025-01-01T12:00:00Z",
"currentProvisionRunId": "prov-123456",
"currentMonitorRunId": "mon-123456"
}
Retrieve current status of sandbox pools and their instances. Supports filtering by status and entity assignment.
Repository identifier in format org/repo
flxbl-io/sf-core
Optional. If provided, returns detailed status for the specified pool.
Optional. Filter instances by status (used with poolTag).
Optional. Filter by assignment UUID.
Pool status retrieved successfully
{"poolTag":"core_dev","repositoryIdentifier":"flxbl-io/sf-core","status":"active","instances":{"total":5,"available":3,"assigned":1,"provisioning":1,"error":0},"config":{"accountId":"org-123","name":"Core Development Pool","poolTag":"core_dev","devHubUsername":"[email protected]","sandboxDefinition":{"autoActivate":true,"licenseType":"Developer","sandboxName":["DEV","CORE"],"description":"Development sandbox for core features"},"minAvailableInstances":3,"maxTotalInstances":10,"daysToKeepUnassignedAvailable":3,"refreshOrDeleteStrategy":"DELETE_EXPIRED","defaultExpirationHours":48,"isActive":true,"additionalConfig":{"usersToActivate":["[email protected]"],"dataSeedPlan":"standard"},"lastMonitoredAt":"2025-01-01T12:00:00Z","currentProvisionRunId":"prov-123456","currentMonitorRunId":"mon-123456"}}
GET /sfp/api/pools/status HTTP/1.1
Host:
Authorization: Bearer JWT
Accept: */*
Pool status retrieved successfully
{
"poolTag": "core_dev",
"repositoryIdentifier": "flxbl-io/sf-core",
"status": "active",
"instances": {
"total": 5,
"available": 3,
"assigned": 1,
"provisioning": 1,
"error": 0
},
"config": {
"accountId": "org-123",
"name": "Core Development Pool",
"poolTag": "core_dev",
"devHubUsername": "[email protected]",
"sandboxDefinition": {
"autoActivate": true,
"licenseType": "Developer",
"sandboxName": [
"DEV",
"CORE"
],
"description": "Development sandbox for core features"
},
"minAvailableInstances": 3,
"maxTotalInstances": 10,
"daysToKeepUnassignedAvailable": 3,
"refreshOrDeleteStrategy": "DELETE_EXPIRED",
"defaultExpirationHours": 48,
"isActive": true,
"additionalConfig": {
"usersToActivate": [
"[email protected]"
],
"dataSeedPlan": "standard"
},
"lastMonitoredAt": "2025-01-01T12:00:00Z",
"currentProvisionRunId": "prov-123456",
"currentMonitorRunId": "mon-123456"
}
}
Identify and optionally cleanup sandbox instances that exist in the database but not in Salesforce
DevHub username to check for zombies
devhub_main_org
If true, only identify zombies without deleting them
true
Zombie cleanup completed
{"message":"Found 3 orphaned instances. Run with dryRun=false to delete them.","orphanedInstances":[{"sandboxName":"DEV123","poolTag":"core_dev","status":"AVAILABLE","reason":"Not found in Salesforce"}],"dryRun":true}
POST /sfp/api/pools/cleanup-zombies HTTP/1.1
Host:
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 50
{
"devHubUsername": "devhub_main_org",
"dryRun": true
}
Zombie cleanup completed
{
"message": "Found 3 orphaned instances. Run with dryRun=false to delete them.",
"orphanedInstances": [
{
"sandboxName": "DEV123",
"poolTag": "core_dev",
"status": "AVAILABLE",
"reason": "Not found in Salesforce"
}
],
"dryRun": true
}
Returns whether the system is using mock or real Salesforce sandbox service
Current mode information
GET /sfp/api/pools/mode HTTP/1.1
Host:
Authorization: Bearer JWT
Accept: */*
Current mode information
{
"mode": "mock",
"description": "text",
"mockModeEnvVar": "text"
}
Retrieve information about all repository-specific pool monitoring jobs
Monitoring job status retrieved successfully
GET /sfp/api/pools/monitoring-jobs HTTP/1.1
Host:
Authorization: Bearer JWT
Accept: */*
Monitoring job status retrieved successfully
{
"totalJobs": 3,
"jobs": [
{
"jobName": "global-pool-monitor",
"description": "Global pool monitoring job that monitors all active pools",
"pattern": "*/30 * * * *",
"nextRun": "2024-01-01T12:30:00Z",
"lastRun": "2024-01-01T12:00:00Z",
"running": false
}
]
}
Get a list of all instances in a specific pool
Pool tag to get instances for
core_dev
Repository identifier in format org/repo
flxbl-io/sf-core
List of pool instances
GET /sfp/api/pools/{poolTag}/instances?repositoryIdentifier=flxbl-io%2Fsf-core HTTP/1.1
Host:
Authorization: Bearer JWT
Accept: */*
List of pool instances
[]
Create new sandbox instances for a specific pool or all pools to meet target capacity.
Pool tag to target, or "all" to target all active pools
core_dev
Repository identifier in format org/repo
flxbl-io/sf-core
Provisioning started successfully
{"status":"provisioning_started","message":"Provisioning 3 new instances for pool core_dev","timestamp":"2025-01-01T12:00:00Z","details":{"poolCapacity":5,"availableInstances":1,"provisioningInstances":4,"instancesToBeCreated":0}}
POST /sfp/api/pools/{poolTag}/provision?repositoryIdentifier=flxbl-io%2Fsf-core HTTP/1.1
Host:
Authorization: Bearer JWT
Accept: */*
Provisioning started successfully
{
"status": "provisioning_started",
"message": "Provisioning 3 new instances for pool core_dev",
"timestamp": "2025-01-01T12:00:00Z",
"details": {
"poolCapacity": 5,
"availableInstances": 1,
"provisioningInstances": 4,
"instancesToBeCreated": 0
}
}
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.
Pool tag to fetch sandbox from
core_dev
Repository identifier in format org/repo
flxbl-io/sf-core
UUID identifying the assignment. If not provided, a new UUID will be generated.
550e8400-e29b-41d4-a716-446655440000
If true, the sandbox will not expire automatically
false
Sandbox successfully assigned
{"status":"sandbox_assigned","message":"Sandbox successfully assigned","timestamp":"2025-01-01T12:00:00Z","details":{"sandboxId":"sb-core-dev-123456","sandboxName":"dev123456","instanceUrl":"https://test-sandbox.sandbox.my.salesforce.com","loginUrl":"https://test.salesforce.com","expiresAt":"2025-01-03T12:00:00Z","isReused":false,"sfdxAuthUrl":"force://PlatformCLI::[email protected]"}}
POST /sfp/api/pools/{poolTag}/fetch?repositoryIdentifier=flxbl-io%2Fsf-core HTTP/1.1
Host:
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 74
{
"assignmentId": "550e8400-e29b-41d4-a716-446655440000",
"isImmortal": false
}
Sandbox successfully assigned
{
"status": "sandbox_assigned",
"message": "Sandbox successfully assigned",
"timestamp": "2025-01-01T12:00:00Z",
"details": {
"sandboxId": "sb-core-dev-123456",
"sandboxName": "dev123456",
"instanceUrl": "https://test-sandbox.sandbox.my.salesforce.com",
"loginUrl": "https://test.salesforce.com",
"expiresAt": "2025-01-03T12:00:00Z",
"isReused": false,
"sfdxAuthUrl": "force://PlatformCLI::[email protected]"
}
}
Release an assigned sandbox and return it to the available pool. Provide either sandboxId for direct unassignment, or assignmentId to find and unassign the sandbox. The user must own the sandbox or have Owner role.
Pool tag where the sandbox belongs
core_dev
Repository identifier in format org/repo
flxbl-io/sf-core
ID of the sandbox to unassign (required if assignmentId is not provided)
sb-123456
UUID of the assignment to unassign (required if sandboxId is not provided)
550e8400-e29b-41d4-a716-446655440000
Sandbox unassigned successfully
{"status":"unassigned","message":"Sandbox successfully unassigned and returned to pool","timestamp":"2025-01-01T12:00:00Z","details":{"sandboxId":"sb-core-dev-123456","sandboxName":"dev123456","poolTag":"core_dev"}}
POST /sfp/api/pools/{poolTag}/unassign?repositoryIdentifier=flxbl-io%2Fsf-core HTTP/1.1
Host:
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 79
{
"sandboxId": "sb-123456",
"assignmentId": "550e8400-e29b-41d4-a716-446655440000"
}
Sandbox unassigned successfully
{
"status": "unassigned",
"message": "Sandbox successfully unassigned and returned to pool",
"timestamp": "2025-01-01T12:00:00Z",
"details": {
"sandboxId": "sb-core-dev-123456",
"sandboxName": "dev123456",
"poolTag": "core_dev"
}
}
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.
Pool tag where the sandbox belongs
core_dev
Repository identifier in format org/repo
flxbl-io/sf-core
UUID of the assignment to extend
550e8400-e29b-41d4-a716-446655440000
Number of hours to extend the sandbox expiration. If not provided, uses the pool's configured extension hours.
24
Set or change the immortal state of the sandbox. If not provided, immortal state remains unchanged.
true
Expiry extended successfully
{"status":"expiry_extended","message":"Sandbox expiry extended successfully","timestamp":"2025-01-01T12:00:00Z","details":{"sandboxId":"sb-core-dev-123456","sandboxName":"dev123456","newExpiresAt":"2025-01-05T12:00:00Z","extensionHours":48}}
POST /sfp/api/pools/{poolTag}/extend?repositoryIdentifier=flxbl-io%2Fsf-core HTTP/1.1
Host:
Authorization: Bearer JWT
Content-Type: application/json
Accept: */*
Content-Length: 93
{
"assignmentId": "550e8400-e29b-41d4-a716-446655440000",
"extensionHours": 24,
"isImmortal": true
}
Expiry extended successfully
{
"status": "expiry_extended",
"message": "Sandbox expiry extended successfully",
"timestamp": "2025-01-01T12:00:00Z",
"details": {
"sandboxId": "sb-core-dev-123456",
"sandboxName": "dev123456",
"newExpiresAt": "2025-01-05T12:00:00Z",
"extensionHours": 48
}
}
Performs the complete pool maintenance workflow including reconciliation with Salesforce, lifecycle processing (expiration/deletion), and quota maintenance (provisioning). This endpoint can be called manually by clients or triggered by server-side cron jobs.
The unique tag of the pool
core_dev
Repository identifier in format org/repo
flxbl-io/sf-core
Replenishment workflow initiated
{"poolTag":"core_dev","steps":{"reconciliation":{"success":true,"message":"State reconciliation completed successfully","duration":245},"lifecycleProcessing":{"success":true,"message":"Lifecycle processing completed successfully","duration":1523},"quotaMaintenance":{"success":true,"message":"Quota maintenance completed. 2 instances will be created.","availableInstances":1,"errorInstances":0,"instancesToBeCreated":2,"duration":342}},"summary":"Replenishment completed successfully. Reconciliation: ✓, Lifecycle: ✓, Quota: ✓ (2 new instances)","totalDuration":2110}
POST /sfp/api/pools/{poolTag}/replenish?repositoryIdentifier=flxbl-io%2Fsf-core HTTP/1.1
Host:
Authorization: Bearer JWT
Accept: */*
Replenishment workflow initiated
{
"poolTag": "core_dev",
"steps": {
"reconciliation": {
"success": true,
"message": "State reconciliation completed successfully",
"duration": 245
},
"lifecycleProcessing": {
"success": true,
"message": "Lifecycle processing completed successfully",
"duration": 1523
},
"quotaMaintenance": {
"success": true,
"message": "Quota maintenance completed. 2 instances will be created.",
"availableInstances": 1,
"errorInstances": 0,
"instancesToBeCreated": 2,
"duration": 342
}
},
"summary": "Replenishment completed successfully. Reconciliation: ✓, Lifecycle: ✓, Quota: ✓ (2 new instances)",
"totalDuration": 2110
}
Forcefully delete a sandbox instance from the pool. This is an admin operation that bypasses normal lifecycle checks and should be used carefully. For instances in ERROR status, the database entry will be deleted even if Salesforce deletion fails, allowing the pool to replenish. For other statuses, use the force flag to delete regardless of Salesforce results.
Pool tag where the sandbox belongs
core_dev
Name of the sandbox to delete
123456
Repository identifier in format org/repo
flxbl-io/sf-core
Force deletion even if sandbox is less than 24 hours old
true
Sandbox successfully deleted or marked for deletion
Cannot delete sandbox (e.g., immortal instance without force flag)
Sandbox not found
DELETE /sfp/api/pools/{poolTag}/instances/{sandboxName}?repositoryIdentifier=flxbl-io%2Fsf-core HTTP/1.1
Host:
Authorization: Bearer JWT
Accept: */*
{
"status": "text",
"message": "text",
"timestamp": "text",
"details": {
"sandboxName": "text",
"previousStatus": "text",
"isImmortal": true,
"createdAt": "text",
"deletionType": "immediate"
}
}
Was this helpful?