Create a space
Creates a space under a team with a chosen or generated slug. Pass source to create it from a GitHub repository and start its first build. Use POST /v1/publish to create a space and publish content in one call.
/v1/spacesAuthorizationBearer token · headerrequiredBetter Auth session, OAuth access token, OAuth client-credentials token, or sfm_ Space machine credential.
AuthorizationOAuth2 access token · headerrequiredOAuth 2.0 with explicit Spacefast capability scopes. Use the authorization-code flow for people and client credentials for machines.
spaces:writeapplication/jsonteamIdstring | nullprincipalobjectShow propertiesHide properties
typestringrequiredOwning principal kind.
teamexternalidstringrequiredTenant-local principal id: a team id or an integrator external customer id.
slugstringtitlestringconfigobjectInitial SpaceConfig overlay for the new space.
Show propertiesHide properties
indexstring | booleanDirectory index file; false disables index resolution.
Show propertiesHide properties
stringbooleanfallbackstring | objectFallback document. "/index.html" means SPA. Defaults to the nearest 404.html.
Show propertiesHide properties
stringpathstringrequiredCommitted file served when no exact route matches.
statusintegerrequiredResponse status for the fallback.
cleanUrlsbooleanServe flat <name>.html files at their extensionless URL (/about serves about.html). Defaults to on, unless a 200-status SPA fallback is configured.
listingbooleanEnable automatic directory listings.
metaobjectListing, viewer, sharing, and browser icon metadata.
Show propertiesHide properties
titlestringdescriptionstringimagestringfaviconstringsuperpowersobjectPlatform-managed built-ins and custom JavaScript snippets.
Show propertiesHide properties
enabledbooleanMaster switch for platform-managed injections.
disable_all_injectionbooleanWhen true, suppresses every platform-managed script/tag injection.
googleAnalyticsobjectShow propertiesHide properties
enabledbooleanmeasurementIdstringgoogleTagManagerobjectShow propertiesHide properties
enabledbooleancontainerIdstringjavascriptTagsobject[]Show propertiesHide properties
objectidstringnamestringenabledbooleancodestringrequiredtagsobjectShow propertiesHide properties
inheritanceobjectShow propertiesHide properties
inheritedbooleanoverridesobject[]Show propertiesHide properties
objecttagIdstringrequireddisabledbooleanreasonstring | nullShow propertiesHide properties
stringnullrequireReviewbooleanWhen true, integration changes must go through review before release.
templatesstring[]Files that receive {{ vars.NAME }} substitution at finalize.
themeobjectVisual tokens for every Spacefast-authored page.
Show propertiesHide properties
accentstringAccent color for Spacefast-authored pages.
backgroundstringBackground color for Spacefast-authored pages.
logostringLogo image (https URL or root-relative path) shown in the brand row.
namestringDisplay name shown in the brand row of Pages defaults.
fontstringFont-family stack applied to Spacefast-authored pages.
hideSpacefastBrandingbooleanRemove the Spacefast badge from default pages when the plan permits it.
collabobjectComments overlay delivery. default injects Spacefast's UI; custom injects only /__spacefast/collab.css for a self-built UI. Turning comments off lives in the Space's Comments settings, not here.
Show propertiesHide properties
uistringdefaultcustombuildobjectDefault settings for remote repository builds.
Show propertiesHide properties
rootDirectorystring | nullShow propertiesHide properties
stringnullinstallDirectorystring | nullShow propertiesHide properties
stringnullinstallCommandstring | nullShow propertiesHide properties
stringnullbuildCommandstring | nullShow propertiesHide properties
stringnulloutputDirectorystring | nullShow propertiesHide properties
stringnullignoredBuildCommandstring | nullShow propertiesHide properties
stringnullframeworkPresetstring | nullShow propertiesHide properties
stringnullplatformPresetstring | nullShow propertiesHide properties
stringnullallowUnsupportedPlatformFeaturesbooleantimeoutSecondsintegerplacementobjectPlacement controls for this space.
Show propertiesHide properties
burstablebooleanedgebooleanRun the redirects and headers the edge can answer at the edge, ahead of the space. Takes effect at the next publish. Off by default; the rules the edge cannot answer faithfully stay with the space either way.
markdownNegotiationbooleanAccepted serving flag; runtime enforcement ships separately.
firewallobject[]Requests to block or challenge before they reach the space.
Show propertiesHide properties
objectnamestringName for this rule: lowercase letters, digits, - and _, up to 61 characters. Names the rule in the CLI and the API.
descriptionstringWhat this rule is for.
actionstringrequiredblock answers without reaching the space; challenge asks for proof of a human.
blockchallengestatusintegerStatus a blocked request gets. Defaults to 403. Blocks only.
matchTrafficRuleMatchrequiredRequest attributes the rule looks at. At least one.
Show propertiesHide properties
pathTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
hostTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
methodTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
ipTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
countryTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
asnTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
userAgentTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
refererTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
headerobjectPer-name conditions: { "x-api-client": { "op": "exists" } }.
cookieobjectPer-name conditions: { "x-api-client": { "op": "exists" } }.
queryobjectPer-name conditions: { "x-api-client": { "op": "exists" } }.
extensionTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
ja3TrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
ja4TrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
anybooleanFire when any match field holds. Defaults to false: all of them have to.
cacheobjectCache behavior, including which requests skip it.
Show propertiesHide properties
bypassobject[]Requests that skip the cache, in order. At most 50.
Show propertiesHide properties
objectnamestringName for this rule: lowercase letters, digits, - and _, up to 61 characters. Names the rule in the CLI and the API.
descriptionstringWhat this rule is for.
matchTrafficRuleMatchrequiredRequest attributes the rule looks at. At least one.
Show propertiesHide properties
pathTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
hostTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
methodTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
ipTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
countryTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
asnTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
userAgentTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
refererTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
headerobjectPer-name conditions: { "x-api-client": { "op": "exists" } }.
cookieobjectPer-name conditions: { "x-api-client": { "op": "exists" } }.
queryobjectPer-name conditions: { "x-api-client": { "op": "exists" } }.
extensionTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
ja3TrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
ja4TrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
anybooleanFire when any match field holds. Defaults to false: all of them have to.
redirectsobject[]Browser redirect rules. Same matcher grammar as _redirects, and _redirects rules match first.
Show propertiesHide properties
objectsourcestringrequiredRequest path to match. * is a splat, :name captures a segment.
destinationstringrequiredPath or absolute URL. :splat and :name from the source are substituted.
statusnumberRedirect status, 302 when omitted. To serve other content under this URL, use rewrites.
301302303307308forcebooleanAnswer even when the request path resolves to a committed file, the ! of a _redirects rule.
queryobjectQuery parameters the request must carry, as parameter name to capture name: { "id": "id" } is the name=:capture token id=:id.
rewritesobject[]Rewrite and proxy rules: the URL stays, the content comes from the destination. _redirects rules match first, then redirects.
Show propertiesHide properties
objectsourcestringrequiredRequest path to match. * is a splat, :name captures a segment.
destinationstringrequiredPath to serve under this URL, or an absolute URL to proxy. :splat and :name from the source are substituted.
cachestringLet shared caches store the proxy response. Absolute-URL destinations only.
forcebooleanAnswer even when the request path resolves to a committed file, the ! of a _redirects rule.
queryobjectQuery parameters the request must carry, as parameter name to capture name: { "id": "id" } is the name=:capture token id=:id.
notFoundbooleanServe the destination with status 404, the 404 of a _redirects rule. The destination must be a path.
headersobject[]Response headers to set or remove on matching requests. A _headers rule wins on the same header name.
Show propertiesHide properties
objectsourcestringrequiredRequest path to match.
headersobject[]requiredShow propertiesHide properties
objectkeystringrequiredvaluestringrequiredkeystringrequiredremovebooleanrequiredRemove this header instead of setting it, the !Name line of a _headers block.
usersobjectShow propertiesHide properties
enabledbooleanrequiredprovidersobjectrequiredShow propertiesHide properties
googleobjectrequiredShow propertiesHide properties
modestringrequiredmodestringrequiredmodestringrequiredclientIdstringrequiredgravatarobjectrequiredShow propertiesHide properties
enabledbooleanrequiredspacefastobjectrequiredShow propertiesHide properties
enabledbooleanrequireddataSourcesobjectNamed public WordPress sources exposed to repository builds; at most 32 entries.
defaultDataSourcestringName of the configured source exposed through WORDPRESS_URL. It must match a dataSources entry. When omitted, the first source in bytewise name order is used.
accessstringSet the initial root access for this new team-owned Space. Omit this field to use the team's default.
privateteampublicdataLocationstringData location for a new Space; "auto" lets placement decide.
autoamsburdcadfwsourceobjectCreate the Space from a GitHub repository: connects it with automatic production and preview deploys and starts the first sync, which builds the production branch. Title and slug default to the repository name. Team-owned Spaces only, and the caller must be a signed-in user.
Show propertiesHide properties
providerstringrequiredinstallationIdstringrequiredGitHub App installation that holds the repository.
repositoryIdstringrequiredImmutable GitHub repository id.
repositoryFullNamestringrequiredThe repository as owner/name.
branchstringProduction branch. Defaults to the repository's default branch.
Response for status 201
$schemastring<uri>Canonical JSON Schema URL for this response body. The server also sends it in the Link: rel="describedby" response header.
dataobjectrequiredShow propertiesHide properties
spaceobjectrequiredShow propertiesHide properties
idstringrequiredtenantIdstringmodestringtest when the owning tenant is a linked test tenant, live otherwise.
livetestproviderRefstring | nullWP Cloud atomic_site_id of the site serving this space. Use it with providerClientId to address the site in WP Cloud. Null until the space is placed.
providerClientIdstring | nullWP Cloud client identity (pvc_...) the space's site is provisioned under.
teamIdstring | nullrequiredteamSlugstring | nullrequiredprincipalobject | nullShow propertiesHide properties
tenantIdstringrequiredprincipalTypestringrequiredteamexternalprincipalIdstringrequirednullinfrastructureobjectShow propertiesHide properties
regionstring | nullrequiredConcrete region the space's site was placed in.
runtimeInstanceIdstring | nullrequiredRuntime instance serving this space.
managementHostnamestring | nullrequiredPermanent hostname minted for the provider site when it was created. It stays attached to the site for the site's whole life and never changes, even when the Space is renamed or gets a custom domain, so it is a stable key for matching this Space to its WP Cloud site. It is not the public URL: visitors use liveUrl, and WP Cloud reports the Space's primary hostname as the site's domain_name.
provisioningStatestringrequiredConvergence of the space against its intended infrastructure: still being placed, matching intent, or failing to converge.
provisioningconvergeddegradedanonymousbooleanrequiredslugstringrequiredtitlestringrequiredstatusstringrequiredOperation-lifecycle status. Serving state is the separate disabled axis.
provisioningactiveupdatingdeletingfaileddisabledobject | nullrequiredShow propertiesHide properties
atstring<date-time> | nullrequiredShow propertiesHide properties
string<date-time>nullreasonCodestringrequiredWhy serving is disabled.
anonymous_expiredpublish_failedabuse_takedowntenant_suspendedsite_suspendedauthor_removedarchivednullclaimStateobject | nullrequiredShow propertiesHide properties
expiresAtstring<date-time> | nullrequiredShow propertiesHide properties
string<date-time>nullclaimedAtstring<date-time> | nullrequiredShow propertiesHide properties
string<date-time>nullpurgeAfterstring<date-time> | nullrequiredShow propertiesHide properties
string<date-time>nullnullexpiryExtensionobject | nullShow propertiesHide properties
extendedTostring<date-time>requirednulldefaultHostnamestringrequiredCurrent Spacefast-owned managed hostname: under space.fast, or under view.fast for a space created before space.fast. Renaming the space changes the label and keeps the apex; previously managed hostnames temporarily redirect to the current one.
publicNamestringrequiredPublic space label used in the managed hostname.
liveUrlstringrequiredLive space URL: the primary bound domain when one exists, else the default hostname. Always present on non-deleted spaces.
thumbnailobject | nullrequiredServer-selected dashboard thumbnail. Screenshots use WordPress.com mShots; image thumbnails use WordPress.com Site Accelerator.
Show propertiesHide properties
kindstringrequiredscreenshotimageproviderstringrequiredwpcom-mshotswpcom-site-acceleratorurlstring<uri>requiredsourceUrlstring<uri>requirednulldataLocationstringrequiredResolved data-location region, fixed when the space is created and immutable afterwards; "auto" only while no concrete region is known yet.
regionstringrequiredAlias of dataLocation for placement dashboards; "auto" only while no concrete region is known yet.
burstableboolean | nullrequiredWhether this space's site can burst provider PHP workers.
archivedBytesintegerrequiredBytes currently archived out of the hot runtime store.
hasRuntimebooleanrequiredWhether this space's live version runs code and therefore has a Runtime surface. Feature eligibility alone does not make the surface visible.
channelsobjectrequiredChannel pointers by name. "live" is present after a version is promoted.
configobject | nullrequiredStored SpaceConfig overlay applied over the live version's sf.jsonc; null when nothing is overridden.
Show propertiesHide properties
indexstring | booleanDirectory index file; false disables index resolution.
Show propertiesHide properties
stringbooleanfallbackstring | objectFallback document. "/index.html" means SPA. Defaults to the nearest 404.html.
Show propertiesHide properties
stringpathstringrequiredCommitted file served when no exact route matches.
statusintegerrequiredResponse status for the fallback.
cleanUrlsbooleanServe flat <name>.html files at their extensionless URL (/about serves about.html). Defaults to on, unless a 200-status SPA fallback is configured.
listingbooleanEnable automatic directory listings.
metaobjectListing, viewer, sharing, and browser icon metadata.
Show propertiesHide properties
titlestringdescriptionstringimagestringfaviconstringsuperpowersobjectPlatform-managed built-ins and custom JavaScript snippets.
Show propertiesHide properties
enabledbooleanMaster switch for platform-managed injections.
disable_all_injectionbooleanWhen true, suppresses every platform-managed script/tag injection.
googleAnalyticsobjectShow propertiesHide properties
enabledbooleanmeasurementIdstringgoogleTagManagerobjectShow propertiesHide properties
enabledbooleancontainerIdstringjavascriptTagsobject[]Show propertiesHide properties
objectidstringnamestringenabledbooleancodestringrequiredtagsobjectShow propertiesHide properties
inheritanceobjectShow propertiesHide properties
inheritedbooleanoverridesobject[]Show propertiesHide properties
objecttagIdstringrequireddisabledbooleanrequiredreasonstring | nullShow propertiesHide properties
stringnullrequireReviewbooleanWhen true, integration changes must go through review before release.
templatesstring[]Files that receive {{ vars.NAME }} substitution at finalize.
themeobjectVisual tokens for every Spacefast-authored page.
Show propertiesHide properties
accentstringAccent color for Spacefast-authored pages.
backgroundstringBackground color for Spacefast-authored pages.
logostringLogo image (https URL or root-relative path) shown in the brand row.
namestringDisplay name shown in the brand row of Pages defaults.
fontstringFont-family stack applied to Spacefast-authored pages.
hideSpacefastBrandingbooleanRemove the Spacefast badge from default pages when the plan permits it.
collabobjectComments overlay delivery. default injects Spacefast's UI; custom injects only /__spacefast/collab.css for a self-built UI. Turning comments off lives in the Space's Comments settings, not here.
Show propertiesHide properties
uistringrequireddefaultcustombuildobjectDefault settings for remote repository builds.
Show propertiesHide properties
rootDirectorystring | nullShow propertiesHide properties
stringnullinstallDirectorystring | nullShow propertiesHide properties
stringnullinstallCommandstring | nullShow propertiesHide properties
stringnullbuildCommandstring | nullShow propertiesHide properties
stringnulloutputDirectorystring | nullShow propertiesHide properties
stringnullignoredBuildCommandstring | nullShow propertiesHide properties
stringnullframeworkPresetstring | nullShow propertiesHide properties
stringnullplatformPresetstring | nullShow propertiesHide properties
stringnullallowUnsupportedPlatformFeaturesbooleantimeoutSecondsintegerplacementobjectPlacement controls for this space.
Show propertiesHide properties
burstablebooleanedgebooleanRun the redirects and headers the edge can answer at the edge, ahead of the space. Takes effect at the next publish. Off by default; the rules the edge cannot answer faithfully stay with the space either way.
markdownNegotiationbooleanAccepted serving flag; runtime enforcement ships separately.
firewallobject[]Requests to block or challenge before they reach the space.
Show propertiesHide properties
objectnamestringName for this rule: lowercase letters, digits, - and _, up to 61 characters. Names the rule in the CLI and the API.
descriptionstringWhat this rule is for.
actionstringrequiredblock answers without reaching the space; challenge asks for proof of a human.
blockchallengestatusintegerStatus a blocked request gets. Defaults to 403. Blocks only.
matchTrafficRuleMatchrequiredRequest attributes the rule looks at. At least one.
Show propertiesHide properties
pathTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
hostTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
methodTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
ipTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
countryTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
asnTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
userAgentTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
refererTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
headerobjectPer-name conditions: { "x-api-client": { "op": "exists" } }.
cookieobjectPer-name conditions: { "x-api-client": { "op": "exists" } }.
queryobjectPer-name conditions: { "x-api-client": { "op": "exists" } }.
extensionTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
ja3TrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
ja4TrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
anybooleanFire when any match field holds. Defaults to false: all of them have to.
cacheobjectCache behavior, including which requests skip it.
Show propertiesHide properties
bypassobject[]Requests that skip the cache, in order. At most 50.
Show propertiesHide properties
objectnamestringName for this rule: lowercase letters, digits, - and _, up to 61 characters. Names the rule in the CLI and the API.
descriptionstringWhat this rule is for.
matchTrafficRuleMatchrequiredRequest attributes the rule looks at. At least one.
Show propertiesHide properties
pathTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
hostTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
methodTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
ipTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
countryTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
asnTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
userAgentTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
refererTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
headerobjectPer-name conditions: { "x-api-client": { "op": "exists" } }.
cookieobjectPer-name conditions: { "x-api-client": { "op": "exists" } }.
queryobjectPer-name conditions: { "x-api-client": { "op": "exists" } }.
extensionTrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
ja3TrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
ja4TrafficRuleValueWhat the field has to match. A string with a * in it matches as a wildcard, any other string matches exactly, and a list matches any of its values. An ip value with a / in it matches a CIDR range. Everything else is an explicit clause: { "op": "exists" }, { "op": "contains", "value": "bot" }, { "op": "in", "values": ["RU"], "not": true }.
Show propertiesHide properties
stringstringstringopstringrequiredHow the request attribute is compared to the value.
eqneqininCidrcontainsstartsWithendsWithwildcardexistsvaluestringSingle value to compare against.
valuesstring[]Values to compare against, for in and inCidr.
notbooleanMatch when the comparison does not hold.
anybooleanFire when any match field holds. Defaults to false: all of them have to.
redirectsobject[]Browser redirect rules. Same matcher grammar as _redirects, and _redirects rules match first.
Show propertiesHide properties
objectsourcestringrequiredRequest path to match. * is a splat, :name captures a segment.
destinationstringrequiredPath or absolute URL. :splat and :name from the source are substituted.
statusnumberRedirect status, 302 when omitted. To serve other content under this URL, use rewrites.
301302303307308forcebooleanAnswer even when the request path resolves to a committed file, the ! of a _redirects rule.
queryobjectQuery parameters the request must carry, as parameter name to capture name: { "id": "id" } is the name=:capture token id=:id.
rewritesobject[]Rewrite and proxy rules: the URL stays, the content comes from the destination. _redirects rules match first, then redirects.
Show propertiesHide properties
objectsourcestringrequiredRequest path to match. * is a splat, :name captures a segment.
destinationstringrequiredPath to serve under this URL, or an absolute URL to proxy. :splat and :name from the source are substituted.
cachestringLet shared caches store the proxy response. Absolute-URL destinations only.
forcebooleanAnswer even when the request path resolves to a committed file, the ! of a _redirects rule.
queryobjectQuery parameters the request must carry, as parameter name to capture name: { "id": "id" } is the name=:capture token id=:id.
notFoundbooleanServe the destination with status 404, the 404 of a _redirects rule. The destination must be a path.
headersobject[]Response headers to set or remove on matching requests. A _headers rule wins on the same header name.
Show propertiesHide properties
objectsourcestringrequiredRequest path to match.
headersobject[]requiredShow propertiesHide properties
objectkeystringrequiredvaluestringrequiredkeystringrequiredremovebooleanrequiredRemove this header instead of setting it, the !Name line of a _headers block.
usersobjectShow propertiesHide properties
enabledbooleanrequiredprovidersobjectrequiredShow propertiesHide properties
googleobjectrequiredShow propertiesHide properties
modestringrequiredmodestringrequiredmodestringrequiredclientIdstringrequiredgravatarobjectrequiredShow propertiesHide properties
enabledbooleanrequiredspacefastobjectrequiredShow propertiesHide properties
enabledbooleanrequireddataSourcesobjectNamed public WordPress sources exposed to repository builds; at most 32 entries.
defaultDataSourcestringName of the configured source exposed through WORDPRESS_URL. It must match a dataSources entry. When omitted, the first source in bytewise name order is used.
nullgrandfatherBrandingRemovalbooleanWhether this Space can keep removing the badge under a newer plan.
settingsDigeststringrequiredCAS token for versioned settings writes (digest over title + config overlay). Send it back as baseSettingsDigest on PATCH to get compare-and-swap semantics.
noindexbooleanrequiredWhen true, the live production hostnames serve platform noindex directives. Immutable version and preview hostnames are always noindex regardless of this setting.
pinnedAtstring<date-time> | nullrequiredInstant the space was pinned to the top of its team's space list, or null when it is not pinned. The pin is team-wide: everyone who can see the team sees it.
Show propertiesHide properties
string<date-time>nulllabelIdsstring[]requiredIds of the team labels on this space, ordered by label name. Empty when the space carries none. Manage them with PUT and DELETE /v1/spaces/{spaceId}/labels/{labelId}.
viewerCanDeletebooleanWhether the caller's account may delete this space. Team owners and admins can delete any space in the team; a member can delete the spaces they created. Absent on unclaimed spaces, which their space key governs, and when the request carries no account credential.
viewerCanTransferbooleanWhether the caller's account may transfer this space to another team. Team owners and admins can; a member who created the space can from the dashboard while nobody else has published to it and it has no custom domain, database, or paid resource. Present on single-space GET reads only; absent on lists, on write responses, on unclaimed spaces, and when the request carries no account credential.
gitobject | nullrequiredGit remote for this space, or null when it has no repository yet. Push to remoteUrl to publish.
Show propertiesHide properties
managedBystringrequiredWho owns this space's git history. spacefast: push remoteUrl to publish. github: the space deploys from repository and direct pushes are refused.
spacefastgithubremoteUrlstring | nullrequiredCredential-free git remote to push to, or null when managedBy is github. Authenticate as HTTP Basic user t with a space key or API key as the password.
repositorystring | nullrequiredowner/name of the GitHub repository this space deploys from, else null.
defaultBranchstring | nullrequiredBranch that publishes to the live channel when pushed.
provisionedbooleanrequiredWhether the repository behind this block exists yet. Always true for a GitHub binding; for a hosted remote, true once it was minted or first pushed to, and false while there is nothing to browse.
nulloperationobject | nullrequiredShow propertiesHide properties
idstringrequiredkindstringrequiredstatusstringrequiredqueuedrunningsucceededfailedcanceledresourcesobject[]requiredShow propertiesHide properties
objecttypestringrequiredidstringrequiredprogressobjectShow propertiesHide properties
totalintegerrequiredcompletedintegerrequiredfailedintegerrequireddiagnosticsobject[]Show propertiesHide properties
objectcodestringrequiredStable snake_case diagnostic code naming the public contract that produced it.
severitystringrequiredHow actionable the diagnostic is.
infowarningerrormessagestringrequiredHuman-readable explanation with enough detail to act on.
pathstring | nullArtifact path the diagnostic points at, for example "_headers:12", when one exists.
providerstring | nullUpstream system the diagnostic originated from, when not Spacefast itself.
Show propertiesHide properties
stringnulldetailsobject | nullMachine-readable context for the diagnostic code.
Show propertiesHide properties
objectnullfixstring | nullConcrete, agent-actionable remediation hint, when one can be derived.
retryableboolean | nullWhether retrying the same operation can resolve this diagnostic without the caller changing anything.
createdAtstring<date-time>requiredfinishedAtstring<date-time>nullcreatedAtstring<date-time>requiredupdatedAtstring<date-time>requiredaccessobjectrequiredShow propertiesHide properties
urlstring<uri>requiredtokenstringrequiredexpiresAtstring<date-time> | nullrequiredShow propertiesHide properties
string<date-time>nullclaimobjectShow propertiesHide properties
keystringrequiredThe space key (sfc_…): the one credential for this unclaimed space. Bearer auth for publish, update, status, sharing, rotation, and the one-time continuation exchange. Returned only at creation and rotation; save it immediately.
urlstring<uri>requiredThe site door: the live URL with the space key in /__/<key> form. Opening it exchanges the key for a private view session and lands on the site. It is the same key in URL form, so share it as carefully as the key.
claimUrlstring<uri>requiredClaim page link in /claim#<key> form. The fragment is the key; browsers never send it to a server and the claim page strips it before analytics. Works until expiresAt and can be opened more than once.
expiresAtstring<date-time>requiredProblem details (RFC 9457). Any 4xx/5xx response is one application/problem+json document.
$schemastring<uri>Canonical JSON Schema URL for this response body. The server also sends it in the Link: rel="describedby" response header.
typestringrequiredProblem type URI resolving to the error docs page. The server derives it mechanically from code against the docs origin.
titlestringrequiredShort human-readable summary of the problem type. The server derives it mechanically from code.
statusintegerrequiredHTTP status code of this response, repeated in the body.
detailstringrequiredHuman-readable failure explanation for this occurrence.
codestringrequiredStable snake_case error code naming the failed public contract.
pointerstringRFC 6901 JSON Pointer into the failing request field, for example "/files/37/path", on validation failures.
detailsobjectMachine-readable context for the error code.
suggestionsstring[]Actionable recovery steps safe to show in dashboards, SDKs, and CLI output.
nextstring[]Copy-pasteable commands or API requests an agent can run next.
requestIdstringrequiredThe request id to quote when contacting support.