{"openapi":"3.0.0","paths":{"/api/v1/controls/graphic/live/in":{"post":{"description":"Animates a graphic on the live output channel for broadcast","operationId":"ControlGraphicController_showLiveGraphic","parameters":[{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Control"}}}},"responses":{"200":{"description":"Graphic live animation started","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PlaylistGraphic"}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"}},"security":[{"bearer":[]}],"summary":"Animate graphic live","tags":["Controls"]}},"/api/v1/controls/graphic/live/out":{"post":{"description":"Hides the currently displayed graphic on the live output","operationId":"ControlGraphicController_hideLiveGraphic","parameters":[{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Control"}}}},"responses":{"200":{"description":"Graphic live hidden successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PlaylistGraphic"}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"}},"security":[{"bearer":[]}],"summary":"Hide graphic live","tags":["Controls"]}},"/api/v1/controls/graphic/live/update":{"post":{"description":"Updates the currently displayed graphic on the live output with new data or state","operationId":"ControlGraphicController_updateLiveGraphic","parameters":[{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ControlUpdate"}}}},"responses":{"200":{"description":"Graphic live updated successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"}},"security":[{"bearer":[]}],"summary":"Update graphic live","tags":["Controls"]}},"/api/v1/controls/rundown/{rundownId}/graphic/toggle":{"post":{"description":"Toggles the visibility of a graphic in the match control system for the specified rundown","operationId":"ControlGraphicController_toggleMatchControlGraphicInRundown","parameters":[{"name":"rundownId","required":true,"in":"path","description":"Rundown UUID","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportControlDTO"}}}},"responses":{"200":{"description":"Match control graphic toggled successfully"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"},"404":{"description":"Not Found - Resource does not exist"}},"security":[{"bearer":[]}],"summary":"Toggle graphic in match control of rundown","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/quickGraphic":{"get":{"description":"Retrieves the current status of all quick graphics configured for the specified output","operationId":"ControlGraphicController_getQuickGraphics","parameters":[{"name":"outputId","required":true,"in":"path","description":"Output UUID","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Quick graphics status retrieved successfully"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"},"404":{"description":"Not Found - Resource does not exist"}},"security":[{"bearer":[]}],"summary":"Get status of all quick graphics","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/quickGraphic/{quickGraphicIndex}":{"get":{"description":"Retrieves the current status of a specific quick graphic using output ID and graphic index","operationId":"ControlGraphicController_getQuickGraphic","parameters":[{"name":"outputId","required":true,"in":"path","description":"Output UUID","schema":{"type":"string"}},{"name":"quickGraphicIndex","required":true,"in":"path","description":"Quick graphic index number","schema":{"type":"number"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Quick graphic status retrieved successfully"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"},"404":{"description":"Not Found - Resource does not exist"}},"security":[{"bearer":[]}],"summary":"Get status of quick graphic by ID","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/quickGraphic/{quickGraphicIndex}/toggle":{"post":{"description":"Toggles the visibility of a specific quick graphic on or off","operationId":"ControlGraphicController_toggleQuickGraphic","parameters":[{"name":"outputId","required":true,"in":"path","description":"Output UUID","schema":{"type":"string"}},{"name":"quickGraphicIndex","required":true,"in":"path","description":"Quick graphic index number","schema":{"type":"number"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Quick graphic toggled successfully"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"},"404":{"description":"Not Found - Resource does not exist"}},"security":[{"bearer":[]}],"summary":"Toggle quick graphic by ID","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/quickGraphic/{quickGraphicIndex}/in":{"post":{"description":"Displays a specific quick graphic on the output","operationId":"ControlGraphicController_showQuickGraphic","parameters":[{"name":"outputId","required":true,"in":"path","description":"Output UUID","schema":{"type":"string"}},{"name":"quickGraphicIndex","required":true,"in":"path","description":"Quick graphic index number","schema":{"type":"number"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Quick graphic shown successfully"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"},"404":{"description":"Not Found - Resource does not exist"}},"security":[{"bearer":[]}],"summary":"Show quick graphic by ID","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/quickGraphic/{quickGraphicIndex}/out":{"post":{"description":"Hides a specific quick graphic from the output","operationId":"ControlGraphicController_hideQuickGraphic","parameters":[{"name":"outputId","required":true,"in":"path","description":"Output UUID","schema":{"type":"string"}},{"name":"quickGraphicIndex","required":true,"in":"path","description":"Quick graphic index number","schema":{"type":"number"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Quick graphic hidden successfully"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"},"404":{"description":"Not Found - Resource does not exist"}},"security":[{"bearer":[]}],"summary":"Hide quick graphic by ID","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/clock/{clockType}":{"get":{"description":"Retrieves the current clock state for a specific output and clock type, including whether it is running, start time, and clock direction.","operationId":"ControlMatchControlController_getClock","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"clockType","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Clock state retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClockDto"}}}},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Get clock by output","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/clock/{clockType}/start":{"post":{"description":"Starts a specific clock (match, shot, extra time) for an output. Records the user who initiated the action.","operationId":"ControlMatchControlController_startClockByOutput","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"clockType","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Clock started successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Start clock on output","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/clock/{clockType}/stop":{"post":{"description":"Stops a running clock for an output. Records the user who initiated the action.","operationId":"ControlMatchControlController_stopClockByOutput","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"clockType","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Clock stopped successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Stop clock on output","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/clock/{clockType}/{contestantIndex}/addClock/{time}":{"post":{"description":"Adds a specific amount of time to a contestant clock (e.g., timeout clock). Optionally specify the time to add, otherwise uses default.","operationId":"ControlMatchControlController_addClockByOutput","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"clockType","required":true,"in":"path","schema":{"type":"string"}},{"name":"contestantIndex","required":true,"in":"path","schema":{"type":"number"}},{"name":"time","required":true,"in":"path","schema":{"type":"number"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Clock time added successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Add clock time to contestant","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/clock/{clockType}/addSecond":{"post":{"description":"Increments the specified clock by one second for an output. Useful for manual clock adjustments.","operationId":"ControlMatchControlController_addSecondToClockByOutput","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"clockType","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One second added to clock successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Add one second to clock","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/clock/{clockType}/addFiveSeconds":{"post":{"description":"Increments the specified clock by five seconds for an output. Useful for quick manual clock adjustments.","operationId":"ControlMatchControlController_addFiveSecondsToClockByOutput","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"clockType","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Five seconds added to clock successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Add five seconds to clock","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/clock/{clockType}/removeSecond":{"post":{"description":"Decrements the specified clock by one second for an output. Useful for manual clock corrections.","operationId":"ControlMatchControlController_removeSecondFromClockByOutput","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"clockType","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One second removed from clock successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Remove one second from clock","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/clock/{clockType}/removeFiveSeconds":{"post":{"description":"Decrements the specified clock by five seconds for an output. Useful for quick manual clock corrections.","operationId":"ControlMatchControlController_removeFiveSecondsFromClockByOutput","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"clockType","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Five seconds removed from clock successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Remove five seconds from clock","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol":{"get":{"description":"Retrieves the complete match control data for an output, including scores, clocks, cards, and all match state.","operationId":"ControlMatchControlController_getScore","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Match control data retrieved successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Get match control data","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/score/{contestantIndex}/addGoal":{"post":{"description":"Increments the score for a specific contestant (team). Records the user who scored the goal.","operationId":"ControlMatchControlController_addGoal","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"contestantIndex","required":true,"in":"path","schema":{"type":"number"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Goal added successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Add goal to contestant","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/score/{contestantIndex}/removeGoal":{"post":{"description":"Decrements the score for a specific contestant (team). Records the user who removed the goal.","operationId":"ControlMatchControlController_removeGoal","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"contestantIndex","required":true,"in":"path","schema":{"type":"number"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Goal removed successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Remove goal from contestant","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/cards/{contestantIndex}/{cardType}/add":{"post":{"description":"Adds a card (yellow or red) to a specific contestant. Records the user who issued the card.","operationId":"ControlMatchControlController_addCard","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"contestantIndex","required":true,"in":"path","schema":{"type":"number"}},{"name":"cardType","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Card added successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Add card to contestant","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/cards/{contestantIndex}/{cardType}/remove":{"post":{"description":"Removes a card (yellow or red) from a specific contestant. Records the user who removed the card.","operationId":"ControlMatchControlController_removeCard","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"contestantIndex","required":true,"in":"path","schema":{"type":"number"}},{"name":"cardType","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Card removed successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Remove card from contestant","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/videoReferral/{contestantIndex}/add":{"post":{"description":"Adds a video referral (challenge/review) to a specific contestant. Records the user who added the referral.","operationId":"ControlMatchControlController_addVideoReferral","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"contestantIndex","required":true,"in":"path","schema":{"type":"number"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Video referral added successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Add video referral to contestant","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/videoReferral/{contestantIndex}/remove":{"post":{"description":"Removes a video referral (challenge/review) from a specific contestant. Records the user who removed the referral.","operationId":"ControlMatchControlController_removeVideoReferral","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"contestantIndex","required":true,"in":"path","schema":{"type":"number"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Video referral removed successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Remove video referral from contestant","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/graphic":{"get":{"description":"Retrieves all available match control graphics for an output, including their control IDs and current states.","operationId":"ControlMatchControlController_getMatchControlGraphics","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Match control graphics retrieved successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Get match control graphics","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/graphic/{controlId}/in":{"post":{"description":"Animates a match control graphic in (shows it) using its control ID. For example, use \"clock\" to show the clock graphic, or \"extraTime\" to show the extra time graphic.","operationId":"ControlMatchControlController_showMatchControlGraphic","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"controlId","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Graphic animated in successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Animate match control graphic in","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/graphic/{controlId}/out":{"post":{"description":"Animates a match control graphic out (hides it) using its control ID. For example, use \"clock\" to hide the clock graphic, or \"extraTime\" to hide the extra time graphic.","operationId":"ControlMatchControlController_hideMatchControlGraphic","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"controlId","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Graphic animated out successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Animate match control graphic out","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/config":{"patch":{"description":"Updates the configuration of match control for an output, including period settings, clock directions, and other match parameters.","operationId":"ControlMatchControlController_updateConfig","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateConfigDto"}}}},"responses":{"200":{"description":"Match control configuration updated successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Update match control configuration","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/config/period/add":{"post":{"description":"Adds a new period (quarter, half, etc.) to the match control configuration. Records the user who added the period.","operationId":"ControlMatchControlController_addPeriod","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Period added successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Add period to match control","tags":["Controls"]}},"/api/v1/controls/output/{outputId}/matchcontrol/config/period/remove":{"post":{"description":"Removes the last period from the match control configuration. Records the user who removed the period.","operationId":"ControlMatchControlController_removePeriod","parameters":[{"name":"outputId","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Period removed successfully"},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Remove period from match control","tags":["Controls"]}},"/api/v1/graphicpackages":{"get":{"description":"Retrieves a list of all graphic packages. Optionally includes deprecated packages with filter parameter.","operationId":"GraphicPackageController_getGraphicPackages","parameters":[{"name":"filter","required":true,"in":"query","schema":{"$ref":"#/components/schemas/GraphicPackageFilterDTO"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved all graphic packages","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/"}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Get all graphic packages","tags":["Graphic Packages"]}},"/api/v1/graphicpackages/{id}":{"get":{"description":"Retrieves detailed information about a specific graphic package by ID.","operationId":"GraphicPackageController_getGraphicPackage","parameters":[{"name":"id","required":true,"in":"path","description":"ID of the graphic package to retrieve","schema":{"example":"660e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved graphic package","content":{"application/json":{"schema":{"type":"object","example":{"id":1,"uuid":"660e8400-e29b-41d4-a716-446655440000","name":"Sports Package 2024","ref":"sports-2024","version":"2.0.0","description":"Complete sports graphics package","cdnUrl":"https://cdn.mxmz.io/graphicpackages/sports-2024/","deprecated":false,"createdAt":"2024-01-15T10:00:00Z","updatedAt":"2024-01-15T10:00:00Z"}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"404":{"description":"Not Found - Resource does not exist"}},"security":[{"bearer":[]}],"summary":"Get graphic package by ID","tags":["Graphic Packages"]}},"/api/v1/graphicpackages/ref/{id}":{"get":{"description":"Retrieves a graphic package by its reference identifier (ref) instead of ID.","operationId":"GraphicPackageController_getGraphicPackageByRef","parameters":[{"name":"id","required":true,"in":"path","description":"Reference identifier of the graphic package","schema":{"example":"sports-2024","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved graphic package","content":{"application/json":{"schema":{"type":"object","example":{"id":1,"uuid":"660e8400-e29b-41d4-a716-446655440000","name":"Sports Package 2024","ref":"sports-2024","version":"2.0.0","description":"Complete sports graphics package","cdnUrl":"https://cdn.mxmz.io/graphicpackages/sports-2024/","deprecated":false}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"404":{"description":"Not Found - Resource does not exist"}},"security":[{"bearer":[]}],"summary":"Get graphic package by reference","tags":["Graphic Packages"]}},"/api/v1/graphicpackages/{id}/graphics":{"get":{"description":"Retrieves all graphics that belong to a specific graphic package.","operationId":"GraphicPackageController_getGraphicsInPackage","parameters":[{"name":"id","required":true,"in":"path","description":"UUID of the graphic package","schema":{"example":"660e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved graphics in package","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"},"example":[{"id":1,"uuid":"550e8400-e29b-41d4-a716-446655440000","name":"Lower Third","ref":"lower-third","types":["lower-third"],"properties":{},"config":{},"labels":["Sport"]}]}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Get all graphics in a package","tags":["Graphic Packages"]}},"/api/v1/rundowns":{"get":{"description":"Retrieves a list of rundowns for the next 7 days, optionally filtered by date or persistent status. Returns only rundowns accessible to the authenticated user.","operationId":"RundownController_getRundowns","parameters":[{"name":"filter","required":false,"in":"query","description":"Optional filter criteria for date and persistent status","schema":{"$ref":"#/components/schemas/RundownFilterDTO"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved rundowns matching the filter criteria","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Rundown"}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"}},"security":[{"bearer":[]}],"summary":"Get all rundowns","tags":["Rundowns"]},"post":{"description":"Creates a new rundown with optional graphic package, match control, canvases, and outputs. Automatically creates a default playlist and hidden playlist for bundle/display hub graphics.","operationId":"RundownController_createRundown","parameters":[{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Rundown creation data including name, start date, persistence flag, and optional configurations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRundownDTO"},"examples":{"basic":{"summary":"Basic rundown without optional fields","value":{"name":"Match Day Rundown","start":"2025-11-24T14:00:00Z","isPersistent":false}},"withGraphicPackage":{"summary":"Rundown with graphic package","value":{"name":"Match Day Rundown","start":"2025-11-24T14:00:00Z","isPersistent":false,"graphicPackageId":"550e8400-e29b-41d4-a716-446655440000"}},"withCanvases":{"summary":"Rundown with canvases and outputs","value":{"name":"Match Day Rundown","start":"2025-11-24T14:00:00Z","isPersistent":false,"canvases":[{"id":"550e8400-e29b-41d4-a716-446655440000","name":"Canvas 1","graphics":[{"id":"550e8400-e29b-41d4-a716-446655440000"}],"output":{"id":"550e8400-e29b-41d4-a716-446655440000","name":"Output 1"},"canvasBackgroundId":null,"createdAt":"2025-11-24T14:00:00Z","updatedAt":"2025-11-24T14:00:00Z"}]}}}}}},"responses":{"201":{"description":"Rundown successfully created with associated playlists and configurations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rundown"}}}},"400":{"description":"Bad Request - Invalid input data or missing required fields"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"}},"security":[{"bearer":[]}],"summary":"Create a new rundown","tags":["Rundowns"]}},"/api/v1/rundowns/{id}/duplicate":{"post":{"description":"Deep-copies a rundown within the current workspace: playlists, playlist graphics, canvases, and match-control setup onto the same graphic package version. The copy is idle (no operator, not live, outputs configured but unclaimed, no external reference).","operationId":"RundownController_duplicateRundown","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the rundown to duplicate","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"description":"Optional overrides for the copy (name, start, isPersistent). Defaults to \"Copy of <name>\", the source persistence flag, and the derived start. If you duplicate a persistent rundown as non-persistent, start is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DuplicateRundownDTO"}}}},"responses":{"201":{"description":"Rundown successfully duplicated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rundown"}}}},"400":{"description":"Bad Request - Invalid input data"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"},"404":{"description":"Not Found - Resource does not exist"}},"security":[{"bearer":[]}],"summary":"Duplicate a rundown","tags":["Rundowns"]}},"/api/v1/rundowns/live":{"get":{"description":"Returns a list of all rundowns that are currently live (actively being used for broadcast/output). Includes rundown ID, name, persistence status, and the timestamp when it went live.","operationId":"RundownController_getLiveRundowns","parameters":[{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved all currently live rundowns","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LiveRundownDTO"}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"}},"security":[{"bearer":[]}],"summary":"Get all live rundowns","tags":["Rundowns"]}},"/api/v1/rundowns/{id}":{"get":{"description":"Retrieves detailed information about a specific rundown including its relations (playlists, canvases, graphics). Also includes information about the creator and current operator.","operationId":"RundownController_getRundown","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the rundown","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved the rundown with all relations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rundown"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"},"404":{"description":"Not Found - Resource does not exist"}},"security":[{"bearer":[]}],"summary":"Get rundown by ID","tags":["Rundowns"]},"patch":{"description":"Updates an existing rundown with new data. Can modify name, start date, persistence status, graphic package, match control, canvases, and outputs. Automatically notifies connected clients of changes.","operationId":"RundownController_updateRundown","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the rundown to update","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Partial rundown update data - only include fields that should be changed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRundownDTO"},"examples":{"nameOnly":{"summary":"Update name only","value":{"name":"Updated Rundown Name"}},"dateAndName":{"summary":"Update name and start date","value":{"name":"Updated Rundown","start":"2025-11-25T15:00:00Z"}},"makePersistent":{"summary":"Convert to persistent rundown","value":{"isPersistent":true}},"withGraphicPackage":{"summary":"Update with graphic package","value":{"name":"Updated Rundown","graphicPackageId":"550e8400-e29b-41d4-a716-446655440000"}}}}}},"responses":{"200":{"description":"Rundown successfully updated with new data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRundownResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"},"404":{"description":"Not Found - Rundown with the specified ID does not exist"},"409":{"description":"Conflict - Rundown is locked and cannot be modified"}},"security":[{"bearer":[]}],"summary":"Update rundown","tags":["Rundowns"]},"delete":{"description":"Permanently deletes a rundown and all associated data (playlists, graphics assignments, match control). Cannot delete locked or live rundowns for safety reasons.","operationId":"RundownController_deleteRundown","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the rundown to delete","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Rundown successfully deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteResult"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Cannot delete live rundown or insufficient permissions"},"404":{"description":"Not Found - Rundown with the specified ID does not exist"},"409":{"description":"Conflict - Rundown is locked and cannot be deleted"}},"security":[{"bearer":[]}],"summary":"Delete rundown","tags":["Rundowns"]}},"/api/v1/rundowns/{id}/playlists":{"get":{"description":"Retrieves all playlists associated with a specific rundown, optionally filtered by playlist type (standard, hidden, etc.).","operationId":"RundownController_getPlaylistsByRundown","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the rundown","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"filter","required":false,"in":"query","description":"Optional filter to retrieve specific playlist types","schema":{"$ref":"#/components/schemas/PlaylistFilterDTO"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved all playlists in the rundown","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Playlist"}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"},"404":{"description":"Not Found - Resource does not exist"}},"security":[{"bearer":[]}],"summary":"Get playlists in rundown","tags":["Rundowns"]}},"/api/v1/rundowns/{id}/playlistGraphics":{"get":{"description":"Retrieves all playlist graphics in the rundown, enriched with canvas information showing which canvases each graphic is assigned to. By default returns general and display hub types only, but can be filtered by any graphic type.","operationId":"RundownController_getPlaylistGraphicsByRundown","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the rundown","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"filter","required":false,"in":"query","description":"Optional filter to retrieve specific graphic types. If not provided, defaults to general and display hub types.","schema":{"$ref":"#/components/schemas/PlaylistGraphicFilterDTO"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved all playlist graphics in the rundown with canvas assignments","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PlaylistGraphic"}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"},"404":{"description":"Not Found - Resource does not exist"}},"security":[{"bearer":[]}],"summary":"Get playlist graphics in rundown","tags":["Rundowns"]}},"/api/v1/rundowns/{id}/matchControl":{"get":{"description":"Retrieves the match control configuration for a rundown. Match control manages live sports data such as scores, timers, periods, and team information. Returns null if no match control is configured.","operationId":"RundownController_getMatchControlByRundown","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the rundown","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved match control configuration, or null if not configured","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatchControl"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"},"404":{"description":"Not Found - Resource does not exist"}},"security":[{"bearer":[]}],"summary":"Get match control configuration of rundown","tags":["Rundowns"]}},"/api/v1/rundowns/{id}/matchControl/graphics":{"get":{"description":"Retrieves all graphics in the match control playlist for a specific rundown. These are graphics automatically controlled by match events and data.","operationId":"RundownController_getMatchControlGraphics","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the rundown","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved match control playlist graphics"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"},"404":{"description":"Not Found - Resource does not exist"}},"security":[{"bearer":[]}],"summary":"Get match control playlist graphics","tags":["Rundowns"]}},"/api/v1/rundowns/{id}/graphics":{"get":{"description":"Retrieves all general-type base graphics available in the rundown, optionally filtered to show only graphics assigned to canvases.","operationId":"RundownController_getBaseGraphicsInRundown","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the rundown","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"filter","required":false,"in":"query","description":"Optional filter to retrieve only graphics assigned to canvases","schema":{"$ref":"#/components/schemas/RundownBaseGraphicsFilterDTO"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved base graphics in the rundown","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Graphic"}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"},"404":{"description":"Not Found - Resource does not exist"}},"security":[{"bearer":[]}],"summary":"Get base graphics in rundown","tags":["Rundowns"]}},"/api/v1/rundowns/{id}/quickGraphics":{"get":{"description":"Retrieves all graphics marked as \"quick graphics\" in the rundown. Quick graphics are frequently used graphics that need rapid access during live production.","operationId":"RundownController_getQuickGraphicsInRundown","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the rundown","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved quick graphics in the rundown","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PlaylistGraphic"}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"},"404":{"description":"Not Found - Resource does not exist"}},"security":[{"bearer":[]}],"summary":"Get quick graphics in rundown","tags":["Rundowns"]}},"/api/v1/rundowns/{id}/activeGraphics/{type}":{"get":{"description":"Retrieves all currently active general-type graphics in the rundown for a specific output type (sandbox, preview, or live).","operationId":"RundownController_getActiveGraphicsByType","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the rundown","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"type","required":true,"in":"path","description":"The output type to filter active graphics","schema":{"enum":["live","preview","sandbox"],"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved active graphics for the specified output type","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PlaylistGraphic"}}}}},"400":{"description":"Bad Request - Invalid output type specified (must be sandbox, preview, or live)"},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"},"404":{"description":"Not Found - Rundown with the specified ID does not exist"}},"security":[{"bearer":[]}],"summary":"Get active graphics by output type","tags":["Rundowns"]}},"/api/v1/playlists/reorder":{"patch":{"description":"Updates the display order of playlists within their rundown. Changes the sequence in which playlists appear in the UI.","operationId":"PlaylistController_reorderPlaylists","parameters":[{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReorderPlaylistDTO"}}}},"responses":{"200":{"description":"Successfully reordered playlists","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Playlist"}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"}},"security":[{"bearer":[]}],"summary":"Reorder playlists within rundown","tags":["Playlists"]}},"/api/v1/playlists":{"post":{"description":"Creates a new playlist within a rundown with specified name, order, and optional autoplay configuration.","operationId":"PlaylistController_createPlaylist","parameters":[{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Playlist creation data including name, rundown, and autoplay settings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePlaylistDTO"},"examples":{"basic":{"summary":"Basic playlist","value":{"name":"Main Graphics","rundownId":"550e8400-e29b-41d4-a716-446655440000","order":0}},"withAutoplay":{"summary":"Playlist with autoplay enabled","value":{"name":"Auto Graphics","rundownId":"550e8400-e29b-41d4-a716-446655440000","order":1,"autoplay":{"isEnabled":true,"interval":5000}}}}}}},"responses":{"201":{"description":"Playlist successfully created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Playlist"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"}},"security":[{"bearer":[]}],"summary":"Create new playlist","tags":["Playlists"]}},"/api/v1/playlists/{id}":{"get":{"description":"Retrieves detailed information about a specific playlist including its graphics, display hubs, and autoplay configuration.","operationId":"PlaylistController_getPlaylist","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the playlist","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved the playlist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Playlist"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"404":{"description":"Not Found - Resource does not exist"}},"security":[{"bearer":[]}],"summary":"Get playlist by ID","tags":["Playlists"]},"patch":{"description":"Updates playlist properties such as name, order, or autoplay configuration. Notifies connected clients of changes.","operationId":"PlaylistController_updatePlaylist","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the playlist to update","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Partial playlist update data - only include fields to change","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePlaylistDTO"},"examples":{"nameOnly":{"summary":"Update name only","value":{"name":"Updated Playlist Name"}},"autoplay":{"summary":"Update autoplay settings","value":{"autoplay":{"isEnabled":true,"interval":3000}}}}}}},"responses":{"200":{"description":"Playlist successfully updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Playlist"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"}},"security":[{"bearer":[]}],"summary":"Update playlist","tags":["Playlists"]},"delete":{"description":"Permanently deletes a playlist and all its associated graphics and display hubs. Cannot delete playlist in locked rundown.","operationId":"PlaylistController_deletePlaylist","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Playlist successfully deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteResult"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Cannot delete playlist in locked rundown"}},"security":[{"bearer":[]}],"summary":"Delete playlist","tags":["Playlists"]}},"/api/v1/playlists/{id}/duplicate":{"post":{"description":"Creates a copy of an existing playlist including all its graphics and configurations. The duplicate is placed after the original.","operationId":"PlaylistController_duplicatePlaylist","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the playlist to duplicate","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Playlist successfully duplicated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Playlist"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"}},"security":[{"bearer":[]}],"summary":"Duplicate playlist","tags":["Playlists"]}},"/api/v1/playlists/{id}/graphics":{"get":{"description":"Retrieves all playlist graphics (with their data and configurations) for a specific playlist in display order.","operationId":"PlaylistController_getPlaylistGraphics","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the playlist","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved all graphics in the playlist","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PlaylistGraphic"}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"}},"security":[{"bearer":[]}],"summary":"Get graphics in playlist","tags":["Playlists"]},"post":{"description":"Adds a new graphic instance to the playlist with specified data, position, and output visibility settings.","operationId":"PlaylistController_createPlaylistGraphic","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the playlist","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Graphic creation data including graphic reference and output settings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePlaylistGraphicDTO"}}}},"responses":{"201":{"description":"Graphic successfully added to playlist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaylistGraphic"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"}},"security":[{"bearer":[]}],"summary":"Add graphic to playlist","tags":["Playlists"]}},"/api/v1/playlists/{id}/graphics/reorder":{"patch":{"description":"Updates the display order of graphics within the playlist. Changes the sequence for playout and display.","operationId":"PlaylistController_reorderPlaylistGraphics","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the playlist","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Array of graphic IDs in the desired new order","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReorderPlaylistGraphicDTO"}}}},"responses":{"200":{"description":"Graphics successfully reordered","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PlaylistGraphic"}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"}},"security":[{"bearer":[]}],"summary":"Reorder graphics in playlist","tags":["Playlists"]}},"/api/v1/playlists/{id}/graphics/{playlist_graphic_id}":{"get":{"description":"Retrieves detailed information about a specific graphic instance in the playlist including its data and current state.","operationId":"PlaylistController_getPlaylistGraphic","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the playlist","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"playlist_graphic_id","required":true,"in":"path","description":"The unique UUID identifier of the playlist graphic","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successfully retrieved the playlist graphic","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaylistGraphic"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"404":{"description":"Not Found - Resource does not exist"}},"security":[{"bearer":[]}],"summary":"Get playlist graphic details","tags":["Playlists"]},"patch":{"description":"Updates graphic data, output visibility, or other properties. Can update while graphic is live on air.","operationId":"PlaylistController_updatePlaylistGraphic","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the playlist","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"playlist_graphic_id","required":true,"in":"path","description":"The unique UUID identifier of the playlist graphic to update","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Partial graphic update data - only include fields to change","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePlaylistGraphicDTO"}}}},"responses":{"200":{"description":"Playlist graphic successfully updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaylistGraphic"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"}},"security":[{"bearer":[]}],"summary":"Update playlist graphic","tags":["Playlists"]},"delete":{"description":"Removes a graphic from the playlist. If the graphic is currently on air, it will be taken off before deletion.","operationId":"PlaylistController_deletePlaylistGraphic","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"playlist_graphic_id","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Playlist graphic successfully deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteResult"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"}},"security":[{"bearer":[]}],"summary":"Delete playlist graphic","tags":["Playlists"]}},"/api/v1/playlists/graphics/{playlist_graphic_id}/move":{"patch":{"description":"Moves a playlist graphic from one playlist to another. The graphic will be appended to the end of the target playlist. The current playlist is determined from the graphic itself.","operationId":"PlaylistController_movePlaylistGraphic","parameters":[{"name":"playlist_graphic_id","required":true,"in":"path","description":"The unique UUID identifier of the playlist graphic to move","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"playlistId":{"type":"string","format":"uuid","description":"The UUID of the target playlist","example":"550e8400-e29b-41d4-a716-446655440000"}},"required":["playlistId"]}}}},"responses":{"200":{"description":"Playlist graphic successfully moved to target playlist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaylistGraphic"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"}},"security":[{"bearer":[]}],"summary":"Move graphic to another playlist","tags":["Playlists"]}},"/api/v1/playlists/{id}/graphics/{playlist_graphic_id}/canvases":{"patch":{"description":"Overrides which canvases this specific playlist graphic instance outputs to.","operationId":"PlaylistController_setPlaylistGraphicCanvases","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the playlist","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"playlist_graphic_id","required":true,"in":"path","description":"The unique UUID identifier of the playlist graphic","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPlaylistGraphicCanvasesDTO"}}}},"responses":{"200":{"description":"Canvas override successfully updated","content":{"application/json":{"schema":{"type":"object","properties":{"canvasOverride":{"type":"array","nullable":true,"items":{"type":"string","format":"uuid"}}}}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"}},"security":[{"bearer":[]}],"summary":"Set canvas output override","tags":["Playlists"]}},"/api/v1/playlists/{id}/graphics/{playlist_graphic_id}/duplicate":{"post":{"description":"Creates a copy of an existing playlist graphic including all its data. The duplicate is placed after the original.","operationId":"PlaylistController_duplicatePlaylistGraphic","parameters":[{"name":"id","required":true,"in":"path","description":"The unique UUID identifier of the playlist","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"playlist_graphic_id","required":true,"in":"path","description":"The unique UUID identifier of the playlist graphic to duplicate","schema":{"example":"550e8400-e29b-41d4-a716-446655440000","type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Playlist graphic successfully duplicated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaylistGraphic"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token"},"403":{"description":"Forbidden - Insufficient permissions"}},"security":[{"bearer":[]}],"summary":"Duplicate playlist graphic","tags":["Playlists"]}},"/api/v1/audit/logs":{"get":{"description":"Returns audit entries filtered by entity, action, or user information.","operationId":"AuditController_getAuditLogs","parameters":[{"name":"page","required":false,"in":"query","description":"Page number (1-indexed).","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","required":false,"in":"query","description":"Max number of entries to return per page.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"filter","required":false,"in":"query","style":"deepObject","explode":true,"schema":{"$ref":"#/components/schemas/AuditLogFilterDto"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List audit logs","tags":["Audit"]}},"/api/v1/mos/rundown/{mosId}":{"get":{"operationId":"MosIntegratorController_rundown","parameters":[{"name":"mosId","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["MosIntegrator"]}},"/api/v1/mos/rundown":{"post":{"operationId":"MosIntegratorController_createPlaylist","parameters":[{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["MosIntegrator"]},"patch":{"operationId":"MosIntegratorController_updatePlaylist","parameters":[{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["MosIntegrator"]}},"/api/v1/mos/rundown/{mosId}/{roId}":{"delete":{"operationId":"MosIntegratorController_deletePlaylist","parameters":[{"name":"mosId","required":true,"in":"path","schema":{"type":"string"}},{"name":"roId","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["MosIntegrator"]}},"/api/v1/mos/rundown/sync":{"post":{"operationId":"MosIntegratorController_syncPlaylist","parameters":[{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["MosIntegrator"]}},"/api/v1/mos/status":{"get":{"operationId":"MosIntegratorController_status","parameters":[{"name":"mosId","required":true,"in":"query","schema":{"type":"string"}},{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["MosIntegrator"]}},"/api/v1/mos/auto-fetch":{"patch":{"operationId":"MosIntegratorController_autoFetch","parameters":[{"name":"x-mxmz-client-id","in":"header","description":"Client identifier for MXMZ API access","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["MosIntegrator"]}}},"info":{"title":"MXMZ Graphics API","description":"REST API for the MXMZ Graphics applications. Provides endpoints for graphics management, packages, playlists, and more.","version":"1.0.0","contact":{"name":"MXMZ Media B.V.","url":"https://mxmz.io","email":"support@mxmzmedia.com"}},"tags":[],"servers":[{"url":"https://graphics-api.use2.mxmz.io"}],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"Control":{"type":"object","properties":{"playlistGraphicId":{"type":"string"}},"required":["playlistGraphicId"]},"AutoplayPlaylistDTO":{"type":"object","properties":{"isEnabled":{"type":"boolean"},"isRunning":{"type":"boolean"},"activeGraphicId":{"type":"object"},"interval":{"type":"number"}},"required":["isEnabled","isRunning","activeGraphicId","interval"]},"Rundown":{"type":"object","properties":{"id":{"type":"string","readOnly":true},"name":{"type":"string"},"externalReference":{"type":"object"},"start":{"format":"date-time","type":"string"},"editorId":{"type":"object"},"createdBy":{"type":"object"},"operatorId":{"type":"object"},"usedBy":{"type":"object"},"isPersistent":{"type":"boolean"},"liveSince":{"type":"object","readOnly":true},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true},"outputInstances":{"type":"object"},"sandboxInstances":{"type":"object"},"resourceRevisions":{"type":"object"}},"required":["id","name","start","editorId","createdBy","operatorId","usedBy","isPersistent","liveSince","createdAt","updatedAt"]},"Playlist":{"type":"object","properties":{"id":{"type":"string","readOnly":true},"name":{"type":"string"},"externalReference":{"type":"object"},"autoplay":{"$ref":"#/components/schemas/AutoplayPlaylistDTO"},"rundown":{"$ref":"#/components/schemas/Rundown"},"order":{"type":"number"},"graphicCount":{"type":"number"},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["id","name","autoplay","rundown","order","createdAt","updatedAt"]},"GraphicPackage":{"type":"object","properties":{"id":{"type":"string","readOnly":true},"ref":{"type":"string"},"name":{"type":"string"},"version":{"type":"string"},"deprecated":{"type":"boolean"},"description":{"type":"string"},"cdnUrl":{"type":"string"},"controls":{"type":"array","items":{"type":"string"}},"config":{"type":"object"},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["id","ref","name","version","deprecated","description","cdnUrl","controls","config","createdAt","updatedAt"]},"ImportDataFieldBase":{"type":"object","properties":{}},"ImportGraphicProps":{"type":"object","properties":{}},"Graphic":{"type":"object","properties":{"id":{"type":"string","readOnly":true},"ref":{"type":"string"},"graphicPackage":{"$ref":"#/components/schemas/GraphicPackage"},"parentId":{"type":"object"},"types":{"type":"array","items":{"type":"string"}},"name":{"type":"string"},"description":{"type":"string"},"thumbnail":{"type":"object"},"properties":{"$ref":"#/components/schemas/ImportDataFieldBase"},"config":{"$ref":"#/components/schemas/ImportGraphicProps"},"labels":{"type":"array","items":{"type":"string"}},"states":{"type":"object","nullable":true},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["id","ref","graphicPackage","parentId","types","name","description","thumbnail","properties","config","labels","states","createdAt","updatedAt"]},"PlaylistGraphicGroup":{"type":"object","properties":{"id":{"type":"string","readOnly":true},"name":{"type":"string"},"order":{"type":"number"},"externalReference":{"type":"object"},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["id","name","order","createdAt","updatedAt"]},"PlaylistGraphic":{"type":"object","properties":{"id":{"type":"string","readOnly":true},"name":{"type":"string"},"playlist":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/Playlist"}]},"graphic":{"$ref":"#/components/schemas/Graphic"},"status":{"type":"object"},"state":{"type":"object"},"isQuick":{"type":"boolean"},"isConcept":{"type":"boolean"},"propertiesValues":{"type":"object"},"order":{"type":"number"},"color":{"type":"object","nullable":true,"example":"oklch(0.75 0.1 240)"},"group":{"$ref":"#/components/schemas/PlaylistGraphicGroup"},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["id","name","playlist","graphic","status","state","isQuick","isConcept","propertiesValues","order","createdAt","updatedAt"]},"ControlUpdate":{"type":"object","properties":{"playlistGraphicId":{"type":"string"},"action":{"type":"string"}},"required":["playlistGraphicId","action"]},"ImportControlDTO":{"type":"object","properties":{}},"ClockDto":{"type":"object","properties":{}},"UpdateConfigDto":{"type":"object","properties":{"period":{"type":"object"},"hasShootOut":{"type":"boolean"}},"required":["period","hasShootOut"]},"GraphicPackageFilterDTO":{"type":"object","properties":{"deprecated":{"type":"boolean"}}},"RundownFilterDTO":{"type":"object","properties":{"date":{"format":"date-time","type":"string"},"persistent":{"type":"boolean"}}},"CreateRundownDTO":{"type":"object","properties":{"name":{"type":"string"},"start":{"format":"date-time","type":"string"},"isPersistent":{"type":"boolean"},"outputInstances":{"type":"object"},"sandboxInstances":{"type":"object"},"externalReference":{"type":"string"}},"required":["name","start","isPersistent","externalReference"]},"DuplicateRundownDTO":{"type":"object","properties":{"name":{"type":"string"},"start":{"type":"string"},"isPersistent":{"type":"boolean"}}},"LiveRundownDTO":{"type":"object","properties":{}},"UpdateRundownDTO":{"type":"object","properties":{"name":{"type":"string"},"start":{"format":"date-time","type":"string"},"isPersistent":{"type":"boolean"},"outputInstances":{"type":"object"},"sandboxInstances":{"type":"object"},"externalReference":{"type":"string"}}},"UpdateRundownResponse":{"type":"object","properties":{"id":{"type":"string","readOnly":true},"name":{"type":"string"},"externalReference":{"type":"object"},"start":{"format":"date-time","type":"string"},"editorId":{"type":"object"},"createdBy":{"type":"object"},"operatorId":{"type":"object"},"usedBy":{"type":"object"},"isPersistent":{"type":"boolean"},"liveSince":{"type":"object","readOnly":true},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true},"outputInstances":{"type":"object"},"sandboxInstances":{"type":"object"},"resourceRevisions":{"type":"object"},"unresolved":{"description":"Selections the pinned revisions cannot supply; the player airs field defaults for these. `outputId` is null for the sandbox.","type":"array","items":{"type":"object"}}},"required":["id","name","start","editorId","createdBy","operatorId","usedBy","isPersistent","liveSince","createdAt","updatedAt","unresolved"]},"DeleteResult":{"type":"object","properties":{}},"PlaylistFilterDTO":{"type":"object","properties":{"type":{"type":"string"}}},"PlaylistGraphicFilterDTO":{"type":"object","properties":{"type":{"type":"string","enum":["general","matchControl","bundle","displayHub"]}}},"MatchControl":{"type":"object","properties":{"id":{"type":"string","readOnly":true},"createdAt":{"format":"date-time","type":"string","readOnly":true},"updatedAt":{"format":"date-time","type":"string","readOnly":true}},"required":["id","createdAt","updatedAt"]},"RundownBaseGraphicsFilterDTO":{"type":"object","properties":{"canvas":{"type":"boolean"},"types":{"type":"array","items":{"type":"string"}}}},"ReorderPlaylistDTO":{"type":"object","properties":{"rundownId":{"type":"string"},"playlists":{"type":"array","items":{"type":"string"}}},"required":["rundownId","playlists"]},"CreatePlaylistDTO":{"type":"object","properties":{"name":{"type":"string"},"rundownId":{"type":"string"}},"required":["name","rundownId"]},"UpdatePlaylistDTO":{"type":"object","properties":{"name":{"type":"string"},"rundownId":{"type":"string"},"autoplay":{"$ref":"#/components/schemas/AutoplayPlaylistDTO"}}},"CreatePlaylistGraphicDTO":{"type":"object","properties":{"graphicId":{"type":"string"},"name":{"type":"string"},"propertiesValues":{"type":"object"}},"required":["graphicId"]},"ReorderPlaylistGraphicDTO":{"type":"object","properties":{"graphics":{"type":"array","items":{"type":"string"}}},"required":["graphics"]},"UpdatePlaylistGraphicDTO":{"type":"object","properties":{"name":{"type":"string"},"propertiesValues":{"type":"object"},"isQuick":{"type":"boolean"},"updateLive":{"type":"boolean"},"updatePreview":{"type":"boolean"},"color":{"type":"object","nullable":true,"example":"oklch(0.75 0.1 240)"}}},"SetPlaylistGraphicCanvasesDTO":{"type":"object","properties":{"canvasIds":{"type":"array","items":{"type":"string"}}},"required":["canvasIds"]},"AuditLogFilterDto":{"type":"object","properties":{"entityName":{"type":"string"},"entityId":{"type":"string"},"action":{"type":"string","enum":["create","update","delete"]},"userId":{"type":"string"},"userName":{"type":"string"},"userEmail":{"type":"string"}}},"PaginationQueryDto":{"type":"object","properties":{"page":{"type":"number","description":"Page number (1-indexed).","minimum":1,"default":1},"limit":{"type":"number","description":"Max number of entries to return per page.","minimum":1,"maximum":100,"default":25}}}}}}