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"
}
}Interroger le statut de la tâche
Interroger le statut, la progression et les résultats des tâches asynchrones par ID de tâche
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"
}
}Autorisations
##Toutes les API nécessitent une authentification Bearer Token##
Obtenir une clé API :
Visitez la Page de gestion des clés API pour obtenir votre clé API
Ajouter à l'en-tête de requête :
Authorization: Bearer YOUR_API_KEY
Paramètres de chemin
ID de la tâche, ignorer {} lors de l'interrogation, ajouter l'id du corps de réponse de la tâche asynchrone à la fin du chemin
Réponse
Détails du statut de la tâche
Horodatage de création de la tâche
1756817821
ID de tâche
"task-unified-1756817821-4x3rx6ny"
Modèle utilisé
"gemini-3-pro-image-preview"
Type de tâche
image.generation.task, video.generation.task, audio.generation.task "image.generation.task"
Pourcentage de progression de la tâche
0 <= x <= 100100
Statut de la tâche. Remarque : tant que la tâche est encore en attente en amont, l'API de consultation renvoie déjà "processing" ; les clients ne voient donc normalement que processing / completed / failed.
pending, processing, completed, failed "completed"
Type de tâche
image, video, audio, text "image"
Durée de la tâche en secondes. Présente uniquement lorsque status vaut "completed" ou "failed".
30
Durée réelle de la vidéo générée en secondes. Présente uniquement pour certains modèles vidéo (ex. Kling) en état final.
5
Date limite de conversion en vidéo finale (UTC, RFC 3339). Renvoyée uniquement lorsqu’un brouillon Seedance 2.5 (créé avec draft: true) est completed. Après cette date, il ne peut plus être converti avec Seedance 2.5 Draft-to-Video
"2026-09-23T17:19:36Z"
ID de la tâche de brouillon à l’origine de cette vidéo finale. Renvoyé uniquement pour les tâches Seedance 2.5 Draft-to-Video
"task-unified-1774857405-abc123"
Liste des URL de résultats. Présente uniquement lorsque status vaut "completed" et que le modèle produit des URL ; sinon le champ est absent.
["http://example.com/image.jpg"]
Objet de résultat complet propre au modèle. Pour les modèles d'image, un tableau d'objets tel que [{"url": ...}] (mêmes URL que results) ; certains modèles renvoient des objets plus riches (ex. Suno renvoie des objets chanson). Absent si le modèle n'a pas de résultat structuré.
[{ "url": "http://example.com/image.jpg" }]
Informations d'utilisation et de facturation. Présentes uniquement lorsque status vaut "completed". Contient toujours credits_used et cost ; les champs de tokens n'apparaissent que pour les modèles facturés au token (ex. gpt-image-2). Certains modèles ajoutent des champs qui leur sont propres.
Show child attributes
Show child attributes
Informations d'erreur lorsque la tâche échoue (présent uniquement lorsque status vaut "failed"). Remarque : error.code est ici un code d'erreur métier de type string, différent des codes de statut HTTP. Consultez la référence des codes d'erreur pour la liste complète.
Show child attributes
Show child attributes
Informations détaillées de la tâche
Show child attributes
Show child attributes
Midjourney V7 variation / pan / outpaint: prompt est facultatif. Un prompt absent, vide, composé uniquement d’espaces ou de paramètres contrôlés de vitesse/version utilise toujours Fast au tarif Fast, même avec speed=turbo. Avec un texte non vide, la vitesse omise ou fast utilise Fast ; turbo utilise Turbo au double du tarif. Playground propose uniquement Fast. La tâche source doit être terminée et appartenir à l’utilisateur actuel ; sans prompt, les résultats de génération et de variation, pan et outpaint compatibles sont acceptés. Historical tasks retain their recorded execution speed and billing.
draft, fast, turbo