curl --request GET \
--url https://app.sandywp.com/api/app/imports/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.sandywp.com/api/app/imports/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.sandywp.com/api/app/imports/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.sandywp.com/api/app/imports/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.sandywp.com/api/app/imports/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.sandywp.com/api/app/imports/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sandywp.com/api/app/imports/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"import": {
"id": "imp_abc123",
"userId": "<string>",
"orgId": "<string>",
"createdByUserId": "<string>",
"sourceKind": "remote_plugin",
"sourceUrl": "<string>",
"artifactId": "<string>",
"siteId": "<string>",
"status": "awaiting_upload",
"failureReason": "<string>",
"sizeBytes": 1,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
},
"site": {
"id": "site_abc123",
"name": "my-sandbox",
"slug": "my-sandbox",
"status": "creating",
"publicUrl": "https://my-sandbox.sandywp.dev",
"wordpressVersion": "<string>",
"phpVersion": "<string>",
"workerCode": "eu1",
"adminUsername": "admin",
"adminPassword": "<string>",
"magicLoginUrl": "<string>",
"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": "<string>"
},
"siteUrl": "<string>",
"magicLoginUrl": "<string>",
"progress": {
"message": "<string>",
"step": 123,
"totalSteps": 123,
"updatedAt": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "auth_required",
"message": "A logged-in user is required.",
"details": {}
}
}{
"error": {
"code": "insufficient_scope",
"message": "This token is not permitted to perform the requested action."
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}Get import status
Returns an import, its linked Site when one exists, ready-site login information, and live restore progress while it is creating. Scoped OAuth tokens need import:read.
curl --request GET \
--url https://app.sandywp.com/api/app/imports/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.sandywp.com/api/app/imports/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.sandywp.com/api/app/imports/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.sandywp.com/api/app/imports/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.sandywp.com/api/app/imports/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.sandywp.com/api/app/imports/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sandywp.com/api/app/imports/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"import": {
"id": "imp_abc123",
"userId": "<string>",
"orgId": "<string>",
"createdByUserId": "<string>",
"sourceKind": "remote_plugin",
"sourceUrl": "<string>",
"artifactId": "<string>",
"siteId": "<string>",
"status": "awaiting_upload",
"failureReason": "<string>",
"sizeBytes": 1,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
},
"site": {
"id": "site_abc123",
"name": "my-sandbox",
"slug": "my-sandbox",
"status": "creating",
"publicUrl": "https://my-sandbox.sandywp.dev",
"wordpressVersion": "<string>",
"phpVersion": "<string>",
"workerCode": "eu1",
"adminUsername": "admin",
"adminPassword": "<string>",
"magicLoginUrl": "<string>",
"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": "<string>"
},
"siteUrl": "<string>",
"magicLoginUrl": "<string>",
"progress": {
"message": "<string>",
"step": 123,
"totalSteps": 123,
"updatedAt": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "auth_required",
"message": "A logged-in user is required.",
"details": {}
}
}{
"error": {
"code": "insufficient_scope",
"message": "This token is not permitted to perform the requested action."
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}Authorizations
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.
Headers
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.
Path Parameters
The import id.
Response
The import and current restore state.
An import upload and restore lifecycle record.
Show child attributes
Show child attributes
The linked sandbox, when assigned. It includes the public Site fields needed for polling.
Show child attributes
Show child attributes
Issued for a ready Site when available.
Show child attributes
Show child attributes

