Execute Midjourney Buttons
October 27, 2025
Table of contents
- Request Headers
- Request Body
- Parameters
- Supported Buttons
- Response • JSON •
stream: false - Response • SSE Stream •
stream: true - Model
- Examples
- Try It
Execute button actions on completed Midjourney jobs (upscale, variations, zoom, pan, reroll, etc.).
Execute-Once Pattern: U1-U4 upscale buttons can only be executed once per job. Subsequent requests return the existing child job immediately.
https://api.useapi.net/v3/midjourney/jobs/button
Request Headers
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data (required for Blob content uploads).
# Content-Type: multipart/form-data
API tokenis required, see Setup useapi.net for details.
Request Body
{
"jobId": "j1023141520123456789i-u12345-c1234567890123456789-bot:midjourney",
"button": "U1",
"stream": true,
"replyUrl": "https://your-server.com/webhook",
"replyRef": "your-reference-id"
}
Parameters
-
jobIdis required. Parent job ID from completed imagine/button job. Must be a valid v3 job ID format. Parent job must havestatus: "completed". -
buttonis required. Button label to execute from the parent job’sresponse.buttonsarray. Only buttons available in completed parent job can be used. See Supported Buttons below. -
maskis optional. Required only forVary (Region)button. See Vary Region Mask Editor for details. -
promptis optional. Required forCustom Zoombutton. When Remix mode is active, variation buttons (V1,V2,V3,V4,Vary (Region),Vary (Strong),Vary (Subtle)), pan buttons (⬅️,➡️,⬆️,⬇️), and🔄(Reroll) also accept a prompt. If not provided, the original prompt will be used. streamis optional (default:true).true- ReturnsContent-Type: text/event-streamwith live progress events. See SSE Streaming Guidefalse- ReturnsContent-Type: application/jsonwith initial job state. Use GET /jobs/jobidto retrieve updates and results
-
replyUrlis optional. Webhook URL for real-time job event callbacks. If channel has defaultreplyUrlconfigured, it will be used when job-specific one is not provided. All job events POST-ed to this URL as they occur.
Overrides channel-levelreplyUrlif specified.
Maximum length 1024 characters. replyRefis optional. Your reference ID stored with job.
Returned in all responses and callbacks asresponse.replyRef.
Maximum length 1024 characters.
Note: Button job executes in the same channel as the parent job.
Supported Buttons
Upscale (Execute-Once):
U1,U2,U3,U4- Upscale one of four grid images- Note: Can only be executed once per parent job. Subsequent requests return existing child job.
Variations:
V1,V2,V3,V4- Create variations of one of four grid imagesMake Variations- Create variationsVary (Strong)- Strong variationVary (Subtle)- Subtle variationVary (Region)- Regional variation (requiresmaskparameter)
Zoom:
Zoom Out 1.5x- Zoom out 1.5xZoom Out 2x- Zoom out 2xCustom Zoom- Custom zoom (prompts for parameters)
Pan:
⬅️,➡️,⬆️,⬇️- Pan in direction
Upscale Quality:
Upscale (2x),Upscale (4x)- Upscale resolutionUpscale (Subtle),Upscale (Creative)- Upscale variantsRedo Upscale (2x),Redo Upscale (4x)- Redo upscaleRedo Upscale (Subtle),Redo Upscale (Creative)- Redo upscale variants
Video:
Animate (Low motion),Animate (High motion)- Animate imageExtend (Low motion),Extend (High motion)- Extend video
Other:
🔄- Reroll (regenerate with same prompt)Make Square- Make image squareRemaster- Remaster image
Response • JSON • stream: false
Response with content-type: application/json.
-
Execute-once button (U1-U4) already executed - returning existing child job.
Note: U1-U4 buttons return existing child job on subsequent executions (no 409 error).
-
New button job created. Use returned
jobidwith GET /jobs/jobidto poll status, or wait for webhook callbacks ifreplyUrlprovided.{ "jobid": "j1024182422328516474i-u12345-c1234567890987654321-bot:midjourney", "verb": "button", "jobType": "image", "status": "created", "created": "2025-10-24T18:24:22.340Z", "request": { "replyUrl": "https://api-callback.matthieu.leblanc.workers.dev/", "replyRef": "2025-10-24T18:24:21.243Z", "stream": false, "button": "U1", "jobId": "j1024181441023299840i-u12345-c1234567890987654321-bot:midjourney" } } -
{ "error": "jobId is required" } -
{ "error": "Unauthorized" } -
{ "error": "Account has no subscription or subscription expired" } -
{ "error": "Parent job not found" } -
Parent job is older than 62 days.
{ "error": "Parent job has expired" } -
Channel at capacity or rate limited. Wait 10-30 seconds and retry.
{ "error": "Channel 1234567890123456789 is busy executing 3 image jobs" } -
Channel has pending moderation/CAPTCHA. Email notification sent. Log into Discord and address moderation message/CAPTCHA. Execute POST /accounts/
channel/reset.{ "error": "All configured Midjourney channels (2) have errors (pending moderation, CAPTCHA, etc.). Please resolve channel issues before making new requests." }
Response • SSE Stream • stream: true
Returns content-type: text/event-stream with real-time job progress events. See SSE Streaming Guide for implementation details. See Job Response Model for complete job response object structure.
data: {"event":"initialized","message":"Stream initialized","jobId":"j1024182444310873122i-u12345-c1234567890987654321-bot:midjourney","seq":0,"ts":"18:24:44.373"}
data: {"event":"midjourney_created","job":{"jobid":"j1024182444310873122i-u12345-c1234567890987654321-bot:midjourney","verb":"button","jobType":"image","status":"created","created":"2025-10-24T18:24:44.325Z","request":{"replyUrl":"https://api-callback.matthieu.leblanc.workers.dev/","replyRef":"2025-10-24T18:24:43.248Z","button":"U2","jobId":"j1024181441023299840i-u12345-c1234567890987654321-bot:midjourney"},"updated":"2025-10-24T18:24:45.449Z"},"seq":12,"ts":"18:24:45.474"}
data: {"event":"midjourney_progress","job":{"jobid":"j1024182444310873122i-u12345-c1234567890987654321-bot:midjourney","verb":"button","jobType":"image","status":"progress","created":"2025-10-24T18:24:44.325Z","request":{"replyUrl":"https://api-callback.matthieu.leblanc.workers.dev/","replyRef":"2025-10-24T18:24:43.248Z","button":"U2","jobId":"j1024181441023299840i-u12345-c1234567890987654321-bot:midjourney"},"updated":"2025-10-24T18:24:46.039Z","response":{"content":"Upscaling image #2 with **cat in the hat --v 7.0 --s 250** - <@9876543210123456789> (Waiting to start)"}},"seq":14,"ts":"18:24:46.050"}
data: {"event":"midjourney_completed","job":{"jobid":"j1024182444310873122i-u12345-c1234567890987654321-bot:midjourney","verb":"button","jobType":"image","status":"completed","created":"2025-10-24T18:24:44.325Z","request":{"replyUrl":"https://api-callback.matthieu.leblanc.workers.dev/","replyRef":"2025-10-24T18:24:43.248Z","button":"U2","jobId":"j1024181441023299840i-u12345-c1234567890987654321-bot:midjourney"},"updated":"2025-10-24T18:24:47.155Z","response":{"content":"**cat in the hat --v 7.0 --s 250** - Image #2 <@9876543210123456789>","attachments":[{"url":"https://cdn.discordapp.com/attachments/1234567890987654321/123456789098765027/matthieu_leblanc_975_cat_in_the_hat_xxxxxxxx-xxxx-xxxx-xxxx-e994e697adb0.png","width":1024,"height":1024}],"buttons":["Upscale (Subtle)","Upscale (Creative)","Vary (Subtle)","Vary (Strong)","Vary (Region)","Zoom Out 2x","Zoom Out 1.5x","Custom Zoom","⬅️","➡️","⬆️","⬇️","Animate (High motion)","Animate (Low motion)"]},"code":200},"seq":17,"ts":"18:24:47.170"}
Model
See Job Response Model for complete response structure.
Examples
The examples below show the JSON response format (stream: false). For real-time SSE streaming examples, see the SSE Streaming Guide.
-
curl -H "Authorization: Bearer YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -X POST "https://api.useapi.net/v3/midjourney/jobs/button" \ -d '{"jobId":"j1023141520123456789i-u12345-c1234567890123456789-bot:midjourney","button":"U1","stream":false}' -
const response = await fetch('https://api.useapi.net/v3/midjourney/jobs/button', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_API_TOKEN', 'Content-Type': 'application/json' }, body: JSON.stringify({ jobId: 'j1023141520123456789i-u12345-c1234567890123456789-bot:midjourney', button: 'U1', stream: false }) }); const result = await response.json(); console.log('Job created:', result.jobid); // Poll for completion using GET /jobs/jobid // Or use webhook with replyUrl parameter -
import requests response = requests.post( 'https://api.useapi.net/v3/midjourney/jobs/button', headers={'Authorization': 'Bearer YOUR_API_TOKEN'}, json={ 'jobId': 'j1023141520123456789i-u12345-c1234567890123456789-bot:midjourney', 'button': 'U1', 'stream': False } ) result = response.json() print('Job created:', result['jobid']) // Poll for completion using GET /jobs/jobid // Or use webhook with replyUrl parameter