Environments
Manage a site's staging and production environments: deployments and rollbacks, secrets, domains, DNS, SSL, and database promotion.
Manage deployment environments for sites. Each site can have multiple environments with their own domains, PHP versions, and secrets. Environment names use a slug format (lowercase letters, numbers, and hyphens).
Environments are created with a pending status and transition to active once
container provisioning completes. Each environment gets a unique subdomain under
your registered domain.
Environment Status Lifecycle
pending- Environment creation initiated, provisioning in progressactive- Environment is fully operationalsuspended- Environment is pausedterminating- Environment deletion in progressterminated- Environment has been fully removed
Production Environment
Each site can have at most one production environment (is_production: true).
The production environment receives CDN integration via Bunny.net.
List Environments
Retrieves a paginated list of environments. Filter by site using the optional
site parameter, or list all environments for the authenticated account.
Query Parameters
| Name | Type | Description |
|---|---|---|
site optional | string | Filter by site ID or subdomain. Example: "01jfgxk4nqrst5vwx9yz0abcde" |
per_page optional | integer | Number of items per page (max 100). Default: 15. Example: 25 |
page optional | integer | Page number for pagination. Default: 1. Example: 1 |
Request
curl -X GET \
"https://api.builtfast.com/api/v1/vector/environments?site=01jfgxk4nqrst5vwx9yz0abcde&per_page=25&page=1" \
-H "Authorization: Bearer $API_KEY" \
-H "Accept: application/json"$environments = $client->environments->list([
'site' => '01jfgxk4nqrst5vwx9yz0abcde',
'per_page' => 25,
'page' => 1,
]);const environments = await client.environments.listAll({
site: '01jfgxk4nqrst5vwx9yz0abcde',
per_page: 25,
page: 1,
});Response
{
"data": [
{
"id": "01jfgxk4nqrst5vwx9yz0abcdg",
"vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
"your_customer_id": "cust_12345",
"name": "production",
"is_production": true,
"status": "active",
"status_label": "Active",
"provisioning_step": "complete",
"provisioning_step_label": "Complete",
"failure_reason": null,
"php_version": "8.3",
"tags": [
"live",
"primary"
],
"platform_domain": "wispy-dust--prod.vectorpages.com",
"custom_domain": "example.com",
"dns_target": "site-abc123.b-cdn.net",
"dns_status": {
"state": "verified",
"records": [],
"last_checked_at": "2025-01-15T12:05:00+00:00"
},
"custom_domain_certificate": {
"status": "issued",
"dns_validation_records": null
},
"subdomain": "wispy-dust",
"database_host": "cluster.abc123.us-east-1.rds.amazonaws.com",
"database_name": "db_01jfgxk4nqrst5vwx9yz0abcde",
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
}
],
"links": {},
"meta": {},
"message": "Environments retrieved successfully",
"http_status": 200
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Site not found",
"http_status": 404
}Get Environment
Retrieves details of a specific environment.
URL Parameters
| Name | Type | Description |
|---|---|---|
env required | string | The environment ID. Example: "01jfgxk4nqrst5vwx9yz0abcdg" |
Request
curl -X GET \
"https://api.builtfast.com/api/v1/vector/environments/01jfgxk4nqrst5vwx9yz0abcdg" \
-H "Authorization: Bearer $API_KEY" \
-H "Accept: application/json"$environment = $client->environments->get('01jfgxk4nqrst5vwx9yz0abcdg');const environment = await client.environments.get('01jfgxk4nqrst5vwx9yz0abcdg');Response
{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdg",
"vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
"your_customer_id": "cust_12345",
"name": "production",
"is_production": true,
"status": "active",
"status_label": "Active",
"provisioning_step": "complete",
"provisioning_step_label": "Complete",
"failure_reason": null,
"php_version": "8.3",
"tags": [
"live",
"primary"
],
"platform_domain": "wispy-dust--prod.vectorpages.com",
"custom_domain": "example.com",
"dns_target": "site-abc123.b-cdn.net",
"dns_status": {
"state": "verified",
"records": [],
"last_checked_at": "2025-01-15T12:05:00+00:00"
},
"custom_domain_certificate": {
"status": "issued",
"dns_validation_records": null
},
"subdomain": "wispy-dust",
"database_host": "cluster.abc123.us-east-1.rds.amazonaws.com",
"database_name": "db_01jfgxk4nqrst5vwx9yz0abcde",
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"message": "Environment retrieved successfully",
"http_status": 200
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Environment not found",
"http_status": 404
}Update Environment
Updates an existing environment. Only the fields provided will be updated.
When custom_domain changes, a domain change operation is initiated asynchronously
(SSL certificate provisioning, search-replace, env sync, redeployment). The response
includes a pending_domain_change object for polling status. Returns 202 for domain
changes and 200 for metadata-only updates.
DNS Requirements
After setting a custom domain, the domain owner must create two types of DNS records:
- CNAME for traffic routing — Point the custom domain to the
dns_targetvalue (e.g.,example.com CNAME cdn-hostname.b-cdn.net). - CNAME(s) for SSL certificate validation — Create the DNS records listed in
custom_domain_certificate.dns_validation_records. These are required by AWS ACM to issue the SSL certificate. Until these records are created, the certificate status will remainwaiting_validation.
Poll the environment (GET) to check custom_domain_certificate.status for progress.
Possible values: pending, requesting, waiting_validation, issued, failed, timed_out.
URL Parameters
| Name | Type | Description |
|---|---|---|
env required | string | The environment ID. Example: "01jfgxk4nqrst5vwx9yz0abcdg" |
Body Parameters
| Name | Type | Description |
|---|---|---|
custom_domain optional | string | A custom vanity domain for this environment. Must be a valid domain name. When changed, triggers infrastructure updates (CDN, DNS, SSL). Example: "example.com" |
tags optional | string[] | Array of tags for categorizing the environment. Each tag must be slug format (lowercase letters, numbers, hyphens), max 100 characters, and unique. Pass Example: ["live","updated"] |
Request
curl -X PUT \
"https://api.builtfast.com/api/v1/vector/environments/01jfgxk4nqrst5vwx9yz0abcdg" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"custom_domain":"example.com","tags":["live","updated"]}'$environment = $client->environments->update(
'01jfgxk4nqrst5vwx9yz0abcdg',
[
'custom_domain' => 'example.com',
'tags' => ['live', 'updated'],
]
);const environment = await client.environments.update(
'01jfgxk4nqrst5vwx9yz0abcdg',
{
custom_domain: 'example.com',
tags: ['live', 'updated'],
}
);Response
{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdg",
"vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
"your_customer_id": "cust_12345",
"name": "production",
"is_production": true,
"status": "active",
"status_label": "Active",
"provisioning_step": "complete",
"provisioning_step_label": "Complete",
"failure_reason": null,
"php_version": "8.4",
"tags": [
"live",
"updated"
],
"platform_domain": "wispy-dust--prod.vectorpages.com",
"custom_domain": "example.com",
"dns_target": "site-abc123.b-cdn.net",
"dns_status": {
"state": "verified",
"records": [],
"last_checked_at": "2025-01-15T12:05:00+00:00"
},
"custom_domain_certificate": {
"status": "issued",
"dns_validation_records": null
},
"subdomain": "wispy-dust",
"database_host": "cluster.abc123.us-east-1.rds.amazonaws.com",
"database_name": "db_01jfgxk4nqrst5vwx9yz0abcde",
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"message": "Environment updated successfully",
"http_status": 200
}{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdg",
"vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
"your_customer_id": "cust_12345",
"name": "production",
"is_production": true,
"status": "active",
"status_label": "Active",
"provisioning_step": "complete",
"provisioning_step_label": "Complete",
"failure_reason": null,
"php_version": "8.3",
"tags": [
"live",
"primary"
],
"platform_domain": "wispy-dust--prod.vectorpages.com",
"custom_domain": "example.com",
"dns_target": "site-abc123.b-cdn.net",
"dns_status": {
"state": "pending",
"records": [
{
"type": "CNAME",
"host": "_abc123.example.com",
"value": "_def456.acm-validations.aws",
"purpose": "validation"
},
{
"type": "CNAME",
"host": "example.com",
"value": "site-abc123.b-cdn.net",
"purpose": "traffic"
}
],
"last_checked_at": null
},
"custom_domain_certificate": {
"status": "pending",
"dns_validation_records": [
{
"name": "_abc123.example.com",
"type": "CNAME",
"value": "_def456.acm-validations.aws"
}
]
},
"subdomain": "wispy-dust",
"database_host": "cluster.abc123.us-east-1.rds.amazonaws.com",
"database_name": "db_01jfgxk4nqrst5vwx9yz0abcde",
"pending_domain_change": {
"id": "01jfgxk4nqrst5vwx9yz0abcdh",
"status": "pending",
"status_label": "Pending",
"old_domain": "old.example.com",
"new_domain": "example.com"
},
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"message": "Environment update initiated, domain change in progress",
"http_status": 202
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Environment not found",
"http_status": 404
}{
"data": {},
"errors": {
"environment": [
"Environment must be in active state to change domain."
]
},
"message": "Environment must be in active state to change domain.",
"http_status": 422
}{
"data": {},
"errors": {
"domain_change": [
"A domain change is already in progress for this environment."
]
},
"message": "A domain change is already in progress for this environment.",
"http_status": 422
}Delete Environment
Initiates deletion of an environment. This terminates all associated
containers, deployments, and CDN resources. The environment status
transitions to terminating and eventually terminated.
This operation is irreversible. All environment data will be permanently removed.
URL Parameters
| Name | Type | Description |
|---|---|---|
env required | string | The environment ID. Example: "01jfgxk4nqrst5vwx9yz0abcdg" |
Request
curl -X DELETE \
"https://api.builtfast.com/api/v1/vector/environments/01jfgxk4nqrst5vwx9yz0abcdg" \
-H "Authorization: Bearer $API_KEY" \
-H "Accept: application/json"$response = $client->environments->delete('01jfgxk4nqrst5vwx9yz0abcdg');const response = await client.environments.delete('01jfgxk4nqrst5vwx9yz0abcdg');Response
{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdg",
"vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
"your_customer_id": "cust_12345",
"name": "production",
"is_production": true,
"status": "terminating",
"status_label": "Terminating",
"provisioning_step": "complete",
"provisioning_step_label": "Complete",
"failure_reason": null,
"php_version": "8.3",
"tags": [],
"platform_domain": "wispy-dust--prod.vectorpages.com",
"custom_domain": "example.com",
"dns_target": "site-abc123.b-cdn.net",
"dns_status": {
"state": "verified",
"records": [],
"last_checked_at": "2025-01-15T12:05:00+00:00"
},
"custom_domain_certificate": {
"status": "issued",
"dns_validation_records": null
},
"subdomain": "wispy-dust",
"database_host": "cluster.abc123.us-east-1.rds.amazonaws.com",
"database_name": "db_01jfgxk4nqrst5vwx9yz0abcde",
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"message": "Environment deletion initiated",
"http_status": 202
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Environment not found",
"http_status": 404
}Create Environment
Creates a new environment for a site. The environment is created with a
pending status and will transition to active once provisioning completes.
Each environment gets a unique auto-generated subdomain and uses the site's configured domain.
Production environments: Only one environment per site can be marked as
production (is_production: true). Production environments receive CDN
integration via Bunny.net when a custom_domain is supplied.
Custom domain: Optional for any environment. When supplied, ACM certificate
provisioning is initiated asynchronously and — for production environments —
the hostname is attached to the Bunny pull zone. The DNS validation records
and the CDN target are not available in the create response; poll the
environment (GET) to retrieve custom_domain_certificate.dns_validation_records
and dns_target once they become available.
URL Parameters
| Name | Type | Description |
|---|---|---|
site required | string | The site ID. Example: "01jfgxk4nqrst5vwx9yz0abcde" |
Body Parameters
| Name | Type | Description |
|---|---|---|
name required | string | A unique name for this environment (slug format: lowercase letters, numbers, hyphens; consecutive hyphens Example: "production" |
custom_domain optional | string | Optional custom domain for this environment. When supplied, triggers asynchronous ACM certificate provisioning and Bunny hostname attachment (production only). Must be a valid fully qualified domain name. Max 253 chars. Example: "example.com" |
is_production optional | boolean | Whether this is the production environment. Only one per site. Default: false. Example: true |
php_version required | string | The PHP version for this environment. Options: 7.2, 7.3, 7.4, 8.0, 8.1, 8.2, 8.3, 8.4, 8.5. Example: "8.3" |
tags optional | string[] | Optional array of tags for categorizing the environment. Each tag must be slug format (lowercase letters, numbers, hyphens), max 100 characters, and unique. Example: ["live","primary"] |
Request
curl -X POST \
"https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/environments" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"name":"production","custom_domain":"example.com","is_production":true,"php_version":"8.3","tags":["live","primary"]}'$environment = $client->environments->create(
'01jfgxk4nqrst5vwx9yz0abcde',
[
'name' => 'production',
'custom_domain' => 'example.com',
'is_production' => true,
'php_version' => '8.3',
'tags' => ['live', 'primary'],
]
);const environment = await client.environments.create(
'01jfgxk4nqrst5vwx9yz0abcde',
{
name: 'production',
custom_domain: 'example.com',
is_production: true,
php_version: '8.3',
tags: ['live', 'primary'],
}
);Response
{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdg",
"vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
"your_customer_id": "cust_12345",
"name": "production",
"is_production": true,
"status": "pending",
"status_label": "Pending",
"provisioning_step": "pending",
"provisioning_step_label": "Queued",
"failure_reason": null,
"php_version": "8.3",
"tags": [
"live",
"primary"
],
"platform_domain": "wispy-dust--prod.vectorpages.com",
"custom_domain": "example.com",
"dns_target": "site-abc123.b-cdn.net",
"dns_status": {
"state": "pending",
"records": [
{
"type": "CNAME",
"host": "example.com",
"value": "site-abc123.b-cdn.net",
"purpose": "traffic"
}
],
"last_checked_at": null
},
"custom_domain_certificate": {
"status": "pending",
"dns_validation_records": null
},
"subdomain": "wispy-dust",
"database_host": "cluster.abc123.us-east-1.rds.amazonaws.com",
"database_name": "db_01jfgxk4nqrst5vwx9yz0abcde",
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"message": "Environment creation initiated",
"http_status": 201
}{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdg",
"vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
"your_customer_id": "cust_12345",
"name": "staging-2",
"is_production": false,
"status": "pending",
"status_label": "Pending",
"provisioning_step": "pending",
"provisioning_step_label": "Queued",
"failure_reason": null,
"php_version": "8.3",
"tags": [],
"platform_domain": "wispy-dust--staging-2.vectorpages.com",
"custom_domain": null,
"dns_target": "wispy-dust--staging-2.vectorpages.com",
"dns_status": {
"state": "not_required",
"records": [],
"last_checked_at": null
},
"custom_domain_certificate": null,
"subdomain": "wispy-dust",
"database_host": "cluster.abc123.us-east-1.rds.amazonaws.com",
"database_name": "db_01jfgxk4nqrst5vwx9yz0abcde",
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"message": "Environment creation initiated",
"http_status": 201
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Site not found",
"http_status": 404
}{
"data": {},
"errors": {
"name": [
"Environment name must be lowercase letters, numbers, and hyphens only."
]
},
"message": "Validation failed",
"http_status": 422
}{
"data": {},
"errors": {
"name": [
"Environment name must not contain consecutive hyphens (--)."
]
},
"message": "Validation failed",
"http_status": 422
}Databases
Manage database credentials for production environments. Each environment has its own isolated database with credentials that can be rotated for security.
Create Database Promote
Promote the dev database to this environment. Exports the dev database, then imports it into the environment's database.
URL Parameters
| Name | Type | Description |
|---|---|---|
env required | string | The environment ID. Example: "01jfgxk4nqrst5vwx9yz0abcde" |
Body Parameters
| Name | Type | Description |
|---|---|---|
drop_tables optional | boolean | Whether to drop existing tables before importing. Defaults to true. Example: true |
disable_foreign_keys optional | boolean | Whether to disable foreign key checks during import. Defaults to true. Example: true |
Request
curl -X POST \
"https://api.builtfast.com/api/v1/vector/environments/01jfgxk4nqrst5vwx9yz0abcde/db/promote" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"drop_tables":true,"disable_foreign_keys":true}'$response = $vectorPro
->environments.db.promote
->post('01jfgxk4nqrst5vwx9yz0abcde', [
'drop_tables' => true,
'disable_foreign_keys' => true,
]);const response = await vectorPro
.environments.db.promote
.post('01jfgxk4nqrst5vwx9yz0abcde', {
drop_tables: true,
disable_foreign_keys: true,
});Response
{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdf",
"vector_environment_id": "01jfgxk4nqrst5vwx9yz0abcdg",
"vector_db_export_id": null,
"status": "pending",
"status_label": "Pending",
"options": {
"drop_tables": true,
"disable_foreign_keys": true,
"search_replace": null
},
"duration_ms": null,
"error_message": null,
"created_at": "2025-01-15T12:00:00+00:00",
"started_at": null,
"completed_at": null
},
"message": "Database promote initiated",
"http_status": 202
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Environment not found",
"http_status": 404
}{
"data": {},
"errors": {
"environment": [
"Environment must be in active state to promote database."
]
},
"message": "Environment must be in active state to promote database.",
"http_status": 422
}{
"data": {},
"errors": {
"promote": [
"A database promote is already in progress for this environment."
]
},
"message": "A database promote is already in progress for this environment.",
"http_status": 422
}Get Promote Status
Get the current status of a database promote operation.
URL Parameters
| Name | Type | Description |
|---|---|---|
env required | string | The environment ID. Example: "01jfgxk4nqrst5vwx9yz0abcde" |
promote required | string | The promote ID. Example: "01jfgxk4nqrst5vwx9yz0abcdf" |
Request
curl -X GET \
"https://api.builtfast.com/api/v1/vector/environments/01jfgxk4nqrst5vwx9yz0abcde/db/promotes/01jfgxk4nqrst5vwx9yz0abcdf" \
-H "Authorization: Bearer $API_KEY" \
-H "Accept: application/json"$response = $vectorPro
->environments.db.promotes
->get('01jfgxk4nqrst5vwx9yz0abcde', '01jfgxk4nqrst5vwx9yz0abcdf');const response = await vectorPro
.environments.db.promotes
.get('01jfgxk4nqrst5vwx9yz0abcde', '01jfgxk4nqrst5vwx9yz0abcdf');Response
{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdf",
"vector_environment_id": "01jfgxk4nqrst5vwx9yz0abcdg",
"vector_db_export_id": "01jfgxk4nqrst5vwx9yz0abcde",
"status": "completed",
"status_label": "Completed",
"options": {
"drop_tables": true,
"disable_foreign_keys": true,
"search_replace": null
},
"duration_ms": 12500,
"error_message": null,
"created_at": "2025-01-15T12:00:00+00:00",
"started_at": "2025-01-15T12:00:00+00:00",
"completed_at": "2025-01-15T12:00:00+00:00"
},
"message": "Database promote retrieved successfully",
"http_status": 200
}{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdf",
"vector_environment_id": "01jfgxk4nqrst5vwx9yz0abcdg",
"vector_db_export_id": null,
"status": "exporting",
"status_label": "Exporting",
"options": {
"drop_tables": true,
"disable_foreign_keys": true,
"search_replace": null
},
"duration_ms": null,
"error_message": null,
"created_at": "2025-01-15T12:00:00+00:00",
"started_at": "2025-01-15T12:00:00+00:00",
"completed_at": null
},
"message": "Database promote retrieved successfully",
"http_status": 200
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Promote not found",
"http_status": 404
}Reset Password
Rotates the database password for a production environment via Ymir. The old password is immediately invalidated.
The new password is returned ONLY in this response. Store it securely—it cannot be retrieved again.
After rotating the password, you must redeploy the environment for your application to pick up the new credentials.
URL Parameters
| Name | Type | Description |
|---|---|---|
env required | string | The environment ID. Example: "01jfgxk4nqrst5vwx9yz0abcdg" |
Request
curl -X POST \
"https://api.builtfast.com/api/v1/vector/environments/01jfgxk4nqrst5vwx9yz0abcdg/db/reset-password" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json"$response = $vectorPro
->environments.db.resetPassword
->post('01jfgxk4nqrst5vwx9yz0abcdg');const response = await vectorPro
.environments.db.resetPassword
.post('01jfgxk4nqrst5vwx9yz0abcdg');Response
{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdg",
"vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
"your_customer_id": "cust_12345",
"name": "production",
"is_production": true,
"status": "active",
"status_label": "Active",
"provisioning_step": "complete",
"provisioning_step_label": "Complete",
"failure_reason": null,
"php_version": "8.3",
"tags": [],
"platform_domain": "wispy-dust.vectorpages.com",
"custom_domain": "example.com",
"subdomain": "wispy-dust",
"database_user": "user_abc123_production",
"database_password": "aBcD1234!@#$EfGh5678",
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"message": "Database password reset successfully. Store the new password securely - it will not be shown again. Remember to redeploy your environment.",
"http_status": 200
}{
"data": {},
"message": "Environment does not have a database user configured. Deploy the environment first.",
"http_status": 400
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Environment not found",
"http_status": 404
}{
"data": {},
"message": "Failed to rotate database password",
"http_status": 500
}Deployments
Manage code deployments to environments. Each deployment represents a release of your WordPress site to a specific environment (staging or production).
Deployments are created with a pending status and progress through deploying
to either deployed (success) or failed. Each deployment records the actor
who initiated it and timing information.
Deployment Status Lifecycle
pending- Deployment created, waiting to startdeploying- Deployment in progressdeployed- Deployment completed successfullyfailed- Deployment failed (check stdout/stderr for details)
Get Deployment
Retrieves details of a specific deployment including output logs and actor information.
URL Parameters
| Name | Type | Description |
|---|---|---|
deployment required | string | The deployment ID. Example: "01jfgxk4nqrst5vwx9yz0abcdh" |
Request
curl -X GET \
"https://api.builtfast.com/api/v1/vector/deployments/01jfgxk4nqrst5vwx9yz0abcdh" \
-H "Authorization: Bearer $API_KEY" \
-H "Accept: application/json"$deployment = $client->environments->deployments->get('01jfgxk4nqrst5vwx9yz0abcdh');const deployment = await client.environments.deployments.get('01jfgxk4nqrst5vwx9yz0abcdh');Response
{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdh",
"vector_environment_id": "01jfgxk4nqrst5vwx9yz0abcdg",
"status": "deployed",
"status_label": "Deployed",
"stdout": "Building project...\nUploading assets...\nDeployment complete.",
"stderr": null,
"actor": "user@example.com",
"environment": {
"id": "01jfgxk4nqrst5vwx9yz0abcdg",
"vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
"your_customer_id": "cust_12345",
"name": "production",
"is_production": true,
"status": "active",
"status_label": "Active",
"php_version": "8.3",
"tags": [
"wordpress"
],
"fqdn": "example.com",
"custom_domain": "example.com",
"subdomain": "wispy-dust",
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"message": "Deployment retrieved successfully",
"http_status": 200
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Deployment not found",
"http_status": 404
}List Deployments
Retrieves a paginated list of all deployments for a specific environment, ordered by most recent first.
URL Parameters
| Name | Type | Description |
|---|---|---|
env required | string | The environment ID. Example: "01jfgxk4nqrst5vwx9yz0abcdg" |
Query Parameters
| Name | Type | Description |
|---|---|---|
per_page optional | integer | Number of items per page (max 100). Default: 15. Example: 25 |
page optional | integer | Page number for pagination. Default: 1. Example: 1 |
Request
curl -X GET \
"https://api.builtfast.com/api/v1/vector/environments/01jfgxk4nqrst5vwx9yz0abcdg/deployments?per_page=25&page=1" \
-H "Authorization: Bearer $API_KEY" \
-H "Accept: application/json"$deployments = $client->environments->deployments->list(
'01jfgxk4nqrst5vwx9yz0abcdg',
[
'per_page' => 25,
'page' => 1,
]
);const deployments = await client.environments.deployments.list(
'01jfgxk4nqrst5vwx9yz0abcdg',
{
per_page: 25,
page: 1,
}
);Response
{
"data": [
{
"id": "01jfgxk4nqrst5vwx9yz0abcdh",
"vector_environment_id": "01jfgxk4nqrst5vwx9yz0abcdg",
"status": "deployed",
"status_label": "Deployed",
"stdout": "Deployment output...",
"stderr": null,
"actor": "user@example.com",
"environment": {
"id": "01jfgxk4nqrst5vwx9yz0abcdg",
"vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
"your_customer_id": "cust_12345",
"name": "production",
"is_production": true,
"status": "active",
"status_label": "Active",
"php_version": "8.3",
"tags": [
"wordpress"
],
"fqdn": "example.com",
"custom_domain": "example.com",
"subdomain": "wispy-dust",
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
}
],
"links": {},
"meta": {},
"message": "Deployments retrieved successfully",
"http_status": 200
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Environment not found",
"http_status": 404
}Create Deployment
Triggers a new deployment for the environment. The deployment starts with
pending status and progresses through deploying to either deployed
or failed.
The authenticated user is recorded as the deployment actor.
URL Parameters
| Name | Type | Description |
|---|---|---|
env required | string | The environment ID. Example: "01jfgxk4nqrst5vwx9yz0abcdg" |
Body Parameters
| Name | Type | Description |
|---|---|---|
include_uploads optional | boolean | Whether to include wp-content/uploads in the deployment. Defaults to false. Example: false |
include_database optional | boolean | Example: false |
Request
curl -X POST \
"https://api.builtfast.com/api/v1/vector/environments/01jfgxk4nqrst5vwx9yz0abcdg/deployments" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"include_uploads":false,"include_database":false}'$deployment = $client->environments->deployments->create(
'01jfgxk4nqrst5vwx9yz0abcdg',
[
'include_uploads' => false,
'include_database' => false,
]
);const deployment = await client.environments.deployments.create(
'01jfgxk4nqrst5vwx9yz0abcdg',
{
include_uploads: false,
include_database: false,
}
);Response
{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdh",
"vector_environment_id": "01jfgxk4nqrst5vwx9yz0abcdg",
"status": "pending",
"status_label": "Pending",
"stdout": null,
"stderr": null,
"actor": "user@example.com",
"environment": {
"id": "01jfgxk4nqrst5vwx9yz0abcdg",
"vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
"your_customer_id": "cust_12345",
"name": "production",
"is_production": true,
"status": "active",
"status_label": "Active",
"php_version": "8.3",
"tags": [
"wordpress"
],
"fqdn": "example.com",
"custom_domain": "example.com",
"subdomain": "wispy-dust",
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"message": "Deployment initiated",
"http_status": 201
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Environment not found",
"http_status": 404
}Rollback Deployment
Triggers a rollback for the environment. By default, rolls back to the last successful deployment. Optionally, you can specify a target_deployment_id to rollback to a specific previous deployment.
The rollback creates a new deployment record with pending status that progresses
through running to either completed or failed.
URL Parameters
| Name | Type | Description |
|---|---|---|
env required | string | The environment ID. Example: "01jfgxk4nqrst5vwx9yz0abcdg" |
Body Parameters
| Name | Type | Description |
|---|---|---|
target_deployment_id optional | string | Optional deployment ID to rollback to. Must be a previous successful deployment. Example: "01jfgxk4nqrst5vwx9yz0abcdh" |
Request
curl -X POST \
"https://api.builtfast.com/api/v1/vector/environments/01jfgxk4nqrst5vwx9yz0abcdg/rollback" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"target_deployment_id":"01jfgxk4nqrst5vwx9yz0abcdh"}'$deployment = $client->environments->deployments->rollback(
'01jfgxk4nqrst5vwx9yz0abcdg',
[
'target_deployment_id' => '01jfgxk4nqrst5vwx9yz0abcdh',
]
);const deployment = await client.environments.deployments.rollback(
'01jfgxk4nqrst5vwx9yz0abcdg',
{
target_deployment_id: '01jfgxk4nqrst5vwx9yz0abcdh',
}
);Response
{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdi",
"vector_environment_id": "01jfgxk4nqrst5vwx9yz0abcdg",
"status": "pending",
"status_label": "Pending",
"stdout": null,
"stderr": null,
"actor": "user@example.com",
"environment": {
"id": "01jfgxk4nqrst5vwx9yz0abcdg",
"name": "production",
"is_production": true
},
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"message": "Rollback initiated",
"http_status": 201
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Environment not found",
"http_status": 404
}{
"data": {},
"errors": {
"target_deployment_id": [
"The specified deployment does not exist for this environment or has no Ymir deployment ID."
]
},
"message": "Validation failed",
"http_status": 422
}DNS
Recheck DNS
Re-verifies the custom domain DNS configuration on demand. Resolves the customer's CNAME, compares against the expected target (Bunny CDN hostname for production with CDN, otherwise the Ymir vanity domain), and marks the environment as DNS-verified when matched.
URL Parameters
| Name | Type | Description |
|---|---|---|
env required | string | The environment ID. Example: "01jfgxk4nqrst5vwx9yz0abcdg" |
Request
curl -X POST \
"https://api.builtfast.com/api/v1/vector/environments/01jfgxk4nqrst5vwx9yz0abcdg/dns/recheck" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json"$response = $vectorPro
->environments.dns.recheck
->post('01jfgxk4nqrst5vwx9yz0abcdg');const response = await vectorPro
.environments.dns.recheck
.post('01jfgxk4nqrst5vwx9yz0abcdg');Response
{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdg"
},
"message": "DNS verified",
"http_status": 200
}{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdg"
},
"message": "DNS not yet propagating to expected target",
"http_status": 200
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Environment not found",
"http_status": 404
}{
"data": {},
"errors": {
"environment": [
"Environment has no custom domain to verify."
]
},
"message": "Environment has no custom domain to verify.",
"http_status": 422
}Domains
Check the status of domain change operations for an environment. Domain changes are initiated via the environment update endpoint.
Domain Change Status Lifecycle
pending- Domain change created, waiting to startsearch_replacing- Running search-replace on the databasesyncing_env- Syncing environment variables with new domainredeploying- Redeploying the environmentcompleted- Domain change finished successfullyfailed- Domain change failed (seeerror_messagefor details)
Get Domain Change Status
Get the current status of a domain change operation.
URL Parameters
| Name | Type | Description |
|---|---|---|
env required | string | The environment ID. Example: "01jfgxk4nqrst5vwx9yz0abcde" |
domainChange required | string | The domain change ID. Example: "01jfgxk4nqrst5vwx9yz0abcdh" |
Request
curl -X GET \
"https://api.builtfast.com/api/v1/vector/environments/01jfgxk4nqrst5vwx9yz0abcde/domain-changes/01jfgxk4nqrst5vwx9yz0abcdh" \
-H "Authorization: Bearer $API_KEY" \
-H "Accept: application/json"$response = $vectorPro
->environments.domainChanges
->get('01jfgxk4nqrst5vwx9yz0abcde', '01jfgxk4nqrst5vwx9yz0abcdh');const response = await vectorPro
.environments.domainChanges
.get('01jfgxk4nqrst5vwx9yz0abcde', '01jfgxk4nqrst5vwx9yz0abcdh');Response
{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdh",
"vector_environment_id": "01jfgxk4nqrst5vwx9yz0abcde",
"status": "completed",
"status_label": "Completed",
"old_domain": "wispy-dust.vectorpages.com",
"new_domain": "wispy-dust.vectorpages.com",
"old_custom_domain": "example.org",
"new_custom_domain": "example.com",
"error_message": null,
"duration_ms": 12450,
"created_at": "2025-01-15T12:00:00+00:00",
"started_at": "2025-01-15T12:00:00+00:00",
"completed_at": "2025-01-15T12:00:00+00:00"
},
"message": "Domain change retrieved successfully",
"http_status": 200
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Domain change not found",
"http_status": 404
}Secrets
Manage environment-level secrets and environment variables for a specific environment. These are injected during site deployment and are scoped to a single environment.
Items with is_secret=true (the default) are stored in AWS Secrets Manager and their values
are never returned in API responses. Items with is_secret=false are stored as Lambda
environment variables and their values ARE returned in API responses.
Certain keys are reserved for system use and cannot be used.
List Secrets
Retrieves a paginated list of all secrets and environment variables for a specific environment.
Values are only included for environment variables (is_secret=false).
URL Parameters
| Name | Type | Description |
|---|---|---|
env required | string | The environment ID. Example: "01jfgxk4nqrst5vwx9yz0abcdg" |
Query Parameters
| Name | Type | Description |
|---|---|---|
per_page optional | integer | Number of items per page (max 100). Default: 15. Example: 10 |
page optional | integer | Page number for pagination. Example: 1 |
Request
curl -X GET \
"https://api.builtfast.com/api/v1/vector/environments/01jfgxk4nqrst5vwx9yz0abcdg/secrets?per_page=10&page=1" \
-H "Authorization: Bearer $API_KEY" \
-H "Accept: application/json"$secrets = $client->environments->secrets->list('01jfgxk4nqrst5vwx9yz0abcdg');const secrets = await client.environments.secrets.list('01jfgxk4nqrst5vwx9yz0abcdg');Response
{
"data": [
{
"id": "01jfgxk4nqrst5vwx9yz0abcde",
"key": "STRIPE_SECRET_KEY",
"is_secret": true,
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
{
"id": "01jfgxk4nqrst5vwx9yz0abcdf",
"key": "APP_ENV",
"is_secret": false,
"value": "production",
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
}
],
"links": {},
"meta": {},
"message": "Environment secrets retrieved successfully",
"http_status": 200
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Environment not found",
"http_status": 404
}Create Secret
Creates a new secret or environment variable for a specific environment. It will be available to this environment during deployment.
Set is_secret to false to create a plain environment variable instead of a secret.
Environment variables are stored as Lambda env vars (cheaper) and their values are
returned in API responses. Secrets are stored in AWS Secrets Manager and their values
are never returned.
The following keys are reserved and cannot be used: AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY, AUTH_SALT, SECURE_AUTH_SALT, LOGGED_IN_SALT, NONCE_SALT, AUTOMATIC_UPDATER_DISABLED, DISABLE_WP_CRON, DISALLOW_FILE_EDIT, DISALLOW_FILE_MODS, DOMAIN_CURRENT_SITE, WP_HOME, WP_SITEURL, YMIR_ASSETS_PATH, YMIR_ASSETS_URL, YMIR_CACHE_PREFIX, YMIR_CACHE_TABLE, YMIR_CDN_IMAGE_PROCESSING_ENABLED, YMIR_DISTRIBUTION_ID, YMIR_DOMAIN_NAMES, YMIR_ENVIRONMENT, YMIR_MAX_EXECUTION_TIME, YMIR_PRIMARY_DOMAIN_NAME, YMIR_PROJECT_TYPE, YMIR_PUBLIC_STORE, YMIR_REDIS_ENDPOINT, YMIR_SECRETS_PATH, YMIR_UPLOAD_URL, _HANDLER, AWS_ACCESS_KEY_ID, AWS_EXECUTION_ENV, AWS_LAMBDA_FUNCTION_MEMORY_SIZE, AWS_LAMBDA_FUNCTION_NAME, AWS_LAMBDA_FUNCTION_VERSION, AWS_LAMBDA_LOG_GROUP_NAME, AWS_LAMBDA_LOG_STREAM_NAME, AWS_LAMBDA_RUNTIME_API, AWS_REGION, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN, LAMBDA_RUNTIME_DIR, LAMBDA_TASK_ROOT, TZ
URL Parameters
| Name | Type | Description |
|---|---|---|
env required | string | The environment ID. Example: "01jfgxk4nqrst5vwx9yz0abcdg" |
Body Parameters
| Name | Type | Description |
|---|---|---|
key required | string | The secret key name. Must start with a letter and contain only uppercase letters, numbers, and underscores. Example: "STRIPE_SECRET_KEY" |
value required | string | The secret value. Example: "sk_live_xxxx" |
is_secret optional | boolean | Whether this is a secret (stored in AWS Secrets Manager) or a plain environment variable. Default: true. Example: true |
Request
curl -X POST \
"https://api.builtfast.com/api/v1/vector/environments/01jfgxk4nqrst5vwx9yz0abcdg/secrets" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"key":"STRIPE_SECRET_KEY","value":"sk_live_xxxx","is_secret":true}'$secret = $client->environments->secrets->create(
'01jfgxk4nqrst5vwx9yz0abcdg',
[
'key' => 'STRIPE_SECRET_KEY',
'value' => 'sk_live_xxxx',
'is_secret' => true,
]
);const secret = await client.environments.secrets.create(
'01jfgxk4nqrst5vwx9yz0abcdg',
{
key: 'STRIPE_SECRET_KEY',
value: 'sk_live_xxxx',
is_secret: true,
}
);Response
{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcde",
"key": "STRIPE_SECRET_KEY",
"is_secret": true,
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"message": "Environment secret created successfully",
"http_status": 201
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Environment not found",
"http_status": 404
}{
"data": {},
"errors": {
"key": [
"The secret key is required."
]
},
"message": "Validation failed",
"http_status": 422
}Get Secret
Retrieves details of a specific environment secret or variable.
The value is only included for environment variables (is_secret=false).
URL Parameters
| Name | Type | Description |
|---|---|---|
secret required | string | The secret ID. Example: "01jfgxk4nqrst5vwx9yz0abcde" |
Request
curl -X GET \
"https://api.builtfast.com/api/v1/vector/secrets/01jfgxk4nqrst5vwx9yz0abcde" \
-H "Authorization: Bearer $API_KEY" \
-H "Accept: application/json"$secret = $client->environments->secrets->get('01jfgxk4nqrst5vwx9yz0abcde');const secret = await client.environments.secrets.get('01jfgxk4nqrst5vwx9yz0abcde');Response
{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcde",
"key": "STRIPE_SECRET_KEY",
"is_secret": true,
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"message": "Environment secret retrieved successfully",
"http_status": 200
}{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdf",
"key": "APP_ENV",
"is_secret": false,
"value": "production",
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"message": "Environment secret retrieved successfully",
"http_status": 200
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Environment secret not found",
"http_status": 404
}Update Secret
Updates an existing environment secret or variable. You can update the key, value, is_secret flag, or any combination.
The following keys are reserved and cannot be used: AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY, AUTH_SALT, SECURE_AUTH_SALT, LOGGED_IN_SALT, NONCE_SALT, AUTOMATIC_UPDATER_DISABLED, DISABLE_WP_CRON, DISALLOW_FILE_EDIT, DISALLOW_FILE_MODS, DOMAIN_CURRENT_SITE, WP_HOME, WP_SITEURL, YMIR_ASSETS_PATH, YMIR_ASSETS_URL, YMIR_CACHE_PREFIX, YMIR_CACHE_TABLE, YMIR_CDN_IMAGE_PROCESSING_ENABLED, YMIR_DISTRIBUTION_ID, YMIR_DOMAIN_NAMES, YMIR_ENVIRONMENT, YMIR_MAX_EXECUTION_TIME, YMIR_PRIMARY_DOMAIN_NAME, YMIR_PROJECT_TYPE, YMIR_PUBLIC_STORE, YMIR_REDIS_ENDPOINT, YMIR_SECRETS_PATH, YMIR_UPLOAD_URL, _HANDLER, AWS_ACCESS_KEY_ID, AWS_EXECUTION_ENV, AWS_LAMBDA_FUNCTION_MEMORY_SIZE, AWS_LAMBDA_FUNCTION_NAME, AWS_LAMBDA_FUNCTION_VERSION, AWS_LAMBDA_LOG_GROUP_NAME, AWS_LAMBDA_LOG_STREAM_NAME, AWS_LAMBDA_RUNTIME_API, AWS_REGION, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN, LAMBDA_RUNTIME_DIR, LAMBDA_TASK_ROOT, TZ
URL Parameters
| Name | Type | Description |
|---|---|---|
secret required | string | The secret ID. Example: "01jfgxk4nqrst5vwx9yz0abcde" |
Body Parameters
| Name | Type | Description |
|---|---|---|
key optional | string | The new secret key name. Must start with a letter and contain only uppercase letters, numbers, and underscores. Example: "STRIPE_API_KEY" |
value optional | string | The new secret value. Example: "sk_live_yyyy" |
is_secret optional | boolean | Whether this is a secret or a plain environment variable. Example: true |
Request
curl -X PUT \
"https://api.builtfast.com/api/v1/vector/secrets/01jfgxk4nqrst5vwx9yz0abcde" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"key":"STRIPE_API_KEY","value":"sk_live_yyyy","is_secret":true}'$secret = $client->environments->secrets->update(
'01jfgxk4nqrst5vwx9yz0abcde',
[
'key' => 'STRIPE_API_KEY',
'value' => 'sk_live_yyyy',
'is_secret' => true,
]
);const secret = await client.environments.secrets.update(
'01jfgxk4nqrst5vwx9yz0abcde',
{
key: 'STRIPE_API_KEY',
value: 'sk_live_yyyy',
is_secret: true,
}
);Response
{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcde",
"key": "STRIPE_API_KEY",
"is_secret": true,
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"message": "Environment secret updated successfully",
"http_status": 200
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Environment secret not found",
"http_status": 404
}{
"data": {},
"errors": {
"key": [
"The secret key must start with a letter and contain only uppercase letters, numbers, and underscores."
]
},
"message": "Validation failed",
"http_status": 422
}Delete Secret
Deletes an environment secret.
URL Parameters
| Name | Type | Description |
|---|---|---|
secret required | string | The secret ID. Example: "01jfgxk4nqrst5vwx9yz0abcde" |
Request
curl -X DELETE \
"https://api.builtfast.com/api/v1/vector/secrets/01jfgxk4nqrst5vwx9yz0abcde" \
-H "Authorization: Bearer $API_KEY" \
-H "Accept: application/json"$response = $client->environments->secrets->delete('01jfgxk4nqrst5vwx9yz0abcde');const response = await client.environments.secrets.delete('01jfgxk4nqrst5vwx9yz0abcde');Response
{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcde",
"key": "STRIPE_SECRET_KEY",
"is_secret": true,
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"message": "Environment secret deleted successfully",
"http_status": 200
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Environment secret not found",
"http_status": 404
}SSL
Manage SSL provisioning for Vector environments.
SSL is automatically provisioned when environments are deployed. These endpoints provide visibility into SSL status and manual intervention capabilities when provisioning gets stuck.
Environment Status
The main status field tracks the environment lifecycle:
pending- Environment created, awaiting first deployprovisioning- Resources being provisioned (including SSL)active- Environment fully operationalfailed- Provisioning failed
Provisioning Step
The provisioning_step field tracks detailed progress during provisioning.
A companion provisioning_step_label field returns the human-readable label.
null- Not startedpending- Queuedcreating_ymir_project- Creating Ymir projectcreating_ymir_environment- Creating Ymir environmentcreating_database- Creating databasecreating_redis_user- Creating Redis usercreating_cdn- Creating CDN (production only)creating_dns- Creating DNS recordsgenerating_salts- Generating WordPress saltsrequesting_cert- Requesting SSL certificatewaiting_cert- Waiting for SSL certificatedeploying- Deployingconfiguring_dns- Verifying DNS propagationready- Platform SSL complete (terminal for staging)waiting_custom_dns- Waiting for custom domain DNS (production only)provisioning_cdn_ssl- Provisioning CDN SSLcomplete- Fully complete (terminal for production with custom domain)
Get Status
Get the current SSL provisioning status for an environment.
URL Parameters
| Name | Type | Description |
|---|---|---|
env required | string | The environment ID. Example: "01jfgxk4nqrst5vwx9yz0abcdg" |
Request
curl -X GET \
"https://api.builtfast.com/api/v1/vector/environments/01jfgxk4nqrst5vwx9yz0abcdg/ssl" \
-H "Authorization: Bearer $API_KEY" \
-H "Accept: application/json"$sslStatus = $client->sites->ssl->getStatus('01jfgxk4nqrst5vwx9yz0abcdg');const sslStatus = await client.sites.ssl.getStatus('01jfgxk4nqrst5vwx9yz0abcdg');Response
{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdg",
"vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
"your_customer_id": "cust_12345",
"name": "production",
"is_production": true,
"status": "active",
"status_label": "Active",
"provisioning_step": "complete",
"provisioning_step_label": "Complete",
"failure_reason": null,
"php_version": "8.3",
"tags": [],
"platform_domain": "wispy-dust.vectorpages.com",
"custom_domain": "example.com",
"subdomain": "wispy-dust",
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"message": "SSL status retrieved",
"http_status": 200
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Environment not found",
"http_status": 404
}Nudge
Manually nudge SSL provisioning for an environment. Use this when SSL provisioning appears to be stuck or to retry after a failure.
URL Parameters
| Name | Type | Description |
|---|---|---|
env required | string | The environment ID. Example: "01jfgxk4nqrst5vwx9yz0abcdg" |
Body Parameters
| Name | Type | Description |
|---|---|---|
retry optional | boolean | Whether to retry from a failed state. Default: false. Example: true |
Request
curl -X POST \
"https://api.builtfast.com/api/v1/vector/environments/01jfgxk4nqrst5vwx9yz0abcdg/ssl/nudge" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"retry":true}'$response = $client->sites->ssl->nudge('01jfgxk4nqrst5vwx9yz0abcdg');const response = await client.sites.ssl.nudge('01jfgxk4nqrst5vwx9yz0abcdg');Response
{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdg",
"vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
"your_customer_id": "cust_12345",
"name": "production",
"is_production": true,
"status": "provisioning",
"status_label": "Provisioning",
"provisioning_step": "deploying",
"provisioning_step_label": "Deploying",
"failure_reason": null,
"php_version": "8.3",
"tags": [],
"platform_domain": "wispy-dust.vectorpages.com",
"custom_domain": "example.com",
"subdomain": "wispy-dust",
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"message": "SSL provisioning advanced from waiting_cert to deploying",
"http_status": 200
}{
"data": {
"id": "01jfgxk4nqrst5vwx9yz0abcdg",
"vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
"your_customer_id": "cust_12345",
"name": "production",
"is_production": true,
"status": "provisioning",
"status_label": "Provisioning",
"provisioning_step": "waiting_custom_dns",
"provisioning_step_label": "Waiting for custom domain DNS",
"failure_reason": null,
"php_version": "8.3",
"tags": [],
"platform_domain": "wispy-dust.vectorpages.com",
"custom_domain": "example.com",
"subdomain": "wispy-dust",
"created_at": "2025-01-15T12:00:00+00:00",
"updated_at": "2025-01-15T12:00:00+00:00"
},
"message": "SSL provisioning is waiting and cannot advance yet. Current step: waiting_custom_dns",
"http_status": 200
}{
"data": {},
"message": "Unauthenticated",
"http_status": 401
}{
"data": {},
"message": "Environment not found",
"http_status": 404
}