curl --request POST \
--url https://app.selektable.com/v1/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"image": "<string>",
"products": [
{
"productId": "<string>",
"productTitle": "<string>",
"imageUrl": "<string>",
"productUrl": "<string>",
"dimensions": {}
}
],
"hint": "<string>",
"imageSize": "1K",
"metadata": {}
}
'import requests
url = "https://app.selektable.com/v1/generations"
payload = {
"image": "<string>",
"products": [
{
"productId": "<string>",
"productTitle": "<string>",
"imageUrl": "<string>",
"productUrl": "<string>",
"dimensions": {}
}
],
"hint": "<string>",
"imageSize": "1K",
"metadata": {}
}
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({
image: '<string>',
products: [
{
productId: '<string>',
productTitle: '<string>',
imageUrl: '<string>',
productUrl: '<string>',
dimensions: {}
}
],
hint: '<string>',
imageSize: '1K',
metadata: {}
})
};
fetch('https://app.selektable.com/v1/generations', 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://app.selektable.com/v1/generations",
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([
'image' => '<string>',
'products' => [
[
'productId' => '<string>',
'productTitle' => '<string>',
'imageUrl' => '<string>',
'productUrl' => '<string>',
'dimensions' => [
]
]
],
'hint' => '<string>',
'imageSize' => '1K',
'metadata' => [
]
]),
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://app.selektable.com/v1/generations"
payload := strings.NewReader("{\n \"image\": \"<string>\",\n \"products\": [\n {\n \"productId\": \"<string>\",\n \"productTitle\": \"<string>\",\n \"imageUrl\": \"<string>\",\n \"productUrl\": \"<string>\",\n \"dimensions\": {}\n }\n ],\n \"hint\": \"<string>\",\n \"imageSize\": \"1K\",\n \"metadata\": {}\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://app.selektable.com/v1/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"image\": \"<string>\",\n \"products\": [\n {\n \"productId\": \"<string>\",\n \"productTitle\": \"<string>\",\n \"imageUrl\": \"<string>\",\n \"productUrl\": \"<string>\",\n \"dimensions\": {}\n }\n ],\n \"hint\": \"<string>\",\n \"imageSize\": \"1K\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.selektable.com/v1/generations")
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 \"image\": \"<string>\",\n \"products\": [\n {\n \"productId\": \"<string>\",\n \"productTitle\": \"<string>\",\n \"imageUrl\": \"<string>\",\n \"productUrl\": \"<string>\",\n \"dimensions\": {}\n }\n ],\n \"hint\": \"<string>\",\n \"imageSize\": \"1K\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "agen_abc123",
"object": "generation",
"status": "processing",
"mode": "virtual-try-on",
"imageSize": "1K",
"imageUrl": "<string>",
"imageVariants": {
"list": {
"url": "<string>",
"width": 123
},
"card": {
"url": "<string>",
"width": 123
},
"detail": {
"url": "<string>",
"width": 123
}
},
"products": [
{
"productId": "<string>",
"productTitle": "<string>",
"imageUrl": "<string>",
"productUrl": "<string>",
"dimensions": {}
}
],
"hint": "<string>",
"error": {
"code": "<string>",
"message": "<string>"
},
"metadata": {},
"createdAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z"
}{
"id": "agen_abc123",
"object": "generation",
"status": "processing",
"mode": "virtual-try-on",
"imageSize": "1K",
"imageUrl": "<string>",
"imageVariants": {
"list": {
"url": "<string>",
"width": 123
},
"card": {
"url": "<string>",
"width": 123
},
"detail": {
"url": "<string>",
"width": 123
}
},
"products": [
{
"productId": "<string>",
"productTitle": "<string>",
"imageUrl": "<string>",
"productUrl": "<string>",
"dimensions": {}
}
],
"hint": "<string>",
"error": {
"code": "<string>",
"message": "<string>"
},
"metadata": {},
"createdAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z"
}{
"error": {
"type": "authentication_error",
"code": "<string>",
"message": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "<string>",
"message": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "<string>",
"message": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "<string>",
"message": "<string>",
"param": "<string>"
}
}Create a generation
Starts an asynchronous AI visualization. Returns 202 Accepted with a processing generation. Supply an Idempotency-Key header to safely retry.
curl --request POST \
--url https://app.selektable.com/v1/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"image": "<string>",
"products": [
{
"productId": "<string>",
"productTitle": "<string>",
"imageUrl": "<string>",
"productUrl": "<string>",
"dimensions": {}
}
],
"hint": "<string>",
"imageSize": "1K",
"metadata": {}
}
'import requests
url = "https://app.selektable.com/v1/generations"
payload = {
"image": "<string>",
"products": [
{
"productId": "<string>",
"productTitle": "<string>",
"imageUrl": "<string>",
"productUrl": "<string>",
"dimensions": {}
}
],
"hint": "<string>",
"imageSize": "1K",
"metadata": {}
}
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({
image: '<string>',
products: [
{
productId: '<string>',
productTitle: '<string>',
imageUrl: '<string>',
productUrl: '<string>',
dimensions: {}
}
],
hint: '<string>',
imageSize: '1K',
metadata: {}
})
};
fetch('https://app.selektable.com/v1/generations', 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://app.selektable.com/v1/generations",
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([
'image' => '<string>',
'products' => [
[
'productId' => '<string>',
'productTitle' => '<string>',
'imageUrl' => '<string>',
'productUrl' => '<string>',
'dimensions' => [
]
]
],
'hint' => '<string>',
'imageSize' => '1K',
'metadata' => [
]
]),
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://app.selektable.com/v1/generations"
payload := strings.NewReader("{\n \"image\": \"<string>\",\n \"products\": [\n {\n \"productId\": \"<string>\",\n \"productTitle\": \"<string>\",\n \"imageUrl\": \"<string>\",\n \"productUrl\": \"<string>\",\n \"dimensions\": {}\n }\n ],\n \"hint\": \"<string>\",\n \"imageSize\": \"1K\",\n \"metadata\": {}\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://app.selektable.com/v1/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"image\": \"<string>\",\n \"products\": [\n {\n \"productId\": \"<string>\",\n \"productTitle\": \"<string>\",\n \"imageUrl\": \"<string>\",\n \"productUrl\": \"<string>\",\n \"dimensions\": {}\n }\n ],\n \"hint\": \"<string>\",\n \"imageSize\": \"1K\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.selektable.com/v1/generations")
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 \"image\": \"<string>\",\n \"products\": [\n {\n \"productId\": \"<string>\",\n \"productTitle\": \"<string>\",\n \"imageUrl\": \"<string>\",\n \"productUrl\": \"<string>\",\n \"dimensions\": {}\n }\n ],\n \"hint\": \"<string>\",\n \"imageSize\": \"1K\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "agen_abc123",
"object": "generation",
"status": "processing",
"mode": "virtual-try-on",
"imageSize": "1K",
"imageUrl": "<string>",
"imageVariants": {
"list": {
"url": "<string>",
"width": 123
},
"card": {
"url": "<string>",
"width": 123
},
"detail": {
"url": "<string>",
"width": 123
}
},
"products": [
{
"productId": "<string>",
"productTitle": "<string>",
"imageUrl": "<string>",
"productUrl": "<string>",
"dimensions": {}
}
],
"hint": "<string>",
"error": {
"code": "<string>",
"message": "<string>"
},
"metadata": {},
"createdAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z"
}{
"id": "agen_abc123",
"object": "generation",
"status": "processing",
"mode": "virtual-try-on",
"imageSize": "1K",
"imageUrl": "<string>",
"imageVariants": {
"list": {
"url": "<string>",
"width": 123
},
"card": {
"url": "<string>",
"width": 123
},
"detail": {
"url": "<string>",
"width": 123
}
},
"products": [
{
"productId": "<string>",
"productTitle": "<string>",
"imageUrl": "<string>",
"productUrl": "<string>",
"dimensions": {}
}
],
"hint": "<string>",
"error": {
"code": "<string>",
"message": "<string>"
},
"metadata": {},
"createdAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z"
}{
"error": {
"type": "authentication_error",
"code": "<string>",
"message": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "<string>",
"message": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "<string>",
"message": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "<string>",
"message": "<string>",
"param": "<string>"
}
}202 Accepted with a processing generation.
Learn the outcome via webhooks (recommended) or by polling the generation.
Supply an Idempotency-Key header to safely retry on network failures.Authorizations
Your Selektable API key (selektable_...), sent as Authorization: Bearer <key>.
Headers
Unique key to make creation idempotent.
Body
virtual-try-on = fashion; room-visualizer = interior staging.
virtual-try-on, room-visualizer Customer photo: an https URL or a data:image/*;base64,... URI (≤10MB).
1 - 3 elementsShow child attributes
Show child attributes
Optional styling guidance.
500Output resolution. Consumes 1/2/3 credits respectively.
1K, 2K, 4K Up to 40 string key/values, echoed back on the generation.
Show child attributes
Show child attributes
Response
Idempotent replay — existing generation returned
"agen_abc123"
generation processing, complete, failed virtual-try-on, room-visualizer 1K, 2K, 4K Permanent CDN URL to the original render at the requested imageSize (1K/2K/4K). Safe to store and embed.
Permanent CDN URLs to resized JPEG/WebP variants of imageUrl, served by Cloudflare Image Transformations. Use a variant instead of the original when you need a smaller payload (emails, lists, mobile). null until status is complete.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?