> ## Documentation Index
> Fetch the complete documentation index at: https://docs.melius.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Update nodes in bulk



## OpenAPI

````yaml /api/openapi.json patch /api/v1/canvases/{canvasId}/direct/nodes/bulk
openapi: 3.0.2
info:
  title: Melius API
  version: '1'
  description: >-
    The Melius REST API. Authenticate with an API key as a bearer token
    (`Authorization: Bearer mel_...`) and select the team to act on with the
    `x-team-id` header. Generations run through the same node + run pipeline as
    the app: create a node on a canvas, start a run, poll the run, then read the
    resulting version asset.
servers:
  - url: https://api.melius.com
security:
  - apiKey: []
    teamId: []
paths:
  /api/v1/canvases/{canvasId}/direct/nodes/bulk:
    patch:
      tags:
        - node
      summary: Update nodes in bulk
      operationId: node.bulkUpdate
      parameters:
        - name: canvasId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        description: Body
        content:
          application/json:
            schema:
              type: object
              properties:
                nodes:
                  type: array
                  items:
                    type: object
                    properties:
                      nodeId:
                        type: string
                        format: uuid
                      geometry:
                        type: object
                        properties:
                          x:
                            type: number
                          'y':
                            type: number
                          w:
                            type: number
                          h:
                            type: number
                          zIndex:
                            type: number
                        required:
                          - x
                          - 'y'
                          - w
                          - h
                      nodeType:
                        type: string
                        enum:
                          - text
                          - image
                          - video
                          - audio
                          - file
                          - group
                          - custom_text
                          - pdf
                          - composite
                          - stitch
                          - magic_resize
                      title:
                        type: string
                      groupId:
                        type: string
                        format: uuid
                        nullable: true
                      modelConfig:
                        type: object
                        properties:
                          model:
                            type: string
                          variant:
                            type: string
                          tier:
                            type: string
                            nullable: true
                          font:
                            type: object
                            properties:
                              source:
                                type: string
                                enum:
                                  - custom
                                  - google
                              familyName:
                                type: string
                            required:
                              - source
                              - familyName
                        required:
                          - model
                          - variant
                        nullable: true
                      textPrompt:
                        type: string
                        nullable: true
                      text:
                        type: string
                        maxLength: 100000
                      outputAspectRatio:
                        type: string
                        enum:
                          - '21:9'
                          - '16:9'
                          - '4:3'
                          - '5:4'
                          - '3:2'
                          - '1:1'
                          - '2:3'
                          - '3:4'
                          - '4:5'
                          - '9:16'
                          - '9:21'
                        nullable: true
                      outputDuration:
                        type: integer
                        minimum: 0
                        exclusiveMinimum: true
                        nullable: true
                      outputResolution:
                        oneOf:
                          - type: string
                            enum:
                              - 360p
                              - 480p
                              - 540p
                              - 580p
                              - 720p
                              - 1080p
                              - 1440p
                              - 2160p
                              - 4k
                              - 0.5K
                              - 1K
                              - 2K
                              - 4K
                              - 1k
                              - 2k
                          - type: string
                      matchAudioToVideoDuration:
                        type: boolean
                        nullable: true
                      seed:
                        type: integer
                        minimum: 0
                        maximum: 2147483647
                        nullable: true
                      negativePrompt:
                        type: string
                        nullable: true
                      stitchClipOrder:
                        type: array
                        items:
                          type: string
                        nullable: true
                      stitchScaleFit:
                        type: string
                        enum:
                          - fit
                          - stretch
                        nullable: true
                      stitchAudioOverlays:
                        type: array
                        items:
                          type: object
                          properties:
                            nodeId:
                              type: string
                            startTimeSeconds:
                              type: number
                              minimum: 0
                            trimStartMs:
                              type: integer
                              minimum: 0
                            trimEndMs:
                              type: integer
                              minimum: 0
                              exclusiveMinimum: true
                          required:
                            - nodeId
                            - startTimeSeconds
                        nullable: true
                      stitchClipTrims:
                        type: object
                        additionalProperties:
                          type: object
                          properties:
                            trimStartMs:
                              type: integer
                              minimum: 0
                            trimEndMs:
                              type: integer
                              minimum: 0
                              exclusiveMinimum: true
                        nullable: true
                      voiceId:
                        type: string
                        minLength: 1
                        nullable: true
                      customVoiceId:
                        type: string
                        format: uuid
                        nullable: true
                    required:
                      - nodeId
                  minItems: 1
                  maxItems: 200
              required:
                - nodes
      responses:
        '200':
          description: '200'
          content:
            application/json:
              schema:
                type: object
                properties:
                  nodes:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          format: uuid
                        nodeType:
                          type: string
                          enum:
                            - text
                            - image
                            - video
                            - audio
                            - file
                            - group
                            - custom_text
                            - pdf
                            - composite
                            - stitch
                            - magic_resize
                        geometry:
                          type: object
                          properties:
                            x:
                              type: number
                            'y':
                              type: number
                            w:
                              type: number
                            h:
                              type: number
                            zIndex:
                              type: number
                          required:
                            - x
                            - 'y'
                            - w
                            - h
                        groupId:
                          type: string
                          format: uuid
                          nullable: true
                        title:
                          type: string
                        autoModel:
                          type: boolean
                          nullable: true
                        fastModel:
                          type: boolean
                          nullable: true
                        modelConfig:
                          type: object
                          properties:
                            model:
                              type: string
                            variant:
                              type: string
                            tier:
                              type: string
                              nullable: true
                            ratios:
                              type: array
                              items:
                                type: string
                            resolution:
                              type: string
                            voiceId:
                              type: string
                            customVoiceId:
                              type: string
                              format: uuid
                            font:
                              type: object
                              properties:
                                source:
                                  type: string
                                  enum:
                                    - custom
                                    - google
                                familyName:
                                  type: string
                              required:
                                - source
                                - familyName
                          required:
                            - model
                            - variant
                          nullable: true
                        textPrompt:
                          type: string
                          nullable: true
                        outputAspectRatio:
                          type: string
                          enum:
                            - '21:9'
                            - '16:9'
                            - '4:3'
                            - '5:4'
                            - '3:2'
                            - '1:1'
                            - '2:3'
                            - '3:4'
                            - '4:5'
                            - '9:16'
                            - '9:21'
                          nullable: true
                        outputDuration:
                          type: integer
                          minimum: 0
                          exclusiveMinimum: true
                          nullable: true
                        outputResolution:
                          oneOf:
                            - type: string
                              enum:
                                - 360p
                                - 480p
                                - 540p
                                - 580p
                                - 720p
                                - 1080p
                                - 1440p
                                - 2160p
                                - 4k
                                - 0.5K
                                - 1K
                                - 2K
                                - 4K
                                - 1k
                                - 2k
                            - type: string
                        matchAudioToVideoDuration:
                          type: boolean
                          nullable: true
                        seed:
                          type: integer
                          minimum: 0
                          maximum: 2147483647
                          nullable: true
                        negativePrompt:
                          type: string
                          nullable: true
                        stitchClipOrder:
                          type: array
                          items:
                            type: string
                          nullable: true
                        stitchScaleFit:
                          type: string
                          enum:
                            - fit
                            - stretch
                          nullable: true
                        stitchAudioOverlays:
                          type: array
                          items:
                            type: object
                            properties:
                              nodeId:
                                type: string
                              startTimeSeconds:
                                type: number
                                minimum: 0
                              trimStartMs:
                                type: integer
                                minimum: 0
                              trimEndMs:
                                type: integer
                                minimum: 0
                                exclusiveMinimum: true
                            required:
                              - nodeId
                              - startTimeSeconds
                          nullable: true
                        stitchClipTrims:
                          type: object
                          additionalProperties:
                            type: object
                            properties:
                              trimStartMs:
                                type: integer
                                minimum: 0
                              trimEndMs:
                                type: integer
                                minimum: 0
                                exclusiveMinimum: true
                          nullable: true
                        voiceId:
                          type: string
                          nullable: true
                        customVoiceId:
                          type: string
                          nullable: true
                        elevenLabsVoiceSettings:
                          type: object
                          properties:
                            speed:
                              type: number
                              minimum: 0.25
                              maximum: 4
                            stability:
                              type: number
                              minimum: 0
                              maximum: 1
                            similarityBoost:
                              type: number
                              minimum: 0
                              maximum: 1
                            style:
                              type: number
                              minimum: 0
                              maximum: 1
                            speakerBoost:
                              type: boolean
                            removeBackgroundNoise:
                              type: boolean
                            outputFormat:
                              type: string
                              enum:
                                - mp3_44100_128
                                - mp3_44100_192
                                - mp3_22050_32
                                - pcm_16000
                                - pcm_22050
                                - pcm_24000
                                - pcm_44100
                          nullable: true
                        src:
                          type: string
                          nullable: true
                        previewSrc:
                          type: string
                          nullable: true
                        mediaType:
                          type: string
                          enum:
                            - image
                            - video
                            - audio
                            - pdf
                          nullable: true
                        generatedText:
                          type: string
                          nullable: true
                        activeVersionId:
                          type: string
                          format: uuid
                          nullable: true
                        assetDurationInMs:
                          type: integer
                          minimum: 0
                          nullable: true
                        createdByUserId:
                          type: string
                          format: uuid
                          nullable: true
                      required:
                        - id
                        - nodeType
                        - geometry
                        - groupId
                        - title
                        - modelConfig
                        - textPrompt
                        - outputAspectRatio
                        - outputDuration
                        - outputResolution
                        - seed
                        - negativePrompt
                        - src
                        - previewSrc
                        - mediaType
                        - generatedText
                        - activeVersionId
                        - assetDurationInMs
                        - createdByUserId
                required:
                  - nodes
        '401':
          description: Missing, invalid, expired, or revoked API key.
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: integer
                  error:
                    type: string
                  message:
                    type: string
                required:
                  - statusCode
                  - message
        '403':
          description: The API key's user is not a member of the requested team.
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: integer
                  error:
                    type: string
                  message:
                    type: string
                required:
                  - statusCode
                  - message
        '404':
          description: '404'
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                required:
                  - message
        '409':
          description: '409'
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                required:
                  - message
        '429':
          description: Rate limit reached — retry after the `Retry-After` header.
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: object
                properties:
                  statusCode:
                    type: integer
                  error:
                    type: string
                  message:
                    type: string
                  retryAfterSeconds:
                    type: integer
                required:
                  - statusCode
                  - message
components:
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: 'A Melius API key (`mel_...`), sent as `Authorization: Bearer <key>`.'
    teamId:
      type: apiKey
      in: header
      name: x-team-id
      description: The team (workspace) to act on. Defaults to the key's team when omitted.

````