Optimize Asset
curl --request POST \
--url https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/components/{componentId}/assets/{assetId}/optimize \
--header 'Content-Type: application/json' \
--data '
{
"options": {},
"options.quality": 123,
"options.format": "<string>",
"options.width": 123,
"options.height": 123
}
'import requests
url = "https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/components/{componentId}/assets/{assetId}/optimize"
payload = {
"options": {},
"options.quality": 123,
"options.format": "<string>",
"options.width": 123,
"options.height": 123
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
options: {},
'options.quality': 123,
'options.format': '<string>',
'options.width': 123,
'options.height': 123
})
};
fetch('https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/components/{componentId}/assets/{assetId}/optimize', 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.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/components/{componentId}/assets/{assetId}/optimize",
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([
'options' => [
],
'options.quality' => 123,
'options.format' => '<string>',
'options.width' => 123,
'options.height' => 123
]),
CURLOPT_HTTPHEADER => [
"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.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/components/{componentId}/assets/{assetId}/optimize"
payload := strings.NewReader("{\n \"options\": {},\n \"options.quality\": 123,\n \"options.format\": \"<string>\",\n \"options.width\": 123,\n \"options.height\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
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.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/components/{componentId}/assets/{assetId}/optimize")
.header("Content-Type", "application/json")
.body("{\n \"options\": {},\n \"options.quality\": 123,\n \"options.format\": \"<string>\",\n \"options.width\": 123,\n \"options.height\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/components/{componentId}/assets/{assetId}/optimize")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"options\": {},\n \"options.quality\": 123,\n \"options.format\": \"<string>\",\n \"options.width\": 123,\n \"options.height\": 123\n}"
response = http.request(request)
puts response.read_bodyComponent Assets
Optimize Asset
Optimize a component asset for size and format
POST
/
app
/
v1
/
organizations
/
{organizationId}
/
projects
/
{projectId}
/
components
/
{componentId}
/
assets
/
{assetId}
/
optimize
Optimize Asset
curl --request POST \
--url https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/components/{componentId}/assets/{assetId}/optimize \
--header 'Content-Type: application/json' \
--data '
{
"options": {},
"options.quality": 123,
"options.format": "<string>",
"options.width": 123,
"options.height": 123
}
'import requests
url = "https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/components/{componentId}/assets/{assetId}/optimize"
payload = {
"options": {},
"options.quality": 123,
"options.format": "<string>",
"options.width": 123,
"options.height": 123
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
options: {},
'options.quality': 123,
'options.format': '<string>',
'options.width': 123,
'options.height': 123
})
};
fetch('https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/components/{componentId}/assets/{assetId}/optimize', 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.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/components/{componentId}/assets/{assetId}/optimize",
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([
'options' => [
],
'options.quality' => 123,
'options.format' => '<string>',
'options.width' => 123,
'options.height' => 123
]),
CURLOPT_HTTPHEADER => [
"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.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/components/{componentId}/assets/{assetId}/optimize"
payload := strings.NewReader("{\n \"options\": {},\n \"options.quality\": 123,\n \"options.format\": \"<string>\",\n \"options.width\": 123,\n \"options.height\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
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.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/components/{componentId}/assets/{assetId}/optimize")
.header("Content-Type", "application/json")
.body("{\n \"options\": {},\n \"options.quality\": 123,\n \"options.format\": \"<string>\",\n \"options.width\": 123,\n \"options.height\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/app/v1/organizations/{organizationId}/projects/{projectId}/components/{componentId}/assets/{assetId}/optimize")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"options\": {},\n \"options.quality\": 123,\n \"options.format\": \"<string>\",\n \"options.width\": 123,\n \"options.height\": 123\n}"
response = http.request(request)
puts response.read_bodyOptimize an image asset by converting format, adjusting quality, or resizing.
Path Parameters
string
required
Organization ID
string
required
Project ID
string
required
Component ID
string
required
Asset ID
Request Body
object
required
Optimization options (at least one property required)
number
Image quality (1-100)
string
Output format:
jpeg, png, webp, or avifnumber
Target width in pixels (1-10000)
number
Target height in pixels (1-10000)
Example Request
{
"options": {
"quality": 85,
"format": "webp",
"width": 800
}
}
Response
Returns the optimized Component Asset object.{
"id": "asset123",
"componentId": "c123",
"name": "hero-image.webp",
"type": "image/webp",
"url": "https://cdn.metabind.ai/.../hero-image.webp",
"size": 45678,
"status": "active",
"metadata": {
"width": 800,
"height": 600,
"originalSize": 2048576,
"optimizedAt": "2024-03-22T10:00:00Z"
},
"tags": ["hero"],
"createdAt": "2024-03-20T10:00:00Z",
"updatedAt": "2024-03-22T10:00:00Z"
}
Optimization replaces the original file. The original size is stored in metadata for reference.
Error Responses
Unsupported Format
{
"error": {
"code": "UNSUPPORTED_FORMAT",
"message": "Cannot optimize this file type",
"details": {
"type": "application/pdf"
}
}
}
Asset In Use
{
"error": {
"code": "ASSET_IN_USE",
"message": "Asset is referenced in published packages and cannot be modified",
"details": {
"packages": ["1.0.0"]
}
}
}
Code Examples
curl -X POST "https://api.metabind.ai/app/v1/organizations/org123/projects/proj456/components/c123/assets/asset123/optimize" \
-H "Authorization: Bearer YOUR_JWT" \
-H "Content-Type: application/json" \
-d '{
"options": {
"quality": 85,
"format": "webp"
}
}'
const response = await fetch(
'https://api.metabind.ai/app/v1/organizations/org123/projects/proj456/components/c123/assets/asset123/optimize',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_JWT',
'Content-Type': 'application/json'
},
body: JSON.stringify({
options: {
quality: 85,
format: 'webp'
}
})
}
);
const asset = await response.json();
console.log(`Optimized: ${asset.metadata.originalSize} -> ${asset.size} bytes`);