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
- Recrear imágenes generadas usando un nuevo prompt
- Cambiar contenido o estilo manteniendo la estructura de la imagen original
- Diferencia con variation: remix requiere un prompt para reinterpretar la imagen original
- Modo de procesamiento asíncrono, use el ID de la tarea devuelto para consultar
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"
}
}Autorizaciones
##Todas las interfaces requieren autenticación con Bearer Token##
Obtener API Key:
Visite la página de gestión de API Key para obtener su API Key
Agregue lo siguiente al encabezado de la solicitud:
Authorization: Bearer YOUR_API_KEY
Cuerpo
Nombre del modelo
mj-v8.1-remix Nuevo prompt que describe el ajuste deseado, soporta sintaxis de parámetros de Midjourney
1024"Convert to oil painting style --ar 1:1"
Parámetros del modelo
Show child attributes
Show child attributes
Dirección de callback HTTPS después de completar la tarea
Momento del callback:
- Se activa cuando la tarea se completa, falla o se cancela
- Se envía después de confirmar la facturación
Restricciones de seguridad:
- Solo se admite el protocolo HTTPS
- Se prohíbe el callback a direcciones IP de red interna (127.0.0.1, 10.x.x.x, 172.16-31.x.x, 192.168.x.x, etc.)
- La longitud de la URL no debe exceder
2048caracteres
Mecanismo de callback:
- Tiempo de espera:
10segundos - Máximo
3reintentos después de fallar (a los1s/2s/4s después de fallar) - El formato de respuesta del callback es consistente con el de la interfaz de consulta de tareas
- Un código de estado 2xx se considera exitoso, otros códigos activan reintentos
"https://your-domain.com/webhooks/image-task-completed"
Respuesta
Tarea creada exitosamente
Marca de tiempo de creación
1757165031
ID de la tarea
"task-unified-1757165031-mjv81"
Nombre del modelo utilizado
"mj-v8.1-remix"
Tipo de tarea
image.generation.task Porcentaje de progreso (0-100)
0 <= x <= 1000
Estado de la tarea
pending, processing, completed, failed "pending"
Información de tarea asíncrona
Show child attributes
Show child attributes
Tipo de salida
text, image, audio, video "image"
Información de uso y facturación
Show child attributes
Show child attributes