curl --request POST \
--url https://api.evolink.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "mj-v8.2-upload-paint",
"prompt": "Beautiful mountain scenery background",
"image_urls": [
"https://cdn.evolink.ai/model-cards/midjourney-v8-2/midjourney-v8-2-og-v1.jpg"
],
"model_params": {
"mask": {
"areas": [
{
"width": 1200,
"height": 630,
"points": [
100,
100,
400,
100,
400,
400,
100,
400
]
}
]
},
"canvas": {
"width": 1200,
"height": 630
},
"img_pos": {
"width": 1200,
"height": 630,
"x": 0,
"y": 0
},
"speed": "fast"
}
}
'import requests
url = "https://api.evolink.ai/v1/images/generations"
payload = {
"model": "mj-v8.2-upload-paint",
"prompt": "Beautiful mountain scenery background",
"image_urls": ["https://cdn.evolink.ai/model-cards/midjourney-v8-2/midjourney-v8-2-og-v1.jpg"],
"model_params": {
"mask": { "areas": [
{
"width": 1200,
"height": 630,
"points": [100, 100, 400, 100, 400, 400, 100, 400]
}
] },
"canvas": {
"width": 1200,
"height": 630
},
"img_pos": {
"width": 1200,
"height": 630,
"x": 0,
"y": 0
},
"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.2-upload-paint',
prompt: 'Beautiful mountain scenery background',
image_urls: ['https://cdn.evolink.ai/model-cards/midjourney-v8-2/midjourney-v8-2-og-v1.jpg'],
model_params: {
mask: {
areas: [{width: 1200, height: 630, points: [100, 100, 400, 100, 400, 400, 100, 400]}]
},
canvas: {width: 1200, height: 630},
img_pos: {width: 1200, height: 630, x: 0, y: 0},
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.2-upload-paint',
'prompt' => 'Beautiful mountain scenery background',
'image_urls' => [
'https://cdn.evolink.ai/model-cards/midjourney-v8-2/midjourney-v8-2-og-v1.jpg'
],
'model_params' => [
'mask' => [
'areas' => [
[
'width' => 1200,
'height' => 630,
'points' => [
100,
100,
400,
100,
400,
400,
100,
400
]
]
]
],
'canvas' => [
'width' => 1200,
'height' => 630
],
'img_pos' => [
'width' => 1200,
'height' => 630,
'x' => 0,
'y' => 0
],
'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.2-upload-paint\",\n \"prompt\": \"Beautiful mountain scenery background\",\n \"image_urls\": [\n \"https://cdn.evolink.ai/model-cards/midjourney-v8-2/midjourney-v8-2-og-v1.jpg\"\n ],\n \"model_params\": {\n \"mask\": {\n \"areas\": [\n {\n \"width\": 1200,\n \"height\": 630,\n \"points\": [\n 100,\n 100,\n 400,\n 100,\n 400,\n 400,\n 100,\n 400\n ]\n }\n ]\n },\n \"canvas\": {\n \"width\": 1200,\n \"height\": 630\n },\n \"img_pos\": {\n \"width\": 1200,\n \"height\": 630,\n \"x\": 0,\n \"y\": 0\n },\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.2-upload-paint\",\n \"prompt\": \"Beautiful mountain scenery background\",\n \"image_urls\": [\n \"https://cdn.evolink.ai/model-cards/midjourney-v8-2/midjourney-v8-2-og-v1.jpg\"\n ],\n \"model_params\": {\n \"mask\": {\n \"areas\": [\n {\n \"width\": 1200,\n \"height\": 630,\n \"points\": [\n 100,\n 100,\n 400,\n 100,\n 400,\n 400,\n 100,\n 400\n ]\n }\n ]\n },\n \"canvas\": {\n \"width\": 1200,\n \"height\": 630\n },\n \"img_pos\": {\n \"width\": 1200,\n \"height\": 630,\n \"x\": 0,\n \"y\": 0\n },\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.2-upload-paint\",\n \"prompt\": \"Beautiful mountain scenery background\",\n \"image_urls\": [\n \"https://cdn.evolink.ai/model-cards/midjourney-v8-2/midjourney-v8-2-og-v1.jpg\"\n ],\n \"model_params\": {\n \"mask\": {\n \"areas\": [\n {\n \"width\": 1200,\n \"height\": 630,\n \"points\": [\n 100,\n 100,\n 400,\n 100,\n 400,\n 400,\n 100,\n 400\n ]\n }\n ]\n },\n \"canvas\": {\n \"width\": 1200,\n \"height\": 630\n },\n \"img_pos\": {\n \"width\": 1200,\n \"height\": 630,\n \"x\": 0,\n \"y\": 0\n },\n \"speed\": \"fast\"\n }\n}"
response = http.request(request)
puts response.read_body{
"created": 1757165031,
"id": "task-unified-1757165031-mjv82",
"model": "<string>",
"object": "image.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"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.2-upload-paint",
"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.2 Upload-Bearbeitung
- Bilder für die erweiterte Leinwandbearbeitung hochladen, mit Unterstützung für die Angabe von Maskenbereichen und Positionsanpassung
- Ähnlich wie mj-v8.2-edit, aber unabhängig von bestehenden Aufgaben, das Bild wird direkt übergeben
- Das Ergebnis einer Upload-Paint-Aufgabe kann nicht als Quelle (
task_id) für Variation, Remix oder Edit verwendet werden; der Upstream erlaubt nur das Hochskalieren, das diese Route nicht bereitstellt - Asynchroner Verarbeitungsmodus, verwenden Sie die zurückgegebene Aufgaben-ID zum Abfragen des Status
curl --request POST \
--url https://api.evolink.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "mj-v8.2-upload-paint",
"prompt": "Beautiful mountain scenery background",
"image_urls": [
"https://cdn.evolink.ai/model-cards/midjourney-v8-2/midjourney-v8-2-og-v1.jpg"
],
"model_params": {
"mask": {
"areas": [
{
"width": 1200,
"height": 630,
"points": [
100,
100,
400,
100,
400,
400,
100,
400
]
}
]
},
"canvas": {
"width": 1200,
"height": 630
},
"img_pos": {
"width": 1200,
"height": 630,
"x": 0,
"y": 0
},
"speed": "fast"
}
}
'import requests
url = "https://api.evolink.ai/v1/images/generations"
payload = {
"model": "mj-v8.2-upload-paint",
"prompt": "Beautiful mountain scenery background",
"image_urls": ["https://cdn.evolink.ai/model-cards/midjourney-v8-2/midjourney-v8-2-og-v1.jpg"],
"model_params": {
"mask": { "areas": [
{
"width": 1200,
"height": 630,
"points": [100, 100, 400, 100, 400, 400, 100, 400]
}
] },
"canvas": {
"width": 1200,
"height": 630
},
"img_pos": {
"width": 1200,
"height": 630,
"x": 0,
"y": 0
},
"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.2-upload-paint',
prompt: 'Beautiful mountain scenery background',
image_urls: ['https://cdn.evolink.ai/model-cards/midjourney-v8-2/midjourney-v8-2-og-v1.jpg'],
model_params: {
mask: {
areas: [{width: 1200, height: 630, points: [100, 100, 400, 100, 400, 400, 100, 400]}]
},
canvas: {width: 1200, height: 630},
img_pos: {width: 1200, height: 630, x: 0, y: 0},
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.2-upload-paint',
'prompt' => 'Beautiful mountain scenery background',
'image_urls' => [
'https://cdn.evolink.ai/model-cards/midjourney-v8-2/midjourney-v8-2-og-v1.jpg'
],
'model_params' => [
'mask' => [
'areas' => [
[
'width' => 1200,
'height' => 630,
'points' => [
100,
100,
400,
100,
400,
400,
100,
400
]
]
]
],
'canvas' => [
'width' => 1200,
'height' => 630
],
'img_pos' => [
'width' => 1200,
'height' => 630,
'x' => 0,
'y' => 0
],
'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.2-upload-paint\",\n \"prompt\": \"Beautiful mountain scenery background\",\n \"image_urls\": [\n \"https://cdn.evolink.ai/model-cards/midjourney-v8-2/midjourney-v8-2-og-v1.jpg\"\n ],\n \"model_params\": {\n \"mask\": {\n \"areas\": [\n {\n \"width\": 1200,\n \"height\": 630,\n \"points\": [\n 100,\n 100,\n 400,\n 100,\n 400,\n 400,\n 100,\n 400\n ]\n }\n ]\n },\n \"canvas\": {\n \"width\": 1200,\n \"height\": 630\n },\n \"img_pos\": {\n \"width\": 1200,\n \"height\": 630,\n \"x\": 0,\n \"y\": 0\n },\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.2-upload-paint\",\n \"prompt\": \"Beautiful mountain scenery background\",\n \"image_urls\": [\n \"https://cdn.evolink.ai/model-cards/midjourney-v8-2/midjourney-v8-2-og-v1.jpg\"\n ],\n \"model_params\": {\n \"mask\": {\n \"areas\": [\n {\n \"width\": 1200,\n \"height\": 630,\n \"points\": [\n 100,\n 100,\n 400,\n 100,\n 400,\n 400,\n 100,\n 400\n ]\n }\n ]\n },\n \"canvas\": {\n \"width\": 1200,\n \"height\": 630\n },\n \"img_pos\": {\n \"width\": 1200,\n \"height\": 630,\n \"x\": 0,\n \"y\": 0\n },\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.2-upload-paint\",\n \"prompt\": \"Beautiful mountain scenery background\",\n \"image_urls\": [\n \"https://cdn.evolink.ai/model-cards/midjourney-v8-2/midjourney-v8-2-og-v1.jpg\"\n ],\n \"model_params\": {\n \"mask\": {\n \"areas\": [\n {\n \"width\": 1200,\n \"height\": 630,\n \"points\": [\n 100,\n 100,\n 400,\n 100,\n 400,\n 400,\n 100,\n 400\n ]\n }\n ]\n },\n \"canvas\": {\n \"width\": 1200,\n \"height\": 630\n },\n \"img_pos\": {\n \"width\": 1200,\n \"height\": 630,\n \"x\": 0,\n \"y\": 0\n },\n \"speed\": \"fast\"\n }\n}"
response = http.request(request)
puts response.read_body{
"created": 1757165031,
"id": "task-unified-1757165031-mjv82",
"model": "<string>",
"object": "image.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"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.2-upload-paint",
"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"
}
}completed und wird normal abgerechnet; werden alle Bilder gefiltert, endet die Aufgabe als failed und die reservierten Credits werden vollständig erstattet. Bitte achten Sie darauf, dass Ihre Prompts und Referenzbilder den Inhaltsrichtlinien entsprechen.Autorisierungen
Alle Endpunkte erfordern Bearer Token Authentifizierung
API Key erhalten:
Besuchen Sie die API Key Verwaltungsseite um Ihren API Key zu erhalten
Zum Request-Header hinzufügen:
Authorization: Bearer YOUR_API_KEY
Body
Modellname
mj-v8.2-upload-paint "mj-v8.2-upload-paint"
Bearbeitungs-Prompt
8100"Beautiful mountain scenery background"
Eingabebild-URL (das erste wird verwendet). Öffentliche HTTP(S)-URL mit höchstens 1024 Zeichen; Formate .png, .gif, .webp, .jpg, .jpeg
1[
"https://cdn.evolink.ai/model-cards/midjourney-v8-2/midjourney-v8-2-og-v1.jpg"
]
Erweiterte Bearbeitungsparameter
Show child attributes
Show child attributes
HTTPS-Callback-URL für Aufgabenabschluss
Callback-Zeitpunkt:
- Ausgelöst bei Abschluss, Fehler oder Abbruch der Aufgabe
- Nach Abrechnungsbestätigung gesendet
Sicherheitsbeschränkungen:
- Nur HTTPS-Protokoll
- Callbacks an private IP-Adressen verboten (127.0.0.1, 10.x.x.x, 172.16-31.x.x, 192.168.x.x usw.)
- URL-Länge darf
2048Zeichen nicht überschreiten
Callback-Mechanismus:
- Timeout:
10Sekunden - Bis zu
3Wiederholungen nach Fehler (Wiederholungen nach1s/2s/4s nach Fehler) - Das Format des Callback-Antwortkörpers entspricht dem Aufgabenabfrage-Endpunkt
- Ein 2xx-Statuscode gilt als erfolgreich; andere Statuscodes lösen Wiederholungen aus
"https://your-domain.com/webhooks/image-task-completed"
Antwort
Bildgenerierungsaufgabe erfolgreich erstellt
Zeitstempel der Aufgabenerstellung
1757165031
Aufgaben-ID
"task-unified-1757165031-mjv82"
Tatsächlich verwendeter Modellname
Aufgabenobjekttyp
image.generation.task Aufgabenfortschritt in Prozent (0-100)
0 <= x <= 1000
Aufgabenstatus
pending, processing, completed, failed "pending"
Show child attributes
Show child attributes
text, image, audio, video "image"
Show child attributes
Show child attributes