Midjourney V8.2 Variation Schnittstelle
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-variation",
"model_params": {
"task_id": "task-unified-xxx",
"image_number": 2,
"type": "strong"
}
}
'import requests
url = "https://api.evolink.ai/v1/images/generations"
payload = {
"model": "mj-v8.2-variation",
"model_params": {
"task_id": "task-unified-xxx",
"image_number": 2,
"type": "strong"
}
}
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-variation',
model_params: {task_id: 'task-unified-xxx', image_number: 2, type: 'strong'}
})
};
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-variation',
'model_params' => [
'task_id' => 'task-unified-xxx',
'image_number' => 2,
'type' => 'strong'
]
]),
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-variation\",\n \"model_params\": {\n \"task_id\": \"task-unified-xxx\",\n \"image_number\": 2,\n \"type\": \"strong\"\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-variation\",\n \"model_params\": {\n \"task_id\": \"task-unified-xxx\",\n \"image_number\": 2,\n \"type\": \"strong\"\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-variation\",\n \"model_params\": {\n \"task_id\": \"task-unified-xxx\",\n \"image_number\": 2,\n \"type\": \"strong\"\n }\n}"
response = http.request(request)
puts response.read_body{
"created": 1757165031,
"id": "task-unified-1757165031-mjv82",
"model": "mj-v8.2-variation",
"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-variation",
"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
Midjourney V8.2 Variation
- Basierend auf abgeschlossenen Aufgaben der mj-v8.2-Serie werden Stilvarianten mit Unterschieden für das angegebene Bild generiert
- Der Prompt hat keine Auswirkung auf die Variation-Ausgabe (es werden nur Stilvarianten des Quellbilds erzeugt); um die Änderungen per Prompt zu steuern, verwenden Sie stattdessen mj-v8.2-remix
- Hinweis: Abgeleitete Aufgaben auf Basis von V8.2-Bildern (Variation / Remix / Bearbeiten) werden upstream von der V7-Engine gerendert (laut Dokumentation des Upstream-Kanals); das Ergebnis kann sich stilistisch leicht vom Quellbild unterscheiden. Die Abrechnung bleibt unverändert
- Die Quellaufgabe muss eine Bildgenerierungs-, Variations-, Remix- oder Edit-Aufgabe sein; Ergebnisse von Upload-Paint / Retexture / Remove-BG werden vom Upstream abgelehnt (405)
- Es gibt kein
speed-Feld:speed: fastwird akzeptiert und ignoriert, jeder andere Wert liefert 400 - Asynchroner Verarbeitungsmodus, verwenden Sie die zurückgegebene Aufgaben-ID zum Abfragen des Status
POST
/
v1
/
images
/
generations
Midjourney V8.2 Variation Schnittstelle
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-variation",
"model_params": {
"task_id": "task-unified-xxx",
"image_number": 2,
"type": "strong"
}
}
'import requests
url = "https://api.evolink.ai/v1/images/generations"
payload = {
"model": "mj-v8.2-variation",
"model_params": {
"task_id": "task-unified-xxx",
"image_number": 2,
"type": "strong"
}
}
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-variation',
model_params: {task_id: 'task-unified-xxx', image_number: 2, type: 'strong'}
})
};
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-variation',
'model_params' => [
'task_id' => 'task-unified-xxx',
'image_number' => 2,
'type' => 'strong'
]
]),
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-variation\",\n \"model_params\": {\n \"task_id\": \"task-unified-xxx\",\n \"image_number\": 2,\n \"type\": \"strong\"\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-variation\",\n \"model_params\": {\n \"task_id\": \"task-unified-xxx\",\n \"image_number\": 2,\n \"type\": \"strong\"\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-variation\",\n \"model_params\": {\n \"task_id\": \"task-unified-xxx\",\n \"image_number\": 2,\n \"type\": \"strong\"\n }\n}"
response = http.request(request)
puts response.read_body{
"created": 1757165031,
"id": "task-unified-1757165031-mjv82",
"model": "mj-v8.2-variation",
"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-variation",
"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 verfügt über ein integriertes Moderationssystem. Jedes Bild wird einzeln geprüft: Gefilterte Bilder erscheinen nicht in den Ergebnissen, die übrigen Bilder werden normal geliefert, sodass Sie weniger Bilder als üblich erhalten können. Besteht mindestens ein Bild die Prüfung, ist die Aufgabe
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
application/json
Modellname
Verfügbare Optionen:
mj-v8.2-variation Modellparameter
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
Beispiel:
"https://your-domain.com/webhooks/image-task-completed"
Antwort
Aufgabe erfolgreich erstellt
Zeitstempel der Aufgabenerstellung
Beispiel:
1757165031
Aufgaben-ID
Beispiel:
"task-unified-1757165031-mjv82"
Tatsächlich verwendeter Modellname
Beispiel:
"mj-v8.2-variation"
Aufgabenobjekttyp
Verfügbare Optionen:
image.generation.task Aufgabenfortschritt in Prozent (0-100)
Erforderlicher Bereich:
0 <= x <= 100Beispiel:
0
Aufgabenstatus
Verfügbare Optionen:
pending, processing, completed, failed Beispiel:
"pending"
Asynchrone Aufgabeninformation
Show child attributes
Show child attributes
Aufgabenausgabetyp
Verfügbare Optionen:
text, image, audio, video Beispiel:
"image"
Nutzungs- und Abrechnungsinformationen
Show child attributes
Show child attributes