Quickstart Guide
Make your first API call in 5 minutes and enhance your first property image.
Prerequisites
- • A Quick Home AI account with available credits
- • An API key (see Authentication)
- • Basic familiarity with REST APIs
Step 1: Upload Photos
Upload photos using a two-step process: first get pre-signed upload URLs, then upload files directly to storage. This supports files up to 50MB each.
1a. Request Upload URLs
const API_KEY = process.env.QUICKHOME_API_KEY;
const BASE_URL = 'https://www.quickhome.ai/api/v1';
// Request pre-signed upload URLs
const urlResponse = await fetch(`${BASE_URL}/orders/upload-urls`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
interiorCount: 3, // Number of interior photos
exteriorCount: 0 // Number of exterior photos
})
});
const { uploadSessionId, interiorUrls } = await urlResponse.json();
console.log('Upload session ID:', uploadSessionId);
console.log('Got', interiorUrls.length, 'upload URLs');1b. Upload Files to Storage
// Upload each file to its pre-signed URL
const files = [livingRoomPhoto, kitchenPhoto, bedroomPhoto];
for (let i = 0; i < files.length; i++) {
const file = files[i];
const { uploadUrl } = interiorUrls[i];
await fetch(uploadUrl, {
method: 'PUT',
body: file,
headers: {
'Content-Type': file.type,
'x-upsert': 'false'
}
});
console.log(`Uploaded ${file.name}`);
}1c. Create Order
// Create order with uploaded file references
const orderResponse = await fetch(`${BASE_URL}/orders/from-uploads`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
address: '266 Dana Point Ave, Ventura, CA 93004, USA',
serviceType: 'interior',
uploadSessionId: uploadSessionId,
interiorFiles: interiorUrls.map((url, i) => ({
filePath: url.filePath,
fileName: files[i].name,
index: i
})),
interiorEnhancements: ['virtual_staging', 'hdr_enhancement']
})
});
const result = await orderResponse.json();
console.log('Job ID:', result.jobId);
console.log('Status:', result.status);
console.log('Photos uploaded:', result.photosUploaded);Service Types Explained
- • exterior: Uses public imagery sources automatically (no photos needed)
- • interior: Requires you to upload interior photos
- • both: Upload interior photos; exterior uses public imagery sources
File Size Support
- • Maximum file size: 50MB per photo
- • Supported formats: JPEG, PNG, WebP, HEIC
- • Pre-signed URLs valid for 1 hour
- • Upload directly to storage (no serverless limits)
Response
201 Created
{
"success": true,
"jobId": "job_abc123xyz",
"status": "processing",
"creditCost": 15,
"photosUploaded": 3,
"assets": [
{
"assetId": "asset_1",
"fileName": "living-room.jpg",
"type": "interior"
},
{
"assetId": "asset_2",
"fileName": "kitchen.jpg",
"type": "interior"
},
{
"assetId": "asset_3",
"fileName": "bedroom.jpg",
"type": "interior"
}
],
"message": "Order created successfully"
}Step 2: Check Job Status
Poll the status endpoint to monitor progress. Most jobs complete in about an hour:
curl https://www.quickhome.ai/api/v1/jobs/job_abc123xyz/status \
-H "Authorization: Bearer YOUR_API_KEY"Response
200 OK
{
"jobId": "job_abc123xyz",
"status": "processing",
"progress": {
"total": 3,
"completed": 1,
"percentage": 33
},
"createdAt": "2025-11-18T10:30:00Z"
}Step 3: Download Results
Once the status is completed, download your enhanced images:
curl https://www.quickhome.ai/api/v1/downloads/job_abc123xyz \
-H "Authorization: Bearer YOUR_API_KEY"Response
200 OK
{
"jobId": "job_abc123xyz",
"address": "266 Dana Point Ave, Ventura, CA 93004, USA",
"imageCount": 3,
"images": [
{
"id": "img_1",
"type": "generated_interior",
"fileName": "living_room_enhanced.jpg",
"url": "https://storage.quickhome.ai/..."
},
{
"id": "img_2",
"type": "generated_interior",
"fileName": "kitchen_enhanced.jpg",
"url": "https://storage.quickhome.ai/..."
},
{
"id": "img_3",
"type": "generated_interior",
"fileName": "bedroom_enhanced.jpg",
"url": "https://storage.quickhome.ai/..."
}
]
}Error Handling
Always check response status codes and handle errors appropriately:
try {
const response = await fetch('https://quickhome.ai/api/v1/orders', {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
address: '266 Dana Point Ave, Ventura, CA 93004, USA',
serviceType: 'exterior',
exteriorEnhancements: ['sky_enhancement']
})
});
if (!response.ok) {
const error = await response.json();
throw new Error(`API Error ${response.status}: ${error.error}`);
}
const result = await response.json();
console.log('Job ID:', result.jobId);
} catch (error) {
console.error('Request failed:', error.message);
}Next Steps
- • Explore the full API reference for advanced options
- • Learn about per-image enhancement control
- • Check your API key usage