curl --request GET \
--url https://api.evolink.ai/v1/tasks/{task_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.evolink.ai/v1/tasks/{task_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.evolink.ai/v1/tasks/{task_id}', 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.evolink.ai/v1/tasks/{task_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.evolink.ai/v1/tasks/{task_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.evolink.ai/v1/tasks/{task_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evolink.ai/v1/tasks/{task_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"created": 1788436500,
"duration": 30,
"id": "task-unified-1788436500-yscib7uw",
"model": "gemini-3-pro-image-preview",
"object": "image.generation.task",
"progress": 100,
"result_data": [
{
"url": "http://example.com/image.jpg"
}
],
"results": [
"http://example.com/image.jpg"
],
"status": "completed",
"task_info": {
"can_cancel": false
},
"type": "image",
"usage": {
"cost": {
"credits": 10,
"usd": 0.148,
"cny": 1
},
"credits_used": 10
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid API key (request id: 20260908103000123456789abcdef)",
"param": null,
"type": "authentication_error"
}
}{
"error": {
"code": "user_disabled",
"message": "Your account has been disabled (request id: 20260908103000123456789abcdef)",
"param": null,
"type": "invalid_request_error"
}
}{
"error": {
"message": "Task not found",
"type": "invalid_request_error",
"param": "",
"code": "task_not_found"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "You have reached the request limit: max 60 requests per 1 minutes. Retry after 30 seconds. (request id: 20260908103000123456789abcdef)",
"param": null,
"retry_after": 30,
"retryable": true,
"type": "rate_limit_error"
}
}{
"error": {
"message": "Failed to get task status",
"type": "api_error",
"param": "",
"code": "internal_error"
}
}작업 상태 조회
작업 ID로 비동기 작업의 상태, 진행률 및 결과 정보를 조회합니다
curl --request GET \
--url https://api.evolink.ai/v1/tasks/{task_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.evolink.ai/v1/tasks/{task_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.evolink.ai/v1/tasks/{task_id}', 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.evolink.ai/v1/tasks/{task_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.evolink.ai/v1/tasks/{task_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.evolink.ai/v1/tasks/{task_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evolink.ai/v1/tasks/{task_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"created": 1788436500,
"duration": 30,
"id": "task-unified-1788436500-yscib7uw",
"model": "gemini-3-pro-image-preview",
"object": "image.generation.task",
"progress": 100,
"result_data": [
{
"url": "http://example.com/image.jpg"
}
],
"results": [
"http://example.com/image.jpg"
],
"status": "completed",
"task_info": {
"can_cancel": false
},
"type": "image",
"usage": {
"cost": {
"credits": 10,
"usd": 0.148,
"cny": 1
},
"credits_used": 10
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid API key (request id: 20260908103000123456789abcdef)",
"param": null,
"type": "authentication_error"
}
}{
"error": {
"code": "user_disabled",
"message": "Your account has been disabled (request id: 20260908103000123456789abcdef)",
"param": null,
"type": "invalid_request_error"
}
}{
"error": {
"message": "Task not found",
"type": "invalid_request_error",
"param": "",
"code": "task_not_found"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "You have reached the request limit: max 60 requests per 1 minutes. Retry after 30 seconds. (request id: 20260908103000123456789abcdef)",
"param": null,
"retry_after": 30,
"retryable": true,
"type": "rate_limit_error"
}
}{
"error": {
"message": "Failed to get task status",
"type": "api_error",
"param": "",
"code": "internal_error"
}
}인증
##모든 API는 Bearer Token 인증이 필요합니다##
API Key 받기:
API Key 관리 페이지를 방문하여 API Key를 받으세요
요청 헤더에 추가:
Authorization: Bearer YOUR_API_KEY
경로 매개변수
작업 ID, 조회 시 {}를 무시하고 비동기 작업 응답 본문의 id를 경로 끝에 추가하세요
응답
작업 상태 세부 정보
작업 생성 타임스탬프
1756817821
작업 ID
"task-unified-1756817821-4x3rx6ny"
사용된 모델
"gemini-3-pro-image-preview"
작업 유형
image.generation.task, video.generation.task, audio.generation.task "image.generation.task"
작업 진행률 백분율
0 <= x <= 100100
작업 상태. 참고: 작업이 업스트림에서 아직 대기 중이어도 조회 API는 이미 "processing"을 반환하므로, 클라이언트는 보통 processing / completed / failed만 보게 됩니다.
pending, processing, completed, failed "completed"
작업 유형
image, video, audio, text "image"
작업 소요 시간(초). status가 "completed" 또는 "failed"일 때만 반환됩니다.
30
실제 생성된 영상 길이(초). 일부 영상 모델(예: Kling)의 최종 상태에서만 반환됩니다.
5
최종 비디오로 변환할 수 있는 기한(UTC, RFC 3339). 생성 시 draft: true를 전달한 Seedance 2.5 초안이 completed 상태일 때만 반환됩니다. 이 시각이 지나면 Seedance 2.5 Draft-to-Video로 변환할 수 없습니다
"2026-09-23T17:19:36Z"
이 최종 비디오의 변환 원본인 초안 작업의 ID. Seedance 2.5 Draft-to-Video 작업에서만 반환됩니다
"task-unified-1774857405-abc123"
결과 URL 목록. status가 "completed"이고 모델이 URL 결과를 생성하는 경우에만 반환되며, 그 외에는 필드 자체가 없습니다.
["http://example.com/image.jpg"]
모델별 전체 결과 객체. 이미지 모델은 [{"url": ...}] 형태의 객체 배열(results와 동일한 URL)이며, 일부 모델은 더 풍부한 객체를 반환합니다(예: Suno는 곡 객체). 구조화된 결과가 없는 모델에서는 반환되지 않습니다.
[{ "url": "http://example.com/image.jpg" }]
사용량 및 과금 정보. status가 "completed"일 때만 반환됩니다. credits_used와 cost는 항상 포함되며, 토큰 필드는 토큰 과금 모델(예: gpt-image-2)에서만 반환됩니다. 일부 모델은 모델별 과금 필드를 추가로 반환합니다.
Show child attributes
Show child attributes
작업 실패 시 오류 정보 (status가 failed일 때만 표시). 참고: 여기의 error.code는 문자열 유형의 비즈니스 오류 코드로 HTTP 상태 코드와 다릅니다. 전체 목록은 오류 코드 참조 문서를 확인하세요.
Show child attributes
Show child attributes
작업 상세 정보
Show child attributes
Show child attributes
Midjourney V7 variation / pan / outpaint: prompt는 선택 사항입니다. 생략, 빈 문자열, 공백만 있거나 제어 대상 속도·버전 매개변수를 제거한 뒤 비어 있으면 speed=turbo여도 Fast로 실행하고 Fast 요금을 적용합니다. 유효한 본문이 있으면 속도 생략 또는 fast는 Fast, turbo는 Turbo로 실행하며 Fast 요금의 2배입니다. Playground는 Fast만 제공합니다. 원본 작업은 현재 사용자의 완료된 작업이어야 합니다. prompt가 없을 때는 이미지 생성 및 지원되는 variation, pan, outpaint 결과를 사용할 수 있습니다. Historical tasks retain their recorded execution speed and billing.
draft, fast, turbo