Execute Midjourney Buttons
October 27, 2025
Table of contents
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
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
Responses
-
Execute-once button (U1-U4) already executed - returning existing child job.
{ "jobid": "j1023141525987654321i-u12345-c1234567890123456789-bot:midjourney", "verb": "button", "status": "completed", "created": "2025-10-23T14:15:25.987Z", "updated": "2025-10-23T14:16:30.123Z", "request": { "jobId": "j1023141520123456789i-u12345-c1234567890123456789-bot:midjourney", "button": "U1" }, "response": { "attachments": [{"url": "https://cdn.discordapp.com/..."}] } }Note: U1-U4 buttons return existing child job on subsequent executions (no 409 error).
-
{ "error": "jobId is required" } -
{ "error": "Unauthorized" } -
{ "error": "Account has no subscription or subscription expired" } -
{ "error": "Parent job not found" } -
{ "error": "Button <U1 | U2 | U3 | U4> already executed by job <jobid>", "button": "<button>", "jobid": "<jobid>", "code": 409 } -
Moderated message or invalid prompt params, see Midjourney moderation system.
{ "error": "Action needed to continue", "errorDetails": "Sorry! Our AI moderators feel your prompt might be against our community standards.", "jobid": "<jobid>", "status": "moderated", "code": 422 }{ "error": "Invalid parameter", "errorDetails": "Unrecognized parameter(s): `size`", "jobid": "<jobid>", "status": "moderated", "code": 422 } -
Channel at capacity or rate limited. Wait 10-30 seconds and retry.
{ "error": "Channel 1234567890123456789 is busy executing 3 image jobs" } -
Response code
502means the Midjourney Discord bot did not reply within the allotted time limit. This usually happens when the Discord Gateway API or the Midjourney Discord bot is having issues.
You can check Discord status and Midjourney Discord server status channel.
Keep in mind that both links above most often will not reflect an event that has just started. -
504 Job queued
Job queued. The API will not be able to track the progress of this job, although it will still be processed by Midjourney. You may want to adjust the
maxJobsnumber to a lower value for the next several minutes.You should not receive this error under normal circumstances unless you have specified a
maxJobsparameter higher than your Midjourney subscription supports, or if you are using the Midjourney bot outside of API interactions. On occasions when Midjourney is releasing new updates or experiencing technical issues, jobs may be paused for an extended period of time. Our API will mark all jobs running over 30 minutes asfailed. When Midjourney comes back online, it will attempt to complete previously paused jobs, and you may encounter a conflict if you try to submit a new job at the same time. Although this happens very rarely, we have decided to add an extra layer to ensure such cases are detected.{ "error": "Job queued", "jobid": "<jobid>", "status": "failed", "code": 504 } -
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." } -
Real-time SSE streaming (
stream: true)Returns
Content-Type: text/event-streamwith live events. See SSE Event Format for details. -
New button job created (
stream: false).{ "jobid": "j1023141525987654321i-u12345-c1234567890123456789-bot:midjourney", "verb": "button", "jobType": "image", "status": "created", "created": "2025-10-23T14:15:25.987Z", "updated": "2025-10-23T14:15:25.987Z", "request": { "jobId": "j1023141520123456789i-u12345-c1234567890123456789-bot:midjourney", "button": "U1", "stream": false } } -
Parent job is older than 62 days.
{ "error": "Parent job has expired" }
Model
See Job Response Model for complete response structure.
Examples
-
curl -H "Authorization: Bearer YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -X POST "https://api.useapi.net/v3/midjourney/jobs/button" \ -d '{"jobId":"j1023...","button":"U1","stream":true}' -
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: true }) }); -
import requests response = requests.post( 'https://api.useapi.net/v3/midjourney/jobs/button', headers={'Authorization': 'Bearer YOUR_API_TOKEN'}, json={'jobId': 'j1023...', 'button': 'U1', 'stream': True} )