Job Status
Check the processing status and progress of a job.
GET
/api/v1/jobs/{jobId}/statusMonitor the progress of your image enhancement job.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
jobId | string | Required | The unique job identifier returned when creating an order |
Request Example
curl https://www.quickhome.ai/api/v1/jobs/job_abc123xyz/status \
-H "Authorization: Bearer YOUR_API_KEY"Response
Response
200 OK
{
"jobId": "job_abc123xyz",
"status": "processing",
"progress": {
"total": 4,
"completed": 2,
"percentage": 50
},
"createdAt": "2025-11-18T10:30:00Z"
}Response Fields
| Name | Type | Required | Description |
|---|---|---|---|
jobId | string | Required | The job identifier |
status | string | Required | Current status: pending, processing, qc_review, approved, delivered, undeliverable, failed |
progress | object | Required | Processing progress information |
createdAt | string | Required | ISO 8601 timestamp when the job was created |
error | string | Optional | Error message if status is failed |
Status Values
pendingJob is queued and waiting to be processed
processingJob is currently being processed
approvedQC complete with at least one approved image — results are ready for download
deliveredResults have been retrieved at least once via the downloads endpoint
undeliverableQuality review finished with no usable results. Credits are refunded and the reason is in the undeliverable field. No results are available for download
failedProcessing failed, check error field
Polling Best Practices
- • Recommended polling interval: Check status every 30 seconds
- • Typical processing time: Most jobs complete in about an hour
- • Job expiration: Completed jobs remain available for 7 days
- • Maximum job duration: Jobs that exceed 2 hours will automatically fail
Example Polling Loop
async function waitForCompletion(jobId) {
const maxAttempts = 240; // 2 hours with 30-second intervals
let attempts = 0;
while (attempts < maxAttempts) {
const response = await fetch(
`https://www.quickhome.ai/api/v1/jobs/${jobId}/status`,
{
headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
}
);
const status = await response.json();
if (status.status === 'approved' || status.status === 'delivered') {
console.log('Job ready for download!');
return status;
} else if (status.status === 'undeliverable') {
throw new Error('Order undeliverable: ' + status.undeliverable.reason);
} else if (status.status === 'failed') {
throw new Error('Job failed: ' + (status.error || status.status));
}
// Wait 30 seconds before next check
await new Promise(resolve => setTimeout(resolve, 30000));
attempts++;
}
throw new Error('Job timeout');
}