cURL
curl --request POST \
--url https://whilter-api-host/vton/request \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"user-id": "<string>",
"client-id": "<string>",
"usecase-id": "<string>",
"model-image": "<string>",
"garment-image": "<array>",
"category": "auto",
"mode": "balanced",
"moderation_level": "permissive",
"segmentation_free": true,
"output_format": "png"
}
'import requests
url = "https://whilter-api-host/vton/request"
payload = {
"user-id": "<string>",
"client-id": "<string>",
"usecase-id": "<string>",
"model-image": "<string>",
"garment-image": "<array>",
"category": "auto",
"mode": "balanced",
"moderation_level": "permissive",
"segmentation_free": True,
"output_format": "png"
}
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({
'user-id': '<string>',
'client-id': '<string>',
'usecase-id': '<string>',
'model-image': '<string>',
'garment-image': '<array>',
category: 'auto',
mode: 'balanced',
moderation_level: 'permissive',
segmentation_free: true,
output_format: 'png'
})
};
fetch('https://whilter-api-host/vton/request', 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://whilter-api-host/vton/request",
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([
'user-id' => '<string>',
'client-id' => '<string>',
'usecase-id' => '<string>',
'model-image' => '<string>',
'garment-image' => '<array>',
'category' => 'auto',
'mode' => 'balanced',
'moderation_level' => 'permissive',
'segmentation_free' => true,
'output_format' => 'png'
]),
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://whilter-api-host/vton/request"
payload := strings.NewReader("{\n \"user-id\": \"<string>\",\n \"client-id\": \"<string>\",\n \"usecase-id\": \"<string>\",\n \"model-image\": \"<string>\",\n \"garment-image\": \"<array>\",\n \"category\": \"auto\",\n \"mode\": \"balanced\",\n \"moderation_level\": \"permissive\",\n \"segmentation_free\": true,\n \"output_format\": \"png\"\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://whilter-api-host/vton/request")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"user-id\": \"<string>\",\n \"client-id\": \"<string>\",\n \"usecase-id\": \"<string>\",\n \"model-image\": \"<string>\",\n \"garment-image\": \"<array>\",\n \"category\": \"auto\",\n \"mode\": \"balanced\",\n \"moderation_level\": \"permissive\",\n \"segmentation_free\": true,\n \"output_format\": \"png\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://whilter-api-host/vton/request")
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 \"user-id\": \"<string>\",\n \"client-id\": \"<string>\",\n \"usecase-id\": \"<string>\",\n \"model-image\": \"<string>\",\n \"garment-image\": \"<array>\",\n \"category\": \"auto\",\n \"mode\": \"balanced\",\n \"moderation_level\": \"permissive\",\n \"segmentation_free\": true,\n \"output_format\": \"png\"\n}"
response = http.request(request)
puts response.read_body{
"request-id": "<string>"
}{
"error": true,
"message": "Invalid authentication token",
"code": "UNAUTHORIZED",
"timestamp": "2025-01-27T10:30:46Z"
}Virtual Tryon Apparel API
Create Virtual Tryon Request
Create Virtual Tryon Request
POST
/
vton
/
request
cURL
curl --request POST \
--url https://whilter-api-host/vton/request \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"user-id": "<string>",
"client-id": "<string>",
"usecase-id": "<string>",
"model-image": "<string>",
"garment-image": "<array>",
"category": "auto",
"mode": "balanced",
"moderation_level": "permissive",
"segmentation_free": true,
"output_format": "png"
}
'import requests
url = "https://whilter-api-host/vton/request"
payload = {
"user-id": "<string>",
"client-id": "<string>",
"usecase-id": "<string>",
"model-image": "<string>",
"garment-image": "<array>",
"category": "auto",
"mode": "balanced",
"moderation_level": "permissive",
"segmentation_free": True,
"output_format": "png"
}
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({
'user-id': '<string>',
'client-id': '<string>',
'usecase-id': '<string>',
'model-image': '<string>',
'garment-image': '<array>',
category: 'auto',
mode: 'balanced',
moderation_level: 'permissive',
segmentation_free: true,
output_format: 'png'
})
};
fetch('https://whilter-api-host/vton/request', 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://whilter-api-host/vton/request",
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([
'user-id' => '<string>',
'client-id' => '<string>',
'usecase-id' => '<string>',
'model-image' => '<string>',
'garment-image' => '<array>',
'category' => 'auto',
'mode' => 'balanced',
'moderation_level' => 'permissive',
'segmentation_free' => true,
'output_format' => 'png'
]),
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://whilter-api-host/vton/request"
payload := strings.NewReader("{\n \"user-id\": \"<string>\",\n \"client-id\": \"<string>\",\n \"usecase-id\": \"<string>\",\n \"model-image\": \"<string>\",\n \"garment-image\": \"<array>\",\n \"category\": \"auto\",\n \"mode\": \"balanced\",\n \"moderation_level\": \"permissive\",\n \"segmentation_free\": true,\n \"output_format\": \"png\"\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://whilter-api-host/vton/request")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"user-id\": \"<string>\",\n \"client-id\": \"<string>\",\n \"usecase-id\": \"<string>\",\n \"model-image\": \"<string>\",\n \"garment-image\": \"<array>\",\n \"category\": \"auto\",\n \"mode\": \"balanced\",\n \"moderation_level\": \"permissive\",\n \"segmentation_free\": true,\n \"output_format\": \"png\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://whilter-api-host/vton/request")
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 \"user-id\": \"<string>\",\n \"client-id\": \"<string>\",\n \"usecase-id\": \"<string>\",\n \"model-image\": \"<string>\",\n \"garment-image\": \"<array>\",\n \"category\": \"auto\",\n \"mode\": \"balanced\",\n \"moderation_level\": \"permissive\",\n \"segmentation_free\": true,\n \"output_format\": \"png\"\n}"
response = http.request(request)
puts response.read_body{
"request-id": "<string>"
}{
"error": true,
"message": "Invalid authentication token",
"code": "UNAUTHORIZED",
"timestamp": "2025-01-27T10:30:46Z"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Virtual Tryon request parameters
User phone number or ID
Client ID provided during vendor onboarding
Usecase ID provided during vendor onboarding
URL of the model image
URL of the garment image
Category of garments
Available options:
auto, tops, bottoms, one-pieces Speed vs quality preset
Available options:
balanced, performance, quality Content safety filter
Available options:
conservative, permissive, none Skip clothing removal
Image encoding for output
Available options:
png, jpeg Response
Virtual Tryon request created successfully
Unique identifier of the generation task
⌘I

