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"
}
}Consultar Estado de Tarea
Consulta el estado, progreso e información de resultados de tareas asíncronas por ID de tarea
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"
}
}Autorizaciones
##Todas las APIs requieren autenticación Bearer Token##
Obtener API Key:
Visita la Página de gestión de API Key para obtener tu API Key
Agregar al encabezado de la solicitud:
Authorization: Bearer YOUR_API_KEY
Parámetros de ruta
ID de tarea, ignora {} al consultar, agrega el id del cuerpo de respuesta de la tarea asíncrona al final de la ruta
Respuesta
Detalles del estado de la tarea
Marca de tiempo de creación de la tarea
1756817821
ID de tarea
"task-unified-1756817821-4x3rx6ny"
Modelo utilizado
"gemini-3-pro-image-preview"
Tipo de tarea
image.generation.task, video.generation.task, audio.generation.task "image.generation.task"
Porcentaje de progreso de la tarea
0 <= x <= 100100
Estado de la tarea. Nota: mientras la tarea sigue pendiente en el proveedor, la API de consulta ya devuelve "processing"; por eso los clientes normalmente solo ven processing / completed / failed.
pending, processing, completed, failed "completed"
Tipo de tarea
image, video, audio, text "image"
Duración de la tarea en segundos. Solo está presente cuando status es "completed" o "failed".
30
Duración real del video generado en segundos. Solo está presente en algunos modelos de video (p. ej. Kling) en estado final.
5
Fecha límite para convertir el borrador en video final (UTC, RFC 3339). Solo se devuelve cuando un borrador Seedance 2.5 (creado con draft: true) tiene el estado completed. Después de esta fecha ya no se puede convertir mediante Seedance 2.5 Draft-to-Video
"2026-09-23T17:19:36Z"
ID de la tarea de borrador a partir de la cual se convirtió este video final. Solo se devuelve en tareas Seedance 2.5 Draft-to-Video
"task-unified-1774857405-abc123"
Lista de URL de resultados. Solo está presente cuando status es "completed" y el modelo produce URL; en otro caso el campo no existe.
["http://example.com/image.jpg"]
Objeto de resultado completo específico del modelo. En los modelos de imagen es un array de objetos como [{"url": ...}] (las mismas URL que results); algunos modelos devuelven objetos más ricos (p. ej. Suno devuelve objetos de canción). Ausente si el modelo no tiene resultado estructurado.
[{ "url": "http://example.com/image.jpg" }]
Información de uso y facturación. Solo está presente cuando status es "completed". Siempre contiene credits_used y cost; los campos de tokens solo aparecen en modelos facturados por token (p. ej. gpt-image-2). Algunos modelos añaden campos propios.
Show child attributes
Show child attributes
Información de error cuando la tarea falla (solo presente cuando status es "failed"). Nota: error.code aquí es un código de error de negocio de tipo string, distinto de los códigos de estado HTTP. Consulte la referencia de códigos de error para la lista completa.
Show child attributes
Show child attributes
Información detallada de la tarea
Show child attributes
Show child attributes
Midjourney V7 variation / pan / outpaint: prompt es opcional. Si falta, está vacío, contiene solo espacios o solo parámetros controlados de velocidad/versión, se usa Fast y su precio, incluso con speed=turbo. Con texto válido, la velocidad omitida o fast usa Fast; turbo usa Turbo al doble del precio. Playground solo ofrece Fast. La tarea de origen debe estar completada y pertenecer al usuario actual; sin prompt se admiten resultados de generación y de variation, pan y outpaint compatibles. Historical tasks retain their recorded execution speed and billing.
draft, fast, turbo