Sites

Create, clone, suspend, and delete serverless WordPress sites, and manage their CDN, WAF, SSH keys, logs, imports, and databases.

Manage serverless WordPress sites deployed on Vector infrastructure. Sites are the primary resource representing customer applications, each with associated environments (staging/production), deployments, and CDN configurations.

Sites are created with a pending status and transition to active once provisioning completes. You can suspend sites to reduce costs during low-traffic periods.

Site Status Lifecycle

  • pending - Site creation initiated, provisioning in progress
  • active - Site is fully operational and serving traffic
  • suspended - Site is paused to reduce costs (can be unsuspended)
  • terminating - Site deletion in progress
  • terminated - Site has been fully removed
GET/sites

List Sites

Retrieves a paginated list of all sites for the authenticated account. Results include each site's environments and their associated domains.

Use search to filter by customer ID or subdomain, status to filter by site lifecycle state, and sort/direction to control ordering. The last_deployed_at field is computed from the most recent completed deployment across all environments and can also be used as a sort field.

Query Parameters

NameTypeDescription
per_page
optional
integer

Number of items per page (max 100). Default: 15.

Example: 25
search
optional
string

Search by your_customer_id or subdomain (partial, case-insensitive).

Example: "acme"
status
optional
string

Filter by site status. Must be one of: pending, activation_requested, active, suspension_requested, suspended, unsuspension_requested, termination_requested, terminated, canceled.

Example: "active"
sort
optional
string

Sort results by the given field. Must be one of: created_at, updated_at, status, your_customer_id, last_deployed_at. Default: created_at.

Example: "your_customer_id"
direction
optional
string

Sort direction. Must be asc or desc. Default: desc.

Example: "asc"
page
optional
integer

Page number for pagination. Default: 1.

Example: 1

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites?per_page=25&search=acme&status=active&sort=your_customer_id&direction=asc&page=1" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": [
    {
      "id": "01jfgxk4nqrst5vwx9yz0abcde",
      "your_customer_id": "cust_12345",
      "status": "active",
      "status_label": "Active",
      "dev_php_version": "8.3",
      "tags": [
        "wordpress",
        "production"
      ],
      "dev_domain": "dev.wispy-dust.vectorpages.com",
      "dev_db_host": "dev-cluster.abc123.us-east-1.rds.amazonaws.com",
      "dev_db_name": "db_01jfgxk4nqrst5vwx9yz0abcde",
      "dev_sftp": {
        "hostname": "ssh.vectorpages.com",
        "port": 22,
        "username": "wispy-dust"
      },
      "last_deployed_at": "2025-06-10T14:30:00+00:00",
      "environments": [
        {
          "id": "01jfgxk4nqrst5vwx9yz0abcdg",
          "name": "production",
          "is_production": true,
          "status": "active",
          "status_label": "Active",
          "php_version": "8.3",
          "platform_domain": "wispy-dust--prod.vectorpages.com",
          "custom_domain": "example.com",
          "custom_domain_certificate_status": "issued",
          "dns_status_state": "verified",
          "requires_dns_action": false,
          "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": "Sites retrieved successfully",
  "http_status": 200
}
GET/sites/{site}

Get Site

Retrieves details of a specific site including its environments and domains.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "id": "01jfgxk4nqrst5vwx9yz0abcde",
    "your_customer_id": "cust_12345",
    "status": "active",
    "status_label": "Active",
    "tags": [
      "wordpress",
      "production"
    ],
    "dev_domain": "dev.wispy-dust.vectorpages.com",
    "dev_db_host": "dev-cluster.abc123.us-east-1.rds.amazonaws.com",
    "dev_db_name": "db_01jfgxk4nqrst5vwx9yz0abcde",
    "environments": [
      {
        "id": "01jfgxk4nqrst5vwx9yz0abcdg",
        "name": "production",
        "is_production": true,
        "status": "active",
        "status_label": "Active",
        "php_version": "8.3",
        "platform_domain": "wispy-dust--prod.vectorpages.com",
        "custom_domain": "example.com",
        "custom_domain_certificate_status": "issued",
        "dns_status_state": "verified",
        "requires_dns_action": false,
        "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": "Site retrieved successfully",
  "http_status": 200
}
POST/sites

Create Site

Creates a new site for the authenticated account. The site is created with a pending status and will transition to active once provisioning completes.

A development container is automatically provisioned for the site, accessible via the dev_domain in the response.

Body Parameters

NameTypeDescription
your_customer_id
required
string

Your internal customer identifier. Used to correlate sites with your billing or CRM system.

Example: "cust_12345"
dev_php_version
required
string

The PHP version for the development container. Must be one of: 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 site. Each tag must be slug format (lowercase letters, numbers, hyphens), max 100 characters, and unique.

Example: ["wordpress","production"]
production_domain
optional
string

Optional custom domain for the production environment. Must be a valid fully qualified domain name, max 253 chars. When provided, SSL certificate provisioning begins automatically. The domain owner must create DNS records to complete provisioning — see the custom_domain_certificate and dns_target fields on the environment for details.

Example: "example.com"
staging_domain
optional
string

Optional custom domain for the staging environment. Must be a valid fully qualified domain name, max 253 chars. When provided, SSL certificate provisioning begins automatically. The domain owner must create DNS records to complete provisioning — see the custom_domain_certificate and dns_target fields on the environment for details.

Example: "staging.example.com"
wp_admin_email
optional
string

Optional email address for WordPress auto-install. When provided, WordPress will be automatically installed in the dev container on first boot. The wp_admin block containing the generated password is only returned in this creation response.

Example: "admin@example.com"
wp_admin_user
optional
string

Optional WordPress admin username. Only used when wp_admin_email is provided. Defaults to "admin". Max 60 characters.

Example: "myadmin"
wp_site_title
optional
string

Optional WordPress site title. Only used when wp_admin_email is provided. Defaults to "WordPress" in the container. Max 255 characters.

Example: "My Blog"

Request

curl -X POST \
  "https://api.builtfast.com/api/v1/vector/sites" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"your_customer_id":"cust_12345","dev_php_version":"8.3","tags":["wordpress","production"],"production_domain":"example.com","staging_domain":"staging.example.com","wp_admin_email":"admin@example.com","wp_admin_user":"myadmin","wp_site_title":"My Blog"}'

Response

application/json
{
  "data": {
    "id": "01jfgxk4nqrst5vwx9yz0abcde",
    "your_customer_id": "cust_12345",
    "status": "pending",
    "status_label": "Pending",
    "dev_php_version": "8.3",
    "tags": [
      "wordpress",
      "production"
    ],
    "dev_domain": "dev.wispy-dust.vectorpages.com",
    "dev_db_host": "dev-cluster.abc123.us-east-1.rds.amazonaws.com",
    "dev_db_name": "db_01jfgxk4nqrst5vwx9yz0abcde",
    "dev_sftp": {
      "hostname": "ssh.vectorpages.com",
      "port": 22,
      "username": "wispy-dust",
      "password": "aBcD1234!@#$EfGh5678"
    },
    "dev_db_username": "db_01jfgxk4nqrst5vwx9yz0abcde",
    "dev_db_password": "aBcD1234!@#$EfGh5678",
    "wp_admin": {
      "user": "myadmin",
      "email": "admin@example.com",
      "password": "xYz9876!@#$AbCd5432",
      "site_title": "My Blog"
    },
    "environments": [
      {
        "id": "01jfgxk4nqrst5vwx9yz0abcdg",
        "name": "production",
        "is_production": true,
        "status": "pending",
        "status_label": "Pending",
        "php_version": "8.3",
        "platform_domain": "wispy-dust--prod.vectorpages.com",
        "custom_domain": "example.com",
        "custom_domain_certificate_status": "pending",
        "dns_status_state": "pending",
        "requires_dns_action": true,
        "created_at": "2025-01-15T12:00:00+00:00",
        "updated_at": "2025-01-15T12:00:00+00:00"
      },
      {
        "id": "01jfgxk4nqrst5vwx9yz0abcdh",
        "name": "staging",
        "is_production": false,
        "status": "pending",
        "status_label": "Pending",
        "php_version": "8.3",
        "platform_domain": "wispy-dust--staging.vectorpages.com",
        "custom_domain": null,
        "custom_domain_certificate_status": null,
        "dns_status_state": "not_required",
        "requires_dns_action": false,
        "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": "Vector site creation initiated",
  "http_status": 201
}
PUT/sites/{site}

Update Site

Updates an existing site's metadata. Only the fields provided will be updated.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
your_customer_id
optional
string

Your internal customer identifier.

Example: "cust_67890"
tags
optional
string[]

Array of tags for categorizing the site. Each tag must be slug format (lowercase letters, numbers, hyphens), max 100 characters, and unique. Pass null to clear tags.

Example: ["wordpress","staging"]

Request

curl -X PUT \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"your_customer_id":"cust_67890","tags":["wordpress","staging"]}'

Response

application/json
{
  "data": {
    "id": "01jfgxk4nqrst5vwx9yz0abcde",
    "your_customer_id": "cust_67890",
    "status": "active",
    "status_label": "Active",
    "tags": [
      "wordpress",
      "staging"
    ],
    "dev_domain": "dev.wispy-dust.vectorpages.com",
    "dev_db_host": "dev-cluster.abc123.us-east-1.rds.amazonaws.com",
    "dev_db_name": "db_01jfgxk4nqrst5vwx9yz0abcde",
    "environments": [],
    "created_at": "2025-01-15T12:00:00+00:00",
    "updated_at": "2025-01-15T12:00:00+00:00"
  },
  "message": "Vector site updated successfully",
  "http_status": 200
}
DELETE/sites/{site}

Delete Site

Initiates deletion of a site. This terminates the site's development container and CDN resources. The site status transitions to terminating and eventually terminated.

Important: By default, all environments must be terminated before the site can be deleted — use the environment delete endpoint to terminate each environment first, or pass delete_environments: true to have any remaining deployed environments terminated inline as part of the site deletion job.

This operation is irreversible. All site data and configurations will be permanently removed.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
delete_environments
optional
boolean

Optional. When true, any remaining deployed environments are terminated as part of the site deletion job (each environment is terminated in sequence before the dev container and Ymir project are removed). When omitted or false, the request is rejected with 422 if deployed environments still exist.

Example: true

Request

curl -X DELETE \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "id": "01jfgxk4nqrst5vwx9yz0abcde",
    "your_customer_id": "cust_12345",
    "status": "termination_requested",
    "status_label": "Termination Requested",
    "tags": [],
    "dev_domain": "dev.wispy-dust.vectorpages.com",
    "dev_db_host": "dev-cluster.abc123.us-east-1.rds.amazonaws.com",
    "dev_db_name": "db_01jfgxk4nqrst5vwx9yz0abcde",
    "environments": [],
    "created_at": "2025-01-15T12:00:00+00:00",
    "updated_at": "2025-01-15T12:00:00+00:00"
  },
  "message": "Vector site deletion initiated",
  "http_status": 202
}
POST/sites/{site}/clone

Clone Site

Creates a new site by cloning an existing site's development container, including files and database. Only the development container is cloned; production and staging environments are not copied. The new site is created with fresh, empty environments.

This workflow is useful for testing larger redesigns or refactors in isolation while still allowing maintenance of the original site. The cloned site operates independently, so changes to one do not affect the other.

The new site inherits attributes from the source site unless overridden in the request. The cloned site is created with a pending status and will transition to active once the clone operation completes.

URL Parameters

NameTypeDescription
site
required
string

The source site ID to clone from.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
your_customer_id
optional
string

Optional customer identifier. Inherits from source if not provided.

Example: "cust_12345"
dev_php_version
optional
string

Optional PHP version. Inherits from source if not provided.

Example: "8.3"
tags
optional
string[]

Optional tags. Inherits from source if not provided.

Example: ["wordpress","clone"]

Request

curl -X POST \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/clone" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"your_customer_id":"cust_12345","dev_php_version":"8.3","tags":["wordpress","clone"]}'

Response

application/json
{
  "data": {
    "id": "01jfgxk4nqrst5vwx9yz0abcdf",
    "your_customer_id": "cust_12345",
    "status": "pending",
    "status_label": "Pending",
    "tags": [
      "wordpress",
      "clone"
    ],
    "dev_domain": "dev.wispy-dust.vectorpages.com",
    "dev_db_username": "db_01jfgxk4nqrst5vwx9yz0abcdf",
    "dev_db_password": "aBcD1234!@#$EfGh5678",
    "environments": [],
    "created_at": "2025-01-15T12:00:00+00:00",
    "updated_at": "2025-01-15T12:00:00+00:00"
  },
  "message": "Vector site clone initiated",
  "http_status": 201
}
PUT/sites/{site}/suspend

Suspend Site

Suspends a site's development container by scaling the ECS service to zero. This reduces costs during low-traffic periods while preserving container resources for quick resumption.

The site must be in active status to be suspended. Suspended sites can be resumed using the unsuspend endpoint.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X PUT \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/suspend" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "id": "01jfgxk4nqrst5vwx9yz0abcde",
    "your_customer_id": "cust_12345",
    "status": "suspended",
    "status_label": "Suspended",
    "tags": [],
    "dev_domain": "dev.wispy-dust.vectorpages.com",
    "environments": [],
    "created_at": "2025-01-15T12:00:00+00:00",
    "updated_at": "2025-01-15T12:00:00+00:00"
  },
  "message": "Vector site suspension initiated",
  "http_status": 200
}
PUT/sites/{site}/unsuspend

Unsuspend Site

Resumes a previously suspended site's development container by scaling the ECS service back to one. The site must be in suspended status to be unsuspended.

After unsuspension, the site transitions back to active status and resumes serving traffic.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X PUT \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/unsuspend" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "id": "01jfgxk4nqrst5vwx9yz0abcde",
    "your_customer_id": "cust_12345",
    "status": "active",
    "status_label": "Active",
    "tags": [],
    "dev_domain": "dev.wispy-dust.vectorpages.com",
    "environments": [],
    "created_at": "2025-01-15T12:00:00+00:00",
    "updated_at": "2025-01-15T12:00:00+00:00"
  },
  "message": "Vector site unsuspension initiated",
  "http_status": 200
}

CDN

Purge CDN cache for a site. Supports full cache purge, purge by cache tag, or purge of specific URLs.

POST/sites/{site}/purge-cache

Purge Cache

Purges the CDN cache for a site. Can purge the entire cache, by cache tag, or a specific URL.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
cache_tag
optional
string

Purge only content with this cache tag.

Example: "images"
url
optional
string

Purge a specific URL.

Example: "https://example.com/style.css"

Request

curl -X POST \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/purge-cache" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"cache_tag":"images","url":"https://example.com/style.css"}'

Response

application/json
{
  "data": {},
  "message": "Cache purged successfully",
  "http_status": 200
}

CDN: Caching

Manage CDN caching configuration including smart cache, vary headers, origin shield, request coalescing, and stale content settings.

GET/sites/{site}/cdn/caching

Get Caching Settings

Retrieves the current CDN caching configuration for a site.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/cdn/caching" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "enable_smart_cache": true,
    "cache_control_max_age_override": 2592000,
    "cache_control_public_max_age_override": 0,
    "disable_cookies": true,
    "cache_error_responses": false,
    "enable_query_string_ordering": true,
    "ignore_query_strings": false,
    "query_string_vary_parameters": [],
    "enable_hostname_vary": false,
    "enable_mobile_vary": false,
    "enable_webp_vary": true,
    "enable_avif_vary": true,
    "enable_country_code_vary": false,
    "enable_cookie_vary": false,
    "cookie_vary_parameters": [],
    "enable_origin_shield": false,
    "origin_shield_zone_code": "",
    "origin_shield_enable_concurrency_limit": false,
    "origin_shield_max_concurrent_requests": 5000,
    "origin_shield_queue_max_wait_time": 30,
    "origin_shield_max_queued_requests": 1000,
    "enable_request_coalescing": false,
    "request_coalescing_timeout": 30,
    "use_stale_while_updating": true,
    "use_stale_while_offline": true,
    "use_background_update": true,
    "enable_cache_slice": false
  },
  "message": "Caching settings retrieved successfully",
  "http_status": 200
}
PUT/sites/{site}/cdn/caching

Update Caching Settings

Updates CDN caching configuration for a site. All fields are optional — only include fields you want to change. Omitted fields retain their current values.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
enable_smart_cache
optional
boolean

Enable smart cache.

Example: true
cache_control_max_age_override
optional
integer

Server cache expiration in seconds. Use -1 to respect origin headers.

Example: 2592000
cache_control_public_max_age_override
optional
integer

Browser cache expiration in seconds.

Example: 0
disable_cookies
optional
boolean

Automatically strip cookies from responses.

Example: true
cache_error_responses
optional
boolean

Cache error responses from origin.

Example: false
enable_query_string_ordering
optional
boolean

Sort query string parameters for better cache hit rates.

Example: true
ignore_query_strings
optional
boolean

Ignore query strings when serving cached objects.

Example: false
query_string_vary_parameters
optional
string[]

Query string parameters to vary cache by.

Example: ["utm_source","ref"]
enable_hostname_vary
optional
boolean

Vary cache by hostname.

Example: false
enable_mobile_vary
optional
boolean

Vary cache by device type (mobile/desktop).

Example: false
enable_webp_vary
optional
boolean

Vary cache by WebP support.

Example: true
enable_avif_vary
optional
boolean

Vary cache by AVIF support.

Example: true
enable_country_code_vary
optional
boolean

Vary cache by country code.

Example: false
enable_cookie_vary
optional
boolean

Vary cache by cookie values.

Example: false
cookie_vary_parameters
optional
string[]

Cookie names to vary cache by.

Example: ["wordpress_logged_in"]
enable_origin_shield
optional
boolean

Enable origin shield.

Example: false
origin_shield_zone_code
optional
string

Origin shield zone code (e.g., "FR", "NY").

Example: "FR"
origin_shield_enable_concurrency_limit
optional
boolean

Enable origin shield concurrency limit.

Example: false
origin_shield_max_concurrent_requests
optional
integer

Max concurrent requests to origin (1-10000).

Example: 5000
origin_shield_queue_max_wait_time
optional
integer

Max queue wait time in seconds.

Example: 30
origin_shield_max_queued_requests
optional
integer

Max queued origin requests (0-30000).

Example: 1000
enable_request_coalescing
optional
boolean

Enable request coalescing.

Example: false
request_coalescing_timeout
optional
integer

Request coalescing lock time in seconds.

Example: 30
use_stale_while_updating
optional
boolean

Serve stale content while cache is updating.

Example: true
use_stale_while_offline
optional
boolean

Serve stale content while origin is offline.

Example: true
use_background_update
optional
boolean

Update cache in background.

Example: true
enable_cache_slice
optional
boolean

Enable cache slicing (optimize for video).

Example: false

Request

curl -X PUT \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/cdn/caching" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"enable_smart_cache":true,"cache_control_max_age_override":2592000,"cache_control_public_max_age_override":0,"disable_cookies":true,"cache_error_responses":false,"enable_query_string_ordering":true,"ignore_query_strings":false,"query_string_vary_parameters":["utm_source","ref"],"enable_hostname_vary":false,"enable_mobile_vary":false,"enable_webp_vary":true,"enable_avif_vary":true,"enable_country_code_vary":false,"enable_cookie_vary":false,"cookie_vary_parameters":["wordpress_logged_in"],"enable_origin_shield":false,"origin_shield_zone_code":"FR","origin_shield_enable_concurrency_limit":false,"origin_shield_max_concurrent_requests":5000,"origin_shield_queue_max_wait_time":30,"origin_shield_max_queued_requests":1000,"enable_request_coalescing":false,"request_coalescing_timeout":30,"use_stale_while_updating":true,"use_stale_while_offline":true,"use_background_update":true,"enable_cache_slice":false}'

Response

application/json
{
  "data": {
    "enable_smart_cache": true,
    "cache_control_max_age_override": 2592000,
    "disable_cookies": true
  },
  "message": "Caching settings updated successfully",
  "http_status": 200
}

CDN: Edge Rules

Manage CDN edge rules for request/response manipulation, redirects, caching overrides, and security controls.

Each edge rule defines:

  • Action: What to do when triggered (redirect, set header, block, override cache, etc.)
  • Triggers: Conditions to match against (URL, headers, country, IP, cookies, etc.)
  • Extra Actions: Additional actions to perform alongside the primary action
GET/sites/{site}/cdn/edge-rules

List Edge Rules

Retrieves all edge rules configured for a site.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/cdn/edge-rules" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": [
    {
      "guid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "description": "Force SSL",
      "enabled": true,
      "action_type": "force-ssl",
      "action_parameter_1": null,
      "action_parameter_2": null,
      "trigger_matching_type": "match-any",
      "triggers": [
        {
          "type": "url",
          "pattern_matching_type": "match-any",
          "pattern_matches": [
            "*"
          ],
          "parameter_1": null
        }
      ],
      "extra_actions": []
    }
  ],
  "message": "Edge rules retrieved successfully",
  "http_status": 200
}
GET/sites/{site}/cdn/edge-rules/{rule}

Get Edge Rule

Retrieves a specific edge rule by GUID.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"
rule
required
string
Example: "architecto"
ruleId
required
string

The edge rule GUID.

Example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/cdn/edge-rules/architecto" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "guid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "description": "Force SSL",
    "enabled": true,
    "action_type": "force-ssl",
    "action_parameter_1": null,
    "action_parameter_2": null,
    "trigger_matching_type": "match-any",
    "triggers": [
      {
        "type": "url",
        "pattern_matching_type": "match-any",
        "pattern_matches": [
          "*"
        ],
        "parameter_1": null
      }
    ],
    "extra_actions": []
  },
  "message": "Edge rule retrieved successfully",
  "http_status": 200
}
POST/sites/{site}/cdn/edge-rules

Create Edge Rule

Creates a new edge rule for a site.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
description
required
string

The rule description (max 255 characters).

Example: "Force SSL on all requests"
enabled
optional
boolean

Whether the rule is enabled. Defaults to true.

Example: true
action_type
required
string

The primary action type. Must be a valid edge rule action type (e.g., force-ssl, redirect, set-response-header, block-request, override-cache-time).

Example: "force-ssl"
action_parameter_1
optional
string

Action parameter 1 (usage depends on action type).

Example: "https://example.com/"
action_parameter_2
optional
string

Action parameter 2 (usage depends on action type).

Example: "architecto"
trigger_matching_type
required
string

How triggers are combined. Must be match-any, match-all, or match-none.

Example: "match-any"
triggers
required
object[]

At least one trigger condition.

Example: [{"type":"url","pattern_matching_type":"match-any","pattern_matches":["*"]}]
extra_actions
optional
object[]

Additional actions to perform.

Example: [[]]
triggers[].type
required
string

The trigger type.

Example: "url"
triggers[].pattern_matching_type
required
string

How patterns are matched.

Example: "match-any"
triggers[].pattern_matches
required
string[]

Patterns to match against.

Example: ["*"]
triggers[].parameter_1
optional
string

Optional trigger parameter.

Example: "architecto"
extra_actions[].action_type
required
string

The extra action type.

Example: "set-response-header"
extra_actions[].action_parameter_1
optional
string

Action parameter 1.

Example: "X-Custom-Header"
extra_actions[].action_parameter_2
optional
string

Action parameter 2.

Example: "custom-value"

Request

curl -X POST \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/cdn/edge-rules" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"description":"Force SSL on all requests","enabled":true,"action_type":"force-ssl","action_parameter_1":"https://example.com/","action_parameter_2":"architecto","trigger_matching_type":"match-any","triggers":[{"type":"url","pattern_matching_type":"match-any","pattern_matches":["*"]}],"extra_actions":[{"action_type":"set-response-header","action_parameter_1":"X-Custom-Header","action_parameter_2":"custom-value"}]}'

Response

application/json
{
  "data": {
    "guid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "description": "Force SSL on all requests",
    "enabled": true,
    "action_type": "force-ssl",
    "action_parameter_1": null,
    "action_parameter_2": null,
    "trigger_matching_type": "match-any",
    "triggers": [
      {
        "type": "url",
        "pattern_matching_type": "match-any",
        "pattern_matches": [
          "*"
        ],
        "parameter_1": null
      }
    ],
    "extra_actions": []
  },
  "message": "Edge rule created successfully",
  "http_status": 201
}
PUT/sites/{site}/cdn/edge-rules/{rule}

Update Edge Rule

Updates an existing edge rule. All fields are optional — only include fields you want to change. Omitted fields retain their current values.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"
rule
required
string
Example: "architecto"
ruleId
required
string

The edge rule GUID.

Example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"

Body Parameters

NameTypeDescription
description
optional
string

The rule description (max 255 characters).

Example: "Updated description"
enabled
optional
boolean

Whether the rule is enabled.

Example: false
action_type
optional
string

The primary action type.

Example: "redirect"
action_parameter_1
optional
string

Action parameter 1.

Example: "https://example.com/new-location"
action_parameter_2
optional
string

Action parameter 2.

Example: "architecto"
trigger_matching_type
optional
string

How triggers are combined. Must be match-any, match-all, or match-none.

Example: "match-all"
triggers
optional
object[]

Trigger conditions (replaces all existing triggers).

Example: [[]]
extra_actions
optional
object[]

Extra actions (replaces all existing extra actions).

Example: [[]]
triggers[].type
required
string

The trigger type.

Example: "url"
triggers[].pattern_matching_type
required
string

How patterns are matched.

Example: "match-any"
triggers[].pattern_matches
required
string[]

Patterns to match against.

Example: ["/old-page"]
triggers[].parameter_1
optional
string

Optional trigger parameter.

Example: "architecto"
extra_actions[].action_type
required
string

The extra action type.

Example: "set-response-header"
extra_actions[].action_parameter_1
optional
string

Action parameter 1.

Example: "X-Redirect"
extra_actions[].action_parameter_2
optional
string

Action parameter 2.

Example: "true"

Request

curl -X PUT \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/cdn/edge-rules/architecto" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"description":"Updated description","enabled":false,"action_type":"redirect","action_parameter_1":"https://example.com/new-location","action_parameter_2":"architecto","trigger_matching_type":"match-all","triggers":[{"type":"url","pattern_matching_type":"match-any","pattern_matches":["/old-page"],"parameter_1":"architecto"}],"extra_actions":[{"action_type":"set-response-header","action_parameter_1":"X-Redirect","action_parameter_2":"true"}]}'

Response

application/json
{
  "data": {
    "guid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "description": "Updated description",
    "enabled": false,
    "action_type": "redirect",
    "action_parameter_1": "https://example.com/new-location",
    "action_parameter_2": null,
    "trigger_matching_type": "match-all",
    "triggers": [
      {
        "type": "url",
        "pattern_matching_type": "match-any",
        "pattern_matches": [
          "/old-page"
        ],
        "parameter_1": null
      }
    ],
    "extra_actions": []
  },
  "message": "Edge rule updated successfully",
  "http_status": 200
}
DELETE/sites/{site}/cdn/edge-rules/{rule}

Delete Edge Rule

Permanently deletes an edge rule. This action cannot be undone.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"
rule
required
string
Example: "architecto"
ruleId
required
string

The edge rule GUID.

Example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"

Request

curl -X DELETE \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/cdn/edge-rules/architecto" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {},
  "message": "Edge rule deleted successfully",
  "http_status": 200
}

CDN: Optimizer

Manage CDN optimizer configuration including image optimization, asset minification, and quality settings.

GET/sites/{site}/cdn/optimizer

Get Optimizer Settings

Retrieves the current CDN optimizer configuration for a site.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/cdn/optimizer" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "optimizer_enabled": true,
    "optimizer_enable_webp": true,
    "optimizer_automatic_optimization_enabled": true,
    "optimizer_enable_manipulation_engine": false,
    "optimizer_watermark_enabled": false,
    "optimizer_minify_css": true,
    "optimizer_minify_javascript": true,
    "optimizer_image_quality": 85,
    "optimizer_mobile_image_quality": 70,
    "optimizer_desktop_max_width": 1600,
    "optimizer_mobile_max_width": 800
  },
  "message": "Optimizer settings retrieved successfully",
  "http_status": 200
}
PUT/sites/{site}/cdn/optimizer

Update Optimizer Settings

Updates CDN optimizer configuration for a site. All fields are optional — only include fields you want to change. Omitted fields retain their current values.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
optimizer_enabled
optional
boolean

Enable Bunny Optimizer.

Example: true
optimizer_enable_webp
optional
boolean

Enable WebP image compression.

Example: true
optimizer_automatic_optimization_enabled
optional
boolean

Enable automatic smart image optimization.

Example: true
optimizer_enable_manipulation_engine
optional
boolean

Enable dynamic image processing engine.

Example: false
optimizer_watermark_enabled
optional
boolean

Enable image watermarking.

Example: false
optimizer_minify_css
optional
boolean

Enable CSS minification.

Example: true
optimizer_minify_javascript
optional
boolean

Enable JavaScript minification.

Example: true
optimizer_image_quality
optional
integer

Desktop image quality (1-100).

Example: 85
optimizer_mobile_image_quality
optional
integer

Mobile image quality (1-100).

Example: 70
optimizer_desktop_max_width
optional
integer

Max automatic image width for desktop (0-5000).

Example: 1600
optimizer_mobile_max_width
optional
integer

Max automatic image width for mobile (0-5000).

Example: 800

Request

curl -X PUT \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/cdn/optimizer" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"optimizer_enabled":true,"optimizer_enable_webp":true,"optimizer_automatic_optimization_enabled":true,"optimizer_enable_manipulation_engine":false,"optimizer_watermark_enabled":false,"optimizer_minify_css":true,"optimizer_minify_javascript":true,"optimizer_image_quality":85,"optimizer_mobile_image_quality":70,"optimizer_desktop_max_width":1600,"optimizer_mobile_max_width":800}'

Response

application/json
{
  "data": {
    "optimizer_enabled": true,
    "optimizer_minify_css": true,
    "optimizer_image_quality": 85
  },
  "message": "Optimizer settings updated successfully",
  "http_status": 200
}

Databases

Manage database credentials for the site's development container. Each site has a dedicated MySQL database for local development with credentials that can be reset for security.

POST/sites/{site}/db/export

Create Export

Start a database export operation. Dispatches an async job to create the export and upload it to S3. Poll the status endpoint to check progress and retrieve the download URL when complete.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
format
optional
string

Export format. Currently only "sql" is supported. Default: sql.

Example: "sql"

Request

curl -X POST \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/db/export" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"format":"sql"}'

Response

application/json
{
  "data": {
    "id": "01jfgxk4nqrst5vwx9yz0abcdg",
    "vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
    "status": "pending",
    "status_label": "Pending",
    "format": "sql",
    "size_bytes": null,
    "duration_ms": null,
    "error_message": null,
    "download_expires_at": null,
    "created_at": "2025-01-15T12:00:00+00:00",
    "started_at": null,
    "completed_at": null
  },
  "message": "Database export started",
  "http_status": 202
}
GET/sites/{site}/db/exports/{export}

Get Export Status

Get the current status of a database export operation. If complete and not expired, includes a presigned download URL valid for 1 hour.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"
export
required
string

The export ID.

Example: "01jfgxk4nqrst5vwx9yz0abcdg"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/db/exports/01jfgxk4nqrst5vwx9yz0abcdg" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "id": "01jfgxk4nqrst5vwx9yz0abcdg",
    "vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
    "status": "completed",
    "status_label": "Completed",
    "format": "sql",
    "size_bytes": 52428800,
    "duration_ms": 30000,
    "error_message": null,
    "download_url": "https://s3.amazonaws.com/bucket/exports/01jfgxk4nqrst5vwx9yz0abcdg.sql?X-Amz-Expires=3600",
    "download_expires_at": "2025-01-15T13:00:00+00:00",
    "created_at": "2025-01-15T12:00:00+00:00",
    "started_at": "2025-01-15T12:00:01+00:00",
    "completed_at": "2025-01-15T12:00:31+00:00"
  },
  "message": "Export retrieved successfully",
  "http_status": 200
}
POST/sites/{site}/db/reset-password

Reset Password

Generates a new database password for the site's development container. The old password is immediately invalidated.

Warning

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

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X POST \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/db/reset-password" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "id": "01jfgxk4nqrst5vwx9yz0abcde",
    "your_customer_id": null,
    "status": "active",
    "status_label": "Active",
    "dev_php_version": "8.3",
    "tags": [],
    "dev_domain": "dev.wispy-dust.vectorpages.com",
    "dev_db_username": "db_01jfgxk4nqrst5vwx9yz0abcde",
    "dev_db_password": "aBcD1234!@#$EfGh5678",
    "environments": [],
    "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.",
  "http_status": 200
}

Deployments List deployments across all environments of a site.

GET/sites/{site}/deployments

List Site Deployments

Retrieves a paginated list of deployments across all non-terminated environments belonging to the given site, ordered by most recent first.

Optionally filter by environment name to narrow results to a single environment (e.g. production or staging).

Deployments attached to terminated environments are always excluded, even when an explicit environment filter matches one.

URL Parameters

NameTypeDescription
site
required
string

The site.

Example: "architecto"
vectorSite
required
string

The site ID or subdomain.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Query Parameters

NameTypeDescription
environment
optional
string

Filter deployments to a specific environment by name.

Example: "production"
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/sites/architecto/deployments?environment=production&per_page=25&page=1" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": [
    {
      "id": "01jfgxk4nqrst5vwx9yz0abcdh",
      "vector_environment_id": "01jfgxk4nqrst5vwx9yz0abcdg",
      "is_auto_deploy": false,
      "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
}

Imports

GET/sites/{site}/imports/{import}

Get Import Status

Get the current status of an archive import operation. If the import is still pending and not expired, includes fresh presigned upload URL(s).

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"
import
required
string

The import ID.

Example: "01jfgxk4nqrst5vwx9yz0abcdh"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/imports/01jfgxk4nqrst5vwx9yz0abcdh" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "id": "01jfgxk4nqrst5vwx9yz0abcdh",
    "vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
    "status": "pending",
    "status_label": "Pending",
    "scope": null,
    "filename": "backup.sql.gz",
    "content_length": 52428800,
    "is_multipart": false,
    "part_count": null,
    "checksum": {
      "provided_md5": "d41d8cd98f00b204e9800998ecf8427e",
      "s3_etag": null
    },
    "metadata": null,
    "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",
    "uploaded_at": null,
    "started_at": null,
    "completed_at": null,
    "upload_url": "https://s3.amazonaws.com/bucket/imports/...",
    "upload_expires_at": "2025-01-16T12:00:00+00:00"
  },
  "message": "Import retrieved successfully",
  "http_status": 200
}
POST/sites/{site}/imports

Create Import Session

Create an archive import session. Returns presigned S3 upload URL(s) that can be used to upload the archive file directly to storage.

The maximum file size is 50GB by default. Higher limits can be configured per-cluster on request.

For files larger than the multipart threshold (~100MB), returns multiple presigned URLs (one per part) along with an upload_id. Parts are 100MB each, so a 1GB file requires 10 parts. For smaller files, returns a single presigned upload URL.

After uploading, call the "Run Import" endpoint to execute the import.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
scope
optional
string
Example: "database"
Enum: database
filename
optional
string

The archive filename.

Example: "backup.sql.gz"
content_length
required
integer

The file size in bytes.

Example: 104857600
content_md5
optional
string

The MD5 hash of the file (32 hex characters).

Example: "d41d8cd98f00b204e9800998ecf8427e"
options
optional
object

Import options.

Example: []
options.drop_tables
optional
boolean

Drop existing tables before import. Default: true.

Example: true
options.disable_foreign_keys
optional
boolean

Disable foreign key checks during import. Default: true.

Example: true
options.search_replace
optional
object

Search and replace configuration.

Example: []
options.search_replace.from
optional
string

The value to search for.

Example: "example.org"
options.search_replace.to
optional
string

The replacement value.

Example: "example.com"

Request

curl -X POST \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/imports" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"scope":"database","filename":"backup.sql.gz","content_length":104857600,"content_md5":"d41d8cd98f00b204e9800998ecf8427e","options":{"drop_tables":true,"disable_foreign_keys":true,"search_replace":{"from":"example.org","to":"example.com"}}}'

Response

application/json
{
  "data": {
    "id": "01jfgxk4nqrst5vwx9yz0abcdh",
    "vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
    "status": "pending",
    "status_label": "Pending",
    "scope": null,
    "filename": "backup.sql.gz",
    "content_length": 52428800,
    "is_multipart": false,
    "part_count": null,
    "checksum": {
      "provided_md5": "d41d8cd98f00b204e9800998ecf8427e",
      "s3_etag": null
    },
    "metadata": null,
    "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",
    "uploaded_at": null,
    "started_at": null,
    "completed_at": null,
    "upload_url": "https://s3.amazonaws.com/bucket/imports/...",
    "upload_expires_at": "2025-01-16T12:00:00+00:00"
  },
  "message": "Import session created successfully",
  "http_status": 201
}
POST/sites/{site}/imports/{import}/run

Run Import

Execute an archive import from S3 after the file has been uploaded via the presigned URL(s). Dispatches an async job to perform the import.

For multipart uploads, provide the parts array containing the part_number and etag for each uploaded part. Each part can be up to 5GB. The server will finalize the multipart upload before starting the import job.

The import must be in pending or uploaded status and not expired.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"
import
required
string

The import ID.

Example: "01jfgxk4nqrst5vwx9yz0abcdh"

Body Parameters

NameTypeDescription
parts
optional
string[]

Multipart upload parts (required for multipart uploads).

Example: ["architecto"]
parts[].part_number
required
integer

The part number.

Example: 1
parts[].etag
required
string

The ETag returned by S3 for this part.

Example: "\"d41d8cd98f00b204e9800998ecf8427e\""

Request

curl -X POST \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/imports/01jfgxk4nqrst5vwx9yz0abcdh/run" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"parts":["architecto"]}'

Response

application/json
{
  "data": {
    "id": "01jfgxk4nqrst5vwx9yz0abcdh",
    "vector_site_id": "01jfgxk4nqrst5vwx9yz0abcde",
    "status": "uploaded",
    "status_label": "Uploaded",
    "scope": null,
    "filename": "backup.sql.gz",
    "content_length": 52428800,
    "is_multipart": false,
    "part_count": null,
    "checksum": {
      "provided_md5": "d41d8cd98f00b204e9800998ecf8427e",
      "s3_etag": null
    },
    "metadata": null,
    "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",
    "uploaded_at": "2025-01-15T12:00:01+00:00",
    "started_at": null,
    "completed_at": null
  },
  "message": "Archive import started",
  "http_status": 202
}

Logs

Fetch logs for a Vector site. Supports filtering by time range, environment, deployment, and log level. Rate limited to 60 queries per hour per account.

GET/sites/{site}/logs

Get Logs

Retrieves logs for the specified Vector site. Logs are returned in reverse chronological order (newest first).

Use the environment, deployment_id, and level filters to narrow down results. Use cursor-based pagination for large result sets.

Rate limited to 60 queries per hour per account. Query time window is limited to 24 hours.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Query Parameters

NameTypeDescription
start_time
optional
string

Start time for log query. RFC3339 format or relative (e.g., "now-1h"). Default: now-1h.

Example: "now-24h"
end_time
optional
string

End time for log query. RFC3339 format or relative. Default: now.

Example: "now"
limit
optional
integer

Maximum number of log entries to return (1-1000). Default: 100.

Example: 500
environment
required
string

The environment name (e.g., prod, staging, dev). Must be an environment that belongs to the site.

Example: "prod"
deployment_id
optional
string

Filter by deployment ID.

Example: "01jfgxk4nqrst5vwx9yz0abcdh"
cursor
optional
string

Pagination cursor from previous response.

Example: "abc123xyz"
level
optional
string

Filter by log level (e.g., error, warning, info).

Example: "error"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/logs?start_time=now-24h&end_time=now&limit=500&environment=prod&deployment_id=01jfgxk4nqrst5vwx9yz0abcdh&cursor=abc123xyz&level=error" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "logs": {
      "tables": [
        {
          "name": "0",
          "columns": [
            {
              "name": "_time",
              "type": "datetime"
            },
            {
              "name": "message",
              "type": "string"
            },
            {
              "name": "level",
              "type": "string"
            }
          ],
          "rows": [
            [
              "2025-01-15T12:00:00+00:00",
              "Request completed",
              "info"
            ]
          ]
        }
      ],
      "status": {
        "rowsExamined": 1000,
        "rowsMatched": 50
      }
    },
    "cursor": "abc123xyz",
    "has_more": true
  },
  "message": "Logs retrieved successfully",
  "http_status": 200
}

SFTP

Manage SFTP access to your site's development container. SFTP provides secure file transfer for uploading themes, plugins, and other files directly to your dev environment.

POST/sites/{site}/sftp/reset-password

Reset Password

Generates a new SFTP password for the site's development container. The old password is immediately invalidated.

Warning

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

SFTP connection details:

  • hostname: ssh.{partner-domain} (e.g., ssh.vectorpages.com)
  • port: 22
  • username: site subdomain (e.g., my-site)
  • password: the generated password

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X POST \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/sftp/reset-password" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "id": "01jfgxk4nqrst5vwx9yz0abcde",
    "your_customer_id": null,
    "status": "active",
    "status_label": "Active",
    "dev_php_version": "8.3",
    "tags": [],
    "dev_domain": "dev.wispy-dust.vectorpages.com",
    "dev_sftp": {
      "hostname": "ssh.vectorpages.com",
      "port": 22,
      "username": "wispy-dust",
      "password": "aBcD1234!@#$EfGh5678"
    },
    "environments": [],
    "created_at": "2025-01-15T12:00:00+00:00",
    "updated_at": "2025-01-15T12:00:00+00:00"
  },
  "message": "SFTP password reset successfully. Store the new password securely - it will not be shown again.",
  "http_status": 200
}

SSH Keys

Manage SSH keys installed on specific dev sites. These keys are actually deployed to the site's container and grant SSH access.

When a new dev site is created, account-level default SSH keys are automatically installed on the site. Use these endpoints to manage site-specific keys. Account-level defaults are returned by the list endpoint (flagged with is_account_default: true) but must be managed via the account-level SSH key endpoints.

GET/sites/{site}/ssh-keys

List SSH Keys

Retrieves all SSH keys installed on a specific dev site. The response includes site-specific keys plus any account-level default keys (flagged with is_account_default: true), which are automatically installed on every site in the account. Account-level defaults are read-only from this endpoint — use the account SSH key endpoints to manage them.

Results are ordered with site-specific keys first, then account-level defaults, each group sorted alphabetically by name.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcdi"

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/sites/01jfgxk4nqrst5vwx9yz0abcdi/ssh-keys?per_page=25&page=1" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": [
    {
      "id": "01jfgxk4nqrst5vwx9yz0abcdi",
      "account_id": 1,
      "vector_site_id": "01jfgxk4nqrst5vwx9yz0abcdj",
      "name": "developer key",
      "fingerprint": "SHA256:abc123def456...",
      "public_key_preview": "ssh-rsa AAAAB3NzaC1yc2EA...user@host",
      "is_account_default": false,
      "created_at": "2025-01-15T12:00:00+00:00",
      "updated_at": "2025-01-15T12:00:00+00:00"
    },
    {
      "id": "01jfgxk4nqrst5vwx9yz0abcdl",
      "account_id": 1,
      "vector_site_id": null,
      "name": "account default key",
      "fingerprint": "SHA256:def789abc012...",
      "public_key_preview": "ssh-ed25519 AAAAC3NzaC1l...team@account",
      "is_account_default": true,
      "created_at": "2025-01-10T09:00:00+00:00",
      "updated_at": "2025-01-10T09:00:00+00:00"
    }
  ],
  "links": {},
  "meta": {},
  "message": "SSH keys retrieved successfully",
  "http_status": 200
}
POST/sites/{site}/ssh-keys

Add SSH Key

Adds a new SSH key to a specific dev site. The key will be deployed to the site's container and grant SSH access.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcdi"

Body Parameters

NameTypeDescription
name
required
string

A friendly name for the SSH key.

Example: "developer key"
public_key
required
string

The SSH public key in OpenSSH format.

Example: "ssh-rsa AAAAB3NzaC1yc2EA... user@host"

Request

curl -X POST \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcdi/ssh-keys" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"name":"developer key","public_key":"ssh-rsa AAAAB3NzaC1yc2EA... user@host"}'

Response

application/json
{
  "data": {
    "id": "01jfgxk4nqrst5vwx9yz0abcdi",
    "account_id": 1,
    "vector_site_id": "01jfgxk4nqrst5vwx9yz0abcdj",
    "name": "developer key",
    "fingerprint": "SHA256:abc123def456...",
    "public_key_preview": "ssh-rsa AAAAB3NzaC1yc2EA...user@host",
    "is_account_default": false,
    "created_at": "2025-01-15T12:00:00+00:00",
    "updated_at": "2025-01-15T12:00:00+00:00"
  },
  "message": "SSH key added to site successfully",
  "http_status": 201
}
DELETE/sites/{site}/ssh-keys/{key}

Remove SSH Key

Removes a site-specific SSH key from a dev site. The key will be removed from the site's container and SSH access will be revoked.

Only keys that belong to this specific site may be removed here — account-level default keys (is_account_default: true) are scoped out and will return 404 via this endpoint. Manage those via the account SSH key endpoints; removing an account-level key propagates to every site in the account.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcdi"
key
required
string

The SSH key ID.

Example: "01jfgxk4nqrst5vwx9yz0abcdk"

Request

curl -X DELETE \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcdi/ssh-keys/01jfgxk4nqrst5vwx9yz0abcdk" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "id": "01jfgxk4nqrst5vwx9yz0abcdk",
    "account_id": 1,
    "vector_site_id": "01jfgxk4nqrst5vwx9yz0abcdj",
    "name": "developer key",
    "fingerprint": "SHA256:abc123def456...",
    "public_key_preview": "ssh-rsa AAAAB3NzaC1yc2EA...user@host",
    "is_account_default": false,
    "created_at": "2025-01-15T12:00:00+00:00",
    "updated_at": "2025-01-15T12:00:00+00:00"
  },
  "message": "SSH key removed from site successfully",
  "http_status": 200
}

WAF: Access Lists

Manage WAF access lists including managed threat feeds and custom IP/CIDR/ASN/domain lists. Managed lists are curated threat intelligence feeds that can be enabled/disabled. Custom lists allow you to create your own allowlists or blocklists.

GET/sites/{site}/waf/access-lists

List Access Lists

Retrieves all access lists (managed and custom) for a site, including usage limits.

URL Parameters

NameTypeDescription
site
required
string

The site.

Example: "architecto"
vectorSite
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/architecto/waf/access-lists" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "managed_lists": [
      {
        "list_id": 1,
        "configuration_id": 42,
        "name": "TOR Exit Nodes",
        "description": "Known TOR exit node IP addresses",
        "is_enabled": true,
        "type": 0,
        "category": 32,
        "action": 0,
        "required_plan": 0,
        "entry_count": 12345,
        "update_frequency": "1.00:00:00",
        "last_updated": "2026-04-01T00:00:00Z"
      }
    ],
    "custom_lists": [],
    "custom_entry_count": 0,
    "custom_entry_limit": 10000,
    "custom_list_count": 0,
    "custom_list_limit": 25
  },
  "message": "Access lists retrieved successfully",
  "http_status": 200
}
GET/sites/{site}/waf/access-lists/{listId}

Get Custom Access List

Retrieves a single custom access list with its content.

URL Parameters

NameTypeDescription
site
required
string

The site.

Example: "architecto"
listId
required
integer

The access list ID.

Example: 1
vectorSite
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/architecto/waf/access-lists/1" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "id": 1,
    "name": "Office IPs",
    "description": "Trusted office IP ranges",
    "type": 0,
    "content": "203.0.113.0/24\n198.51.100.1",
    "checksum": "abc123",
    "entry_count": 2,
    "last_modified": "2026-04-01T00:00:00Z"
  },
  "message": "Custom access list retrieved successfully",
  "http_status": 200
}
POST/sites/{site}/waf/access-lists

Create Custom Access List

Creates a new custom access list with the provided entries.

URL Parameters

NameTypeDescription
site
required
string

The site.

Example: "architecto"
vectorSite
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
name
required
string

The list name (max 255 characters).

Example: "Office IPs"
description
optional
string

A description of the list (max 1000 characters).

Example: "Trusted office IP ranges"
type
required
integer

The list type (0=IP, 1=CIDR, 2=ASN, 3=Country, 4=Domain, 5=Header).

Example: 0
content
required
string

Newline-separated list entries.

Example: "203.0.113.0/24\\n198.51.100.1"

Request

curl -X POST \
  "https://api.builtfast.com/api/v1/vector/sites/architecto/waf/access-lists" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"name":"Office IPs","description":"Trusted office IP ranges","type":0,"content":"203.0.113.0/24\\n198.51.100.1"}'

Response

application/json
{
  "data": {
    "id": 1,
    "name": "Office IPs",
    "description": "Trusted office IP ranges",
    "type": 0,
    "content": "203.0.113.0/24\n198.51.100.1",
    "checksum": "abc123",
    "entry_count": 2,
    "last_modified": "2026-04-01T00:00:00Z"
  },
  "message": "Custom access list created successfully",
  "http_status": 201
}
PATCH/sites/{site}/waf/access-lists/{listId}

Update Custom Access List

Updates a custom access list's name and/or content. Only include fields you want to change.

URL Parameters

NameTypeDescription
site
required
string

The site.

Example: "architecto"
listId
required
integer

The access list ID.

Example: 1
vectorSite
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
name
optional
string

The list name (max 255 characters).

Example: "Updated Office IPs"
content
optional
string

Newline-separated list entries.

Example: "203.0.113.0/24\\n198.51.100.1\\n10.0.0.0/8"

Request

curl -X PATCH \
  "https://api.builtfast.com/api/v1/vector/sites/architecto/waf/access-lists/1" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"name":"Updated Office IPs","content":"203.0.113.0/24\\n198.51.100.1\\n10.0.0.0/8"}'

Response

application/json
{
  "data": {
    "id": 1,
    "name": "Updated Office IPs",
    "description": "Trusted office IP ranges",
    "type": 0,
    "content": "203.0.113.0/24\n198.51.100.1\n10.0.0.0/8",
    "checksum": "def456",
    "entry_count": 3,
    "last_modified": "2026-04-07T00:00:00Z"
  },
  "message": "Custom access list updated successfully",
  "http_status": 200
}
DELETE/sites/{site}/waf/access-lists/{listId}

Delete Custom Access List

Permanently deletes a custom access list. This action cannot be undone.

URL Parameters

NameTypeDescription
site
required
string

The site.

Example: "architecto"
listId
required
integer

The access list ID.

Example: 1
vectorSite
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X DELETE \
  "https://api.builtfast.com/api/v1/vector/sites/architecto/waf/access-lists/1" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {},
  "message": "Custom access list deleted successfully",
  "http_status": 200
}
PATCH/sites/{site}/waf/access-lists/configurations/{configId}

Update Access List Configuration

Updates the configuration (enable/disable and action) for any access list (managed or custom). Use the configuration_id from the index response, not the list_id.

URL Parameters

NameTypeDescription
site
required
string

The site.

Example: "architecto"
configId
required
integer

The access list configuration ID.

Example: 42
vectorSite
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
is_enabled
optional
boolean

Whether the list is enabled.

Example: true
action
optional
integer

The action to take (0=Block, 1=Log, 2=Allow, 3=Challenge, 4=Captcha, 5=Bypass).

Example: 0

Request

curl -X PATCH \
  "https://api.builtfast.com/api/v1/vector/sites/architecto/waf/access-lists/configurations/42" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"is_enabled":true,"action":0}'

Response

application/json
{
  "data": {},
  "message": "Access list configuration updated successfully",
  "http_status": 200
}
GET/sites/{site}/waf/access-lists/enums

Get Access List Enums

Retrieves available enum values for access list types, actions, and categories.

URL Parameters

NameTypeDescription
site
required
string

The site.

Example: "architecto"
vectorSite
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/architecto/waf/access-lists/enums" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {},
  "message": "Access list enums retrieved successfully",
  "http_status": 200
}

WAF: Blocked IPs

Block specific IP addresses or CIDR ranges from accessing your site. Blocked IPs receive a 403 Forbidden response.

  • Single IPs: 192.0.2.1
  • CIDR ranges: 198.51.100.0/24
GET/sites/{site}/waf/blocked-ips

List Blocked IPs

Retrieves all blocked IP addresses for a site.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/waf/blocked-ips" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": [
    {
      "ip": "192.0.2.1"
    },
    {
      "ip": "198.51.100.0/24"
    }
  ],
  "message": "Blocked IPs retrieved successfully",
  "http_status": 200
}
POST/sites/{site}/waf/blocked-ips

Add Blocked IP

Adds an IP address to the blocked list. Supports both IPv4 and IPv6 addresses.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
ip
required
string

The IP address to block.

Example: "192.0.2.1"

Request

curl -X POST \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/waf/blocked-ips" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"ip":"192.0.2.1"}'

Response

application/json
{
  "data": {
    "ip": "192.0.2.1"
  },
  "message": "Blocked IP added successfully",
  "http_status": 201
}
DELETE/sites/{site}/waf/blocked-ips/{ip}

Remove Blocked IP

Removes an IP address from the blocked list.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"
ip
required
string

The IP address to remove.

Example: "192.0.2.1"

Request

curl -X DELETE \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/waf/blocked-ips/192.0.2.1" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "ip": "192.0.2.1"
  },
  "message": "Blocked IP removed successfully",
  "http_status": 200
}

WAF: Bot Detection

Manage bot detection settings including execution mode, sensitivity levels, and browser fingerprint configuration.

GET/sites/{site}/waf/bot-detection

Get Bot Detection Settings

Retrieves the current bot detection configuration for a site.

URL Parameters

NameTypeDescription
site
required
string

The site.

Example: "architecto"
vectorSite
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/architecto/waf/bot-detection" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "execution_mode": 1,
    "request_integrity_sensitivity": 2,
    "ip_address_sensitivity": 1,
    "browser_fingerprint_sensitivity": 2,
    "browser_fingerprint_aggression": 1,
    "browser_fingerprint_complex_enabled": false
  },
  "message": "Bot detection settings retrieved successfully",
  "http_status": 200
}
PUT/sites/{site}/waf/bot-detection

Update Bot Detection Settings

Updates bot detection configuration for a site. All fields are optional — only include fields you want to change. Omitted fields retain their current values.

URL Parameters

NameTypeDescription
site
required
string

The site.

Example: "architecto"
vectorSite
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
execution_mode
optional
integer

Execution mode (0=Off, 1=On).

Example: 1
request_integrity_sensitivity
optional
integer

Request integrity sensitivity (0=Off, 1=Low, 2=Medium, 3=High).

Example: 2
ip_address_sensitivity
optional
integer

IP address sensitivity (0=Off, 1=Low, 2=Medium, 3=High).

Example: 1
browser_fingerprint_sensitivity
optional
integer

Browser fingerprint sensitivity (0=Off, 1=Low, 2=Medium, 3=High).

Example: 2
browser_fingerprint_aggression
optional
integer

Browser fingerprint aggression (0=Off, 1=Low, 2=Medium, 3=High, 4=VeryHigh).

Example: 1
browser_fingerprint_complex_enabled
optional
boolean

Enable complex browser fingerprinting.

Example: false

Request

curl -X PUT \
  "https://api.builtfast.com/api/v1/vector/sites/architecto/waf/bot-detection" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"execution_mode":1,"request_integrity_sensitivity":2,"ip_address_sensitivity":1,"browser_fingerprint_sensitivity":2,"browser_fingerprint_aggression":1,"browser_fingerprint_complex_enabled":false}'

Response

application/json
{
  "data": {
    "execution_mode": 1,
    "request_integrity_sensitivity": 2,
    "ip_address_sensitivity": 1,
    "browser_fingerprint_sensitivity": 2,
    "browser_fingerprint_aggression": 1,
    "browser_fingerprint_complex_enabled": false
  },
  "message": "Bot detection settings updated successfully",
  "http_status": 200
}

WAF: DDoS Protection

Manage DDoS protection settings including sensitivity, execution mode, and challenge window.

GET/sites/{site}/waf/ddos

Get DDoS Protection Settings

Retrieves the current DDoS protection configuration for a site.

URL Parameters

NameTypeDescription
site
required
string

The site.

Example: "architecto"
vectorSite
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/architecto/waf/ddos" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "enabled": true,
    "protection_type": 1,
    "sensitivity": 2,
    "execution_mode": 1,
    "challenge_window": 30
  },
  "message": "DDoS protection settings retrieved successfully",
  "http_status": 200
}
PUT/sites/{site}/waf/ddos

Update DDoS Protection Settings

Updates DDoS protection configuration for a site. All fields are optional — only include fields you want to change. Omitted fields retain their current values.

URL Parameters

NameTypeDescription
site
required
string

The site.

Example: "architecto"
vectorSite
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
enabled
optional
boolean

Enable or disable DDoS protection.

Example: true
protection_type
optional
integer

Protection type (0=DetectOnly, 1=ActiveStandard, 2=ActiveAggressive).

Example: 1
sensitivity
optional
integer

Shield sensitivity (0=Off, 1=Low, 2=Medium, 3=High, 4=VeryHigh).

Example: 2
execution_mode
optional
integer

Execution mode (0=Off, 1=On).

Example: 1
challenge_window
optional
integer

Challenge window in seconds.

Example: 30

Request

curl -X PUT \
  "https://api.builtfast.com/api/v1/vector/sites/architecto/waf/ddos" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"enabled":true,"protection_type":1,"sensitivity":2,"execution_mode":1,"challenge_window":30}'

Response

application/json
{
  "data": {
    "enabled": true,
    "protection_type": 1,
    "sensitivity": 2,
    "execution_mode": 1,
    "challenge_window": 30
  },
  "message": "DDoS protection settings updated successfully",
  "http_status": 200
}

WAF: Profiles

List available WAF profiles that can be assigned to a site.

GET/sites/{site}/waf/profiles

List WAF Profiles

Retrieves the available WAF profiles that can be assigned to a site.

URL Parameters

NameTypeDescription
site
required
string

The site.

Example: "architecto"
vectorSite
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/architecto/waf/profiles" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": [
    {
      "Id": 1,
      "Name": "Default"
    },
    {
      "Id": 2,
      "Name": "WordPress"
    }
  ],
  "message": "WAF profiles retrieved successfully",
  "http_status": 200
}

WAF: Rate Limits

Protect against DDoS, brute force, and API abuse by limiting request frequency.

Each rule defines:

  • Threshold: Requests allowed within a time window
  • Block Duration: How long to block offending clients (30s to 1 hour)
  • Matching Criteria: Target specific paths, methods, or request patterns

Maximum 25 rate limit rules per site.

GET/sites/{site}/waf/rate-limits

List Rate Limits

Retrieves all rate limit rules configured for a site.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/waf/rate-limits" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": [
    {
      "id": 12345,
      "name": "API Rate Limit",
      "description": "Limit API requests to 100/second",
      "shield_zone_id": 67890,
      "configuration": {
        "request_count": 100,
        "timeframe": 1,
        "block_time": 60,
        "value": "/api/*",
        "action": "rate-limit",
        "operator": "begins-with",
        "variables": [
          "request-uri"
        ],
        "transformations": [
          "lowercase"
        ]
      }
    }
  ],
  "message": "Rate limits retrieved successfully",
  "http_status": 200
}
GET/sites/{site}/waf/rate-limits/{rule}

Get Rate Limit

Retrieves a specific rate limit rule by ID.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"
rule
required
integer

The rate limit rule ID.

Example: 12345

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/waf/rate-limits/12345" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "id": 12345,
    "name": "API Rate Limit",
    "description": "Limit API requests to 100/second",
    "shield_zone_id": 67890,
    "configuration": {
      "request_count": 100,
      "timeframe": 1,
      "block_time": 60,
      "value": "/api/*",
      "action": "rate-limit",
      "operator": "begins-with",
      "variables": [
        "request-uri"
      ],
      "transformations": [
        "lowercase"
      ]
    }
  },
  "message": "Rate limit retrieved successfully",
  "http_status": 200
}
POST/sites/{site}/waf/rate-limits

Create Rate Limit

Creates a new rate limit rule for a site. Maximum 25 rate limit rules per zone.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
name
required
string

The rule name (max 255 characters).

Example: "API Rate Limit"
description
optional
string

The rule description (max 1000 characters).

Example: "Limit API requests to prevent abuse"
request_count
required
integer

Number of requests allowed within the timeframe. Must be between 1 and 1,000,000.

Example: 100
timeframe
required
integer

Time window for counting requests. Must be exactly 1 (per second) or 10 (per 10 seconds).

Example: 1
block_time
required
integer

Duration to block clients who exceed the limit, in seconds. Must be one of: 30, 60, 300, 900, 1800, 3600.

Example: 60
value
optional
string

URL path or pattern to match against. Max 2048 characters.

Example: "/api/*"
operator
optional
string

Match operator for comparing against the value. Must be one of: begins-with, ends-with, contains, contains-word, str-match, eq, ge, gt, le, lt, within, regex, str-eq, detect-sqli, detect-xss.

Example: "begins-with"
transformations
optional
string[]

Transformations to apply to variable values before matching. Each must be one of: cmdline, compress-whitespace, css-decode, hex-encode, html-entity-decode, js-decode, length, lowercase, md5, normalize-path, normalise-path, normalize-path-win, normalise-path-win, remove-comments, remove-nulls, remove-whitespace, replace-comments, sha1, url-decode, url-decode-uni, utf8-to-unicode.

Example: ["lowercase","url-decode"]
variables
optional
string[]

Request variables to inspect when matching. Each must be one of: request-uri, request-uri-raw, args, args-combined-size, args-get, args-get-names, args-post, args-post-names, files-names, geo, remote-addr, query-string, request-basename, request-body, request-cookies-names, request-cookies, request-filename, request-headers-names, request-headers, request-line, request-method, request-protocol, response-body, response-headers, response-status.

Example: ["request-uri"]

Request

curl -X POST \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/waf/rate-limits" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"name":"API Rate Limit","description":"Limit API requests to prevent abuse","request_count":100,"timeframe":1,"block_time":60,"value":"/api/*","operator":"begins-with","transformations":["lowercase","url-decode"],"variables":["request-uri"]}'

Response

application/json
{
  "data": {
    "id": 12345,
    "name": "API Rate Limit",
    "description": "Limit API requests to prevent abuse",
    "shield_zone_id": 67890,
    "configuration": {
      "request_count": 100,
      "timeframe": 1,
      "block_time": 60,
      "value": "/api/*",
      "action": "rate-limit",
      "operator": "begins-with",
      "variables": [
        "request-uri"
      ],
      "transformations": [
        "lowercase",
        "url-decode"
      ]
    }
  },
  "message": "Rate limit created successfully",
  "http_status": 201
}
PUT/sites/{site}/waf/rate-limits/{rule}

Update Rate Limit

Updates an existing rate limit rule. All fields are optional - only include fields you want to change. Omitted fields retain their current values.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"
rule
required
integer

The rate limit rule ID.

Example: 12345

Body Parameters

NameTypeDescription
name
optional
string

The rule name (max 255 characters).

Example: "Updated Rate Limit"
description
optional
string

The rule description (max 1000 characters).

Example: "Updated description for the rule"
request_count
optional
integer

Number of requests allowed within the timeframe. Must be between 1 and 1,000,000.

Example: 200
timeframe
optional
integer

Time window for counting requests. Must be exactly 1 (per second) or 10 (per 10 seconds).

Example: 10
block_time
optional
integer

Duration to block clients who exceed the limit, in seconds. Must be one of: 30, 60, 300, 900, 1800, 3600.

Example: 300
value
optional
string

URL path or pattern to match against. Max 2048 characters.

Example: "/api/v2/*"
operator
optional
string

Match operator for comparing against the value. Must be one of: begins-with, ends-with, contains, contains-word, str-match, eq, ge, gt, le, lt, within, regex, str-eq, detect-sqli, detect-xss.

Example: "regex"
transformations
optional
string[]

Transformations to apply to variable values before matching. Each must be one of: cmdline, compress-whitespace, css-decode, hex-encode, html-entity-decode, js-decode, length, lowercase, md5, normalize-path, normalise-path, normalize-path-win, normalise-path-win, remove-comments, remove-nulls, remove-whitespace, replace-comments, sha1, url-decode, url-decode-uni, utf8-to-unicode.

Example: ["lowercase"]
variables
optional
string[]

Request variables to inspect when matching. Each must be one of: request-uri, request-uri-raw, args, args-combined-size, args-get, args-get-names, args-post, args-post-names, files-names, geo, remote-addr, query-string, request-basename, request-body, request-cookies-names, request-cookies, request-filename, request-headers-names, request-headers, request-line, request-method, request-protocol, response-body, response-headers, response-status.

Example: ["request-uri","query-string"]

Request

curl -X PUT \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/waf/rate-limits/12345" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"name":"Updated Rate Limit","description":"Updated description for the rule","request_count":200,"timeframe":10,"block_time":300,"value":"/api/v2/*","operator":"regex","transformations":["lowercase"],"variables":["request-uri","query-string"]}'

Response

application/json
{
  "data": {
    "id": 12345,
    "name": "Updated Rate Limit",
    "description": "Updated description for the rule",
    "shield_zone_id": 67890,
    "configuration": {
      "request_count": 200,
      "timeframe": 10,
      "block_time": 300,
      "value": "/api/v2/*",
      "action": "rate-limit",
      "operator": "regex",
      "variables": [
        "request-uri",
        "query-string"
      ],
      "transformations": [
        "lowercase"
      ]
    }
  },
  "message": "Rate limit updated successfully",
  "http_status": 200
}
DELETE/sites/{site}/waf/rate-limits/{rule}

Delete Rate Limit

Permanently deletes a rate limit rule. This action cannot be undone.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"
rule
required
integer

The rate limit rule ID.

Example: 12345

Request

curl -X DELETE \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/waf/rate-limits/12345" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {},
  "message": "Rate limit deleted successfully",
  "http_status": 200
}

WAF: Referrers

Control which sites can link to your content using referrer-based rules.

  • Blocked Referrers: Block hotlinking from specific domains
  • Allowed Referrers: Restrict access to requests from approved domains only

Supports wildcards: *.example.com matches all subdomains.

GET/sites/{site}/waf/allowed-referrers

List Allowed Referrers

Retrieves all allowed referrer hostnames for a site.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/waf/allowed-referrers" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": [
    {
      "hostname": "example.com"
    },
    {
      "hostname": "*.example.net"
    }
  ],
  "message": "Allowed referrers retrieved successfully",
  "http_status": 200
}
POST/sites/{site}/waf/allowed-referrers

Add Allowed Referrer

Adds a hostname to the allowed referrers list. Wildcards are supported (e.g., *.example.com).

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
hostname
required
string

The hostname to allow.

Example: "example.com"

Request

curl -X POST \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/waf/allowed-referrers" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"hostname":"example.com"}'

Response

application/json
{
  "data": {
    "hostname": "example.com"
  },
  "message": "Allowed referrer added successfully",
  "http_status": 201
}
DELETE/sites/{site}/waf/allowed-referrers/{hostname}

Remove Allowed Referrer

Removes a hostname from the allowed referrers list.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"
hostname
required
string

The hostname to remove.

Example: "example.com"

Request

curl -X DELETE \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/waf/allowed-referrers/example.com" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "hostname": "example.com"
  },
  "message": "Allowed referrer removed successfully",
  "http_status": 200
}
GET/sites/{site}/waf/blocked-referrers

List Blocked Referrers

Retrieves all blocked referrer hostnames for a site.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/waf/blocked-referrers" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": [
    {
      "hostname": "spam.example.com"
    },
    {
      "hostname": "*.example.net"
    }
  ],
  "message": "Blocked referrers retrieved successfully",
  "http_status": 200
}
POST/sites/{site}/waf/blocked-referrers

Add Blocked Referrer

Adds a hostname to the blocked referrers list. Wildcards are supported (e.g., *.example.com).

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
hostname
required
string

The hostname to block.

Example: "spam.example.com"

Request

curl -X POST \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/waf/blocked-referrers" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"hostname":"spam.example.com"}'

Response

application/json
{
  "data": {
    "hostname": "spam.example.com"
  },
  "message": "Blocked referrer added successfully",
  "http_status": 201
}
DELETE/sites/{site}/waf/blocked-referrers/{hostname}

Remove Blocked Referrer

Removes a hostname from the blocked referrers list.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"
hostname
required
string

The hostname to remove.

Example: "spam.example.com"

Request

curl -X DELETE \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/waf/blocked-referrers/spam.example.com" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "hostname": "spam.example.com"
  },
  "message": "Blocked referrer removed successfully",
  "http_status": 200
}

WAF: Settings

Manage WAF core configuration including execution mode, profiles, rule groups, and payload limits.

GET/sites/{site}/waf/settings

Get WAF Settings

Retrieves the current WAF configuration for a site.

URL Parameters

NameTypeDescription
site
required
string

The site.

Example: "architecto"
vectorSite
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X GET \
  "https://api.builtfast.com/api/v1/vector/sites/architecto/waf/settings" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "enabled": true,
    "learning_mode": false,
    "profile_id": 1,
    "execution_mode": 1,
    "disabled_rules": [],
    "log_only_rules": [],
    "request_header_logging": false,
    "request_body_limit_action": 0,
    "response_body_limit_action": 0,
    "realtime_threat_intelligence": true
  },
  "message": "WAF settings retrieved successfully",
  "http_status": 200
}
PUT/sites/{site}/waf/settings

Update WAF Settings

Updates WAF configuration for a site. All fields are optional — only include fields you want to change. Omitted fields retain their current values.

URL Parameters

NameTypeDescription
site
required
string

The site.

Example: "architecto"
vectorSite
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Body Parameters

NameTypeDescription
enabled
optional
boolean

Enable or disable WAF.

Example: true
learning_mode
optional
boolean

Enable learning mode (log without blocking).

Example: false
profile_id
optional
integer

WAF profile ID.

Example: 1
execution_mode
optional
integer

WAF execution mode (0=Log, 1=Block).

Example: 1
disabled_rules
optional
string[]

Array of individual disabled rule IDs.

Example: ["rule-1"]
log_only_rules
optional
string[]

Array of rules set to log-only mode.

Example: ["rule-2"]
request_header_logging
optional
boolean

Log request headers.

Example: false
request_body_limit_action
optional
integer

Request body limit action (0=ProcessPartial, 1=Reject, 2=Ignore).

Example: 0
response_body_limit_action
optional
integer

Response body limit action (0=ProcessPartial, 1=Reject, 2=Ignore).

Example: 0
realtime_threat_intelligence
optional
boolean

Enable realtime threat intelligence feeds.

Example: true

Request

curl -X PUT \
  "https://api.builtfast.com/api/v1/vector/sites/architecto/waf/settings" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"enabled":true,"learning_mode":false,"profile_id":1,"execution_mode":1,"disabled_rules":["rule-1"],"log_only_rules":["rule-2"],"request_header_logging":false,"request_body_limit_action":0,"response_body_limit_action":0,"realtime_threat_intelligence":true}'

Response

application/json
{
  "data": {
    "enabled": true,
    "learning_mode": false,
    "execution_mode": 1
  },
  "message": "WAF settings updated successfully",
  "http_status": 200
}

WordPress

Manage WordPress configuration for your site's development container.

POST/sites/{site}/wp/reconfig

Regenerate wp-config.php

Regenerates the wp-config.php file for the site's development container with current database credentials, WP_HOME/WP_SITEURL, and HMAC secret.

URL Parameters

NameTypeDescription
site
required
string

The site ID.

Example: "01jfgxk4nqrst5vwx9yz0abcde"

Request

curl -X POST \
  "https://api.builtfast.com/api/v1/vector/sites/01jfgxk4nqrst5vwx9yz0abcde/wp/reconfig" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json"

Response

application/json
{
  "data": {
    "id": "01jfgxk4nqrst5vwx9yz0abcde",
    "your_customer_id": null,
    "status": "active",
    "status_label": "Active",
    "dev_php_version": "8.3",
    "tags": [],
    "dev_domain": "wispy-dust.vectorpages.com",
    "environments": [],
    "created_at": "2025-01-15T12:00:00+00:00",
    "updated_at": "2025-01-15T12:00:00+00:00"
  },
  "message": "WordPress configuration regenerated successfully",
  "http_status": 200
}