Creates a sandbox. All fields are optional; sensible defaults are used (latest WordPress,
PHP 8.3, standard preset, auto-selected worker).
By default creation is synchronous: the request waits (up to ~60s) until the sandbox
is ready and returns status: "ready" with the admin credentials and login URL. If
provisioning takes longer, the response comes back with status: "creating" and HTTP
202 — poll GET /api/app/sites/{id} until it becomes "ready". Pass background: true
to skip the wait and return immediately (also 202 while still "creating").
Passing templateId restores a saved Template instead of provisioning a blank sandbox
(fast snapshot restore, no reinstall) — free on every plan, subject to the normal
sandbox-count and storage limits. In that mode, only siteName, duration,
expirationMode, and background apply; every other field below is silently ignored
(the sandbox inherits the Template’s WordPress/PHP stack).
Personal API token, sent as Authorization: Bearer <SANDYWP_API_KEY>. Obtain one from the dashboard account menu (API keys), sandywp auth login, or POST /api/account/tokens. A missing or invalid token returns 401 auth_required. Scoped OAuth tokens are limited to the Imports family and GET /api/account/me; see the top-level conventions.
Selects which of the caller's workspaces to act in, for accounts belonging to more than one (legacy alias: X-SandyWP-Organization). Defaults to the caller's own personal workspace when omitted. Every id in this API (sandboxes, Templates, repositories) is scoped to a single workspace, so this header changes which set of resources is visible.
Body
application/json
All fields optional; see individual field descriptions for defaults.
latest resolves to the newest stable release. Pre-release entries (currently 7.1-RC3) are replaced by the next beta/RC as they ship, and always provision cold (never via the warm pool).
Only takes effect when provisioningPreset is debug (silently ignored, and forced to all-false, when the preset is standard). Unlike PUT .../debug, an omitted field here defaults to true (matching the "debug" preset) rather than false.
The sandbox's lifespan, interpreted per expirationMode. With expirationMode: fixed: 1h, 1d, 1w (default), 2w, 1m, or permanent. With expirationMode: inactivity: 10m, 30m, 1h, or 1d (there is no inactivity-mode permanent — a 400 invalid_expiration rejects that combination). 2w, 1m, and permanent additionally require a paid plan (402 duration_requires_paid_plan / 402 permanent_requires_paid_plan).
Install as a subdirectory WordPress multisite network. Forces cold provisioning (bypasses the warm pool) because the network domain is baked in at install time. Ignored when templateId is set.
Create by restoring this Template instead of provisioning a blank sandbox. When set, only siteName, duration, expirationMode, and background apply — every other field on this object is ignored.
The owner-facing view of a sandbox. Strips internal provisioning details (container/DB names, password hash, warm-pool ids, routing) and keeps only what a caller needs to use and log into the sandbox.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"SandyWP Documentation","colors":{"primary":"#d99830","light":"#e6b14a","dark":"#653c20"},"logo":{"light":"https://mintcdn.com/sandy-wp/dszzseu6N1-_GB7f/images/brand/sandywp-logo-light.png?fit=max\u0026auto=format\u0026n=dszzseu6N1-_GB7f\u0026q=85\u0026s=8e2affd29d5616eeb8d5bc46d549412a","dark":"https://mintcdn.com/sandy-wp/dszzseu6N1-_GB7f/images/brand/sandywp-logo-dark.png?fit=max\u0026auto=format\u0026n=dszzseu6N1-_GB7f\u0026q=85\u0026s=62edaad9c957123ea26d0c9ca6e77b3c","href":"https://sandywp.com"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"sandy-wp","hasAudioNarration":false,"actualSubdomain":"sandy-wp","customDomains":["docs.sandywp.com"],"gitSource":{"type":"github","owner":"rizaardiyanto1412","repo":"sandywp","deployBranch":"main","contentDirectory":"mintlify-docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae920e6e83198d0a6c82348","clientVersion":"0.0.4087","searchFilterCounts":[{"language":"default","tag":"API Reference","count":103},{"language":"default","tag":"Sites","count":38},{"language":"default","tag":"Tools","count":14},{"language":"default","tag":"Account","count":14},{"language":"default","tag":"Blueprints","count":13},{"language":"default","tag":"Imports","count":11},{"language":"default","tag":"Workspaces","count":9},{"language":"default","tag":"Templates","count":7},{"language":"default","tag":"Library","count":5},{"language":"default","tag":"Using sandboxes","count":4}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"img.nav-logo{height:2.25rem}"}],"page":{"pagePath":"api-reference/endpoints/sites/create-a-sandbox-or-restore-one-from-a-template","slug":"/api-reference/endpoints/sites/create-a-sandbox-or-restore-one-from-a-template","pageMetadata":{"title":"Create a sandbox (or restore one from a template)","description":"Creates a sandbox. All fields are optional; sensible defaults are used (latest WordPress,\nPHP 8.3, standard preset, auto-selected worker).\n\nBy default creation is **synchronous**: the request waits (up to ~60s) until the sandbox\nis ready and returns `status: \"ready\"` with the admin credentials and login URL. If\nprovisioning takes longer, the response comes back with `status: \"creating\"` and HTTP\n`202` — poll `GET /api/app/sites/{id}` until it becomes `\"ready\"`. Pass `background: true`\nto skip the wait and return immediately (also `202` while still `\"creating\"`).\n\nPassing `templateId` restores a saved Template instead of provisioning a blank sandbox\n(fast snapshot restore, no reinstall) — free on every plan, subject to the normal\nsandbox-count and storage limits. In that mode, only `siteName`, `duration`,\n`expirationMode`, and `background` apply; every other field below is silently ignored\n(the sandbox inherits the Template's WordPress/PHP stack).\n","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/sites","href":"/api-reference/endpoints/sites/create-a-sandbox-or-restore-one-from-a-template","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Creates a sandbox. All fields are optional; sensible defaults are used (latest WordPress,\\nPHP 8.3, standard preset, auto-selected worker).\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"By default creation is \", _jsx(_components.strong, {\n children: \"synchronous\"\n }), \": the request waits (up to ~60s) until the sandbox\\nis ready and returns \", _jsx(_components.code, {\n children: \"status: \\\"ready\\\"\"\n }), \" with the admin credentials and login URL. If\\nprovisioning takes longer, the response comes back with \", _jsx(_components.code, {\n children: \"status: \\\"creating\\\"\"\n }), \" and HTTP\\n\", _jsx(_components.code, {\n children: \"202\"\n }), \" — poll \", _jsx(_components.code, {\n children: \"GET /api/app/sites/{id}\"\n }), \" until it becomes \", _jsx(_components.code, {\n children: \"\\\"ready\\\"\"\n }), \". Pass \", _jsx(_components.code, {\n children: \"background: true\"\n }), \"\\nto skip the wait and return immediately (also \", _jsx(_components.code, {\n children: \"202\"\n }), \" while still \", _jsx(_components.code, {\n children: \"\\\"creating\\\"\"\n }), \").\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Passing \", _jsx(_components.code, {\n children: \"templateId\"\n }), \" restores a saved Template instead of provisioning a blank sandbox\\n(fast snapshot restore, no reinstall) — free on every plan, subject to the normal\\nsandbox-count and storage limits. In that mode, only \", _jsx(_components.code, {\n children: \"siteName\"\n }), \", \", _jsx(_components.code, {\n children: \"duration\"\n }), \",\\n\", _jsx(_components.code, {\n children: \"expirationMode\"\n }), \", and \", _jsx(_components.code, {\n children: \"background\"\n }), \" apply; every other field below is silently ignored\\n(the sandbox inherits the Template’s WordPress/PHP stack).\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create a sandbox (or restore one from a template)","description":"Creates a sandbox. All fields are optional; sensible defaults are used (latest WordPress,\nPHP 8.3, standard preset, auto-selected worker).\n\nBy default creation is **synchronous**: the request waits (up to ~60s) until the sandbox\nis ready and returns `status: \"ready\"` with the admin credentials and login URL. If\nprovisioning takes longer, the response comes back with `status: \"creating\"` and HTTP\n`202` — poll `GET /api/app/sites/{id}` until it becomes `\"ready\"`. Pass `background: true`\nto skip the wait and return immediately (also `202` while still `\"creating\"`).\n\nPassing `templateId` restores a saved Template instead of provisioning a blank sandbox\n(fast snapshot restore, no reinstall) — free on every plan, subject to the normal\nsandbox-count and storage limits. In that mode, only `siteName`, `duration`,\n`expirationMode`, and `background` apply; every other field below is silently ignored\n(the sandbox inherits the Template's WordPress/PHP stack).\n","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/sites","href":"/api-reference/endpoints/sites/create-a-sandbox-or-restore-one-from-a-template","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"createSite","tags":["Sites"],"summary":"Create a sandbox (or restore one from a template)","description":"Creates a sandbox. All fields are optional; sensible defaults are used (latest WordPress,\nPHP 8.3, standard preset, auto-selected worker).\n\nBy default creation is **synchronous**: the request waits (up to ~60s) until the sandbox\nis ready and returns `status: \"ready\"` with the admin credentials and login URL. If\nprovisioning takes longer, the response comes back with `status: \"creating\"` and HTTP\n`202` — poll `GET /api/app/sites/{id}` until it becomes `\"ready\"`. Pass `background: true`\nto skip the wait and return immediately (also `202` while still `\"creating\"`).\n\nPassing `templateId` restores a saved Template instead of provisioning a blank sandbox\n(fast snapshot restore, no reinstall) — free on every plan, subject to the normal\nsandbox-count and storage limits. In that mode, only `siteName`, `duration`,\n`expirationMode`, and `background` apply; every other field below is silently ignored\n(the sandbox inherits the Template's WordPress/PHP stack).\n","parameters":["f4ba1a0f-181b-4c03-be5f-3d3b25d68917"],"requestBody":"4a93e8d9-aeff-41ea-a1ae-269326f4b428","responses":{"200":"d8e2f5b8-7064-4c0b-a3eb-2846528a24d8","202":"eeb01d58-48ac-4a97-aa9a-520cc1e8cfb4","400":"fc13cefb-8b8e-4828-945a-ca7061c119ea","401":"1ea76655-7f51-4282-be64-7599bdb03364","402":"fabf07fe-5bed-4569-b313-9ae6a083ac15","403":"3e6eeb6e-4571-40a7-9e4d-09b639ab07f3","404":"82bee2e1-d478-46b6-9678-cd4aa53fd5d8","409":"58d25f36-9206-4118-9a1e-1ac96648e396"},"method":"post","type":"path","servers":["ee9ccad4-7b5f-44f6-ade4-758bbae361d0"],"security":["e73617b5-e337-4569-b7dd-a513402275e4"],"path":"/api/app/sites","baseUrlOptions":["https://app.sandywp.com"],"title":"Create a sandbox (or restore one from a template)","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"f4ba1a0f-181b-4c03-be5f-3d3b25d68917":{"name":"X-SandyWP-Workspace","in":"header","required":false,"description":"Selects which of the caller's workspaces to act in, for accounts belonging to more than one (legacy alias: `X-SandyWP-Organization`). Defaults to the caller's own personal workspace when omitted. Every id in this API (sandboxes, Templates, repositories) is scoped to a single workspace, so this header changes which set of resources is visible.","schema":{"type":"string","isRequired":false,"description":"Selects which of the caller's workspaces to act in, for accounts belonging to more than one (legacy alias: `X-SandyWP-Organization`). Defaults to the caller's own personal workspace when omitted. Every id in this API (sandboxes, Templates, repositories) is scoped to a single workspace, so this header changes which set of resources is visible.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","description":"All fields optional; see individual field descriptions for defaults.","properties":{"siteName":{"type":"string","minLength":2,"maxLength":80,"description":"Display name; the slug is derived from it. A blank/omitted name gets a random friendly name, never the caller's account email.","uniqueKey":"siteName","typeLabel":"string"},"wordpressVersion":{"type":"string","description":"`latest` resolves to the newest stable release. Pre-release entries (currently `7.1-RC3`) are replaced by the next beta/RC as they ship, and always provision cold (never via the warm pool).","enum":["latest","7.1-RC3","7.0.4","7.0","6.9","6.8","6.7","6.6"],"uniqueKey":"wordpressVersion","typeLabel":"enum\u003cstring>"},"phpVersion":{"type":"string","enum":["8.5","8.4","8.3","8.2"],"uniqueKey":"phpVersion","typeLabel":"enum\u003cstring>"},"workerCode":{"type":"string","pattern":"^[a-zA-Z0-9][a-zA-Z0-9-]{0,31}$","description":"Pin the sandbox to a specific worker/region (e.g. `eu1`). Omit to auto-select.","uniqueKey":"workerCode","typeLabel":"string"},"provisioningPreset":{"type":"string","description":"`standard` — no debug settings at provision time. `debug` — provisions with WP_DEBUG (and related toggles) on; see `debugOptions`.","enum":["standard","debug"],"uniqueKey":"provisioningPreset","typeLabel":"enum\u003cstring>"},"debugOptions":{"type":"object","description":"Only takes effect when `provisioningPreset` is `debug` (silently ignored, and forced to all-`false`, when the preset is `standard`). Unlike `PUT .../debug`, an omitted field here defaults to `true` (matching the \"debug\" preset) rather than `false`.","required":["wpDebug","wpDebugLog","wpDebugDisplay","scriptDebug","queryMonitor"],"properties":{"wpDebug":{"type":"boolean","isRequired":true,"uniqueKey":"debugOptions.wpDebug","typeLabel":"boolean"},"wpDebugLog":{"type":"boolean","isRequired":true,"uniqueKey":"debugOptions.wpDebugLog","typeLabel":"boolean"},"wpDebugDisplay":{"type":"boolean","isRequired":true,"uniqueKey":"debugOptions.wpDebugDisplay","typeLabel":"boolean"},"scriptDebug":{"type":"boolean","isRequired":true,"uniqueKey":"debugOptions.scriptDebug","typeLabel":"boolean"},"queryMonitor":{"type":"boolean","isRequired":true,"uniqueKey":"debugOptions.queryMonitor","typeLabel":"boolean"}},"uniqueKey":"debugOptions","typeLabel":"object"},"duration":{"type":"string","description":"The sandbox's lifespan, interpreted per `expirationMode`. With `expirationMode: fixed`: `1h`, `1d`, `1w` (default), `2w`, `1m`, or `permanent`. With `expirationMode: inactivity`: `10m`, `30m`, `1h`, or `1d` (there is no inactivity-mode `permanent` — a `400 invalid_expiration` rejects that combination). `2w`, `1m`, and `permanent` additionally require a paid plan (`402 duration_requires_paid_plan` / `402 permanent_requires_paid_plan`).","enum":["10m","30m","1h","1d","1w","2w","1m","permanent"],"uniqueKey":"duration","typeLabel":"enum\u003cstring>"},"expirationMode":{"type":"string","description":"`fixed` (default), or `inactivity` to restart the selected `duration` whenever the sandbox is actively used. A background tab does not count as use.","enum":["fixed","inactivity"],"uniqueKey":"expirationMode","typeLabel":"enum\u003cstring>"},"multisite":{"type":"boolean","description":"Install as a subdirectory WordPress multisite network. Forces cold provisioning (bypasses the warm pool) because the network domain is baked in at install time. Ignored when `templateId` is set.","uniqueKey":"multisite","typeLabel":"boolean"},"plugins":{"type":"array","items":{"type":"string","uniqueKey":"plugins.items.[INDEX]","typeLabel":"string"},"maxItems":10,"description":"wordpress.org plugin slugs to preinstall and activate. Invalid slugs are dropped rather than rejected. Ignored when `templateId` is set.","example":["publishpress-authors","post-expirator"],"uniqueKey":"plugins","typeLabel":"string[]"},"themes":{"type":"array","items":{"type":"string","uniqueKey":"themes.items.[INDEX]","typeLabel":"string"},"maxItems":5,"description":"wordpress.org theme slugs to preinstall and activate. Ignored when `templateId` is set.","uniqueKey":"themes","typeLabel":"string[]"},"templateId":{"type":"string","description":"Create by restoring this Template instead of provisioning a blank sandbox. When set, only `siteName`, `duration`, `expirationMode`, and `background` apply — every other field on this object is ignored.","example":"tpl_xyz789","uniqueKey":"templateId","typeLabel":"string"},"background":{"type":"boolean","description":"Return immediately with `status: \"creating\"` instead of waiting (up to ~60s) for the sandbox to become ready.","uniqueKey":"background","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"siteName":"\u003cstring>","workerCode":"\u003cstring>","multisite":true,"plugins":["publishpress-authors","post-expirator"],"themes":["\u003cstring>"],"templateId":"tpl_xyz789","background":true}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"d8e2f5b8-7064-4c0b-a3eb-2846528a24d8":{"description":"The sandbox is ready.","content":{"application/json":{"schema":{"type":"object","required":["site"],"properties":{"site":{"type":"object","description":"The owner-facing view of a sandbox. Strips internal provisioning details (container/DB names, password hash, warm-pool ids, routing) and keeps only what a caller needs to use and log into the sandbox.","required":["id","name","slug","status","publicUrl","wordpressVersion","phpVersion","workerCode","adminUsername","adminPassword","magicLoginUrl","permanent","expiresAt","expirationMode","idleTimeoutMinutes","createdAt","readyAt","failureReason"],"properties":{"id":{"type":"string","example":"site_abc123","isRequired":true,"uniqueKey":"site.id","typeLabel":"string"},"name":{"type":"string","example":"my-sandbox","isRequired":true,"uniqueKey":"site.name","typeLabel":"string"},"slug":{"type":"string","example":"my-sandbox","isRequired":true,"uniqueKey":"site.slug","typeLabel":"string"},"status":{"type":"string","enum":["creating","ready","expired","failed","pending_delete","deleted","cleanup_failed"],"isRequired":true,"uniqueKey":"site.status","typeLabel":"enum\u003cstring>"},"publicUrl":{"type":"string","format":"uri","example":"https://my-sandbox.sandywp.dev","isRequired":true,"uniqueKey":"site.publicUrl","typeLabel":"string\u003curi>"},"wordpressVersion":{"type":"string","description":"The concrete installed version (e.g. `7.0.4`), not the request-time alias (e.g. `latest`).","isRequired":true,"uniqueKey":"site.wordpressVersion","typeLabel":"string"},"phpVersion":{"type":"string","isRequired":true,"uniqueKey":"site.phpVersion","typeLabel":"string"},"workerCode":{"type":"string","example":"eu1","isRequired":true,"uniqueKey":"site.workerCode","typeLabel":"string"},"adminUsername":{"type":"string","example":"admin","isRequired":true,"uniqueKey":"site.adminUsername","typeLabel":"string"},"adminPassword":{"oneOf":[{"type":"string","description":"Plaintext admin password. Present here and on single-sandbox responses; omitted from list responses (see `SiteListItem`) so it never rides along on a bulk poll.","isRequired":true,"uniqueKey":"site.adminPassword.oneOf.0","typeLabel":"string"},{"type":"null","description":"Plaintext admin password. Present here and on single-sandbox responses; omitted from list responses (see `SiteListItem`) so it never rides along on a bulk poll.","isRequired":true,"uniqueKey":"site.adminPassword.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"site.adminPassword","typeLabel":"string | null"},"magicLoginUrl":{"oneOf":[{"type":"string","format":"uri","isRequired":true,"uniqueKey":"site.magicLoginUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","isRequired":true,"uniqueKey":"site.magicLoginUrl.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"site.magicLoginUrl","typeLabel":"string\u003curi> | null"},"permanent":{"type":"boolean","isRequired":true,"uniqueKey":"site.permanent","typeLabel":"boolean"},"expiresAt":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"site.expiresAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"site.expiresAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"site.expiresAt","typeLabel":"string\u003cdate-time> | null"},"expirationMode":{"type":"string","description":"`fixed` expires a demo/idle-mode sandbox after a fixed lifetime from creation/launch; `inactivity` renews the deadline while it is actively used.","enum":["fixed","inactivity"],"isRequired":true,"uniqueKey":"site.expirationMode","typeLabel":"enum\u003cstring>"},"idleTimeoutMinutes":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"site.idleTimeoutMinutes.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"site.idleTimeoutMinutes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"site.idleTimeoutMinutes","typeLabel":"integer | null"},"createdAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"site.createdAt","typeLabel":"string\u003cdate-time>"},"readyAt":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"site.readyAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"site.readyAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"site.readyAt","typeLabel":"string\u003cdate-time> | null"},"failureReason":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"site.failureReason.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"site.failureReason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"site.failureReason","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"site","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"site":{"id":"site_abc123","name":"my-sandbox","slug":"my-sandbox","status":"creating","publicUrl":"https://my-sandbox.sandywp.dev","wordpressVersion":"\u003cstring>","phpVersion":"\u003cstring>","workerCode":"eu1","adminUsername":"admin","adminPassword":"\u003cstring>","magicLoginUrl":"\u003cstring>","permanent":true,"expiresAt":"2023-11-07T05:31:56Z","expirationMode":"fixed","idleTimeoutMinutes":123,"createdAt":"2023-11-07T05:31:56Z","readyAt":"2023-11-07T05:31:56Z","failureReason":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"eeb01d58-48ac-4a97-aa9a-520cc1e8cfb4":{"description":"Still provisioning — either the ~60s synchronous wait elapsed, or `background: true` was passed. Poll `GET /api/app/sites/{id}` until `status` is `\"ready\"`.","content":{"application/json":{"schema":{"type":"object","required":["site"],"properties":{"site":{"type":"object","description":"The owner-facing view of a sandbox. Strips internal provisioning details (container/DB names, password hash, warm-pool ids, routing) and keeps only what a caller needs to use and log into the sandbox.","required":["id","name","slug","status","publicUrl","wordpressVersion","phpVersion","workerCode","adminUsername","adminPassword","magicLoginUrl","permanent","expiresAt","expirationMode","idleTimeoutMinutes","createdAt","readyAt","failureReason"],"properties":{"id":{"type":"string","example":"site_abc123","isRequired":true,"uniqueKey":"site.id","typeLabel":"string"},"name":{"type":"string","example":"my-sandbox","isRequired":true,"uniqueKey":"site.name","typeLabel":"string"},"slug":{"type":"string","example":"my-sandbox","isRequired":true,"uniqueKey":"site.slug","typeLabel":"string"},"status":{"type":"string","enum":["creating","ready","expired","failed","pending_delete","deleted","cleanup_failed"],"isRequired":true,"uniqueKey":"site.status","typeLabel":"enum\u003cstring>"},"publicUrl":{"type":"string","format":"uri","example":"https://my-sandbox.sandywp.dev","isRequired":true,"uniqueKey":"site.publicUrl","typeLabel":"string\u003curi>"},"wordpressVersion":{"type":"string","description":"The concrete installed version (e.g. `7.0.4`), not the request-time alias (e.g. `latest`).","isRequired":true,"uniqueKey":"site.wordpressVersion","typeLabel":"string"},"phpVersion":{"type":"string","isRequired":true,"uniqueKey":"site.phpVersion","typeLabel":"string"},"workerCode":{"type":"string","example":"eu1","isRequired":true,"uniqueKey":"site.workerCode","typeLabel":"string"},"adminUsername":{"type":"string","example":"admin","isRequired":true,"uniqueKey":"site.adminUsername","typeLabel":"string"},"adminPassword":{"oneOf":[{"type":"string","description":"Plaintext admin password. Present here and on single-sandbox responses; omitted from list responses (see `SiteListItem`) so it never rides along on a bulk poll.","isRequired":true,"uniqueKey":"site.adminPassword.oneOf.0","typeLabel":"string"},{"type":"null","description":"Plaintext admin password. Present here and on single-sandbox responses; omitted from list responses (see `SiteListItem`) so it never rides along on a bulk poll.","isRequired":true,"uniqueKey":"site.adminPassword.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"site.adminPassword","typeLabel":"string | null"},"magicLoginUrl":{"oneOf":[{"type":"string","format":"uri","isRequired":true,"uniqueKey":"site.magicLoginUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","isRequired":true,"uniqueKey":"site.magicLoginUrl.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"site.magicLoginUrl","typeLabel":"string\u003curi> | null"},"permanent":{"type":"boolean","isRequired":true,"uniqueKey":"site.permanent","typeLabel":"boolean"},"expiresAt":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"site.expiresAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"site.expiresAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"site.expiresAt","typeLabel":"string\u003cdate-time> | null"},"expirationMode":{"type":"string","description":"`fixed` expires a demo/idle-mode sandbox after a fixed lifetime from creation/launch; `inactivity` renews the deadline while it is actively used.","enum":["fixed","inactivity"],"isRequired":true,"uniqueKey":"site.expirationMode","typeLabel":"enum\u003cstring>"},"idleTimeoutMinutes":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"site.idleTimeoutMinutes.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"site.idleTimeoutMinutes.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"site.idleTimeoutMinutes","typeLabel":"integer | null"},"createdAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"site.createdAt","typeLabel":"string\u003cdate-time>"},"readyAt":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"site.readyAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"site.readyAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"site.readyAt","typeLabel":"string\u003cdate-time> | null"},"failureReason":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"site.failureReason.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"site.failureReason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"site.failureReason","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"site","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"site":{"id":"site_abc123","name":"my-sandbox","slug":"my-sandbox","status":"creating","publicUrl":"https://my-sandbox.sandywp.dev","wordpressVersion":"\u003cstring>","phpVersion":"\u003cstring>","workerCode":"eu1","adminUsername":"admin","adminPassword":"\u003cstring>","magicLoginUrl":"\u003cstring>","permanent":true,"expiresAt":"2023-11-07T05:31:56Z","expirationMode":"fixed","idleTimeoutMinutes":123,"createdAt":"2023-11-07T05:31:56Z","readyAt":"2023-11-07T05:31:56Z","failureReason":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"fc13cefb-8b8e-4828-945a-ca7061c119ea":{"description":"`invalid_request` — malformed body. `invalid_site_name` — `siteName` outside 2–80 characters. `invalid_wordpress_version` / `invalid_php_version` / `invalid_provisioning_preset` / `invalid_expiration_mode` / `invalid_duration` — value not one of the allowed options. `invalid_expiration` — `duration` is not allowed for the given `expirationMode` (e.g. `permanent` with `inactivity`). `invalid_worker_code` — `workerCode` is not a valid worker identifier.","content":{"application/json":{"schema":{"type":"object","description":"The standard error envelope returned by every endpoint on a non-2xx response.","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"A stable, machine-readable error code (e.g. `invalid_request`, `site_not_found`, `plan_limit_reached`). See each operation for the codes it can return.","example":"invalid_request","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable message. Safe to display to an end user.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","description":"Optional structured context (e.g. `{\"plan\": \"free\", \"limit\": 2}` for a plan-limit error). Omitted entirely on the generic internal-error fallback; `{}` when an error has no extra context.","additionalProperties":true,"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_request","message":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"1ea76655-7f51-4282-be64-7599bdb03364":{"description":"No valid bearer token was presented, or a scoped OAuth token was used outside its allowed Imports and account-identity routes.","content":{"application/json":{"schema":{"type":"object","description":"The standard error envelope returned by every endpoint on a non-2xx response.","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"A stable, machine-readable error code (e.g. `invalid_request`, `site_not_found`, `plan_limit_reached`). See each operation for the codes it can return.","example":"invalid_request","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable message. Safe to display to an end user.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","description":"Optional structured context (e.g. `{\"plan\": \"free\", \"limit\": 2}` for a plan-limit error). Omitted entirely on the generic internal-error fallback; `{}` when an error has no extra context.","additionalProperties":true,"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"auth_required","message":"A logged-in user is required.","details":{}}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"auth_required","message":"A logged-in user is required.","details":{}}}}},"exampleType":"examples"}},"exampleType":"examples"},"fabf07fe-5bed-4569-b313-9ae6a083ac15":{"description":"`plan_limit_reached` — the workspace is at its active-sandbox limit. `storage_limit_reached` — the workspace is at its storage limit. `duration_requires_paid_plan` — `duration` is `2w` or `1m` on a free plan. `permanent_requires_paid_plan` — `duration` is `permanent` on a free plan.","content":{"application/json":{"schema":{"type":"object","description":"The standard error envelope returned by every endpoint on a non-2xx response.","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"A stable, machine-readable error code (e.g. `invalid_request`, `site_not_found`, `plan_limit_reached`). See each operation for the codes it can return.","example":"invalid_request","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable message. Safe to display to an end user.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","description":"Optional structured context (e.g. `{\"plan\": \"free\", \"limit\": 2}` for a plan-limit error). Omitted entirely on the generic internal-error fallback; `{}` when an error has no extra context.","additionalProperties":true,"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"plan_limit_reached","message":"Your free plan allows 2 active sandboxes.","details":{"plan":"free","limit":2,"activeSites":2}}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"plan_limit_reached","message":"Your free plan allows 2 active sandboxes.","details":{"plan":"free","limit":2,"activeSites":2}}}}},"exampleType":"examples"}},"exampleType":"examples"},"3e6eeb6e-4571-40a7-9e4d-09b639ab07f3":{"description":"`forbidden` — `templateId` refers to a Template owned by a different workspace.","content":{"application/json":{"schema":{"type":"object","description":"The standard error envelope returned by every endpoint on a non-2xx response.","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"A stable, machine-readable error code (e.g. `invalid_request`, `site_not_found`, `plan_limit_reached`). See each operation for the codes it can return.","example":"invalid_request","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable message. Safe to display to an end user.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","description":"Optional structured context (e.g. `{\"plan\": \"free\", \"limit\": 2}` for a plan-limit error). Omitted entirely on the generic internal-error fallback; `{}` when an error has no extra context.","additionalProperties":true,"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_request","message":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"82bee2e1-d478-46b6-9678-cd4aa53fd5d8":{"description":"`template_not_found` — `templateId` does not exist or is not visible to the caller. `artifact_not_found` — the Template's snapshot artifact is missing.","content":{"application/json":{"schema":{"type":"object","description":"The standard error envelope returned by every endpoint on a non-2xx response.","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"A stable, machine-readable error code (e.g. `invalid_request`, `site_not_found`, `plan_limit_reached`). See each operation for the codes it can return.","example":"invalid_request","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable message. Safe to display to an end user.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","description":"Optional structured context (e.g. `{\"plan\": \"free\", \"limit\": 2}` for a plan-limit error). Omitted entirely on the generic internal-error fallback; `{}` when an error has no extra context.","additionalProperties":true,"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_request","message":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"58d25f36-9206-4118-9a1e-1ac96648e396":{"description":"`template_not_ready` — `templateId` refers to a Template whose `status` is not `\"ready\"`. `template_no_artifact` — the Template has no snapshot artifact yet.","content":{"application/json":{"schema":{"type":"object","description":"The standard error envelope returned by every endpoint on a non-2xx response.","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"A stable, machine-readable error code (e.g. `invalid_request`, `site_not_found`, `plan_limit_reached`). See each operation for the codes it can return.","example":"invalid_request","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable message. Safe to display to an end user.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"object","description":"Optional structured context (e.g. `{\"plan\": \"free\", \"limit\": 2}` for a plan-limit error). Omitted entirely on the generic internal-error fallback; `{}` when an error has no extra context.","additionalProperties":true,"uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_request","message":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"e73617b5-e337-4569-b7dd-a513402275e4":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Personal API token, sent as `Authorization: Bearer \u003cSANDYWP_API_KEY>`. Obtain one from the dashboard account menu (API keys), `sandywp auth login`, or `POST /api/account/tokens`. A missing or invalid token returns `401 auth_required`. Scoped OAuth tokens are limited to the Imports family and `GET /api/account/me`; see the top-level conventions.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"ee9ccad4-7b5f-44f6-ade4-758bbae361d0":{"url":"https://app.sandywp.com"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Personal API token, sent as `Authorization: Bearer \u003cSANDYWP_API_KEY>`. Obtain one from the dashboard account menu (API keys), `sandywp auth login`, or `POST /api/account/tokens`. A missing or invalid token returns `401 auth_required`. Scoped OAuth tokens are limited to the Imports family and `GET /api/account/me`; see the top-level conventions.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Personal API token, sent as `Authorization: Bearer \u003cSANDYWP_API_KEY>`. Obtain one from the dashboard account menu (API keys), `sandywp auth login`, or `POST /api/account/tokens`. A missing or invalid token returns `401 auth_required`. Scoped OAuth tokens are limited to the Imports family and `GET /api/account/me`; see the top-level conventions.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"sandy-wp","siteName":"SandyWP Documentation","title":"Create a sandbox (or restore one from a template) - SandyWP Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-28T11:39:42.263Z","originalFileLocation":"api-reference/endpoints/sites/create-a-sandbox-or-restore-one-from-a-template.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Creates a sandbox. All fields are optional; sensible defaults are used (latest WordPress, PHP 8.3, standard preset, auto-selected worker). By default creation is synchronous: the request waits (up to ~60s) until the sandbox is ready and returns status: \u0026quot;ready\u0026quot; with the admin credentials and login URL. If provisioning takes longer, the response comes back with status: \u0026quot;creating\u0026quot; and HTTP 202 — poll GET /api/app/sites/{id} until it becomes \u0026quot;ready\u0026quot;. Pass background: true to skip the wait and return immediately (also 202 while still \u0026quot;creating\u0026quot;). Passing templateId restores a saved Template instead of provisioning a blank sandbox (fast snapshot restore, no reinstall) — free on every plan, subject to the normal sandbox-count and storage limits. In that mode, only siteName, duration, expirationMode, and background apply; every other field below is silently ignored (the sandbox inherits the Template\u0026#x27;s WordPress/PHP stack).\">\u003cmeta data-mint-head name=\"application-name\" content=\"SandyWP Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/sandy-wp/_generated/favicon/apple-touch-icon.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/sandy-wp/_generated/favicon/favicon-32x32.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/sandy-wp/_generated/favicon/favicon-16x16.png?v=3\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/sandy-wp/_generated/favicon/favicon.ico?v=3\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create a sandbox (or restore one from a template) - SandyWP Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates a sandbox. All fields are optional; sensible defaults are used (latest WordPress, PHP 8.3, standard preset, auto-selected worker). By default creation is synchronous: the request waits (up to ~60s) until the sandbox is ready and returns status: \u0026quot;ready\u0026quot; with the admin credentials and login URL. If provisioning takes longer, the response comes back with status: \u0026quot;creating\u0026quot; and HTTP 202 — poll GET /api/app/sites/{id} until it becomes \u0026quot;ready\u0026quot;. Pass background: true to skip the wait and return immediately (also 202 while still \u0026quot;creating\u0026quot;). Passing templateId restores a saved Template instead of provisioning a blank sandbox (fast snapshot restore, no reinstall) — free on every plan, subject to the normal sandbox-count and storage limits. In that mode, only siteName, duration, expirationMode, and background apply; every other field below is silently ignored (the sandbox inherits the Template\u0026#x27;s WordPress/PHP stack).\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"SandyWP Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.sandywp.com/api-reference/endpoints/sites/create-a-sandbox-or-restore-one-from-a-template\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://sandy-wp.mintlify.site/_mintlify/api/og/v2?division=Sites\u0026amp;title=Create+a+sandbox+%28or+restore+one+from+a+template%29\u0026amp;description=Creates+a+sandbox.+All+fields+are+optional%3B+sensible+defaults+are+used+%28latest+WordPress%2C%0APHP+8.3%2C+standard+preset%2C+auto-selected+worker%29.%0A%0ABy+default+creation+\u0026amp;theme=7adb8c57347f76c2bf2e915e\u0026amp;signature=704a72aec708c1b1e6b840d67c89907cb8933d538546166cdb5a21625c07ec8c\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create a sandbox (or restore one from a template) - SandyWP Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates a sandbox. All fields are optional; sensible defaults are used (latest WordPress, PHP 8.3, standard preset, auto-selected worker). By default creation is synchronous: the request waits (up to ~60s) until the sandbox is ready and returns status: \u0026quot;ready\u0026quot; with the admin credentials and login URL. If provisioning takes longer, the response comes back with status: \u0026quot;creating\u0026quot; and HTTP 202 — poll GET /api/app/sites/{id} until it becomes \u0026quot;ready\u0026quot;. Pass background: true to skip the wait and return immediately (also 202 while still \u0026quot;creating\u0026quot;). Passing templateId restores a saved Template instead of provisioning a blank sandbox (fast snapshot restore, no reinstall) — free on every plan, subject to the normal sandbox-count and storage limits. In that mode, only siteName, duration, expirationMode, and background apply; every other field below is silently ignored (the sandbox inherits the Template\u0026#x27;s WordPress/PHP stack).\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://sandy-wp.mintlify.site/_mintlify/api/og/v2?division=Sites\u0026amp;title=Create+a+sandbox+%28or+restore+one+from+a+template%29\u0026amp;description=Creates+a+sandbox.+All+fields+are+optional%3B+sensible+defaults+are+used+%28latest+WordPress%2C%0APHP+8.3%2C+standard+preset%2C+auto-selected+worker%29.%0A%0ABy+default+creation+\u0026amp;theme=7adb8c57347f76c2bf2e915e\u0026amp;signature=704a72aec708c1b1e6b840d67c89907cb8933d538546166cdb5a21625c07ec8c\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/sandy-wp/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"SandyWP Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#d99830\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.sandywp.com/api-reference/endpoints/sites/create-a-sandbox-or-restore-one-from-a-template\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/endpoints/sites/create-a-sandbox-or-restore-one-from-a-template.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.sandywp.com/#organization\",\"name\":\"SandyWP Documentation\",\"url\":\"https://docs.sandywp.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/sandy-wp/dszzseu6N1-_GB7f/images/brand/sandywp-logo-light.png?fit=max\u0026auto=format\u0026n=dszzseu6N1-_GB7f\u0026q=85\u0026s=8e2affd29d5616eeb8d5bc46d549412a\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.sandywp.com#website\",\"name\":\"SandyWP Documentation\",\"url\":\"https://docs.sandywp.com\",\"publisher\":{\"@id\":\"https://docs.sandywp.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.sandywp.com/api-reference/endpoints/sites/create-a-sandbox-or-restore-one-from-a-template#webpage\",\"url\":\"https://docs.sandywp.com/api-reference/endpoints/sites/create-a-sandbox-or-restore-one-from-a-template\",\"name\":\"Create a sandbox (or restore one from a template)\",\"description\":\"Creates a sandbox. All fields are optional; sensible defaults are used (latest WordPress, PHP 8.3, standard preset, auto-selected worker). By default creation is synchronous: the request waits (up to ~60s) until the sandbox is ready and returns status: \\\"ready\\\" with the admin credentials and login URL. If provisioning takes longer, the response comes back with status: \\\"creating\\\" and HTTP 202 — poll GET /api/app/sites/{id} until it becomes \\\"ready\\\". Pass background: true to skip the wait and return immediately (also 202 while still \\\"creating\\\"). Passing templateId restores a saved Template instead of provisioning a blank sandbox (fast snapshot restore, no reinstall) — free on every plan, subject to the normal sandbox-count and storage limits. In that mode, only siteName, duration, expirationMode, and background apply; every other field below is silently ignored (the sandbox inherits the Template's WordPress/PHP stack).\",\"dateModified\":\"2026-10-28T11:39:42.263Z\",\"isPartOf\":{\"@id\":\"https://docs.sandywp.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.sandywp.com/api-reference/endpoints/sites/create-a-sandbox-or-restore-one-from-a-template#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.sandywp.com/api-reference/endpoints/sites/create-a-sandbox-or-restore-one-from-a-template#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://docs.sandywp.com/api-reference\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sites\",\"item\":\"https://docs.sandywp.com/api-reference/endpoints/sites/list-sandboxes\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Create a sandbox (or restore one from a template)\",\"item\":\"https://docs.sandywp.com/api-reference/endpoints/sites/create-a-sandbox-or-restore-one-from-a-template\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.sandywp.com/api-reference/endpoints/sites/create-a-sandbox-or-restore-one-from-a-template#apireference\",\"headline\":\"Create a sandbox (or restore one from a template)\",\"name\":\"Create a sandbox (or restore one from a template)\",\"description\":\"Creates a sandbox. All fields are optional; sensible defaults are used (latest WordPress, PHP 8.3, standard preset, auto-selected worker). By default creation is synchronous: the request waits (up to ~60s) until the sandbox is ready and returns status: \\\"ready\\\" with the admin credentials and login URL. If provisioning takes longer, the response comes back with status: \\\"creating\\\" and HTTP 202 — poll GET /api/app/sites/{id} until it becomes \\\"ready\\\". Pass background: true to skip the wait and return immediately (also 202 while still \\\"creating\\\"). Passing templateId restores a saved Template instead of provisioning a blank sandbox (fast snapshot restore, no reinstall) — free on every plan, subject to the normal sandbox-count and storage limits. In that mode, only siteName, duration, expirationMode, and background apply; every other field below is silently ignored (the sandbox inherits the Template's WordPress/PHP stack).\",\"url\":\"https://docs.sandywp.com/api-reference/endpoints/sites/create-a-sandbox-or-restore-one-from-a-template\",\"mainEntityOfPage\":{\"@id\":\"https://docs.sandywp.com/api-reference/endpoints/sites/create-a-sandbox-or-restore-one-from-a-template#webpage\"},\"dateModified\":\"2026-10-28T11:39:42.263Z\",\"publisher\":{\"@id\":\"https://docs.sandywp.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.sandywp.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"SandyWP Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"SandyWP Documentation","nav":{"global":null,"groups":[{"group":"Getting started","pages":[{"title":"Welcome to SandyWP","href":"/index"},{"title":"Core concepts","href":"/concepts"}]},{"group":"Using sandboxes","pages":[{"title":"Create a sandbox","href":"/guides/create-a-sandbox"},{"title":"Open wp-admin","href":"/guides/open-wp-admin"},{"title":"Lifespan and permanence","href":"/guides/site-lifespan"},{"title":"Plans and limits","href":"/guides/plans"}]},{"group":"Tools","pages":[{"title":"File Manager","href":"/guides/file-manager"},{"title":"Database","href":"/guides/database"},{"title":"PHP settings","href":"/guides/php"},{"title":"Custom domains","href":"/guides/custom-domains"},{"title":"Email delivery","href":"/guides/email-delivery"},{"title":"Git deployment","href":"/guides/git-deployment"},{"title":"SSH access","href":"/guides/ssh-access"},{"title":"Mount a sandbox","href":"/guides/mount-a-sandbox"},{"title":"Library","href":"/guides/plugin-library"},{"title":"Templates","href":"/guides/templates"},{"title":"Webhooks","href":"/guides/webhooks"},{"title":"Blueprints","href":"/guides/blueprints"},{"title":"Clone a site","href":"/guides/clone-a-site"},{"title":"Push a local site","href":"/guides/push-local-site"}]},{"group":"Integrations","pages":[{"title":"Slack app","href":"/guides/slack"},{"title":"GitHub pull request previews","href":"/guides/github"}]},{"group":"Connectors","pages":[{"title":"Muse connector brief","href":"/connectors/muse"}]},{"group":"Account","pages":[{"title":"Two-factor authentication","href":"/guides/two-factor-authentication"}]},{"group":"Automation guides","pages":[{"title":"API keys","href":"/guides/api-keys"},{"title":"CLI","href":"/cli"}]},{"group":"API Reference","pages":[{"title":"API Reference overview","href":"/api-reference"},{"title":"Blueprint API guidance","href":"/api-reference/blueprints"},{"title":"Imports API guidance","href":"/api-reference/imports"},{"title":"Workspace API guidance","href":"/api-reference/workspaces"},{"title":"OAuth connector flow","href":"/api-reference/oauth"},{"group":"Templates","pages":[{"title":"List templates","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/templates","href":"/api-reference/endpoints/templates/list-templates"},{"title":"Snapshot a sandbox into a new template","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/templates","href":"/api-reference/endpoints/templates/snapshot-a-sandbox-into-a-new-template"},{"title":"Get a template","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/templates/{id}","href":"/api-reference/endpoints/templates/get-a-template"},{"title":"Rename a template","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/app/templates/{id}","href":"/api-reference/endpoints/templates/rename-a-template"},{"title":"Delete a template","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/app/templates/{id}","href":"/api-reference/endpoints/templates/delete-a-template"},{"title":"Configure the template's public launch link","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/templates/{id}/launch","href":"/api-reference/endpoints/templates/configure-the-templates-public-launch-link"},{"title":"List a template's captured launch leads","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/templates/{id}/leads","href":"/api-reference/endpoints/templates/list-a-templates-captured-launch-leads"}]},{"group":"Sites","pages":[{"title":"List sandboxes","description":"Lists the caller's sandboxes. List items omit the plaintext admin password (see `SiteListItem`) — fetch `GET /api/app/sites/{id}` for a single sandbox to get it, or use `magicLoginUrl` for passwordless access.","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/sites","href":"/api-reference/endpoints/sites/list-sandboxes"},{"title":"Create a sandbox (or restore one from a template)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/sites","href":"/api-reference/endpoints/sites/create-a-sandbox-or-restore-one-from-a-template"},{"title":"Get a sandbox","description":"Returns one sandbox with its recent provisioning events and jobs — useful for showing live progress. Same response shape as `GET /api/sites/{id}/status`, addressed under the `/api/app` namespace.","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/sites/{id}","href":"/api-reference/endpoints/sites/get-a-sandbox"},{"title":"Rename a sandbox, or set whether it is permanent","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/app/sites/{id}","href":"/api-reference/endpoints/sites/rename-a-sandbox-or-set-whether-it-is-permanent"},{"title":"Restore an expired sandbox","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/sites/{id}","href":"/api-reference/endpoints/sites/restore-an-expired-sandbox"},{"title":"Delete a sandbox","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/app/sites/{id}","href":"/api-reference/endpoints/sites/delete-a-sandbox"},{"title":"Apply a blueprint to an existing sandbox","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/sites/{id}/blueprint","href":"/api-reference/endpoints/sites/apply-a-blueprint-to-an-existing-sandbox"},{"title":"Issue a database (Adminer) access URL","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/sites/{id}/database","href":"/api-reference/endpoints/sites/issue-a-database-adminer-access-url"},{"title":"Get the sandbox's custom domain","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/sites/{id}/domain","href":"/api-reference/endpoints/sites/get-the-sandboxs-custom-domain"},{"title":"Connect a custom domain","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/app/sites/{id}/domain","href":"/api-reference/endpoints/sites/connect-a-custom-domain"},{"title":"Disconnect the custom domain","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/app/sites/{id}/domain","href":"/api-reference/endpoints/sites/disconnect-the-custom-domain"},{"title":"Check DNS for the custom domain","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/sites/{id}/domain/verify","href":"/api-reference/endpoints/sites/check-dns-for-the-custom-domain"},{"title":"Get WordPress debug settings","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/sites/{id}/debug","href":"/api-reference/endpoints/sites/get-wordpress-debug-settings"},{"title":"Replace WordPress debug settings","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/app/sites/{id}/debug","href":"/api-reference/endpoints/sites/replace-wordpress-debug-settings"},{"title":"Explain the debug log with AI","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/sites/{id}/debug/explain","href":"/api-reference/endpoints/sites/explain-the-debug-log-with-ai"},{"title":"Tail the debug log","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/sites/{id}/debug/log","href":"/api-reference/endpoints/sites/tail-the-debug-log"},{"title":"Clear the debug log","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/app/sites/{id}/debug/log","href":"/api-reference/endpoints/sites/clear-the-debug-log"},{"title":"Install or deploy a plugin","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/sites/{id}/deploy-plugin","href":"/api-reference/endpoints/sites/install-or-deploy-a-plugin"},{"title":"Poll a plugin deploy job","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/sites/{id}/deploy-plugin","href":"/api-reference/endpoints/sites/poll-a-plugin-deploy-job"},{"title":"Get captured outgoing email","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/sites/{id}/email","href":"/api-reference/endpoints/sites/get-captured-outgoing-email"},{"title":"Turn email capture on or off","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/app/sites/{id}/email","href":"/api-reference/endpoints/sites/turn-email-capture-on-or-off"},{"title":"Clear the captured email log","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/app/sites/{id}/email","href":"/api-reference/endpoints/sites/clear-the-captured-email-log"},{"title":"File manager — read operations","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/sites/{id}/fs/{op}","href":"/api-reference/endpoints/sites/file-manager-—-read-operations"},{"title":"File manager — write operations","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/sites/{id}/fs/{op}","href":"/api-reference/endpoints/sites/file-manager-—-write-operations"},{"title":"Get PHP ini configuration","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/sites/{id}/php-config","href":"/api-reference/endpoints/sites/get-php-ini-configuration"},{"title":"Replace PHP ini configuration","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/app/sites/{id}/php-config","href":"/api-reference/endpoints/sites/replace-php-ini-configuration"},{"title":"Switch the PHP runtime version","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/app/sites/{id}/php-version","href":"/api-reference/endpoints/sites/switch-the-php-runtime-version"},{"title":"List a sandbox's connected Git repositories","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/sites/{id}/repositories","href":"/api-reference/endpoints/sites/list-a-sandboxs-connected-git-repositories"},{"title":"Connect a Git repository for deploys","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/sites/{id}/repositories","href":"/api-reference/endpoints/sites/connect-a-git-repository-for-deploys"},{"title":"Update a connected repository","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/app/sites/{id}/repositories/{repoId}","href":"/api-reference/endpoints/sites/update-a-connected-repository"},{"title":"Disconnect a repository","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/app/sites/{id}/repositories/{repoId}","href":"/api-reference/endpoints/sites/disconnect-a-repository"},{"title":"List a repository's remote branches and tags","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/sites/{id}/repositories/{repoId}/branches","href":"/api-reference/endpoints/sites/list-a-repositorys-remote-branches-and-tags"},{"title":"Trigger a deployment","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/sites/{id}/repositories/{repoId}/deploy","href":"/api-reference/endpoints/sites/trigger-a-deployment"},{"title":"Reset a sandbox to a clean install","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/sites/{id}/reset","href":"/api-reference/endpoints/sites/reset-a-sandbox-to-a-clean-install"},{"title":"Get SSH connection details","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/sites/{id}/ssh","href":"/api-reference/endpoints/sites/get-ssh-connection-details"},{"title":"Turn SSH on/off, or issue a one-click ephemeral key","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/sites/{id}/ssh","href":"/api-reference/endpoints/sites/turn-ssh-onoff-or-issue-a-one-click-ephemeral-key"},{"title":"Issue a one-time login link","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/sites/{id}/magic-login","href":"/api-reference/endpoints/sites/issue-a-one-time-login-link"},{"title":"Get sandbox status, events, and jobs","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/sites/{id}/status","href":"/api-reference/endpoints/sites/get-sandbox-status-events-and-jobs"}]},{"group":"Library","pages":[{"title":"List the Library","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/plugin-library","href":"/api-reference/endpoints/library/list-the-library"},{"title":"Add a plugin to the library","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/plugin-library","href":"/api-reference/endpoints/library/add-a-plugin-to-the-library"},{"title":"Remove a plugin from the library","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/app/plugin-library/{id}","href":"/api-reference/endpoints/library/remove-a-plugin-from-the-library"},{"title":"Store a license key for a library plugin","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/app/plugin-library/{id}/license-key","href":"/api-reference/endpoints/library/store-a-license-key-for-a-library-plugin"},{"title":"Remove a library plugin's license key","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/app/plugin-library/{id}/license-key","href":"/api-reference/endpoints/library/remove-a-library-plugins-license-key"}]},{"group":"Blueprints","pages":[{"title":"List saved Blueprints","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/blueprints","href":"/api-reference/endpoints/blueprints/list-saved-blueprints"},{"title":"Save a Blueprint","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/blueprints","href":"/api-reference/endpoints/blueprints/save-a-blueprint"},{"title":"Fetch a Blueprint from a URL","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/blueprints/import","href":"/api-reference/endpoints/blueprints/fetch-a-blueprint-from-a-url"},{"title":"Upload a Blueprint ZIP bundle","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/blueprints/upload","href":"/api-reference/endpoints/blueprints/upload-a-blueprint-zip-bundle"},{"title":"Generate a Blueprint from a description","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/blueprints/generate","href":"/api-reference/endpoints/blueprints/generate-a-blueprint-from-a-description"},{"title":"Validate or adapt a Blueprint","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/blueprints/validate","href":"/api-reference/endpoints/blueprints/validate-or-adapt-a-blueprint"},{"title":"Get a Blueprint","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/blueprints/{id}","href":"/api-reference/endpoints/blueprints/get-a-blueprint"},{"title":"Update a Blueprint","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/app/blueprints/{id}","href":"/api-reference/endpoints/blueprints/update-a-blueprint"},{"title":"Delete a Blueprint","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/app/blueprints/{id}","href":"/api-reference/endpoints/blueprints/delete-a-blueprint"},{"title":"List Blueprint runs","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/blueprints/{id}/runs","href":"/api-reference/endpoints/blueprints/list-blueprint-runs"},{"title":"Get a Blueprint run","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/blueprints/{id}/runs/{runId}","href":"/api-reference/endpoints/blueprints/get-a-blueprint-run"},{"title":"Bake a Blueprint into a Template","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/blueprints/{id}/bake","href":"/api-reference/endpoints/blueprints/bake-a-blueprint-into-a-template"},{"title":"Create a sandbox from a Blueprint","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/blueprints/{id}/sites","href":"/api-reference/endpoints/blueprints/create-a-sandbox-from-a-blueprint"}]},{"group":"Imports","pages":[{"title":"List imports","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/imports","href":"/api-reference/endpoints/imports/list-imports"},{"title":"Start an import upload","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/imports","href":"/api-reference/endpoints/imports/start-an-import-upload"},{"title":"Get import status","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/imports/{id}","href":"/api-reference/endpoints/imports/get-import-status"},{"title":"Cancel or remove an import","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/app/imports/{id}","href":"/api-reference/endpoints/imports/cancel-or-remove-an-import"},{"title":"Append an import archive chunk","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/app/imports/{id}/upload","href":"/api-reference/endpoints/imports/append-an-import-archive-chunk"},{"title":"Seal a chunked import upload","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/imports/{id}/complete","href":"/api-reference/endpoints/imports/seal-a-chunked-import-upload"},{"title":"Initialize direct multipart upload","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/imports/{id}/multipart/init","href":"/api-reference/endpoints/imports/initialize-direct-multipart-upload"},{"title":"Get a multipart part upload URL","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/imports/{id}/multipart/part","href":"/api-reference/endpoints/imports/get-a-multipart-part-upload-url"},{"title":"Complete a multipart upload","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/imports/{id}/multipart/complete","href":"/api-reference/endpoints/imports/complete-a-multipart-upload"},{"title":"Abort multipart upload","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/imports/{id}/multipart/abort","href":"/api-reference/endpoints/imports/abort-multipart-upload"},{"title":"Finalize a streamed import","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/imports/{id}/multipart/finalize","href":"/api-reference/endpoints/imports/finalize-a-streamed-import"}]},{"group":"Workspaces","pages":[{"title":"List available workspaces","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/workspaces","href":"/api-reference/endpoints/workspaces/list-available-workspaces"},{"title":"List workspace members","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/workspaces/{id}/members","href":"/api-reference/endpoints/workspaces/list-workspace-members"},{"title":"Invite a workspace member","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/workspaces/{id}/members","href":"/api-reference/endpoints/workspaces/invite-a-workspace-member"},{"title":"Assign a member role","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/app/workspaces/{id}/members/{userId}","href":"/api-reference/endpoints/workspaces/assign-a-member-role"},{"title":"Remove a workspace member","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/app/workspaces/{id}/members/{userId}","href":"/api-reference/endpoints/workspaces/remove-a-workspace-member"},{"title":"List workspace roles","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/app/workspaces/{id}/roles","href":"/api-reference/endpoints/workspaces/list-workspace-roles"},{"title":"Create a workspace role","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/app/workspaces/{id}/roles","href":"/api-reference/endpoints/workspaces/create-a-workspace-role"},{"title":"Update a workspace role","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/app/workspaces/{id}/roles/{roleId}","href":"/api-reference/endpoints/workspaces/update-a-workspace-role"},{"title":"Delete a workspace role","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/app/workspaces/{id}/roles/{roleId}","href":"/api-reference/endpoints/workspaces/delete-a-workspace-role"}]},{"group":"Account","pages":[{"title":"Get the current account identity","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/account/me","href":"/api-reference/endpoints/account/get-the-current-account-identity"},{"title":"Get plan usage","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/account/usage","href":"/api-reference/endpoints/account/get-plan-usage"},{"title":"List personal API tokens","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/account/tokens","href":"/api-reference/endpoints/account/list-personal-api-tokens"},{"title":"Create a personal API token","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/account/tokens","href":"/api-reference/endpoints/account/create-a-personal-api-token"},{"title":"Revoke a personal API token","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/account/tokens/{id}","href":"/api-reference/endpoints/account/revoke-a-personal-api-token"},{"title":"Get the Demo Launches webhook","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/account/webhooks/demo-launches","href":"/api-reference/endpoints/account/get-the-demo-launches-webhook"},{"title":"Create or update the Demo Launches webhook","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/account/webhooks/demo-launches","href":"/api-reference/endpoints/account/create-or-update-the-demo-launches-webhook"},{"title":"Remove the Demo Launches webhook","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/account/webhooks/demo-launches","href":"/api-reference/endpoints/account/remove-the-demo-launches-webhook"},{"title":"Send a Demo Launches webhook test","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/account/webhooks/demo-launches/test","href":"/api-reference/endpoints/account/send-a-demo-launches-webhook-test"},{"title":"Rotate the Demo Launches webhook secret","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/account/webhooks/demo-launches/rotate","href":"/api-reference/endpoints/account/rotate-the-demo-launches-webhook-secret"},{"title":"List account SSH public keys","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/account/ssh-keys","href":"/api-reference/endpoints/account/list-account-ssh-public-keys"},{"title":"Add an account SSH public key","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/account/ssh-keys","href":"/api-reference/endpoints/account/add-an-account-ssh-public-key"},{"title":"Revoke an account SSH key","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/account/ssh-keys/{id}","href":"/api-reference/endpoints/account/revoke-an-account-ssh-key"}]},{"group":"OAuth","pages":[{"title":"Dynamically register a public OAuth client","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/connect/register","href":"/api-reference/endpoints/oauth/dynamically-register-a-public-oauth-client"},{"title":"Exchange an authorization code for an access token","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/connect/token","href":"/api-reference/endpoints/oauth/exchange-an-authorization-code-for-an-access-token"}]}]}]},"basePath":"","title":"Create a sandbox (or restore one from a template) - SandyWP Documentation","buildId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","deploymentId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CBsVopKK.js","utils-DZAk68jJ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-D32AYZrP.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D_A5_cny.js","snippetPresets-xNRfS9th.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BIB25-tq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CydJ4w4j.js","shallow-CYPBeQSG.js","getApiPlaygroundDisplay-A5xJVBOu.js","CodeSnippet-BVRTgi3m.js","CodeSnippets-DjD6BSlt.js","Page-Dr40SSJq.js","getPastedJson-D4V4JyrR.js","icon-uhcnG22T.js","MethodPill-CM-ZQdGH.js","DuplicateIcon-B_WnOiNf.js","createIcon-CJsb8utt.js","DynamicMarkdown-D-2HDKEp.js","SectionHeading-KP5xmMgQ.js","axios-vUo_bRtp.js","Markdown-D_k0dg6k.js","clsx-DK3K4Z1S.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DE3EVdvd.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-fN9H9n9g.js"]}