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 progress
  • active - Environment is fully operational
  • suspended - Environment is paused
  • terminating - Environment deletion in progress
  • terminated - 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.

GET/environments

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

NameTypeDescription
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"

Response

application/json
{
  "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
}
GET/environments/{env}

Get Environment

Retrieves details of a specific environment.

URL Parameters

NameTypeDescription
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"

Response

application/json
{
  "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
}
PUT/environments/{env}

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:

  1. CNAME for traffic routing — Point the custom domain to the dns_target value (e.g., example.com CNAME cdn-hostname.b-cdn.net).
  2. 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 remain waiting_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

NameTypeDescription
env
required
string

The environment ID.

Example: "01jfgxk4nqrst5vwx9yz0abcdg"

Body Parameters

NameTypeDescription
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 null to clear tags.

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"]}'

Response

application/json
{
  "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
}
DELETE/environments/{env}

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

NameTypeDescription
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

application/json
{
  "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
}
POST/sites/{site}/environments

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

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
name
required
string

A unique name for this environment (slug format: lowercase letters, numbers, hyphens; consecutive hyphens -- are not allowed). Max 50 chars.

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"]}'

Response

application/json
{
  "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
}

Databases

Manage database credentials for production environments. Each environment has its own isolated database with credentials that can be rotated for security.

POST/environments/{env}/db/promote

Create Database Promote

Promote the dev database to this environment. Exports the dev database, then imports it into the environment's database.

URL Parameters

NameTypeDescription
env
required
string

The environment ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
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

application/json
{
  "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
}
GET/environments/{env}/db/promotes/{promote}

Get Promote Status

Get the current status of a database promote operation.

URL Parameters

NameTypeDescription
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

application/json
{
  "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
}
POST/environments/{env}/db/reset-password

Reset Password

Rotates the database password for a production environment via Ymir. The old password is immediately invalidated.

Warning

The new password is returned ONLY in this response. Store it securely—it cannot be retrieved again.

Note

After rotating the password, you must redeploy the environment for your application to pick up the new credentials.

URL Parameters

NameTypeDescription
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

application/json
{
  "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
}

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 start
  • deploying - Deployment in progress
  • deployed - Deployment completed successfully
  • failed - Deployment failed (check stdout/stderr for details)
GET/deployments/{deployment}

Get Deployment

Retrieves details of a specific deployment including output logs and actor information.

URL Parameters

NameTypeDescription
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"

Response

application/json
{
  "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
}
GET/environments/{env}/deployments

List Deployments

Retrieves a paginated list of all deployments for a specific environment, ordered by most recent first.

URL Parameters

NameTypeDescription
env
required
string

The environment ID.

Example: "01jfgxk4nqrst5vwx9yz0abcdg"

Query Parameters

NameTypeDescription
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"

Response

application/json
{
  "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
}
POST/environments/{env}/deployments

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

NameTypeDescription
env
required
string

The environment ID.

Example: "01jfgxk4nqrst5vwx9yz0abcdg"

Body Parameters

NameTypeDescription
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}'

Response

application/json
{
  "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
}
POST/environments/{env}/rollback

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

NameTypeDescription
env
required
string

The environment ID.

Example: "01jfgxk4nqrst5vwx9yz0abcdg"

Body Parameters

NameTypeDescription
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"}'

Response

application/json
{
  "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
}

DNS

POST/environments/{env}/dns/recheck

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

NameTypeDescription
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

application/json
{
  "data": {
    "id": "01jfgxk4nqrst5vwx9yz0abcdg"
  },
  "message": "DNS verified",
  "http_status": 200
}

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 start
  • search_replacing - Running search-replace on the database
  • syncing_env - Syncing environment variables with new domain
  • redeploying - Redeploying the environment
  • completed - Domain change finished successfully
  • failed - Domain change failed (see error_message for details)
GET/environments/{env}/domain-changes/{domainChange}

Get Domain Change Status

Get the current status of a domain change operation.

URL Parameters

NameTypeDescription
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

application/json
{
  "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
}

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.

GET/environments/{env}/secrets

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

NameTypeDescription
env
required
string

The environment ID.

Example: "01jfgxk4nqrst5vwx9yz0abcdg"

Query Parameters

NameTypeDescription
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"

Response

application/json
{
  "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
}
POST/environments/{env}/secrets

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

NameTypeDescription
env
required
string

The environment ID.

Example: "01jfgxk4nqrst5vwx9yz0abcdg"

Body Parameters

NameTypeDescription
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}'

Response

application/json
{
  "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
}
GET/secrets/{secret}

Get Secret

Retrieves details of a specific environment secret or variable. The value is only included for environment variables (is_secret=false).

URL Parameters

NameTypeDescription
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"

Response

application/json
{
  "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
}
PUT/secrets/{secret}

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

NameTypeDescription
secret
required
string

The secret ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
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}'

Response

application/json
{
  "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
}
DELETE/secrets/{secret}

Delete Secret

Deletes an environment secret.

URL Parameters

NameTypeDescription
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

application/json
{
  "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
}

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 deploy
  • provisioning - Resources being provisioned (including SSL)
  • active - Environment fully operational
  • failed - 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 started
  • pending - Queued
  • creating_ymir_project - Creating Ymir project
  • creating_ymir_environment - Creating Ymir environment
  • creating_database - Creating database
  • creating_redis_user - Creating Redis user
  • creating_cdn - Creating CDN (production only)
  • creating_dns - Creating DNS records
  • generating_salts - Generating WordPress salts
  • requesting_cert - Requesting SSL certificate
  • waiting_cert - Waiting for SSL certificate
  • deploying - Deploying
  • configuring_dns - Verifying DNS propagation
  • ready - Platform SSL complete (terminal for staging)
  • waiting_custom_dns - Waiting for custom domain DNS (production only)
  • provisioning_cdn_ssl - Provisioning CDN SSL
  • complete - Fully complete (terminal for production with custom domain)
GET/environments/{env}/ssl

Get Status

Get the current SSL provisioning status for an environment.

URL Parameters

NameTypeDescription
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"

Response

application/json
{
  "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
}
POST/environments/{env}/ssl/nudge

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

NameTypeDescription
env
required
string

The environment ID.

Example: "01jfgxk4nqrst5vwx9yz0abcdg"

Body Parameters

NameTypeDescription
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

application/json
{
  "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
}