Youzu Swap

The Youzu Swap component allows users to swap furniture items in a room visualization.

API

The Swap API allows you to swap furniture items in room images with new products.

Authentication

You can authenticate using either:

Option 1: Authorization: Bearer YOUR_TOKEN header (obtain from /api/v1/token)

Option 2: x-client-secret: YOUR_CLIENT_SECRET header

Create Swap Job

Endpoint: POST /api/v1/swap

Swap furniture in room images by providing the room image and the catalog image of the new furniture.

curl -X POST "https://platform.youzu.ai/api/v1/swap" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -F "roomImage=@room.jpg" \
  -F "catalogImage=@furniture.png" \
  -F "prompt=Replace furniture with new item"
curl -X POST "https://platform.youzu.ai/api/v1/swap" \
  -H "x-client-secret: YOUR_CLIENT_SECRET" \
  -F "roomImage=@room.jpg" \
  -F "catalogImage=@furniture.png" \
  -F "prompt=Replace furniture with new item"
// Swap furniture in room images using token
const roomImage = document.getElementById('room-input').files[0];
const catalogImage = document.getElementById('furniture-input').files[0];

const formData = new FormData();
formData.append('roomImage', roomImage);
formData.append('catalogImage', catalogImage);
formData.append('prompt', 'Replace furniture with new item');

fetch('https://platform.youzu.ai/api/v1/swap', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_TOKEN'
  },
  body: formData
})
.then(response => response.json())
.then(data => {
  console.log('Swap job created:', data);
  // Poll for completion using data.id
})
.catch(error => {
  console.error('Error:', error);
});
// Swap furniture in room images using client secret
const roomImage = document.getElementById('room-input').files[0];
const catalogImage = document.getElementById('furniture-input').files[0];

const formData = new FormData();
formData.append('roomImage', roomImage);
formData.append('catalogImage', catalogImage);
formData.append('prompt', 'Replace furniture with new item');

fetch('https://platform.youzu.ai/api/v1/swap', {
  method: 'POST',
  headers: {
    'x-client-secret': 'YOUR_CLIENT_SECRET'
  },
  body: formData
})
.then(response => response.json())
.then(data => {
  console.log('Swap job created:', data);
  // Poll for completion using data.id
})
.catch(error => {
  console.error('Error:', error);
});
import requests

# Swap furniture in room images using token
url = 'https://platform.youzu.ai/api/v1/swap'

headers = {
    'Authorization': 'Bearer YOUR_TOKEN'
}

files = {
    'roomImage': open('room.jpg', 'rb'),
    'catalogImage': open('furniture.png', 'rb')
}

data = {
    'prompt': 'Replace furniture with new item'
}

response = requests.post(url, headers=headers, files=files, data=data)

if response.status_code == 200:
    job = response.json()
    print('Swap job created:', job)
    # Poll for completion using job['id']
else:
    print('Error:', response.status_code, response.text)
import requests

# Swap furniture in room images using client secret
url = 'https://platform.youzu.ai/api/v1/swap'

headers = {
    'x-client-secret': 'YOUR_CLIENT_SECRET'
}

files = {
    'roomImage': open('room.jpg', 'rb'),
    'catalogImage': open('furniture.png', 'rb')
}

data = {
    'prompt': 'Replace furniture with new item'
}

response = requests.post(url, headers=headers, files=files, data=data)

if response.status_code == 200:
    job = response.json()
    print('Swap job created:', job)
    # Poll for completion using job['id']
else:
    print('Error:', response.status_code, response.text)

Get Swap Status

Endpoint: GET /api/v1/swap/{id}

Check the status of a swap job.

curl -X GET "https://platform.youzu.ai/api/v1/swap/YOUR_JOB_ID" \
  -H "Authorization: Bearer YOUR_TOKEN"
curl -X GET "https://platform.youzu.ai/api/v1/swap/YOUR_JOB_ID" \
  -H "x-client-secret: YOUR_CLIENT_SECRET"
// Check swap status using token
fetch('https://platform.youzu.ai/api/v1/swap/YOUR_JOB_ID', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_TOKEN'
  }
})
.then(response => response.json())
.then(data => {
  console.log('Job status:', data.status);
  if (data.status === 'COMPLETED') {
    console.log('Result URL:', data.outputUrls[0]);
  }
})
.catch(error => {
  console.error('Error:', error);
});
// Check swap status using client secret
fetch('https://platform.youzu.ai/api/v1/swap/YOUR_JOB_ID', {
  method: 'GET',
  headers: {
    'x-client-secret': 'YOUR_CLIENT_SECRET'
  }
})
.then(response => response.json())
.then(data => {
  console.log('Job status:', data.status);
  if (data.status === 'COMPLETED') {
    console.log('Result URL:', data.outputUrls[0]);
  }
})
.catch(error => {
  console.error('Error:', error);
});
import requests

# Check swap status using token
url = 'https://platform.youzu.ai/api/v1/swap/YOUR_JOB_ID'

headers = {
    'Authorization': 'Bearer YOUR_TOKEN'
}

response = requests.get(url, headers=headers)

if response.status_code == 200:
    job = response.json()
    print('Job status:', job['status'])
    if job['status'] == 'COMPLETED':
        print('Result URL:', job['outputUrls'][0])
else:
    print('Error:', response.status_code, response.text)
import requests

# Check swap status using client secret
url = 'https://platform.youzu.ai/api/v1/swap/YOUR_JOB_ID'

headers = {
    'x-client-secret': 'YOUR_CLIENT_SECRET'
}

response = requests.get(url, headers=headers)

if response.status_code == 200:
    job = response.json()
    print('Job status:', job['status'])
    if job['status'] == 'COMPLETED':
        print('Result URL:', job['outputUrls'][0])
else:
    print('Error:', response.status_code, response.text)
SDK

Props

Property Attribute Type Default
currency currency string undefined
lang lang string undefined

Events

Event Description Type
productAddedToBasket CustomEvent<ApiV1LensPost200ResponseInner>
productClicked CustomEvent<ApiV1LensPost200ResponseInner>