curl --request POST \
--url https://api.evolink.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "mj-v7-upscale",
"model_params": {
"task_id": "task-unified-xxx",
"image_number": 1,
"type": "standard"
}
}
'import requests
url = "https://api.evolink.ai/v1/images/generations"
payload = {
"model": "mj-v7-upscale",
"model_params": {
"task_id": "task-unified-xxx",
"image_number": 1,
"type": "standard"
}
}
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-v7-upscale',
model_params: {task_id: 'task-unified-xxx', image_number: 1, type: 'standard'}
})
};
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-v7-upscale',
'model_params' => [
'task_id' => 'task-unified-xxx',
'image_number' => 1,
'type' => 'standard'
]
]),
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-v7-upscale\",\n \"model_params\": {\n \"task_id\": \"task-unified-xxx\",\n \"image_number\": 1,\n \"type\": \"standard\"\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-v7-upscale\",\n \"model_params\": {\n \"task_id\": \"task-unified-xxx\",\n \"image_number\": 1,\n \"type\": \"standard\"\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-v7-upscale\",\n \"model_params\": {\n \"task_id\": \"task-unified-xxx\",\n \"image_number\": 1,\n \"type\": \"standard\"\n }\n}"
response = http.request(request)
puts response.read_body{
"created": 1757165031,
"id": "task-unified-1757165031-mjv7",
"model": "mj-v7-upscale",
"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-v7-upscale",
"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 V7 Agrandissement
- Agrandit les images generees a une resolution superieure
- Prend en charge deux modes : standard et creatif (creative)
- Les images déjà agrandies ne peuvent pas être agrandies à nouveau (erreur 403)
- Mode de traitement asynchrone, utilisez l’ID de tache retourne pour effectuer une requete
curl --request POST \
--url https://api.evolink.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "mj-v7-upscale",
"model_params": {
"task_id": "task-unified-xxx",
"image_number": 1,
"type": "standard"
}
}
'import requests
url = "https://api.evolink.ai/v1/images/generations"
payload = {
"model": "mj-v7-upscale",
"model_params": {
"task_id": "task-unified-xxx",
"image_number": 1,
"type": "standard"
}
}
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-v7-upscale',
model_params: {task_id: 'task-unified-xxx', image_number: 1, type: 'standard'}
})
};
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-v7-upscale',
'model_params' => [
'task_id' => 'task-unified-xxx',
'image_number' => 1,
'type' => 'standard'
]
]),
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-v7-upscale\",\n \"model_params\": {\n \"task_id\": \"task-unified-xxx\",\n \"image_number\": 1,\n \"type\": \"standard\"\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-v7-upscale\",\n \"model_params\": {\n \"task_id\": \"task-unified-xxx\",\n \"image_number\": 1,\n \"type\": \"standard\"\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-v7-upscale\",\n \"model_params\": {\n \"task_id\": \"task-unified-xxx\",\n \"image_number\": 1,\n \"type\": \"standard\"\n }\n}"
response = http.request(request)
puts response.read_body{
"created": 1757165031,
"id": "task-unified-1757165031-mjv7",
"model": "mj-v7-upscale",
"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-v7-upscale",
"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 necessitent une authentification par Bearer Token##
Obtenir une cle API :
Visitez la page de gestion des cles API pour obtenir votre cle API
Ajoutez dans l'en-tete de la requete :
Authorization: Bearer YOUR_API_KEY
Corps
Nom du modèle
mj-v7-upscale Paramètres du modèle
Show child attributes
Show child attributes
Adresse de rappel HTTPS apres l'achevement de la tache
Moment du rappel :
- Declenche lorsque la tache est terminee (completed), echouee (failed) ou annulee (cancelled)
- Envoye apres la confirmation de facturation
Restrictions de securite :
- Seul le protocole HTTPS est pris en charge
- Les rappels vers les adresses IP privees 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 depasser
2048caracteres
Mecanisme de rappel :
- Delai d'expiration :
10secondes - Jusqu'a
3tentatives apres un echec (respectivement1s/2s/4s apres l'echec) - Le format du corps de la reponse de rappel est identique a celui de l'interface de requete de tache
- Un code de statut 2xx de l'adresse de rappel est considere comme un succes, tout autre code de statut declenche une nouvelle tentative
"https://your-domain.com/webhooks/image-task-completed"
Réponse
Tâche créée avec succès
Horodatage de création
1757165031
ID de la tâche
"task-unified-1757165031-mjv7"
Nom du modèle utilisé
"mj-v7-upscale"
Type de tâche
image.generation.task Pourcentage de progression (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
text, image, audio, video "image"
Informations d'utilisation et de facturation
Show child attributes
Show child attributes