curl --request POST \
--url https://api.evolink.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "mj-v7-remix",
"prompt": "Cambiar a estilo óleo --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-v7-remix",
"prompt": "Cambiar a estilo óleo --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-v7-remix',
prompt: 'Cambiar a estilo óleo --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-v7-remix',
'prompt' => 'Cambiar a estilo óleo --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-v7-remix\",\n \"prompt\": \"Cambiar a estilo óleo --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-v7-remix\",\n \"prompt\": \"Cambiar a estilo óleo --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-v7-remix\",\n \"prompt\": \"Cambiar a estilo óleo --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-mjv7",
"model": "mj-v7-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-v7-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 V7 Remix
- Recrear imágenes generadas usando un nuevo prompt
- Cambiar contenido o estilo manteniendo la estructura de la imagen original
- Diferencia con variation: el prompt de remix es obligatorio, reinterpreta la imagen original con un nuevo prompt
- 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-v7-remix",
"prompt": "Cambiar a estilo óleo --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-v7-remix",
"prompt": "Cambiar a estilo óleo --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-v7-remix',
prompt: 'Cambiar a estilo óleo --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-v7-remix',
'prompt' => 'Cambiar a estilo óleo --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-v7-remix\",\n \"prompt\": \"Cambiar a estilo óleo --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-v7-remix\",\n \"prompt\": \"Cambiar a estilo óleo --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-v7-remix\",\n \"prompt\": \"Cambiar a estilo óleo --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-mjv7",
"model": "mj-v7-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-v7-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-v7-remix Nuevo prompt, describe la dirección de ajuste deseada, soporta sintaxis de parámetros de Midjourney
"Cambiar a estilo óleo --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 (completed), falla (failed) o se cancela (cancelled)
- 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 respectivamente) - El formato de respuesta del callback es consistente con el de la interfaz de consulta de tareas
- Si la dirección de callback devuelve un código 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-mjv7"
Nombre del modelo utilizado
"mj-v7-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