curl --request POST \
--url https://api.evolink.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "mj-v8.1-remix",
"prompt": "Convert to oil painting style --ar 1:1",
"model_params": {
"task_id": "task-unified-xxx",
"image_number": 0,
"mode": "strong",
"speed": "fast"
}
}
'import requests
url = "https://api.evolink.ai/v1/images/generations"
payload = {
"model": "mj-v8.1-remix",
"prompt": "Convert to oil painting style --ar 1:1",
"model_params": {
"task_id": "task-unified-xxx",
"image_number": 0,
"mode": "strong",
"speed": "fast"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'mj-v8.1-remix',
prompt: 'Convert to oil painting style --ar 1:1',
model_params: {task_id: 'task-unified-xxx', image_number: 0, mode: 'strong', speed: 'fast'}
})
};
fetch('https://api.evolink.ai/v1/images/generations', 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/images/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'mj-v8.1-remix',
'prompt' => 'Convert to oil painting style --ar 1:1',
'model_params' => [
'task_id' => 'task-unified-xxx',
'image_number' => 0,
'mode' => 'strong',
'speed' => 'fast'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.evolink.ai/v1/images/generations"
payload := strings.NewReader("{\n \"model\": \"mj-v8.1-remix\",\n \"prompt\": \"Convert to oil painting style --ar 1:1\",\n \"model_params\": {\n \"task_id\": \"task-unified-xxx\",\n \"image_number\": 0,\n \"mode\": \"strong\",\n \"speed\": \"fast\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.evolink.ai/v1/images/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"mj-v8.1-remix\",\n \"prompt\": \"Convert to oil painting style --ar 1:1\",\n \"model_params\": {\n \"task_id\": \"task-unified-xxx\",\n \"image_number\": 0,\n \"mode\": \"strong\",\n \"speed\": \"fast\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evolink.ai/v1/images/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"mj-v8.1-remix\",\n \"prompt\": \"Convert to oil painting style --ar 1:1\",\n \"model_params\": {\n \"task_id\": \"task-unified-xxx\",\n \"image_number\": 0,\n \"mode\": \"strong\",\n \"speed\": \"fast\"\n }\n}"
response = http.request(request)
puts response.read_body{
"created": 1757165031,
"id": "task-unified-1757165031-mjv81",
"model": "mj-v8.1-remix",
"object": "image.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": true,
"estimated_time": 45
},
"type": "image",
"usage": {
"billing_rule": "per_call",
"credits_reserved": 1.8,
"user_group": "default"
}
}{
"error": {
"code": "invalid_request",
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: mj-v8.1-remix",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}Midjourney V8.1 Remix
- Recréer des images générées précédemment avec de nouveaux prompts
- Modifie le contenu ou le style tout en préservant la structure de l’image originale
- Différence avec la variation : le remix nécessite un prompt pour réinterpréter l’original
- Mode de traitement asynchrone, utilisez l’ID de tâche retourné pour effectuer une requête
curl --request POST \
--url https://api.evolink.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "mj-v8.1-remix",
"prompt": "Convert to oil painting style --ar 1:1",
"model_params": {
"task_id": "task-unified-xxx",
"image_number": 0,
"mode": "strong",
"speed": "fast"
}
}
'import requests
url = "https://api.evolink.ai/v1/images/generations"
payload = {
"model": "mj-v8.1-remix",
"prompt": "Convert to oil painting style --ar 1:1",
"model_params": {
"task_id": "task-unified-xxx",
"image_number": 0,
"mode": "strong",
"speed": "fast"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'mj-v8.1-remix',
prompt: 'Convert to oil painting style --ar 1:1',
model_params: {task_id: 'task-unified-xxx', image_number: 0, mode: 'strong', speed: 'fast'}
})
};
fetch('https://api.evolink.ai/v1/images/generations', 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/images/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'mj-v8.1-remix',
'prompt' => 'Convert to oil painting style --ar 1:1',
'model_params' => [
'task_id' => 'task-unified-xxx',
'image_number' => 0,
'mode' => 'strong',
'speed' => 'fast'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.evolink.ai/v1/images/generations"
payload := strings.NewReader("{\n \"model\": \"mj-v8.1-remix\",\n \"prompt\": \"Convert to oil painting style --ar 1:1\",\n \"model_params\": {\n \"task_id\": \"task-unified-xxx\",\n \"image_number\": 0,\n \"mode\": \"strong\",\n \"speed\": \"fast\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.evolink.ai/v1/images/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"mj-v8.1-remix\",\n \"prompt\": \"Convert to oil painting style --ar 1:1\",\n \"model_params\": {\n \"task_id\": \"task-unified-xxx\",\n \"image_number\": 0,\n \"mode\": \"strong\",\n \"speed\": \"fast\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evolink.ai/v1/images/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"mj-v8.1-remix\",\n \"prompt\": \"Convert to oil painting style --ar 1:1\",\n \"model_params\": {\n \"task_id\": \"task-unified-xxx\",\n \"image_number\": 0,\n \"mode\": \"strong\",\n \"speed\": \"fast\"\n }\n}"
response = http.request(request)
puts response.read_body{
"created": 1757165031,
"id": "task-unified-1757165031-mjv81",
"model": "mj-v8.1-remix",
"object": "image.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": true,
"estimated_time": 45
},
"type": "image",
"usage": {
"billing_rule": "per_call",
"credits_reserved": 1.8,
"user_group": "default"
}
}{
"error": {
"code": "invalid_request",
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: mj-v8.1-remix",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}Autorisations
Toutes les interfaces nécessitent une authentification par Bearer Token
Obtenir une clé API :
Visitez la page de gestion des clés API pour obtenir votre clé API
Ajoutez dans l'en-tête de la requête :
Authorization: Bearer YOUR_API_KEY
Corps
Nom du modèle
mj-v8.1-remix Nouveau prompt décrivant l'ajustement souhaité, prend en charge la syntaxe des paramètres Midjourney
1024"Convert to oil painting style --ar 1:1"
Paramètres du modèle
Show child attributes
Show child attributes
Adresse de rappel HTTPS après l'achèvement de la tâche
Moment du rappel :
- Déclenché lorsque la tâche est terminée, échouée ou annulée
- Envoyé après la confirmation de facturation
Restrictions de sécurité :
- Seul le protocole HTTPS est pris en charge
- Les rappels vers les adresses IP privées sont interdits (127.0.0.1, 10.x.x.x, 172.16-31.x.x, 192.168.x.x, etc.)
- La longueur de l'URL ne doit pas dépasser
2048caractères
Mécanisme de rappel :
- Délai d'expiration :
10secondes - Jusqu'à
3tentatives après un échec (respectivement1s/2s/4s après l'échec) - Le format du corps de la réponse de rappel est identique à celui de l'interface de requête de tâche
- Un code de statut 2xx est considéré comme un succès, tout autre code de statut déclenche une nouvelle tentative
"https://your-domain.com/webhooks/image-task-completed"
Réponse
Tâche créée avec succès
Horodatage de création de la tâche
1757165031
ID de la tâche
"task-unified-1757165031-mjv81"
Nom du modèle réellement utilisé
"mj-v8.1-remix"
Type d'objet de la tâche
image.generation.task Pourcentage de progression de la tâche (0-100)
0 <= x <= 1000
Statut de la tâche
pending, processing, completed, failed "pending"
Informations de tâche asynchrone
Show child attributes
Show child attributes
Type de sortie de la tâche
text, image, audio, video "image"
Informations d'utilisation et de facturation
Show child attributes
Show child attributes