Get Job Detail
curl --request GET \
--url https://api.goenhance.ai/api/v1/jobs/detailimport requests
url = "https://api.goenhance.ai/api/v1/jobs/detail"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.goenhance.ai/api/v1/jobs/detail', 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://api.goenhance.ai/api/v1/jobs/detail",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.goenhance.ai/api/v1/jobs/detail"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.goenhance.ai/api/v1/jobs/detail")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goenhance.ai/api/v1/jobs/detail")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"code": 0,
"msg": "Success",
"data": {
"img_uuid": "5334c57d-8443-4b79-ba24-8539c2163c74",
"status": "pending",
"type": "mx-v2v",
"start_time": "2024-07-12T12:49:12.541Z",
"model_id": "7",
"json": null,
"job_type": "mx-v2v"
}
}Tasks
Get Job Status
Check the status and details of any asynchronous job in the GoEnhance platform.
GET
/
api
/
v1
/
jobs
/
detail
Get Job Detail
curl --request GET \
--url https://api.goenhance.ai/api/v1/jobs/detailimport requests
url = "https://api.goenhance.ai/api/v1/jobs/detail"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.goenhance.ai/api/v1/jobs/detail', 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://api.goenhance.ai/api/v1/jobs/detail",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.goenhance.ai/api/v1/jobs/detail"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.goenhance.ai/api/v1/jobs/detail")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goenhance.ai/api/v1/jobs/detail")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"code": 0,
"msg": "Success",
"data": {
"img_uuid": "5334c57d-8443-4b79-ba24-8539c2163c74",
"status": "pending",
"type": "mx-v2v",
"start_time": "2024-07-12T12:49:12.541Z",
"model_id": "7",
"json": null,
"job_type": "mx-v2v"
}
}Overview
The Get Job Status API allows you to check the current status of any asynchronous job in the GoEnhance platform. This is a universal endpoint that works with all job types, including video generation, image processing, and other time-consuming operations.How It Works
When you initiate an asynchronous operation through any of our APIs, you receive a job identifier (img_uuid). You can use this identifier with the Get Job Status API to track the progress of your job until it completes.
Job Status Values
The API returns astatus field with one of the following values:
- pending: Job is queued and waiting to be processed
- processing: Job is currently being processed
- success: Job has finished successfully
- failed: Job has failed with an error
Usage Example
This endpoint is typically used in a polling pattern:- Submit an asynchronous job request
- Receive an
img_uuidin the response - Periodically call the Get Job Status API with that
img_uuid - When
statusis “success”, retrieve your results
Result Entries (json[])
When status is success, data.json holds one entry per produced asset:
| Field | Meaning |
|---|---|
type | What value holds — image, video or json. |
value | The result URL. (oc-maker is the one exception: its type: "json" entry holds an object instead of a URL.) |
duration | How long GoEnhance took to produce the asset, in seconds. |
link_expired_at | When value stops working — 24 hours after the job finished. |
duration is processing time, not the length of the media. Upscaling a 5-second clip that
took just over 91 seconds of GPU time reports duration: 90.901 — it does not mean the output
video is 91 seconds long. If you need the length of a generated video, read it from the file
itself.Result URLs are temporary. Download the file before
link_expired_at; GoEnhance does not keep a
permanent copy, and the link cannot be renewed. See
Best Practices for a recommended download flow.Callback Instead of Polling
If you don’t want to poll, pass a top-levelcustom_callback_url when creating the task — GoEnhance will POST this same payload to your server on every status change. See Task Callback for details.
Example Response
{
"code": 0,
"msg": "Success",
"data": {
"img_uuid": "37c82d82-8765-4031-8cb3-722df8a668e6",
"status": "success",
"type": "mx-image-face-swap",
"start_time": "2024-10-11T10:55:32.596Z",
"end_time": "2024-10-11T10:56:00.338Z",
"model_id": "-1",
"json": [
{
"type": "image",
"value": "https://openapi-static.goenhance.ai/user/2024/10/11/9dfdb4b5-7ef7-4fe7-93ff-b9eb76cc431d_0.jpg?q-sign-algorithm=sha1&q-ak=AKIDqUvFPSM9vvmdNzSn01oeUAdxw1y1zkS2&q-sign-time=1728644159;1728687359&q-key-time=1728644159;1728687359&q-header-list=host&q-url-param-list=&q-signature=cd1e9c6ef14d36c1e034d6bd3a3fe1aaee41b15f"
}
],
"job_type": "mx-image-face-swap"
}
}
duration (90.901) is the processing time — the
upscaled clip itself is about 5 seconds long:
{
"code": 0,
"msg": "Success",
"data": {
"img_uuid": "51c586b3-b648-4f68-bc15-d2b8d99a67f3",
"status": "success",
"type": "video-upscaler",
"start_time": "2026-09-03T07:10:34.171Z",
"end_time": "2026-09-03T07:12:38.890Z",
"model_id": "video-upscaler",
"json": [
{
"type": "video",
"value": "https://cdn4.goenhance.ai/source/UOe_LwQv-63s9JeDPP_KRQ7Hn0_x1eA1hiXF1-6M4R6VYNW2W9oy...mp4",
"duration": 90.901,
"link_expired_at": "2026-09-04T07:12:38.890Z"
}
],
"job_type": "video-upscaler"
}
}
