const response = await fetch("https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render", {
method: "POST",
headers: {
"x-api-key": "sm_your_api_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}),
});
const data = await response.json();
console.log(data);
<?php
$payload = <<<'JSON'
{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
JSON;
$ch = curl_init("https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"x-api-key: sm_your_api_key",
"Content-Type: application/json",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
import requests
payload = {
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
response = requests.post(
"https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render",
headers={"x-api-key": "sm_your_api_key"},
json=payload,
)
response.raise_for_status()
print(response.json())
require "net/http"
require "uri"
uri = URI("https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render")
request = Net::HTTP::Post.new(uri)
request["x-api-key"] = "sm_your_api_key"
request["Content-Type"] = "application/json"
request.body = <<~JSON
{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
JSON
response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
http.request(request)
end
puts response.body
package main
import (
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
payload := []byte(`{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}`)
req, err := http.NewRequest("POST", "https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render", bytes.NewBuffer(payload))
if err != nil {
panic(err)
}
req.Header.Set("x-api-key", "sm_your_api_key")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
String payload = """
{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render"))
.header("x-api-key", "sm_your_api_key")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
using System.Net.Http;
using System.Text;
var payload = """
{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render");
request.Headers.Add("x-api-key", "sm_your_api_key");
request.Content = new StringContent(payload, Encoding.UTF8, "application/json");
var client = new HttpClient();
var response = await client.SendAsync(request);
Console.WriteLine(await response.Content.ReadAsStringAsync());
curl -X POST "https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render" \
-H "x-api-key: sm_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}'
{
"data": {
"print_files": [
{
"export_path": "string"
}
]
}
}
Render a photo mockup
Renders artwork onto a previously created photo mockup identified by the path mockup_id. Artwork can target a saved print area or a whole product surface, and a product offers both. The mockup must be in ‘ready’ status. Costs 5 credits. Returns CDN URL(s) of the rendered image.
const response = await fetch("https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render", {
method: "POST",
headers: {
"x-api-key": "sm_your_api_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}),
});
const data = await response.json();
console.log(data);
<?php
$payload = <<<'JSON'
{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
JSON;
$ch = curl_init("https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"x-api-key: sm_your_api_key",
"Content-Type: application/json",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
import requests
payload = {
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
response = requests.post(
"https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render",
headers={"x-api-key": "sm_your_api_key"},
json=payload,
)
response.raise_for_status()
print(response.json())
require "net/http"
require "uri"
uri = URI("https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render")
request = Net::HTTP::Post.new(uri)
request["x-api-key"] = "sm_your_api_key"
request["Content-Type"] = "application/json"
request.body = <<~JSON
{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
JSON
response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
http.request(request)
end
puts response.body
package main
import (
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
payload := []byte(`{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}`)
req, err := http.NewRequest("POST", "https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render", bytes.NewBuffer(payload))
if err != nil {
panic(err)
}
req.Header.Set("x-api-key", "sm_your_api_key")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
String payload = """
{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render"))
.header("x-api-key", "sm_your_api_key")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
using System.Net.Http;
using System.Text;
var payload = """
{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render");
request.Headers.Add("x-api-key", "sm_your_api_key");
request.Content = new StringContent(payload, Encoding.UTF8, "application/json");
var client = new HttpClient();
var response = await client.SendAsync(request);
Console.WriteLine(await response.Content.ReadAsStringAsync());
curl -X POST "https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render" \
-H "x-api-key: sm_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}'
{
"data": {
"print_files": [
{
"export_path": "string"
}
]
}
}
const response = await fetch("https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render", {
method: "POST",
headers: {
"x-api-key": "sm_your_api_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}),
});
const data = await response.json();
console.log(data);
<?php
$payload = <<<'JSON'
{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
JSON;
$ch = curl_init("https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"x-api-key: sm_your_api_key",
"Content-Type: application/json",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
import requests
payload = {
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
response = requests.post(
"https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render",
headers={"x-api-key": "sm_your_api_key"},
json=payload,
)
response.raise_for_status()
print(response.json())
require "net/http"
require "uri"
uri = URI("https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render")
request = Net::HTTP::Post.new(uri)
request["x-api-key"] = "sm_your_api_key"
request["Content-Type"] = "application/json"
request.body = <<~JSON
{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
JSON
response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
http.request(request)
end
puts response.body
package main
import (
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
payload := []byte(`{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}`)
req, err := http.NewRequest("POST", "https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render", bytes.NewBuffer(payload))
if err != nil {
panic(err)
}
req.Header.Set("x-api-key", "sm_your_api_key")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
String payload = """
{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render"))
.header("x-api-key", "sm_your_api_key")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
using System.Net.Http;
using System.Text;
var payload = """
{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render");
request.Headers.Add("x-api-key", "sm_your_api_key");
request.Content = new StringContent(payload, Encoding.UTF8, "application/json");
var client = new HttpClient();
var response = await client.SendAsync(request);
Console.WriteLine(await response.Content.ReadAsStringAsync());
curl -X POST "https://api.sudomock.com/api/v1/photo-mockups/3fa85f64-5717-4562-b3fc-2c963f66afa6/render" \
-H "x-api-key: sm_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"print_areas": [
{
"adjustments": {
"blend_mode": "multiply",
"opacity": 90
},
"artwork_url": "https://example.com/design.png",
"placement": {
"fit": "fit",
"position": "center"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}'
{
"data": {
"print_files": [
{
"export_path": "string"
}
]
}
}
Authorizations
API key with sm_ prefix. Get your key at https://sudomock.com/dashboard/api-keys
Path Parameters
Body
Body for POST /api/v1/photo-mockups/{mockup_id}/render.
The mockup UUID is taken from the path; the body carries only per-print-area artwork configuration and export options.
Artwork configuration per render target. Use uuid for a saved print area, and surface_uuid for a whole product surface. A product can be rendered either way, and saving a print area on it does not take its surface away.
1 - 8 elementsHide child attributes
Hide child attributes
UUID of a saved print area, a bounded zone drawn on a product.
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"19be48d4-c810-4420-86e3-7ec2a4d85571"
UUID of a printable product surface. A product carrying saved print areas still has one, and it is a separate render target from them.
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"733ee99a-f41f-4b9b-bf33-2ffa489f96db"
Base64-encoded artwork image.
Artwork image URL
"https://example.com/design.png"
Solid color as a hex code (e.g., '#FF0000'), or the name of a colour saved on this mockup (e.g., 'blue jean'). Names match exactly and are set with PATCH /api/v1/photo-mockups/{uuid}.
"#6A8296"
Optional visual adjustments for the artwork.
Hide child attributes
Hide child attributes
-150 <= x <= 150-100 <= x <= 1000 <= x <= 100-100 <= x <= 100-100 <= x <= 1000 <= x <= 100How the artwork sits on the product surface. 'multiply' keeps the material texture visible and is the best choice on light fabric (default); 'normal' reproduces the artwork colors exactly, whatever the product color, and is the right choice when a brand color has to match the supplied file; 'screen' lightens the artwork against the surface, which is worth reaching for only when you want that lighter result, since the default already adapts to a dark garment; 'lighten' keeps the artwork only where it is brighter than the surface; 'soft_light' gives a subtle, low-contrast finish that follows the surface; 'overlay' deepens contrast so the artwork reads as part of the material; 'darken' keeps the artwork only where it is darker than the surface.
multiply, normal, screen, lighten, soft_light, overlay, darken Where the artwork sits and how big it is. position, offset_x, offset_y and rotation apply to either target. Sizing follows the target: coverage on a surface_uuid target, and either fit or an explicit width and height on a uuid target.
Hide child attributes
Hide child attributes
Predefined position within print area
center, top_left, top_center, top_right, center_left, center_right, left_center, right_center, bottom_left, bottom_center, bottom_right How much of the product surface the artwork spans, 10 to 100. Spans the whole surface by default. Belongs to a surface_uuid target, and cannot be combined with an explicit width and height.
10 <= x <= 100How the artwork meets the print area. 'fit' scales it until it fits inside and keeps its proportions, which is the default and can leave empty space. 'fill' stretches it to the edges and does not keep proportions. 'crop' covers the area and cuts the overflow, keeping proportions. 'contain' and 'cover' are the older names for 'fit' and 'crop' and are still accepted. Always targets the whole print area. Belongs to a uuid target, and cannot be combined with an explicit width and height.
fill, fit, crop Horizontal offset in print-area pixels, measured from the anchor that 'position' picks, positive right. With the default position of 'center' that anchor is the middle of the print area.
Vertical offset in print-area pixels, measured from the anchor that 'position' picks, positive down. With the default position of 'center' that anchor is the middle of the print area.
Artwork width in target pixels. Must be sent together with 'height'. An exact box belongs to either kind of target: send it instead of 'fit' on a print area, or instead of 'coverage' on a surface. Width and height are independent, so any aspect ratio is allowed.
1 <= x <= 30000Artwork height in target pixels. Must be sent together with 'width'. An exact box belongs to either kind of target: send it instead of 'fit' on a print area, or instead of 'coverage' on a surface. Width and height are independent, so any aspect ratio is allowed.
1 <= x <= 30000Rotation in degrees (clockwise positive)
-360 <= x <= 360Flip artwork horizontally (left-right mirror)
Flip artwork vertically (top-bottom mirror)
Remove the image background before placing the artwork; the subject is isolated onto a clean transparent cutout. Adds 25 credits per artwork to the render cost.
Export configuration for format, size and quality. Every field has a default, so the whole object is optional.
Hide child attributes
Hide child attributes
Output format: 'webp' (30-70% smaller, recommended), 'png' (lossless), 'jpg' (smallest, no transparency)
png, jpg, webp Output width in pixels (100-10000). Height auto-calculated from the source aspect ratio. Powers of 2 (1024, 2048, 4096) recommended for best quality. Renders on an account in trial are capped at 1024: a larger image_size is rejected with error_code OUTPUT_RESOLUTION_LIMIT (HTTP 402) and is never silently downscaled. Add a payment method to render at full width.
100 <= x <= 10000Compression quality for JPG/WebP (1-100). Ignored for PNG (always lossless). Default: 90.
1 <= x <= 100Resolution tag stamped into the output file metadata (JPG/WebP via Exif XResolution, PNG via pHYs), e.g. 300 for print. This is metadata only: it does NOT change the pixels. Pixel dimensions are controlled by image_size: set image_size = print_size_inches * dpi for a true print-ready file (e.g. 12 in * 300 = 3600 px). Range 72-2400. Default: null (opt-in). Omitting it does not leave the file untagged: the encoder writes a default ~25.4 DPI (1 px/mm) tag. All three formats carry the tag, but for maximum print-tool compatibility prefer jpg or png, because WebP stores resolution in Exif and not every viewer surfaces it.
72 <= x <= 2400300
{ "image_format": "webp", "image_size": 2048, "quality": 95 }
If true, the render is QUEUED and the call returns 202 immediately with a job_id (poll GET /api/v1/jobs/{job_id}, or receive a webhook if one is configured); result_url carries the rendered image URL on success. If false (default), the render runs synchronously and returns the result.
Response
Successful Response
The finished photo-mockup render and where to fetch it.
Rendered output files
Hide child attributes
Hide child attributes
Identifier for this render.
Success status
Was this page helpful?