Midjourney REST API v2 (retired)

Reverse-engineered REST API for Midjourney, driven through a linked Discord account. Retired — useapi.net discontinued Midjourney support on June 24, 2026. The v1 surface was previously sunset on March 1, 2024 when all calls were routed to v2. The published OpenAPI 3.0.2 definitions remain available on SwaggerHub and are archived here.

OpenAPI Specification

useapi-midjourney-v2-openapi.yml Raw ↑
openapi: "3.0.2"
info:
  title: Midjourney REST API v2 by useapi.net
  description: Simple, reliable and affordable way to use Midjourney via standard REST API
  version: "1.0"
servers:
  - url: https://api.useapi.net/v2
components:
  securitySchemes:
    apiToken:
      type: http
      scheme: bearer
      description: API Token
  schemas:
    accountResponse:
      type: object
      properties:
        email:
          type: string
        created:
          description: YYYY-MM-DDTHH:mm:ss.sssZ, IS0 8601, UTC
          type: string
        name:
          type: string
        verified:
          description: YYYY-MM-DDTHH:mm:ss.sssZ, IS0 8601, UTC
          type: string
        sub:
          type: string
        replyUrl:
          type: string
        error:
          type: string
        errorDetails:
          type: string
        code:
          type: integer
    midjourneyResponse:
      type: object
      properties:
        discord:
          type: string
        channel:
          type: string
        server:
          type: string
        maxJobs:
          type: integer
        pendingModMessage:
          description: Your Discord account has received a pending moderation message from Midjourney. Please address this issue and reset pendingModMessage before making any new API calls
          type: string
        error:
          type: string
        errorDetails:
          type: string
        code:
          type: integer
    imagineResponse:
      type: object
      properties:
        jobid:
          description: Use returned jobid value to retrieve job status and results
          type: string
        verb:
          type: string
          enum:
            - imagine
        status:
          type: string
          enum:
            - started
            - moderated
            - failed
        created:
          description: YYYY-MM-DDTHH:mm:ss.sssZ, IS0 8601, UTC
          type: string
        updated:
          description: YYYY-MM-DDTHH:mm:ss.sssZ, IS0 8601, UTC
          type: string
        prompt:
          type: string
        discord:
          description: Provided for debugging purposes only, contains the first 3 and the last 3 characters of the original value
          type: string
        channel:
          type: string
        server:
          type: string
        maxJobs:
          type: integer
        replyUrl:
          type: string
        replyRef:
          type: string
        messageId:
          type: string
        content:
          description: Contains message generated by Midjourney reflecting current generation parameters and progress
          type: string
        timestamp:
          type: string
        error:
          type: string
        errorDetails:
          type: string
        executingJobs:
          type: array
          items:
            type: string
        code:
          type: integer
    buttonResponse:
      type: object
      properties:
        jobid:
          description: Use returned jobid value to retrieve job status and results
          type: string
        verb:
          type: string
          enum:
            - button
        status:
          type: string
          enum:
            - started
            - moderated
            - failed
        created:
          description: YYYY-MM-DDTHH:mm:ss.sssZ, IS0 8601, UTC
          type: string
        updated:
          description: YYYY-MM-DDTHH:mm:ss.sssZ, IS0 8601, UTC
          type: string
        button:
          type: string
          enum:
            - U1
            - U2
            - U3
            - U4
            - V1
            - V2
            - V3
            - V4
            - ⬅️
            - ➡️
            - ⬆️
            - ⬇️
            - 🔄
            - Vary (Strong)
            - Vary (Subtle)
            - Zoom Out 1.5x
            - Zoom Out 2x
            - Upscale (2x)
            - Upscale (4x)
            - Upscale (Subtle)
            - Upscale (Creative)
            - Redo Upscale (2x)
            - Redo Upscale (4x)
            - Redo Upscale (Subtle)
            - Redo Upscale (Creative)
            - Make Square
            - Make Variations
            - Remaster
            - Custom Zoom
        prompt:
          description: Required for button Custom Zoom https://docs.midjourney.com/docs/zoom-out#custom-zoom
          type: string
        parentJobId:
          type: string
        discord:
          description: Provided for debugging purposes only, contains the first 3 and the last 3 characters of the original value
          type: string
        channel:
          type: string
        server:
          type: string
        maxJobs:
          type: integer
        replyRef:
          type: string
        replyUrl:
          type: string
        messageId:
          type: string
        content:
          description: Contains message generated by Midjourney reflecting current generation parameters and progress
          type: string
        timestamp:
          type: string
        error:
          type: string
        errorDetails:
          type: string
        executingJobs:
          type: array
          items:
            type: string
        code:
          type: integer
    blendResponse:
      type: object
      properties:
        jobid:
          description: Use returned jobid value to retrieve job status and results
          type: string
        verb:
          type: string
          enum:
            - blend
        status:
          type: string
          enum:
            - started
            - moderated
            - failed
        created:
          description: YYYY-MM-DDTHH:mm:ss.sssZ, IS0 8601, UTC
          type: string
        updated:
          description: YYYY-MM-DDTHH:mm:ss.sssZ, IS0 8601, UTC
          type: string
        blendUrls:
          type: array
          items:
            type: string
        blendDimensions:
          type: string
          enum:
            - Portrait
            - Square
            - Landscape
        discord:
          description: Provided for debugging purposes only, contains the first 3 and the last 3 characters of the original value
          type: string
        channel:
          type: string
        server:
          type: string
        maxJobs:
          type: integer
        replyRef:
          type: string
        replyUrl:
          type: string
        messageId:
          type: string
        content:
          description: Contains message generated by Midjourney reflecting current generation parameters and progress
          type: string
        timestamp:
          type: string
        error:
          type: string
        errorDetails:
          type: string
        executingJobs:
          type: array
          items:
            type: string
        code:
          type: integer
    describeResponse:
      type: object
      properties:
        jobid:
          description: Use returned jobid value to retrieve job status and results
          type: string
        verb:
          type: string
          enum:
            - describe
        status:
          type: string
          enum:
            - started
            - moderated
            - failed
        created:
          description: YYYY-MM-DDTHH:mm:ss.sssZ, IS0 8601, UTC
          type: string
        updated:
          description: YYYY-MM-DDTHH:mm:ss.sssZ, IS0 8601, UTC
          type: string
        describeUrl:
          type: string
        discord:
          description: Provided for debugging purposes only, contains the first 3 and the last 3 characters of the original value
          type: string
        channel:
          type: string
        server:
          type: string
        maxJobs:
          type: integer
        replyRef:
          type: string
        replyUrl:
          type: string
        messageId:
          type: string
        content:
          description: Contains message generated by Midjourney reflecting current generation parameters and progress
          type: string
        timestamp:
          type: string
        error:
          type: string
        errorDetails:
          type: string
        executingJobs:
          type: array
          items:
            type: string
        code:
          type: integer
    jobResponse:
      type: object
      properties:
        jobid:
          type: string
        parentJobId:
          type: string
        verb:
          type: string
          enum:
            - imagine
            - button
            - blend
            - describe
            - info
            - relax
            - fast
            - turbo
            - variability
        status:
          description: If value is created, started or progress wait in a loop for at least 10..30 seconds and retry again
          type: string
          enum:
            - created
            - started
            - moderated
            - progress
            - completed
            - failed
            - cancelled
        created:
          description: YYYY-MM-DDTHH:mm:ss.sssZ, IS0 8601, UTC
          type: string
        updated:
          description: YYYY-MM-DDTHH:mm:ss.sssZ, IS0 8601, UTC
          type: string
        prompt:
          type: string
        blendUrls:
          type: array
          items:
            type: string
        blendDimensions:
          type: string
          enum:
            - Portrait
            - Square
            - Landscape
        describeUrl:
          type: string
        button:
          type: string
          enum:
            - U1
            - U2
            - U3
            - U4
            - V1
            - V2
            - V3
            - V4
            - ⬅️
            - ➡️
            - ⬆️
            - ⬇️
            - 🔄
            - Vary (Strong)
            - Vary (Subtle)
            - Zoom Out 1.5x
            - Zoom Out 2x
            - Upscale (2x)
            - Upscale (4x)
            - Upscale (Subtle)
            - Upscale (Creative)
            - Redo Upscale (2x)
            - Redo Upscale (4x)
            - Redo Upscale (Subtle)
            - Redo Upscale (Creative)
            - Make Square
            - Make Variations
            - Remaster
            - Custom Zoom
        children:
          type: array
          items:
            type: object
            properties:
              button:
                type: string
                enum:
                  - U1
                  - U2
                  - U3
                  - U4
                  - V1
                  - V2
                  - V3
                  - V4
                  - ⬅️
                  - ➡️
                  - ⬆️
                  - ⬇️
                  - 🔄
                  - Vary (Strong)
                  - Vary (Subtle)
                  - Zoom Out 1.5x
                  - Zoom Out 2x
                  - Upscale (2x)
                  - Upscale (4x)
                  - Upscale (Subtle)
                  - Upscale (Creative)
                  - Redo Upscale (2x)
                  - Redo Upscale (4x)
                  - Redo Upscale (Subtle)
                  - Redo Upscale (Creative)
                  - Make Square
                  - Make Variations
                  - Remaster
                  - Custom Zoom
              jobid:
                type: string
              messageId:
                type: string
        buttons:
          type: array
          items:
            type: string
            enum:
              - U1
              - U2
              - U3
              - U4
              - V1
              - V2
              - V3
              - V4
              - ⬅️
              - ➡️
              - ⬆️
              - ⬇️
              - 🔄
              - Vary (Strong)
              - Vary (Subtle)
              - Zoom Out 1.5x
              - Zoom Out 2x
              - Upscale (2x)
              - Upscale (4x)
              - Upscale (Subtle)
              - Upscale (Creative)
              - Redo Upscale (2x)
              - Redo Upscale (4x)
              - Redo Upscale (Subtle)
              - Redo Upscale (Creative)
              - Make Square
              - Make Variations
              - Remaster
              - Custom Zoom
        discord:
          description: Provided for debugging purposes only, contains the first 3 and the last 3 characters of the original value
          type: string
        channel:
          type: string
        server:
          type: string
        maxJobs:
          type: integer
        replyRef:
          type: string
        replyUrl:
          type: string
        messageId:
          type: string
        content:
          description: Message generated by Midjourney reflecting current generation parameters and progress
          type: string
        timestamp:
          type: string
        attachments:
          type: array
          items:
            type: object
            properties:
              proxy_url:
                type: string
              size:
                type: integer
              url:
                type: string
              width:
                type: integer
              content_type:
                type: string
              filename:
                type: string
              height:
                type: integer
              id:
                type: string
        embeds:
          description: Contains additional information
          type: array
          items:
            type: object
            properties:
              type:
                type: string
              description:
                type: string
              image:
                type: object
                properties:
                  url:
                    type: string
                  proxy_url:
                    type: string
                  width:
                    type: number
                  height:
                    type: number
        error:
          type: string
        errorDetails:
          type: string
        code:
          type: integer
    jobCancelResponse:
      type: object
      properties:
        jobid:
          type: string
        status:
          type: string
          enum:
            - created
            - started
            - moderated
            - progress
            - completed
            - failed
            - cancelled
        error:
          type: string
        errorDetails:
          type: string
        code:
          type: integer
    jobsResponse:
      type: array
      items:
        type: string
    completedResponse:
      type: object
      properties:
        jobid:
          type: string
        verb:
          type: string
          enum:
            - info
            - relax
            - fast
            - turbo
            - variability
        status:
          type: string
          enum:
            - completed
        created:
          description: YYYY-MM-DDTHH:mm:ss.sssZ, IS0 8601, UTC
          type: string
        updated:
          description: YYYY-MM-DDTHH:mm:ss.sssZ, IS0 8601, UTC
          type: string
        discord:
          description: Provided for debugging purposes only, contains the first 3 and the last 3 characters of the original value
          type: string
        channel:
          type: string
        server:
          type: string
        replyUrl:
          type: string
        replyRef:
          type: string
        messageId:
          type: string
        content:
          description: Contains message generated by Midjourney reflecting current generation parameters and progress
          type: string
        timestamp:
          type: string
        embeds:
          description: Contains additional information
          type: array
          items:
            type: object
            properties:
              type:
                type: string
              description:
                type: string
              image:
                type: object
                properties:
                  url:
                    type: string
                  proxy_url:
                    type: string
                  width:
                    type: number
                  height:
                    type: number
        code:
          type: integer
    responseError:
      type: object
      properties:
        error:
          type: string
        errorDetails:
          type: string
        code:
          type: integer
security:
  - apiToken: []
paths:
  /account:
    get:
      description: Retrieve account information
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/accountResponse"
        "401":
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/accountResponse"
    post:
      description: Update account information
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  description: User name
                  type: string
                replyUrl:
                  description: Default callback URL, API will call the provided replyUrl once generation completed to be used for all API endpoints
                  type: string
      responses:
        "204":
          description: No Content
        "400":
          description: replyUrl is too long
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/accountResponse"
        "401":
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/accountResponse"
  /account/midjourney:
    get:
      description: Retrieve Midjourney accounts information, see https://useapi.net/docs/api-v2/get-account-midjourney
      responses:
        "200":
          description: OK
        "401":
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/midjourneyResponse"
  /account/midjourney/{channel}:
    get:
      description: Retrieve Midjourney account information for specified channel
      parameters:
        - in: path
          name: channel
          schema:
            type: string
          required: true
          description: Midjourney channel id
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/midjourneyResponse"
        "401":
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/midjourneyResponse"
        "404":
          description: Configuration not found for provided channel
    delete:
      description: Delete Midjourney account information for specified channel
      parameters:
        - in: path
          name: channel
          schema:
            type: string
          required: true
          description: Midjourney channel id
      responses:
        "204":
          description: No Content
        "401":
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/midjourneyResponse"
        "404":
          description: Configuration not found for provided channel
    post:
      description: Create or update Midjourney account information for specified channel
      parameters:
        - in: path
          name: channel
          schema:
            type: string
          required: true
          description: Midjourney channel id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                discord:
                  description: Discord token
                  type: string
                server:
                  description: Discord server id
                  type: string
                channel:
                  description: Discord channel id
                  type: string
                maxJobs:
                  description: Maximum Concurrent Jobs
                  type: integer
                  minimum: 1
                  maximum: 15
              required:
                - discord
                - server
                - channel
                - maxJobs
      responses:
        "204":
          description: No Content
        "400":
          description: One of the required params is missing, has an incorrect value, or is duplicated across another account
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/accountResponse"
        "401":
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/accountResponse"
  /account/midjourney/{channel}/reset:
    post:
      description: Reset the pendingModMessage field for the Midjourney account specified by the channel
      parameters:
        - in: path
          name: channel
          schema:
            type: string
          required: true
          description: Midjourney channel id
      responses:
        "204":
          description: No Content
        "401":
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/accountResponse"
        "404":
          description: Configuration not found for provided channel
  /jobs/imagine:
    post:
      description: Submit the Midjourney /imagine command
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                prompt:
                  description: Midjourney prompt
                  type: string
                  maxLength: 1024
                discord:
                  description: Discord token, optional if a value has already been provided for the account via the POST /account/midjourney/{channel}
                  type: string
                server:
                  description: Discord server id, optional if a value has already been provided for the account via the POST /account/midjourney/{channel}
                  type: string
                channel:
                  description: Discord channel id, optional if a value has already been provided for the account via the POST /account/midjourney/{channel}
                  type: string
                maxJobs:
                  description: Optional Maximum Concurrent Jobs for current Midjourney subscription, optional if a value has already been provided for the account via the POST /account/midjourney/{channel}
                  type: integer
                  minimum: 1
                  maximum: 15
                replyUrl:
                  description: Optional callback URL, API will call the provided replyUrl once generation completed. Value can be provided for the account via the POST /account/midjourney/{channel}
                  type: string
                replyRef:
                  description: Optional reference id which will be stored and returned along with this job response / result
                  type: string
              required:
                - prompt
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/imagineResponse"
        "400":
          description: prompt, discord, server or channel value is missing | prompt, replyRef or replyUrl is too long
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/responseError"
        "401":
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/responseError"
        "402":
          description: Account has no subscription or subscription expired
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/responseError"
        "422":
          description: Moderated or invalid prompt
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/imagineResponse"
        "429":
          description: API query is full and can not accept new jobs/imagine requests or Discord rate limit detected. Please wait at least 10..30 seconds and retry again.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/imagineResponse"
        "504":
          description: 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 maxJobs number to a lower value for the next several minutes.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/imagineResponse"
        "596":
          description: Your Discord account has received a pending moderation message from Midjourney. Please address this issue and reset pendingModMessage before making any new API calls
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/imagineResponse"
  /jobs/button:
    post:
      description: Midjourney upscale or create variations and enhance or modify buttons
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                jobid:
                  description: jobid of successfully completed (status set to completed) jobs/imagine, jobs/blend or jobs/button job
                  type: string
                button:
                  description: button from buttons array of job referenced via jobid
                  type: string
                  enum:
                    - U1
                    - U2
                    - U3
                    - U4
                    - V1
                    - V2
                    - V3
                    - V4
                    - ⬅️
                    - ➡️
                    - ⬆️
                    - ⬇️
                    - 🔄
                    - Vary (Strong)
                    - Vary (Subtle)
                    - Zoom Out 1.5x
                    - Zoom Out 2x
                    - Upscale (2x)
                    - Upscale (4x)
                    - Upscale (Subtle)
                    - Upscale (Creative)
                    - Redo Upscale (2x)
                    - Redo Upscale (4x)
                    - Redo Upscale (Subtle)
                    - Redo Upscale (Creative)
                    - Make Square
                    - Make Variations
                    - Remaster
                    - Custom Zoom
                prompt:
                  description: Required for button Custom Zoom https://docs.midjourney.com/docs/zoom-out#custom-zoom
                  type: string
                discord:
                  description: Optional Discord token, if provided will override discord value of referenced jobid
                  type: string
                maxJobs:
                  description: Optional Maximum Concurrent Jobs for current Midjourney subscription, if provided will override discord value of referenced jobid
                  type: integer
                  minimum: 1
                  maximum: 15
                replyUrl:
                  description: Optional callback URL, API will call the provided replyUrl once generation completed. Value can be provided for the account via the POST /account/midjourney/{channel}
                  type: string
                replyRef:
                  description: Optional reference id which will be stored and returned along with this job response / result
                  type: string
              required:
                - jobid
                - button
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/buttonResponse"
        "400":
          description: button not supported or not found in jobid buttons array | jobid, button or prompt value is missing | replyRef or replyUrl is too long
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/buttonResponse"
        "401":
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/buttonResponse"
        "402":
          description: Account has no subscription or subscription expired
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/buttonResponse"
        "404":
          description: Unable to locate jobid
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/buttonResponse"
        "409":
          description: Upscale button already executed by jobid
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/buttonResponse"
        "422":
          description: Moderated or invalid prompt
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/buttonResponse"
        "429":
          description: API query is full and can not accept new jobs/button requests. Please wait at least 10..30 seconds and retry again.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/buttonResponse"
        "504":
          description: 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 maxJobs number to a lower value for the next several minutes.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/buttonResponse"
        "596":
          description: Your Discord account has received a pending moderation message from Midjourney. Please address this issue and reset pendingModMessage before making any new API calls
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/buttonResponse"
  /jobs/blend:
    post:
      description: Submit the Midjourney /blend command
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                blendUrls:
                  description: Must contain at least 2 valid URL image links, up to 5 URL image links supported
                  type: array
                  minItems: 2
                  maxItems: 5
                  items:
                    type: string
                blendDimensions:
                  type: string
                  enum:
                    - Portrait
                    - Square
                    - Landscape
                discord:
                  description: Discord token, optional if a value has already been provided for the account via the POST /account/midjourney/{channel}
                  type: string
                server:
                  description: Discord server id, optional if a value has already been provided for the account via the POST /account/midjourney/{channel}
                  type: string
                channel:
                  description: Discord channel id, optional if a value has already been provided for the account via the POST /account/midjourney/{channel}
                  type: string
                maxJobs:
                  description: Optional Maximum Concurrent Jobs for current Midjourney subscription, optional if a value has already been provided for the account via the POST /account/midjourney/{channel}
                  type: integer
                  minimum: 1
                  maximum: 15
               

# --- truncated at 32 KB (54 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/useapi/refs/heads/main/openapi/useapi-midjourney-v2-openapi.yml