Restore Items
curl --request POST \
--url https://api.aspect.inc/fs-items/restore \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"asset_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"directory_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"symlink_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"conflict_resolutions": {}
}
'import requests
url = "https://api.aspect.inc/fs-items/restore"
payload = {
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"asset_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"directory_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"symlink_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"conflict_resolutions": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
project_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
asset_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
directory_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
symlink_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
conflict_resolutions: {}
})
};
fetch('https://api.aspect.inc/fs-items/restore', 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://api.aspect.inc/fs-items/restore",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'project_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'asset_ids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'directory_ids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'symlink_ids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'conflict_resolutions' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.aspect.inc/fs-items/restore"
payload := strings.NewReader("{\n \"project_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"asset_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"directory_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"symlink_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"conflict_resolutions\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.aspect.inc/fs-items/restore")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"project_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"asset_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"directory_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"symlink_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"conflict_resolutions\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aspect.inc/fs-items/restore")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"project_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"asset_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"directory_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"symlink_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"conflict_resolutions\": {}\n}"
response = http.request(request)
puts response.read_body{
"restored_asset_count": 123,
"restored_directory_count": 123,
"restored_symlink_count": 0
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
JWT in Authorization header. 'Bearer ' prefix optional.
Body
API request schema for restoring filesystem items from the project trash.
The backend resolves each item's restore destination from its pre_trash_directory_id. If the original directory no longer exists or is itself in trash, items fall back to the project root directory. Name conflict handling follows the same pattern as the move endpoint.
Project ID the items belong to
List of asset IDs to restore from trash
List of directory IDs to restore from trash
List of symlink IDs to restore from trash
Resolution strategies for name conflicts at restore destinations. Keys are string UUIDs of conflicting items. Each value specifies the resolution strategy and optional auto-rename style. If not provided and conflicts exist, returns 409 with conflict details.
Show child attributes
Show child attributes
Response
Successful Response
curl --request POST \
--url https://api.aspect.inc/fs-items/restore \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"asset_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"directory_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"symlink_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"conflict_resolutions": {}
}
'import requests
url = "https://api.aspect.inc/fs-items/restore"
payload = {
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"asset_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"directory_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"symlink_ids": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"conflict_resolutions": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
project_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
asset_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
directory_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
symlink_ids: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
conflict_resolutions: {}
})
};
fetch('https://api.aspect.inc/fs-items/restore', 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://api.aspect.inc/fs-items/restore",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'project_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'asset_ids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'directory_ids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'symlink_ids' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'conflict_resolutions' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.aspect.inc/fs-items/restore"
payload := strings.NewReader("{\n \"project_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"asset_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"directory_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"symlink_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"conflict_resolutions\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.aspect.inc/fs-items/restore")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"project_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"asset_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"directory_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"symlink_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"conflict_resolutions\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aspect.inc/fs-items/restore")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"project_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"asset_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"directory_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"symlink_ids\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"conflict_resolutions\": {}\n}"
response = http.request(request)
puts response.read_body{
"restored_asset_count": 123,
"restored_directory_count": 123,
"restored_symlink_count": 0
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}
