{"id":1255,"date":"2026-05-15T04:09:52","date_gmt":"2026-05-15T04:09:52","guid":{"rendered":"https:\/\/fitroom.app\/blog\/?p=1255"},"modified":"2026-05-15T04:09:52","modified_gmt":"2026-05-15T04:09:52","slug":"how-firoom-virtual-try-on-api-work","status":"publish","type":"post","link":"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/","title":{"rendered":"How Fitroom Virtual Try-On API Works: Pipeline, Endpoints, and What Makes It Different"},"content":{"rendered":"<p>Most virtual try-on APIs work the same way on the surface: send two images, get one back. What differs is what happens between those two steps \u2014 and whether the API gives you any control over it.<\/p>\n<p>This article walks through exactly how Fitroom&#8217;s API processes a try-on request, why the pipeline is designed the way it is, and what Fitroom offers that most competitors don&#8217;t. If you&#8217;re a developer evaluating integration options, or a non-technical reader trying to understand why virtual try-on works well on some inputs and poorly on others \u2014 this is the explanation that&#8217;s actually useful.<\/p>\n<p><em>All technical details sourced from\u00a0<a href=\"https:\/\/developer.fitroom.app\/\">Fitroom&#8217;s official API documentation<\/a>. For pricing, see our\u00a0<a href=\"https:\/\/fitroom.app\/blog\/best-virtual-try-on-api-compared\/\">full API comparison<\/a>.<\/em><\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_72 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#What_Actually_Happens_When_You_Call_a_Virtual_Try-On_API\" title=\"What Actually Happens When You Call a Virtual Try-On API\">What Actually Happens When You Call a Virtual Try-On API<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Step_1_Understand_the_person_in_the_photo\" title=\"Step 1: Understand the person in the photo\">Step 1: Understand the person in the photo<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Step_2_Understand_the_garment\" title=\"Step 2: Understand the garment\">Step 2: Understand the garment<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Step_3_Warp_the_garment_onto_the_body\" title=\"Step 3: Warp the garment onto the body\">Step 3: Warp the garment onto the body<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Step_4_Generate_the_final_image\" title=\"Step 4: Generate the final image\">Step 4: Generate the final image<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Step_5_Polish_and_return\" title=\"Step 5: Polish and return\">Step 5: Polish and return<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Fitrooms_API_Four_Endpoints_Two_Workflows\" title=\"Fitroom&#8217;s API: Four Endpoints, Two Workflows\">Fitroom&#8217;s API: Four Endpoints, Two Workflows<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Endpoint_1_Check_Model_Image\" title=\"Endpoint 1: Check Model Image\">Endpoint 1: Check Model Image<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Endpoint_2_Check_Clothes_Image\" title=\"Endpoint 2: Check Clothes Image\">Endpoint 2: Check Clothes Image<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Bonus_Clothes_Classifier\" title=\"Bonus: Clothes Classifier\">Bonus: Clothes Classifier<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Endpoint_3_Create_Try-On_Task\" title=\"Endpoint 3: Create Try-On Task\">Endpoint 3: Create Try-On Task<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Endpoint_4_Get_Task_Status\" title=\"Endpoint 4: Get Task Status\">Endpoint 4: Get Task Status<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Two_Integration_Workflows_and_When_to_Use_Each\" title=\"Two Integration Workflows and When to Use Each\">Two Integration Workflows and When to Use Each<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Recommended_workflow_validate_first\" title=\"Recommended workflow: validate first\">Recommended workflow: validate first<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Quick_workflow_skip_validation\" title=\"Quick workflow: skip validation\">Quick workflow: skip validation<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#What_Fitroom_Does_That_Most_Virtual_Try-On_APIs_Dont\" title=\"What Fitroom Does That Most Virtual Try-On APIs Don&#8217;t\">What Fitroom Does That Most Virtual Try-On APIs Don&#8217;t<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Input_validation_before_you_spend_credits\" title=\"Input validation before you spend credits\">Input validation before you spend credits<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Combo_try-on_in_one_request\" title=\"Combo try-on in one request\">Combo try-on in one request<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Clothes_classifier_as_a_standalone_feature\" title=\"Clothes classifier as a standalone feature\">Clothes classifier as a standalone feature<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Real-time_progress_tracking\" title=\"Real-time progress tracking\">Real-time progress tracking<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Flat_credit_pricing_%E2%80%94_no_resolution_multipliers\" title=\"Flat credit pricing \u2014 no resolution multipliers\">Flat credit pricing \u2014 no resolution multipliers<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Input_Guidelines_That_Affect_Output_Quality\" title=\"Input Guidelines That Affect Output Quality\">Input Guidelines That Affect Output Quality<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Frequently_Asked_Questions\" title=\"Frequently Asked Questions\">Frequently Asked Questions<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#How_does_Fitroom_virtual_try-on_API_work\" title=\"How does Fitroom virtual try-on API work?\">How does Fitroom virtual try-on API work?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Why_does_virtual_try-on_take_9_seconds_instead_of_returning_instantly\" title=\"Why does virtual try-on take 9 seconds instead of returning instantly?\">Why does virtual try-on take 9 seconds instead of returning instantly?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#What_makes_Fitroom_API_different_from_other_virtual_try-on_APIs\" title=\"What makes Fitroom API different from other virtual try-on APIs?\">What makes Fitroom API different from other virtual try-on APIs?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#What_happens_if_the_model_or_clothing_image_is_rejected\" title=\"What happens if the model or clothing image is rejected?\">What happens if the model or clothing image is rejected?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/fitroom.app\/blog\/how-firoom-virtual-try-on-api-work\/#Does_Fitroom_support_full_outfit_try-on\" title=\"Does Fitroom support full outfit try-on?\">Does Fitroom support full outfit try-on?<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"What_Actually_Happens_When_You_Call_a_Virtual_Try-On_API\"><\/span>What Actually Happens When You Call a Virtual Try-On API<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1258\" src=\"https:\/\/fitroom.app\/blog\/wp-content\/uploads\/2026\/05\/fitroom-virtual-try-on-for-ecommerce.jpg\" alt=\"fitroom-virtual-try-on-api-for-ecommerce\" width=\"1000\" height=\"488\" title=\"\"><\/p>\n<p>Before getting into Fitroom&#8217;s specific endpoints, it helps to understand the underlying pipeline that every virtual try-on system runs \u2014 because the pipeline is why results vary, why processing takes time, and why input quality matters so much.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step_1_Understand_the_person_in_the_photo\"><\/span>Step 1: Understand the person in the photo<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The first thing the system needs to do is locate the human body in the model image. This means detecting key landmarks \u2014 shoulders, torso, waist, hips, arms \u2014 to understand the body&#8217;s pose and proportions. Without this, the system has no reference for where the garment should sit, how wide the shoulders are, or how long the torso is.<\/p>\n<p>This is also why model images have requirements. A person facing sideways, sitting, or partially out of frame breaks this step. The system can&#8217;t accurately map garment placement on a body it can&#8217;t fully read.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step_2_Understand_the_garment\"><\/span>Step 2: Understand the garment<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The system then analyzes the clothing image \u2014 extracting its shape, texture, print details, and garment type (upper, lower, full body). This step preserves what makes the garment look like itself: the exact color of a logo, the weave pattern of a fabric, the fit of a collar.<\/p>\n<p>This step is harder than it looks. A flat product image of a hoodie behaves differently when modeled on a body \u2014 the fabric folds, the hem drops differently, the sleeves interact with the arms. The system needs to understand the garment well enough to simulate that transformation accurately.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step_3_Warp_the_garment_onto_the_body\"><\/span>Step 3: Warp the garment onto the body<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The garment is then reshaped to match the body&#8217;s pose and proportions. This isn&#8217;t a simple overlay \u2014 the system physically transforms the garment geometry to follow the body&#8217;s contours, stretch points, and natural drape directions.<\/p>\n<p>This step explains why some garment types are harder than others. A t-shirt has simple geometry \u2014 minimal overlapping fabric, predictable drape. A hoodie has a hood that interacts with the neck and shoulders, a front pocket that creates a fold line, and a drawstring that affects how the hem sits. A dress involves full-body geometry across different fabric zones. More complexity means more ways the warping can go wrong \u2014 which is directly why output quality varies across garment types in any virtual try-on system.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step_4_Generate_the_final_image\"><\/span>Step 4: Generate the final image<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Modern virtual try-on systems use diffusion models for the final generation step. These models work by starting with noise and iteratively refining it toward a coherent image \u2014 guided by the body structure and warped garment from the previous steps.<\/p>\n<p>This is the step that takes time. Standard mode runs a lighter diffusion pass \u2014 enough for clean, commercially usable output in approximately 9 seconds. HD mode runs more diffusion steps, producing finer texture detail at the cost of approximately 30 seconds of processing. There&#8217;s no shortcut: more detail means more compute.<\/p>\n<p>The diffusion model is also why fine text and logos are the hardest things to preserve. The generation process operates at a pixel level across the whole image \u2014 preserving exact character shapes in a printed word is a different challenge than preserving fabric texture, and it&#8217;s where you see the most variation across different APIs.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Step_5_Polish_and_return\"><\/span>Step 5: Polish and return<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The final step handles lighting matching, edge blending where the garment meets the body, and shadow consistency. This is what separates a result that looks natural from one that looks obviously composited.<\/p>\n<p>The entire pipeline runs asynchronously \u2014 meaning results aren&#8217;t instant. The system queues your request, processes it through all five steps, and returns a result URL when complete. This is why virtual try-on APIs use a task-based model rather than a synchronous request-response pattern.<\/p>\n<p><a href=\"http:\/\/Process of virtual try on clothes\" rel=\"nofollow\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1259\" src=\"https:\/\/fitroom.app\/blog\/wp-content\/uploads\/2026\/05\/virtual-try-on-api.jpg\" alt=\"virtual-try-on-api\" width=\"1000\" height=\"562\" title=\"\"><\/a><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Fitrooms_API_Four_Endpoints_Two_Workflows\"><\/span>Fitroom&#8217;s API: Four Endpoints, Two Workflows<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Fitroom exposes four endpoints that map directly onto this pipeline. Two are for validation before you process anything. Two are for task creation and result retrieval.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Endpoint_1_Check_Model_Image\"><\/span>Endpoint 1: Check Model Image<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><code>POST \/api\/tryon\/input_check\/v1\/model<\/code>\u00a0\u00b7\u00a0<strong>0.5 credits<\/strong><\/p>\n<p>This endpoint analyzes a model photo before you run the try-on. It checks whether the image meets the requirements the pipeline needs: is there one person clearly visible, are they facing forward, is the body large enough in the frame, is the pose readable?<\/p>\n<p>The response tells you two things: whether the image is usable (<code>is_good: true\/false<\/code>), and which garment types that model image can support (<code>good_clothes_types: [\"upper\", \"lower\", \"full\"]<\/code>). A full-body standing photo will return all three. A cropped torso shot might only return\u00a0<code>upper<\/code>.<\/p>\n<p>Error codes are specific, not generic:<\/p>\n<ul>\n<li><code>400001<\/code>\u00a0\u2014 No person detected<\/li>\n<li><code>400002<\/code>\u00a0\u2014 More than one person in frame<\/li>\n<li><code>400003<\/code>\u00a0\u2014 Person not facing forward<\/li>\n<li><code>400004<\/code>\u00a0\u2014 Person too small in image<\/li>\n<li><code>410001<\/code>\u00a0\u2014 Warning: person slightly small, crop recommended<\/li>\n<li><code>410002\/410003<\/code>\u00a0\u2014 Warning: pose is unclear, results may vary<\/li>\n<\/ul>\n<p>The difference between 400x and 410x codes matters in production. A 400x means the image will fail or produce a bad result \u2014 reject it before spending a try-on credit. A 410x means the image is borderline \u2014 you can proceed but should warn the user the result may not be optimal.<\/p>\n<p><strong>Why most competitors don&#8217;t have this:<\/strong>\u00a0FASHN.ai, Claid, and Kling don&#8217;t offer a dedicated model validation endpoint. You find out your image is unsuitable when the generation fails or produces a distorted result \u2014 after the credit is consumed.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Endpoint_2_Check_Clothes_Image\"><\/span>Endpoint 2: Check Clothes Image<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><code>POST \/api\/tryon\/input_check\/v1\/clothes<\/code>\u00a0\u00b7\u00a0<strong>0.5 credits<\/strong><\/p>\n<p>This endpoint validates the clothing image and auto-detects the garment type. The response returns\u00a0<code>is_clothes: true\/false<\/code>\u00a0and\u00a0<code>clothes_type: \"upper\" | \"lower\" | \"full\"<\/code>.<\/p>\n<p>This serves two practical purposes. First, it catches unsuitable inputs \u2014 a lifestyle photo that includes a person, a multi-item flat lay, an image with heavy background noise \u2014 before the try-on runs. Second, it removes the need to hardcode\u00a0<code>cloth_type<\/code>\u00a0in your Create Task request. You can let the validation endpoint auto-detect the garment type and pass it forward programmatically.<\/p>\n<p>For apps where users upload their own clothing images \u2014 not curated product shots \u2014 this endpoint is the difference between consistently clean results and unpredictable output.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Bonus_Clothes_Classifier\"><\/span>Bonus: Clothes Classifier<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Beyond basic validation, Fitroom&#8217;s clothes endpoint can auto-tag garments by category, occasion, and style. This is a separate use case from try-on validation \u2014 useful for building product catalog features, recommendation systems, or auto-tagging pipelines without manual curation. At 0.5 credits per call, it&#8217;s the same cost as the validation endpoint.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Endpoint_3_Create_Try-On_Task\"><\/span>Endpoint 3: Create Try-On Task<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><code>POST \/api\/tryon\/v2\/tasks<\/code>\u00a0\u00b7\u00a0<strong>1 credit per image<\/strong><\/p>\n<p>This is the core try-on endpoint. You upload a model image and a clothing image, specify the garment type, and optionally enable HD mode. The API returns a\u00a0<code>task_id<\/code>\u00a0immediately \u2014 the try-on runs asynchronously in the background.<\/p>\n<p>Fitroom supports four\u00a0<code>cloth_type<\/code>\u00a0values:<\/p>\n<ul>\n<li><code>upper<\/code>\u00a0\u2014 tops, shirts, jackets, sweaters, blazers<\/li>\n<li><code>lower<\/code>\u00a0\u2014 pants, shorts, skirts<\/li>\n<li><code>full_set<\/code>\u00a0\u2014 dresses, jumpsuits, full-body outfits<\/li>\n<li><code>combo<\/code>\u00a0\u2014 upper + lower simultaneously in one request<\/li>\n<\/ul>\n<p>The\u00a0<code>combo<\/code>\u00a0type is the one that matters most for POD sellers and fashion brands building outfit pages. Other APIs require two separate calls \u2014 and two credit charges \u2014 for an outfit. Fitroom processes both garments in one request for one credit.<\/p>\n<p>HD mode adds an optional parameter:\u00a0<code>hd_mode=true<\/code>. This increases processing time from ~9 seconds to ~30 seconds and produces output up to 2048px. For product pages where image quality directly affects purchase decisions, HD mode is worth the wait. For consumer apps where users want near-instant feedback, standard mode is the right default.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Endpoint_4_Get_Task_Status\"><\/span>Endpoint 4: Get Task Status<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><code>GET \/api\/tryon\/v2\/tasks\/:id<\/code><\/p>\n<p>After creating a task, you poll this endpoint to track progress and retrieve the result. The response includes a\u00a0<code>status<\/code>\u00a0field (<code>CREATED \u2192 PROCESSING \u2192 COMPLETED \/ FAILED<\/code>) and a\u00a0<code>progress<\/code>\u00a0value from 0 to 100.<\/p>\n<p>The progress field is genuinely useful for UX \u2014 you can drive a real progress bar in your interface rather than showing a generic spinner. Poll every 1\u20132 seconds. When status hits\u00a0<code>COMPLETED<\/code>, the response includes a\u00a0<code>download_signed_url<\/code>\u00a0with the final image. Use it promptly \u2014 signed URLs are temporary.<\/p>\n<p>If a task returns\u00a0<code>FAILED<\/code>, that credit is not charged.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Two_Integration_Workflows_and_When_to_Use_Each\"><\/span>Two Integration Workflows and When to Use Each<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Fitroom&#8217;s documentation describes two distinct workflows. The choice between them depends on your use case.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Recommended_workflow_validate_first\"><\/span>Recommended workflow: validate first<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>For production applications where users upload their own photos \u2014 e-commerce storefronts, consumer apps, POD platforms \u2014 this is the right default:<\/p>\n<ol>\n<li>Call\u00a0<strong>Check Model Image<\/strong>\u00a0on the user&#8217;s photo. If\u00a0<code>is_good: false<\/code>, return a specific error message to the user before spending a try-on credit. If\u00a0<code>is_good: true<\/code>, capture\u00a0<code>good_clothes_types<\/code>\u00a0for the next step.<\/li>\n<li>Call\u00a0<strong>Check Clothes Image<\/strong>\u00a0on the garment. Capture\u00a0<code>clothes_type<\/code>\u00a0to use as the\u00a0<code>cloth_type<\/code>\u00a0parameter in the next step.<\/li>\n<li>Call\u00a0<strong>Create Try-On Task<\/strong>\u00a0with the validated inputs.<\/li>\n<li>Poll\u00a0<strong>Get Task Status<\/strong>\u00a0every 1\u20132 seconds until\u00a0<code>COMPLETED<\/code>.<\/li>\n<\/ol>\n<p>Total cost: 0.5 + 0.5 + 1 =\u00a0<strong>2 credits per successful try-on<\/strong>. In exchange, you eliminate the failure cases that waste credits and give users actionable feedback when their photo doesn&#8217;t meet requirements.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Quick_workflow_skip_validation\"><\/span>Quick workflow: skip validation<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>For curated catalogs where you control both the model photos and product images \u2014 batch processing a product catalog, for example \u2014 validation is often unnecessary. You know the inputs are clean. Skip directly to Create Task and poll for results.<\/p>\n<p>Total cost:\u00a0<strong>1 credit per image<\/strong>. Faster and cheaper when inputs are reliable.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"What_Fitroom_Does_That_Most_Virtual_Try-On_APIs_Dont\"><\/span>What Fitroom Does That Most Virtual Try-On APIs Don&#8217;t<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>If you&#8217;ve read our\u00a0<a href=\"https:\/\/fitroom.app\/blog\/best-virtual-try-on-api-compared\/\">full API comparison<\/a>\u00a0or the\u00a0<a href=\"https:\/\/fitroom.app\/blog\/fashn-ai-alternatives\/\">FASHN.ai alternatives guide<\/a>, you already know how Fitroom&#8217;s pricing compares. But the technical differentiation goes beyond cost.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Input_validation_before_you_spend_credits\"><\/span>Input validation before you spend credits<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>No other API in our benchmark \u2014 not FASHN.ai, not Claid, not Kling, not Photoroom \u2014 provides dedicated endpoints to validate model and clothing images before running the try-on. You either get a failed task after the credit is consumed, or a result that looks wrong with no explanation of why.<\/p>\n<p>Fitroom&#8217;s approach is different: validate cheaply (0.5 credits), fix the input, then run the try-on. In high-volume production environments with user-uploaded images, this changes the economics of failures significantly.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Combo_try-on_in_one_request\"><\/span>Combo try-on in one request<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Processing a full outfit \u2014 top and bottom \u2014 requires two API calls on every other platform. That&#8217;s two credits, two sets of processing time, and two results that need to be reconciled into a single user experience. Fitroom&#8217;s\u00a0<code>combo<\/code>\u00a0cloth_type handles both garments in one request, one credit, one result. For brands selling coordinated looks or POD sellers featuring outfit combinations, this is a meaningful difference.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Clothes_classifier_as_a_standalone_feature\"><\/span>Clothes classifier as a standalone feature<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Most virtual try-on APIs are narrow pipelines: in goes a garment, out comes a try-on result. Fitroom&#8217;s clothes validation endpoint doubles as a general-purpose classifier \u2014 auto-tagging garments by category, occasion, and style at 0.5 credits per call. For teams building product catalogs or recommendation features alongside try-on, this removes a separate tooling dependency.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Real-time_progress_tracking\"><\/span>Real-time progress tracking<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The Get Task Status endpoint returns a\u00a0<code>progress<\/code>\u00a0field from 0\u2013100 as the task runs. Most async APIs return binary status \u2014 either processing or done. Fitroom&#8217;s granular progress enables real progress bars rather than indeterminate spinners, which measurably improves user experience during the 9\u201330 second wait.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Flat_credit_pricing_%E2%80%94_no_resolution_multipliers\"><\/span>Flat credit pricing \u2014 no resolution multipliers<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>One credit equals one image, regardless of whether you use HD mode or standard mode. FASHN.ai charges 2\u20135 credits per image depending on resolution and quality settings \u2014 a cost structure that&#8217;s easy to underestimate at scale. Fitroom&#8217;s flat model makes cost forecasting straightforward: you always know exactly what a batch of images will cost before you run it.<\/p>\n<section id=\"input-guidelines\">\n<h2><span class=\"ez-toc-section\" id=\"Input_Guidelines_That_Affect_Output_Quality\"><\/span>Input Guidelines That Affect Output Quality<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Understanding the pipeline makes these guidelines intuitive rather than arbitrary.<\/p>\n<p><strong>Model images:<\/strong>\u00a02048px recommended, full body, facing forward, single person, simple background. Each of these requirements maps to a specific pipeline step \u2014 the pose detection step needs a clear body, the segmentation step needs a simple background to separate body from environment, and the warping step needs the full body visible to correctly position all garment zones.<\/p>\n<p><strong>Clothing images:<\/strong>\u00a01024px recommended, flat lay or ghost mannequin, solid or white background, single item fully visible. The garment representation step extracts features more cleanly from a flat, isolated image than from a lifestyle shot with background objects or partial cropping.<\/p>\n<p><strong>HD mode:<\/strong>\u00a0Use it for product pages and anywhere the output will be displayed at full size. Skip it for thumbnails, previews, or any flow where speed matters more than pixel-level detail.<\/p>\n<p><strong>Polling interval:<\/strong>\u00a0Every 1\u20132 seconds. Implement exponential backoff if you&#8217;re running concurrent tasks at high volume to avoid rate limits.<\/p>\n<\/section>\n<section id=\"faq\">\n<h2><span class=\"ez-toc-section\" id=\"Frequently_Asked_Questions\"><\/span>Frequently Asked Questions<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"How_does_Fitroom_virtual_try-on_API_work\"><\/span>How does Fitroom virtual try-on API work?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Fitroom&#8217;s API is a four-endpoint pipeline: optionally validate your model photo and clothing image first (0.5 credits each), then create a try-on task (1 credit) that processes asynchronously, then poll for the result. Standard processing takes approximately 9 seconds. HD mode takes approximately 30 seconds and produces output up to 2048px.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Why_does_virtual_try-on_take_9_seconds_instead_of_returning_instantly\"><\/span>Why does virtual try-on take 9 seconds instead of returning instantly?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Virtual try-on is a multi-step AI pipeline \u2014 pose detection, body segmentation, garment warping, and diffusion-based image generation \u2014 that must run sequentially. Standard mode runs a lighter diffusion pass in approximately 9 seconds. HD mode runs more diffusion steps for finer detail, taking approximately 30 seconds. There&#8217;s no shortcut: more quality means more compute time.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"What_makes_Fitroom_API_different_from_other_virtual_try-on_APIs\"><\/span>What makes Fitroom API different from other virtual try-on APIs?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Fitroom is the only virtual try-on API in our benchmark that offers dedicated input validation endpoints (Check Model Image, Check Clothes Image) before running the try-on. It also supports combo try-on \u2014 upper and lower garments processed in a single request \u2014 and charges one credit per image regardless of resolution, with no multipliers.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"What_happens_if_the_model_or_clothing_image_is_rejected\"><\/span>What happens if the model or clothing image is rejected?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>If you call Check Model Image first and the image is rejected, you get a specific error code (e.g. 400003: person not facing forward) and no try-on credit is consumed. If you skip validation and go straight to Create Task, a failed task is not charged \u2014 but you lose the processing time and get less specific feedback on why it failed.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Does_Fitroom_support_full_outfit_try-on\"><\/span>Does Fitroom support full outfit try-on?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Yes. Fitroom&#8217;s\u00a0<code>combo<\/code>\u00a0cloth_type processes upper and lower garments simultaneously in a single API request for one credit. Most other virtual try-on APIs require separate requests \u2014 and separate credit charges \u2014 for each garment in an outfit.<\/p>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>Most virtual try-on APIs work the same way on the surface: send two images, get one back. What differs is what happens between those two steps \u2014 and whether the API gives you any control over it. This article walks through exactly how Fitroom&#8217;s API processes a try-on request, why the pipeline is designed the [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1257,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[72],"tags":[],"class_list":{"0":"post-1255","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-guidelines-and-tips"},"_links":{"self":[{"href":"https:\/\/fitroom.app\/blog\/wp-json\/wp\/v2\/posts\/1255","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fitroom.app\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fitroom.app\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fitroom.app\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fitroom.app\/blog\/wp-json\/wp\/v2\/comments?post=1255"}],"version-history":[{"count":1,"href":"https:\/\/fitroom.app\/blog\/wp-json\/wp\/v2\/posts\/1255\/revisions"}],"predecessor-version":[{"id":1260,"href":"https:\/\/fitroom.app\/blog\/wp-json\/wp\/v2\/posts\/1255\/revisions\/1260"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fitroom.app\/blog\/wp-json\/wp\/v2\/media\/1257"}],"wp:attachment":[{"href":"https:\/\/fitroom.app\/blog\/wp-json\/wp\/v2\/media?parent=1255"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fitroom.app\/blog\/wp-json\/wp\/v2\/categories?post=1255"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fitroom.app\/blog\/wp-json\/wp\/v2\/tags?post=1255"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}