const response = await fetch("https://api.sudomock.com/api/v1/renders", {
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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
JSON;
$ch = curl_init("https://api.sudomock.com/api/v1/renders");
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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
response = requests.post(
"https://api.sudomock.com/api/v1/renders",
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/renders")
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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}`)
req, err := http.NewRequest("POST", "https://api.sudomock.com/api/v1/renders", 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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sudomock.com/api/v1/renders"))
.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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://api.sudomock.com/api/v1/renders");
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/renders" \
-H "x-api-key: sm_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}'
{
"data": {
"print_files": [
{
"export_path": "https://cdn.sudomock.com/renders/c315f78f-d2c7-4541-b240-a9372842de94/render_8f2c1d4e.webp",
"smart_object_uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
},
"success": true
}
Render a PSD mockup
Renders a mockup by compositing layers with user-provided images.
const response = await fetch("https://api.sudomock.com/api/v1/renders", {
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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
JSON;
$ch = curl_init("https://api.sudomock.com/api/v1/renders");
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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
response = requests.post(
"https://api.sudomock.com/api/v1/renders",
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/renders")
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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}`)
req, err := http.NewRequest("POST", "https://api.sudomock.com/api/v1/renders", 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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sudomock.com/api/v1/renders"))
.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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://api.sudomock.com/api/v1/renders");
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/renders" \
-H "x-api-key: sm_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}'
{
"data": {
"print_files": [
{
"export_path": "https://cdn.sudomock.com/renders/c315f78f-d2c7-4541-b240-a9372842de94/render_8f2c1d4e.webp",
"smart_object_uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
},
"success": true
}
const response = await fetch("https://api.sudomock.com/api/v1/renders", {
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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
JSON;
$ch = curl_init("https://api.sudomock.com/api/v1/renders");
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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
response = requests.post(
"https://api.sudomock.com/api/v1/renders",
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/renders")
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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}`)
req, err := http.NewRequest("POST", "https://api.sudomock.com/api/v1/renders", 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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sudomock.com/api/v1/renders"))
.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
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}
""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://api.sudomock.com/api/v1/renders");
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/renders" \
-H "x-api-key: sm_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"export_options": {
"image_format": "webp",
"image_size": 1920,
"quality": 95
},
"mockup_uuid": "123e4567-e89b-12d3-a456-426614174000",
"smart_objects": [
{
"asset": {
"fit": "fill",
"position": {
"left": 100,
"top": 100
},
"rotate": 0,
"size": {
"height": 600,
"width": 800
},
"url": "https://example.com/user-design.png"
},
"color": {
"blending_mode": "multiply",
"hex": "#FFFFFF"
},
"uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
}'
{
"data": {
"print_files": [
{
"export_path": "https://cdn.sudomock.com/renders/c315f78f-d2c7-4541-b240-a9372842de94/render_8f2c1d4e.webp",
"smart_object_uuid": "223e4567-e89b-12d3-a456-426614174001"
}
]
},
"success": true
}
Authorizations
API key with sm_ prefix. Get your key at https://sudomock.com/dashboard/api-keys
Body
What to render: which mockup, what goes into it, and how to export it.
UUID of the mockup to render. Must be a valid UUID, for example c315f78f-d2c7-4541-b240-a9372842de94. Obtained from the POST /api/v1/psd/upload or GET /api/v1/psd-mockups response.
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"c315f78f-d2c7-4541-b240-a9372842de94"
List of smart objects with their assets. Required unless text_layers or group_layers is provided.
Hide child attributes
Hide child attributes
UUID of the smart object to render
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"b41a7e52-93c8-4d61-8f07-2ae5c9d04713"
Asset configuration (image to place)
Hide child attributes
Hide child attributes
URL to the user's image (HTTP/HTTPS or data: URL). Either url or base64 must be provided. Server downloads the image, adding network latency.
"https://example.com/user-design.png"
Raw base64-encoded image bytes (no data: prefix). RECOMMENDED for best performance: eliminates server-side download latency (50-500ms faster than URL). Either url or base64 must be provided.
MIME type when using base64 field. Supported: image/png, image/jpeg, image/webp, image/gif. Defaults to image/png if omitted.
^image/(png|jpeg|webp|gif)$"image/png"
How the artwork meets the smart object area. 'fit' scales it until it fits inside, keeping proportions, which can leave empty space. 'fill' stretches it to the bounds and does not keep its 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. Defaults to 'fit': a caller who says nothing is not asking to have their artwork distorted, and a silently stretched design is a defect the caller cannot see.
fill, fit, crop Custom size override in pixels. Width and height are both optional and each must be at least 1 pixel.
Custom position override (top/left in pixels). The top-left corner of the size box, which stays axis-aligned: rotate turns the artwork inside it, never the box.
Rotation angle in degrees (clockwise positive). Applied to the artwork before it is fitted, so the turned artwork, corners included, is what fit places inside the still axis-aligned size box at position.
-360 <= x <= 36015
Flip 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.
{ "fit": "fill", "flip_horizontal": false, "flip_vertical": false, "position": { "left": 20, "top": 10 }, "rotate": 15, "size": { "height": 600, "width": 800 }, "url": "https://example.com/user-design.png" }
Color overlay configuration
Hide child attributes
Hide child attributes
Hex color code (e.g., '#FF5733'). Send this or 'label'.
^#[0-9A-Fa-f]{6}$"#FF5733"
One of the colours saved on this mockup, by the name you gave it. Send this instead of 'hex' to keep calling a colour what your own catalogue calls it. Names match exactly, and are set with PATCH /api/v1/psd-mockups/{uuid}.
1 - 32Blend mode for color overlay. Common values: 'normal', 'multiply' (fabric/textile mockups), 'screen', 'overlay', 'soft_light'. All 27 Photoshop blend modes supported.
"multiply"
{ "blending_mode": "multiply", "hex": "#FF5733" }
Image adjustments applied to your artwork after the fit transform and before it is blended into the mockup. PSD-level adjustment layers are not affected.
Hide child attributes
Hide child attributes
Brightness adjustment (-150 to 150). 0=no change.
-150 <= x <= 150Contrast adjustment (-100 to 100). 0=no change.
-100 <= x <= 100Artwork opacity (0=fully transparent, 100=fully opaque). Default 100.
0 <= x <= 100Saturation adjustment (-100 to 100). 0=no change, -100=grayscale.
-100 <= x <= 100Vibrance adjustment (-100 to 100). Similar to saturation but preserves skin tones.
-100 <= x <= 100Gaussian blur amount (0=sharp, 100=max blur). Useful for background effects.
0 <= x <= 100Up to 50 text-layer overrides. Each entry targets a text-layer UUID and provides exactly one of text for a single-style layer or segments for a mixed-style layer. Omitted layers and styling fields keep their authored values.
50Hide child attributes
Hide child attributes
UUID of the text layer to update (from the upload/detail response text_layers list)
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"4d7f1a2e-6c83-4b19-9e5a-2f0c8d3b6471"
Replacement text (1-500 characters) for single-style layers (segment_count = 1)
1 - 500"Isabella"
Styled-segment overrides for multi-style layers (segment_count > 1). Override any subset by index; omitted segments keep their original text.
1 - 32 elementsHide child attributes
Hide child attributes
Segment to replace (0-based, from the layer's segments list)
0 <= x <= 31Replacement text for this segment (1-200 characters). The segment keeps its own font, size, and color.
1 - 200Font to render with: a font uuid from GET /fonts, or a PostScript name. Single-style layers only. Omit to keep the layer's original font.
255"OpenSans-Bold"
Font size in pixels at the mockup's native resolution. Single-style layers only. Omit to keep the original size.
0 < x <= 200048
Text color as hex, e.g. #1A1A1A. Single-style layers only. Applies to the color you see: when the layer's visible color comes from a color effect, that effect takes the new color. Omit to keep the original color.
^#?[0-9a-fA-F]{6}$"#1A1A1A"
Color for this text layer's own outlines. Send a hex value like "#FFFFFF" to recolor the front outline, or a list in stroke_count order (front to back). Use null to keep an outline's original color; extra entries are ignored. Layers with no outlines ignore this value with a warning. Single-style layers only. Omit to keep all original outline colors.
"#FFFFFF"
How longer replacement text is handled for single-style point text: 'overflow' (default) preserves the designed size and may extend beyond the original area; 'shrink' scales the text down to fit; 'clip' preserves the size and cuts it at the last character that fits. Paragraph text continues to wrap within its box.
shrink, clip, overflow Where text that 'fit': 'shrink' scaled down sits vertically within the original text area: 'top' (default) keeps the designed position, 'center' centers it in the area, 'bottom' aligns it to the area's bottom edge. Only applies when shrinking actually occurs; single-style point text only.
top, bottom, center Group outline overrides. Each entry addresses a listed group by its own UUID; the change affects everything inside that group.
50Hide child attributes
Hide child attributes
UUID of the group layer to update (from the upload/detail response group_layers list)
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"b2c14e08-5a7d-4f36-a91b-7e0d5c283a64"
Color for the group's outlines. Send a hex value like "#FFFFFF" to recolor the front outline, or a list in stroke_count order (front to back). Use null to keep an outline's original color; extra entries are ignored. The change affects everything inside this group.
"#FFFFFF"
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 }
Optional label for export file naming (max 100 chars, alphanumeric + hyphen/underscore)
100"summer-tee-front"
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). If false (default), the render runs synchronously and returns the result.
Response
Successful Response
The finished render and where to fetch it.
Response data
Hide child attributes
Hide child attributes
List of rendered print files
Hide child attributes
Hide child attributes
Path to the rendered output file
"https://cdn.sudomock.com/mockup-assets/renders/c315f78f-d2c7-4541-b240-a9372842de94/render_5ec56e42-4afe-4267-bf21-6f8f586d16bb.webp"
UUID of the first Smart Object in the request; an empty string for a render without Smart Objects, including text-only and group-only renders.
"6bdc8897-3eee-4356-b717-8bc3c9249946"
The render's transaction id (also the async job uuid). Returned so storefront/Studio fulfillment flows can correlate the render; null on legacy paths.
"5ec56e42-4afe-4267-bf21-6f8f586d16bb"
The render's transaction id (also the async job uuid). Echoed at the data level for convenience; null on legacy paths.
Success status
Non-fatal advisories about this render (e.g. requested size above the mockup's native resolution). Omitted when none.
[ { "code": "OUTPUT_EXCEEDS_MAX_RESOLUTION", "message": "Requested 4096px is above this mockup's native 3000px. The result is enlarged and may look softer than its native resolution. For the sharpest output, request 3000px or less." } ]
Was this page helpful?