TypeScript client
import { OctosparkClient } from '@octospark/sdk'
const client = new OctosparkClient({
token: process.env.OCTOSPARK_TOKEN
})
const response = await client.assets.softDeleteAsset({
teamId: process.env.OCTOSPARK_TEAM_ID ?? "teamId",
assetId: process.env.OCTOSPARK_ASSET_ID ?? "assetId",
})import os
from octospark_sdk import OctosparkClient
client = OctosparkClient(token=os.environ["OCTOSPARK_TOKEN"])
response = client.assets.soft_delete_asset(
teamId=os.environ.get("OCTOSPARK_TEAM_ID", "teamId"),
assetId=os.environ.get("OCTOSPARK_ASSET_ID", "assetId")
)octospark assets delete \
--request '{"path":{"teamId":"teamId","assetId":"assetId"}}'use reqwest::Client;
use std::env;
#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
let client = Client::new();
let base_url = env::var("OCTOSPARK_API_URL").unwrap_or_else(|_| "https://api.octospark.ai".to_string());
let team_id = env::var("OCTOSPARK_TEAM_ID").unwrap_or_else(|_| "teamId".to_string());
let asset_id = env::var("OCTOSPARK_ASSET_ID").unwrap_or_else(|_| "assetId".to_string());
let url = format!("{}/v1/teams/{}/assets/{}", base_url.trim_end_matches('/'), team_id, asset_id);
let token = env::var("OCTOSPARK_TOKEN").expect("OCTOSPARK_TOKEN");
let mut request = client.delete(url).bearer_auth(token);
let response = request.send().await?;
println!("{}", response.text().await?);
Ok(())
}import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
Future<void> main() async {
final baseUrl = Platform.environment['OCTOSPARK_API_URL'] ?? 'https://api.octospark.ai';
final token = Platform.environment['OCTOSPARK_TOKEN'];
final teamId = Platform.environment['OCTOSPARK_TEAM_ID'] ?? 'teamId';
final assetId = Platform.environment['OCTOSPARK_ASSET_ID'] ?? 'assetId';
final url = '${baseUrl.replaceFirst(RegExp(r'/$'), '')}/v1/teams/$teamId/assets/$assetId';
final uri = Uri.parse(url);
final headers = {
'Authorization': 'Bearer $token',
};
final response = await http.delete(
uri,
headers: headers,
);
print(response.body);
}curl --request DELETE \
--url https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId} \
--header 'Authorization: Bearer <token>'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
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://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}"
req, _ := http.NewRequest("DELETE", 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.delete("https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body$headers=@{}
$headers.Add("Authorization", "Bearer <token>")
$response = Invoke-WebRequest -Uri 'https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}' -Method DELETE -Headers $headersimport Foundation
let url = URL(string: "https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.timeoutInterval = 10
request.allHTTPHeaderFields = ["Authorization": "Bearer <token>"]
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))using RestSharp;
var options = new RestClientOptions("https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.DeleteAsync(request);
Console.WriteLine("{0}", response.Content);
using RestSharp;
var options = new RestClientOptions("https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.DeleteAsync(request);
Console.WriteLine("{0}", response.Content);
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);val client = OkHttpClient()
val request = Request.Builder()
.url("https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}")
.delete(null)
.addHeader("Authorization", "Bearer <token>")
.build()
val response = client.newCall(request).execute(){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"teamId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"originalFilename": "<string>",
"fileSize": 123,
"mimeType": "<string>",
"assetType": "image",
"assetCategory": "user_upload",
"assetTypeData": {
"type": "image",
"width": 123,
"height": 123,
"format": "<string>",
"colorSpace": "<string>",
"meme": {
"sourceTemplateId": "<string>",
"sourceUrl": "<string>",
"captionBoxCount": 1,
"templatePageUrl": "<string>",
"captionZones": [
{
"key": "<string>",
"label": "<string>",
"x": 0.5,
"y": 0.5,
"width": 0,
"height": 0,
"style": {
"fontFamily": "<string>",
"fontSize": 259,
"fill": "<string>",
"stroke": "<string>",
"strokeWidth": 10,
"align": "left",
"bold": true,
"uppercase": true,
"verticalAlign": "top",
"italic": true,
"shadow": true,
"opacity": 0.5
},
"rotation": 0
}
],
"layout": {
"source": "imgflip_official",
"sourcePageUrl": "<string>",
"capturedAt": "<string>",
"canvasWidth": 4096.5,
"canvasHeight": 4096.5,
"imageBounds": {
"x": 0.5,
"y": 0.5,
"width": 0,
"height": 0
},
"sourceApiUrl": "<string>",
"generatorScriptUrl": "<string>",
"modelId": "<string>",
"generationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
},
"aspectRatio": "<string>"
},
"storagePath": "<string>",
"thumbnailPath": "<string>",
"aiTitle": "<string>",
"aiDescription": "<string>",
"aiAltText": "<string>",
"aiTags": [
"<string>"
],
"contentHash": "<string>",
"processingStatus": "pending",
"processingError": "<string>",
"isDeleted": true,
"deletedAt": "<string>",
"hardDeletedAt": "<string>",
"sharedWithOrg": true,
"folderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"folderName": "<string>",
"displayName": "<string>",
"aspectRatio": "<string>",
"isProcessing": true,
"createdAt": "<string>",
"updatedAt": "<string>"
}{
"issues": [
{
"_tag": "Pointer",
"path": [
"<string>"
],
"message": "<string>"
}
],
"message": "<string>",
"_tag": "HttpApiDecodeError"
}{
"message": "<string>",
"_tag": "Unauthorized"
}{
"message": "<string>",
"_tag": "PaymentRequired"
}{
"message": "<string>",
"_tag": "Forbidden"
}{
"message": "<string>",
"_tag": "NotFound"
}{
"message": "<string>",
"_tag": "Conflict",
"code": "<string>",
"currentRevision": 123
}{
"message": "<string>",
"code": "<string>",
"_tag": "UnprocessableEntity"
}{
"message": "<string>",
"_tag": "TooManyRequests",
"code": "<string>",
"retryAfterSeconds": 123
}{
"message": "<string>",
"_tag": "InternalError"
}Assets
Soft delete asset
Move an asset to the team’s trash (soft delete). It disappears from listings and search but is recoverable via restoreAsset. Check getAssetReferences first if you need to know which posts still reference it.
DELETE
/
v1
/
teams
/
{teamId}
/
assets
/
{assetId}
TypeScript client
import { OctosparkClient } from '@octospark/sdk'
const client = new OctosparkClient({
token: process.env.OCTOSPARK_TOKEN
})
const response = await client.assets.softDeleteAsset({
teamId: process.env.OCTOSPARK_TEAM_ID ?? "teamId",
assetId: process.env.OCTOSPARK_ASSET_ID ?? "assetId",
})import os
from octospark_sdk import OctosparkClient
client = OctosparkClient(token=os.environ["OCTOSPARK_TOKEN"])
response = client.assets.soft_delete_asset(
teamId=os.environ.get("OCTOSPARK_TEAM_ID", "teamId"),
assetId=os.environ.get("OCTOSPARK_ASSET_ID", "assetId")
)octospark assets delete \
--request '{"path":{"teamId":"teamId","assetId":"assetId"}}'use reqwest::Client;
use std::env;
#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
let client = Client::new();
let base_url = env::var("OCTOSPARK_API_URL").unwrap_or_else(|_| "https://api.octospark.ai".to_string());
let team_id = env::var("OCTOSPARK_TEAM_ID").unwrap_or_else(|_| "teamId".to_string());
let asset_id = env::var("OCTOSPARK_ASSET_ID").unwrap_or_else(|_| "assetId".to_string());
let url = format!("{}/v1/teams/{}/assets/{}", base_url.trim_end_matches('/'), team_id, asset_id);
let token = env::var("OCTOSPARK_TOKEN").expect("OCTOSPARK_TOKEN");
let mut request = client.delete(url).bearer_auth(token);
let response = request.send().await?;
println!("{}", response.text().await?);
Ok(())
}import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
Future<void> main() async {
final baseUrl = Platform.environment['OCTOSPARK_API_URL'] ?? 'https://api.octospark.ai';
final token = Platform.environment['OCTOSPARK_TOKEN'];
final teamId = Platform.environment['OCTOSPARK_TEAM_ID'] ?? 'teamId';
final assetId = Platform.environment['OCTOSPARK_ASSET_ID'] ?? 'assetId';
final url = '${baseUrl.replaceFirst(RegExp(r'/$'), '')}/v1/teams/$teamId/assets/$assetId';
final uri = Uri.parse(url);
final headers = {
'Authorization': 'Bearer $token',
};
final response = await http.delete(
uri,
headers: headers,
);
print(response.body);
}curl --request DELETE \
--url https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId} \
--header 'Authorization: Bearer <token>'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
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://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}"
req, _ := http.NewRequest("DELETE", 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.delete("https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body$headers=@{}
$headers.Add("Authorization", "Bearer <token>")
$response = Invoke-WebRequest -Uri 'https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}' -Method DELETE -Headers $headersimport Foundation
let url = URL(string: "https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.timeoutInterval = 10
request.allHTTPHeaderFields = ["Authorization": "Bearer <token>"]
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))using RestSharp;
var options = new RestClientOptions("https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.DeleteAsync(request);
Console.WriteLine("{0}", response.Content);
using RestSharp;
var options = new RestClientOptions("https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.DeleteAsync(request);
Console.WriteLine("{0}", response.Content);
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);val client = OkHttpClient()
val request = Request.Builder()
.url("https://api-staging.octospark.ai/v1/teams/{teamId}/assets/{assetId}")
.delete(null)
.addHeader("Authorization", "Bearer <token>")
.build()
val response = client.newCall(request).execute(){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"teamId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"originalFilename": "<string>",
"fileSize": 123,
"mimeType": "<string>",
"assetType": "image",
"assetCategory": "user_upload",
"assetTypeData": {
"type": "image",
"width": 123,
"height": 123,
"format": "<string>",
"colorSpace": "<string>",
"meme": {
"sourceTemplateId": "<string>",
"sourceUrl": "<string>",
"captionBoxCount": 1,
"templatePageUrl": "<string>",
"captionZones": [
{
"key": "<string>",
"label": "<string>",
"x": 0.5,
"y": 0.5,
"width": 0,
"height": 0,
"style": {
"fontFamily": "<string>",
"fontSize": 259,
"fill": "<string>",
"stroke": "<string>",
"strokeWidth": 10,
"align": "left",
"bold": true,
"uppercase": true,
"verticalAlign": "top",
"italic": true,
"shadow": true,
"opacity": 0.5
},
"rotation": 0
}
],
"layout": {
"source": "imgflip_official",
"sourcePageUrl": "<string>",
"capturedAt": "<string>",
"canvasWidth": 4096.5,
"canvasHeight": 4096.5,
"imageBounds": {
"x": 0.5,
"y": 0.5,
"width": 0,
"height": 0
},
"sourceApiUrl": "<string>",
"generatorScriptUrl": "<string>",
"modelId": "<string>",
"generationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
},
"aspectRatio": "<string>"
},
"storagePath": "<string>",
"thumbnailPath": "<string>",
"aiTitle": "<string>",
"aiDescription": "<string>",
"aiAltText": "<string>",
"aiTags": [
"<string>"
],
"contentHash": "<string>",
"processingStatus": "pending",
"processingError": "<string>",
"isDeleted": true,
"deletedAt": "<string>",
"hardDeletedAt": "<string>",
"sharedWithOrg": true,
"folderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"folderName": "<string>",
"displayName": "<string>",
"aspectRatio": "<string>",
"isProcessing": true,
"createdAt": "<string>",
"updatedAt": "<string>"
}{
"issues": [
{
"_tag": "Pointer",
"path": [
"<string>"
],
"message": "<string>"
}
],
"message": "<string>",
"_tag": "HttpApiDecodeError"
}{
"message": "<string>",
"_tag": "Unauthorized"
}{
"message": "<string>",
"_tag": "PaymentRequired"
}{
"message": "<string>",
"_tag": "Forbidden"
}{
"message": "<string>",
"_tag": "NotFound"
}{
"message": "<string>",
"_tag": "Conflict",
"code": "<string>",
"currentRevision": 123
}{
"message": "<string>",
"code": "<string>",
"_tag": "UnprocessableEntity"
}{
"message": "<string>",
"_tag": "TooManyRequests",
"code": "<string>",
"retryAfterSeconds": 123
}{
"message": "<string>",
"_tag": "InternalError"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Team (workspace) id (UUID). Discover ids via the list teams endpoint or the agent context.
Media-library asset id (UUID), as returned by asset list, search, and upload endpoints.
Response
Success
a Universally Unique Identifier
Pattern:
^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$a Universally Unique Identifier
Pattern:
^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$Available options:
image, video, audio, gif, document Available options:
user_upload, render, template, green_screen_template, sound_effect, music, brand_asset, ai_image, ai_video, other - Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
Show child attributes
Show child attributes
Available options:
pending, processing, completed, failed a Universally Unique Identifier
Pattern:
^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$