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

# Actualizar automatización

> Actualiza una automatización.

Los grupos presentes se fusionan por miembro de forma predeterminada (RFC 7396): los miembros omitidos
conservan su valor almacenado y los valores nulos explícitos los eliminan. La pertenencia a listas
se reemplaza por completo, y cada elemento enviado se fusiona con el elemento almacenado
del mismo tipo cuando ese tipo aparece exactamente una vez en ambos lados.

<div id="permissions">
  ## Permisos
</div>

Requiere un usuario de servicio con el permiso `ManageOrgAutomations` a nivel de organización.

<div id="merge-semantics">
  ## Semántica de fusión
</div>

Con la semántica predeterminada `merge_patch`, los campos PATCH se fusionan por miembro (al estilo de RFC 7396): los miembros omitidos conservan su valor almacenado, los valores nulos explícitos se borran y los grupos vacíos son operaciones sin efectos. Los metadatos se fusionan por clave y los valores nulos eliminan claves. Las listas se reemplazan por completo, mientras que cada elemento enviado se fusiona con el elemento almacenado del mismo tipo cuando ese tipo aparece exactamente una vez en ambos lados.

Con la semántica `replace_groups`, no se fusiona nada: un grupo de objetos enviado reemplaza por completo al grupo almacenado, y una lista enviada de `triggers` o `actions` reemplaza por completo la lista almacenada, sin fusiones por elemento. Reenvía todos los miembros que quieras conservar; los miembros omitidos se borran o se restablecen a su valor predeterminado. `metadata` también se reemplaza por completo, por lo que eliminar una clave implica reenviar el conjunto sin ella; los valores nulos en los metadatos se rechazan con un 400 en lugar de eliminar claves. Los campos de nivel superior omitidos no cambian.

Antes de basarte en cualquiera de los dos comportamientos, consulta el campo `update_semantics` del [endpoint de esquemas de eventos](/es/api-reference/v3/automations/get-organizations-automations-schemas) para conocer la semántica activa en tu organización. Trátalo como una enumeración abierta y admite valores distintos de los dos anteriores.

<div id="webhook-triggers">
  ## Activadores de webhook
</div>

Al volver a agregar un activador `webhook:incoming`, se genera un secreto nuevo y se devuelve en la respuesta de actualización. Esta es la única vez que se muestra el secreto, así que guárdalo cuando lo recibas. Reemplazar o conservar un activador de webhook existente mantiene el secreto actual.


## OpenAPI

````yaml es/v3-openapi.yaml PATCH /v3/organizations/{org_id}/automations/{automation_id}
openapi: 3.1.0
info:
  description: API de Devin v3 con autenticación mediante usuario de servicio y RBAC
  title: Devin API v3
  version: 3.0.0
servers: []
security:
  - bearerAuth: []
paths:
  /v3/organizations/{org_id}/automations/{automation_id}:
    patch:
      tags:
        - automations
      summary: Actualizar automatización
      description: >-
        Actualiza una automatización.


        Los grupos presentes se fusionan por miembro de forma predeterminada
        (RFC 7396): los miembros omitidos

        conservan su valor almacenado y los valores nulos explícitos los
        eliminan. La pertenencia a listas

        se reemplaza por completo, y cada elemento enviado se fusiona con el
        elemento almacenado

        del mismo tipo cuando ese tipo aparece exactamente una vez en ambos
        lados.
      operationId: >-
        handle_update_automation_v3_organizations__org_id__automations__automation_id__patch
      parameters:
        - in: path
          name: automation_id
          required: true
          schema:
            title: Automation Id
            type: string
        - description: 'ID de organización (prefijo: org-)'
          in: path
          name: org_id
          required: true
          schema:
            example: org-abc123def456
            title: Org Id
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AutomationUpdateRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AutomationResponse'
          description: Respuesta correcta
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'
          description: No autorizado
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'
          description: Prohibido
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'
          description: No encontrado
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'
          description: Conflicto
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'
          description: Contenido no procesable
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'
          description: Demasiadas solicitudes
components:
  schemas:
    AutomationUpdateRequest:
      additionalProperties: false
      description: >-
        Los campos PATCH se fusionan por miembro de forma predeterminada: se
        conservan los miembros omitidos,

        los valores null explícitos se borran y los grupos vacíos no producen
        ningún efecto. Los metadatos se fusionan por clave,

        y los valores null eliminan claves. Las listas se reemplazan por
        completo (eliminación = reenviar

        la lista sin el elemento), mientras que cada elemento enviado se fusiona
        con el

        elemento almacenado del mismo tipo cuando ese tipo aparece exactamente
        una vez en ambos

        lados. Los miembros de elementos obligatorios al crear (``prompt``,

        ``setup_prompt``, las configuraciones de Slack de monitor/triaje,
        ``scan_id``) pueden

        omitirse cuando existe una contraparte; se conservan como cualquier otro
        miembro;

        se rechaza null explícito.
      properties:
        actions:
          anyOf:
            - items:
                discriminator:
                  mapping:
                    message_session:
                      $ref: >-
                        #/components/schemas/AutomationMessageSessionActionUpdate
                    monitor_session:
                      $ref: >-
                        #/components/schemas/AutomationMonitorSessionActionUpdate
                    start_session:
                      $ref: '#/components/schemas/AutomationStartSessionActionUpdate'
                  propertyName: type
                oneOf:
                  - $ref: '#/components/schemas/AutomationStartSessionActionUpdate'
                  - $ref: '#/components/schemas/AutomationMessageSessionActionUpdate'
                  - $ref: '#/components/schemas/AutomationMonitorSessionActionUpdate'
              type: array
            - type: 'null'
          title: Actions
        concurrency:
          anyOf:
            - $ref: '#/components/schemas/AutomationConcurrency'
            - type: 'null'
        enabled:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Enabled
        limits:
          anyOf:
            - $ref: '#/components/schemas/AutomationLimits'
            - type: 'null'
        metadata:
          anyOf:
            - additionalProperties:
                anyOf:
                  - type: string
                  - type: 'null'
              type: object
            - type: 'null'
          title: Metadata
        name:
          anyOf:
            - maxLength: 500
              minLength: 1
              type: string
            - type: 'null'
          title: Name
        notifications:
          anyOf:
            - $ref: '#/components/schemas/AutomationNotifications'
            - type: 'null'
        run_as:
          anyOf:
            - description: >-
                Identidad con la que se ejecutan las sesiones creadas.
                organization: la identidad de automatización de la organización
                (el Usuario del sistema en la aplicación); las sesiones usan
                permisos del sistema, por lo que no se pueden seleccionar
                servidores MCP instalados con una conexión personal (con ámbito
                de usuario), y cambiar una automatización a organization los
                elimina de su selección. creator: automatización personal; se
                ejecuta con los permisos del creador y solo es visible para el
                creador y los admins de la organización; se rechaza para
                automatizaciones creadas por usuarios de servicio. Obligatorio
                al crear; null en una actualización restablece organization.
              discriminator:
                mapping:
                  creator:
                    $ref: '#/components/schemas/AutomationRunAsCreator'
                  organization:
                    $ref: '#/components/schemas/AutomationRunAsOrganization'
                propertyName: type
              oneOf:
                - $ref: '#/components/schemas/AutomationRunAsOrganization'
                - $ref: '#/components/schemas/AutomationRunAsCreator'
            - type: 'null'
          description: null restablece organization.
          title: Run As
        security_profile:
          anyOf:
            - $ref: '#/components/schemas/AutomationSecurityProfileSelection'
            - type: 'null'
          description: >-
            La asociación de perfil de seguridad de la propia automatización: un
            profile_id fija ese perfil, {"profile_id": null} registra una
            exclusión explícita y null explícito revierte a la herencia de la
            organización o Enterprise. Requiere el permiso de gestión de
            perfiles de seguridad.
        session_settings:
          anyOf:
            - $ref: '#/components/schemas/AutomationSessionSettings-Input'
            - type: 'null'
        tools:
          anyOf:
            - $ref: '#/components/schemas/AutomationTools'
            - type: 'null'
        triggers:
          anyOf:
            - items:
                $ref: '#/components/schemas/AutomationTriggerRequest-Input'
              type: array
            - type: 'null'
          title: Triggers
      title: AutomationUpdateRequest
      type: object
    AutomationResponse:
      additionalProperties: false
      properties:
        actions:
          items:
            discriminator:
              mapping:
                message_session:
                  $ref: '#/components/schemas/AutomationMessageSessionAction'
                monitor_session:
                  $ref: '#/components/schemas/AutomationMonitorSessionAction'
                start_session:
                  $ref: '#/components/schemas/AutomationStartSessionAction-Output'
              propertyName: type
            oneOf:
              - $ref: '#/components/schemas/AutomationStartSessionAction-Output'
              - $ref: '#/components/schemas/AutomationMessageSessionAction'
              - $ref: '#/components/schemas/AutomationMonitorSessionAction'
          title: Actions
          type: array
        automation_id:
          title: Automation Id
          type: string
        concurrency:
          anyOf:
            - $ref: '#/components/schemas/AutomationConcurrency'
            - type: 'null'
        created_at:
          title: Created At
          type: integer
        created_by:
          $ref: '#/components/schemas/ActorResponse'
        enabled:
          title: Enabled
          type: boolean
        last_edited_by:
          anyOf:
            - $ref: '#/components/schemas/ActorResponse'
            - type: 'null'
        last_invocation:
          anyOf:
            - $ref: '#/components/schemas/AutomationLastInvocation'
            - type: 'null'
        limits:
          anyOf:
            - $ref: '#/components/schemas/AutomationLimits'
            - type: 'null'
        metadata:
          additionalProperties:
            type: string
          default: {}
          title: Metadata
          type: object
        name:
          title: Name
          type: string
        notifications:
          anyOf:
            - $ref: '#/components/schemas/AutomationNotifications'
            - type: 'null'
        run_as:
          description: >-
            Identidad bajo la que se ejecutan las sesiones creadas.
            organization: la identidad de automatización de la organización (el
            Usuario del sistema en la app) — las sesiones usan permisos del
            sistema, por lo que no se pueden seleccionar servidores MCP
            instalados con una conexión personal (de ámbito de usuario), y
            cambiar una automatización a organization los elimina de la
            selección. creator: automatización personal — se ejecuta con los
            permisos del creador y solo pueden verla el creador y los Admin de
            org; se rechaza para automatizaciones creadas por usuarios de
            servicio. Obligatorio al crear; null al actualizar restablece
            organization.
          discriminator:
            mapping:
              creator:
                $ref: '#/components/schemas/AutomationRunAsCreator'
              organization:
                $ref: '#/components/schemas/AutomationRunAsOrganization'
            propertyName: type
          oneOf:
            - $ref: '#/components/schemas/AutomationRunAsOrganization'
            - $ref: '#/components/schemas/AutomationRunAsCreator'
          title: Run As
        security_profile:
          anyOf:
            - $ref: '#/components/schemas/AutomationSecurityProfileResponse'
            - type: 'null'
          description: >-
            La asociación de la automatización con un perfil de seguridad y los
            perfiles rectores resultantes. null cuando los perfiles de seguridad
            no están habilitados para la organización.
        session_settings:
          anyOf:
            - $ref: '#/components/schemas/AutomationSessionSettings-Output'
            - type: 'null'
        template_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Template Id
        tools:
          anyOf:
            - $ref: '#/components/schemas/AutomationTools'
            - type: 'null'
        triggers:
          items:
            $ref: '#/components/schemas/AutomationTriggerResponse'
          title: Triggers
          type: array
        updated_at:
          title: Updated At
          type: integer
      required:
        - automation_id
        - name
        - enabled
        - triggers
        - actions
        - created_by
        - created_at
        - updated_at
      title: AutomationResponse
      type: object
    ProblemDetail:
      description: >-
        Cuerpo de error RFC 9457 application/problem+json para la API v3.


        detail se conserva del cuerpo heredado {"detail": ...} por
        compatibilidad con versiones anteriores; los

        otros miembros son adicionales. errors contiene errores de validación

        a nivel de campo (solo 422).
      properties:
        detail:
          anyOf:
            - type: string
            - type: 'null'
          description: Explicación legible para humanos específica de esta ocurrencia.
          title: Detail
        errors:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          description: Errores de validación por campo (solo en respuestas 422).
          title: Errors
        instance:
          anyOf:
            - type: string
            - type: 'null'
          description: Una referencia URI (la ruta de la solicitud) para esta ocurrencia.
          title: Instance
        status:
          description: El código de estado HTTP.
          title: Status
          type: integer
        title:
          description: Un breve resumen del tipo de problema, legible para humanos.
          title: Title
          type: string
        type:
          default: about:blank
          description: Una referencia URI que identifica el tipo de problema.
          title: Type
          type: string
      required:
        - title
        - status
      title: ProblemDetail
      type: object
    AutomationMessageSessionActionUpdate:
      additionalProperties: false
      properties:
        auto_create:
          default: false
          description: >-
            Cuando es true, el primer activador crea una nueva sesión de larga
            duración propiedad de la automatización, y los activadores
            posteriores le envían mensajes.
          title: Auto Create
          type: boolean
        prompt:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            La carga útil del evento desencadenante se agrega automáticamente.
            Obligatorio al crear o agregar esta acción; en una actualización con
            semántica de fusión, omítala para conservar el valor almacenado
            (null no es válido).
          title: Prompt
        target_devin_id:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Debe pertenecer a la organización; editar una automatización que
            contiene esta acción requiere acceso de escritura a la sesión de
            destino (excepto las ediciones que solo la activan o desactivan). Es
            obligatorio, salvo que auto_create sea true; en ese caso, se
            establece en el servidor cuando el primer activador crea la sesión;
            se ignoran los valores proporcionados por el cliente.
          title: Target Devin Id
        type:
          const: message_session
          default: message_session
          title: Type
          type: string
      title: AutomationMessageSessionActionUpdate
      type: object
    AutomationMonitorSessionActionUpdate:
      additionalProperties: false
      properties:
        setup_prompt:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Se inyecta en el prompt del sistema de la sesión. Tiene la misma
            gramática de tokens de referencia que prompt. Obligatorio al crear o
            agregar esta acción; en una actualización con semántica de fusión,
            omítalo para conservar el valor almacenado (null no es válido).
          title: Setup Prompt
        slack_monitor_config:
          anyOf:
            - $ref: '#/components/schemas/AutomationSlackMonitorConfig'
            - type: 'null'
          description: >-
            Requiere exactamente un activador slack:message en el mismo canal.
            Obligatorio al crear o agregar esta acción; en una actualización con
            semántica de fusión, omítalo para conservar el valor almacenado
            (null no es válido).
        type:
          const: monitor_session
          default: monitor_session
          title: Type
          type: string
      title: AutomationMonitorSessionActionUpdate
      type: object
    AutomationStartSessionActionUpdate:
      additionalProperties: false
      properties:
        prompt:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            La única fuente de verdad: texto sin formato con tokens de
            referencia en línea (@{owner}/{repo}, @{path}, @playbook:{id},
            @skills:{name}, !{macro}, ${SECRET_NAME}). Los tokens con prefijo de
            tipo se validan al guardar; los ID desconocidos devuelven un error
            400. La carga útil del evento activador se agrega automáticamente.
            Obligatorio al crear o agregar esta acción; en una actualización con
            semántica de fusión, omítalo para conservar el valor almacenado
            (null no es válido).
          title: Prompt
        session:
          $ref: '#/components/schemas/AutomationSessionConfig-Input'
          description: Configuración de la sesión creada.
        type:
          const: start_session
          default: start_session
          title: Type
          type: string
      title: AutomationStartSessionActionUpdate
      type: object
    AutomationConcurrency:
      additionalProperties: false
      properties:
        max_concurrent_runs:
          anyOf:
            - minimum: 1
              type: integer
            - type: 'null'
          description: >-
            Máximo de ejecuciones en curso para esta automatización; los eventos
            activados posteriores esperan en su cola. Una ejecución deja de
            contar para el límite cuando finaliza su sesión y queda a la espera
            de más instrucciones, no solo cuando la sesión se detiene. null =
            ilimitado.
          title: Max Concurrent Runs
        max_queue_depth:
          anyOf:
            - minimum: 0
              type: integer
            - type: 'null'
          description: >-
            Máximo de eventos activados que esperan ejecutarse en la cola de la
            automatización; los eventos que excedan este valor se descartan.
            Requiere que se configure max_concurrent_runs. null = ilimitado.
          title: Max Queue Depth
      title: AutomationConcurrency
      type: object
    AutomationLimits:
      additionalProperties: false
      properties:
        invocations:
          anyOf:
            - $ref: '#/components/schemas/AutomationInvocationLimits'
            - type: 'null'
          description: Limita la frecuencia de activación de la automatización.
        max_acu_limit:
          anyOf:
            - maximum: 1000
              minimum: 1
              type: integer
            - type: 'null'
          description: Por sesión creada (mismo nombre que en la API de sesiones).
          title: Max Acu Limit
      title: AutomationLimits
      type: object
    AutomationNotifications:
      additionalProperties: false
      properties:
        email:
          anyOf:
            - $ref: '#/components/schemas/AutomationEmailNotification'
            - type: 'null'
        slack:
          anyOf:
            - $ref: '#/components/schemas/AutomationSlackNotification'
            - type: 'null'
      title: AutomationNotifications
      type: object
    AutomationRunAsCreator:
      additionalProperties: false
      properties:
        type:
          const: creator
          default: creator
          title: Type
          type: string
      title: AutomationRunAsCreator
      type: object
    AutomationRunAsOrganization:
      additionalProperties: false
      properties:
        type:
          const: organization
          default: organization
          title: Type
          type: string
      title: AutomationRunAsOrganization
      type: object
    AutomationSecurityProfileSelection:
      additionalProperties: false
      description: La propia asociación de perfil de seguridad de la automatización.
      properties:
        profile_id:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Perfil de seguridad que se vinculará a esta automatización. null
            registra una exclusión explícita (sin perfil, incluso cuando la
            organización o empresa cuenta con un perfil predeterminado
            recomendado). Escribir este campo requiere el permiso de gestión de
            perfiles de seguridad; una exclusión no puede eludir un perfil
            obligatorio de organización o empresa.
          title: Profile Id
      title: AutomationSecurityProfileSelection
      type: object
    AutomationSessionSettings-Input:
      additionalProperties: false
      description: |-
        Se aplica a cada sesión que crea esta automatización (incluidas las
        sesiones de monitorización).
      properties:
        devin_mode:
          anyOf:
            - enum:
                - normal
                - fast
                - lite
                - ultra
                - fusion
              type: string
            - type: 'null'
          description: null = valor predeterminado de la organización.
          title: Devin Mode
        net_policy:
          anyOf:
            - $ref: '#/components/schemas/AutomationNetPolicy'
            - type: 'null'
      title: AutomationSessionSettings
      type: object
    AutomationTools:
      additionalProperties: false
      properties:
        linear_enabled:
          anyOf:
            - type: boolean
            - type: 'null'
          description: Concede acceso a las herramientas de Linear.
          title: Linear Enabled
        mcp_servers:
          default: []
          description: >-
            Slugs de Marketplace (el campo slug del recurso mcp-servers, p. ej.,
            'github', 'notion') habilitados para sesiones creadas. Los
            servidores instalados con una conexión personal (con ámbito de
            usuario) requieren run_as creator; su selección con run_as
            organization se rechaza, ya que la identidad de servicio de
            Automatizaciones no dispone de un token personal para ellos, y
            cambiar el run_as de una automatización a organization los elimina
            de la selección almacenada.
          items:
            type: string
          title: Mcp Servers
          type: array
        slack_channels:
          default: []
          description: >-
            Canales en los que las herramientas de Slack de la sesión pueden
            publicar.
          items:
            $ref: '#/components/schemas/AutomationSlackChannel'
          title: Slack Channels
          type: array
        slack_dm_scope:
          anyOf:
            - enum:
                - org_members
                - workspace
              type: string
            - type: 'null'
          description: >-
            Permite que las sesiones creadas abran mensajes directos (MD) 1:1 de
            Slack en los espacios de trabajo conectados de la organización.
            'org_members' (solo para cuentas Enterprise) restringe los
            destinatarios de los MD a miembros de la organización; 'workspace'
            (solo para cuentas no Enterprise) permite cualquier miembro elegible
            del espacio de trabajo. Omita este valor o use null para
            deshabilitar los MD.
          title: Slack Dm Scope
      title: AutomationTools
      type: object
    AutomationTriggerRequest-Input:
      additionalProperties: false
      properties:
        conditions:
          anyOf:
            - $ref: '#/components/schemas/AutomationConditions-Input'
            - type: 'null'
          description: null coincide con todos los eventos.
        event_type:
          description: Tipo de evento activador, p. ej., 'github:pull_request'.
          enum:
            - github:issue_comment
            - github:issues
            - github:pull_request
            - github:pull_request_review
            - github:pull_request_review_comment
            - github:check_run
            - github:push
            - gitlab:merge_request
            - gitlab:note
            - gitlab:issue
            - gitlab:issue_note
            - gitlab:push
            - gitlab:pipeline
            - schedule:recurring
            - slack:message
            - slack:reaction_added
            - linear:create
            - linear:label_added
            - linear:assigned
            - linear:status_changed
            - linear:priority_changed
            - linear:moved
            - jira:issue_created
            - jira:label_added
            - jira:status_changed
            - jira:assigned
            - pylon:issue_created
            - pylon:issue_tag_added
            - pylon:issue_status_changed
            - incident_io:incident_created
            - incident_io:status_changed
            - incident_io:severity_changed
            - incident_io:follow_up_created
            - webhook:incoming
            - snapshot_build:completed
          title: Event Type
          type: string
        replies:
          default: []
          description: >-
            Dónde se asocia la sesión de este activador y dónde se entrega su
            respuesta. Solo se ejecutan las respuestas del activador
            coincidente; todas las entradas se procesan de forma independiente y
            se deduplican.
          items:
            $ref: '#/components/schemas/AutomationReply'
          title: Replies
          type: array
      required:
        - event_type
      title: AutomationTriggerRequest
      type: object
    AutomationMessageSessionAction:
      additionalProperties: false
      properties:
        auto_create:
          default: false
          description: >-
            Cuando es true, el primer activador crea una nueva sesión de larga
            duración propiedad de la automatización, y los activadores
            posteriores le envían mensajes.
          title: Auto Create
          type: boolean
        prompt:
          description: La carga útil del evento desencadenante se agrega automáticamente.
          title: Prompt
          type: string
        target_devin_id:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Debe pertenecer a la organización; editar una automatización que
            contiene esta acción requiere acceso de escritura a la sesión de
            destino (excepto las ediciones que solo la activan o desactivan). Es
            obligatorio, salvo que auto_create sea true; en ese caso, se
            establece en el servidor cuando el primer activador crea la sesión;
            se ignoran los valores proporcionados por el cliente.
          title: Target Devin Id
        type:
          const: message_session
          default: message_session
          title: Type
          type: string
      required:
        - prompt
      title: AutomationMessageSessionAction
      type: object
    AutomationMonitorSessionAction:
      additionalProperties: false
      properties:
        setup_prompt:
          description: >-
            Se inyecta en el prompt del sistema de la sesión. Tiene la misma
            gramática de tokens de referencia que prompt.
          title: Setup Prompt
          type: string
        slack_monitor_config:
          $ref: '#/components/schemas/AutomationSlackMonitorConfig'
          description: Requiere exactamente un activador slack:message en el mismo canal.
        type:
          const: monitor_session
          default: monitor_session
          title: Type
          type: string
      required:
        - setup_prompt
        - slack_monitor_config
      title: AutomationMonitorSessionAction
      type: object
    AutomationStartSessionAction-Output:
      additionalProperties: false
      properties:
        prompt:
          description: >-
            La única fuente de verdad: texto sin formato con tokens de
            referencia en línea (@{owner}/{repo}, @{path}, @playbook:{id},
            @skills:{name}, !{macro}, ${SECRET_NAME}). Los tokens con prefijo de
            tipo se validan al guardar; los ID desconocidos devuelven un error
            400. La carga útil del evento activador se agrega automáticamente.
          title: Prompt
          type: string
        session:
          $ref: '#/components/schemas/AutomationSessionConfig-Output'
          description: Configuración de la sesión creada.
        type:
          const: start_session
          default: start_session
          title: Type
          type: string
      required:
        - prompt
      title: AutomationStartSessionAction
      type: object
    ActorResponse:
      description: >-
        Una entidad principal de usuario o de usuario de servicio asociada a una
        acción o un recurso.
      properties:
        id:
          description: ID de usuario o de usuario de servicio.
          title: Id
          type: string
        name:
          anyOf:
            - type: string
            - type: 'null'
          description: Nombre para mostrar, resuelto en el servidor; null si se elimina.
          title: Name
        type:
          description: Tipo de entidad principal.
          enum:
            - user
            - service_user
          title: Type
          type: string
      required:
        - type
        - id
      title: ActorResponse
      type: object
    AutomationLastInvocation:
      additionalProperties: false
      properties:
        fired_at:
          title: Fired At
          type: integer
        status:
          description: >-
            succeeded | failed | skipped — enumeración abierta; los clientes
            deben admitir valores nuevos.
          title: Status
          type: string
      required:
        - fired_at
        - status
      title: AutomationLastInvocation
      type: object
    AutomationSecurityProfileResponse:
      additionalProperties: false
      properties:
        profile_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Profile Id
        selection:
          description: >-
            La propia asociación de perfil de seguridad de la automatización:
            inherit (sin vinculación), none (exclusión explícita) o profile
            (fija profile_id). Las sesiones resuelven toda la cadena empresa ->
            organización -> automatización: la política de red de la
            automatización solo restringe aún más las políticas de los perfiles
            aplicables, y una exclusión no puede eludir un perfil obligatorio de
            organización o empresa.
          enum:
            - inherit
            - none
            - profile
          title: Selection
          type: string
        warnings:
          default: []
          description: >-
            Conflictos de configuración no bloqueantes; por ejemplo, un servidor
            MCP recomendado cuyo nombre de host de endpoint está bloqueado por
            el perfil aplicable (las sesiones creadas no podrán conectarse a ese
            servidor). Solo se comprueban los nombres de host de endpoints MCP
            remotos; una lista vacía no garantiza que todos los destinos MCP o
            de red funcionen. Se rellena en lecturas y escrituras de una sola
            automatización; está vacío en las respuestas de lista.
          items:
            type: string
          title: Warnings
          type: array
      required:
        - selection
      title: AutomationSecurityProfileResponse
      type: object
    AutomationSessionSettings-Output:
      additionalProperties: false
      description: |-
        Se aplica a cada sesión que crea esta automatización (incluidas las
        sesiones de monitorización).
      properties:
        devin_mode:
          anyOf:
            - enum:
                - normal
                - fast
                - lite
                - ultra
                - fusion
              type: string
            - type: 'null'
          description: null = valor predeterminado de la organización.
          title: Devin Mode
        net_policy:
          anyOf:
            - $ref: '#/components/schemas/AutomationNetPolicy'
            - type: 'null'
      title: AutomationSessionSettings
      type: object
    AutomationTriggerResponse:
      additionalProperties: false
      properties:
        conditions:
          anyOf:
            - $ref: '#/components/schemas/AutomationConditions-Output'
            - type: 'null'
        event_type:
          title: Event Type
          type: string
        replies:
          default: []
          items:
            $ref: '#/components/schemas/AutomationReply'
          title: Replies
          type: array
        trigger_id:
          description: >-
            Se vuelve a generar cuando se reemplazan los activadores; no se
            mantiene entre ediciones.
          title: Trigger Id
          type: string
        webhook:
          anyOf:
            - $ref: '#/components/schemas/AutomationWebhookResponse'
            - type: 'null'
          description: Solo en activadores webhook:incoming.
      required:
        - trigger_id
        - event_type
      title: AutomationTriggerResponse
      type: object
    AutomationSlackMonitorConfig:
      additionalProperties: false
      properties:
        source_channel_id:
          title: Source Channel Id
          type: string
        team_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Team Id
      required:
        - source_channel_id
      title: AutomationSlackMonitorConfig
      type: object
    AutomationSessionConfig-Input:
      additionalProperties: false
      properties:
        bypass_approval:
          default: false
          description: >-
            Aprueba automáticamente la creación de sesiones secundarias (la
            única comprobación que este indicador omite); cualquier comprobación
            futura que se pueda omitir requiere un campo nuevo.
          title: Bypass Approval
          type: boolean
        notifications:
          anyOf:
            - $ref: '#/components/schemas/AutomationSessionNotificationsConfig'
            - type: 'null'
          description: Notificaciones de contenido de sesión (actualmente solo Slack).
        platform:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Plataforma de VM para la sesión. Cuando es null, la sesión usa la
            plataforma predeterminada de la organización en el momento de la
            invocación.
          title: Platform
        playbook_id:
          anyOf:
            - type: string
            - type: 'null'
          description: 'Solo lectura: derivado del primer token @playbook: en el prompt.'
          title: Playbook Id
        repos:
          default: []
          description: 'Solo lectura: derivado de los tokens de repositorio en el prompt.'
          items:
            type: string
          title: Repos
          type: array
        tags:
          default: []
          description: >-
            Etiquetas de sesión. Para empresas con etiquetado obligatorio, se
            requiere exactamente un valor permitido.
          items:
            type: string
          title: Tags
          type: array
      title: AutomationSessionConfig
      type: object
    AutomationInvocationLimits:
      additionalProperties: false
      properties:
        max_per_window:
          minimum: 1
          title: Max Per Window
          type: integer
        window_seconds:
          minimum: 60
          title: Window Seconds
          type: integer
      required:
        - max_per_window
        - window_seconds
      title: AutomationInvocationLimits
      type: object
    AutomationEmailNotification:
      additionalProperties: false
      properties:
        recipients:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          description: >-
            null = el creador de la automatización; obligatorio para
            automatizaciones creadas por usuarios de servicio.
          title: Recipients
        when:
          enum:
            - always
            - dispatch_failed
            - dispatch_succeeded
          title: When
          type: string
      required:
        - when
      title: AutomationEmailNotification
      type: object
    AutomationSlackNotification:
      additionalProperties: false
      properties:
        channel_id:
          title: Channel Id
          type: string
        when:
          enum:
            - always
            - dispatch_failed
            - dispatch_succeeded
          title: When
          type: string
      required:
        - when
        - channel_id
      title: AutomationSlackNotification
      type: object
    AutomationNetPolicy:
      additionalProperties: false
      properties:
        allow:
          items:
            anyOf:
              - $ref: '#/components/schemas/AutomationHostnameDestination'
              - $ref: '#/components/schemas/AutomationIpv4Destination'
              - $ref: '#/components/schemas/AutomationIpv6Destination'
          title: Allow
          type: array
      required:
        - allow
      title: AutomationNetPolicy
      type: object
    AutomationSlackChannel:
      additionalProperties: false
      properties:
        channel_id:
          title: Channel Id
          type: string
        team_id:
          title: Team Id
          type: string
      required:
        - team_id
        - channel_id
      title: AutomationSlackChannel
      type: object
    AutomationConditions-Input:
      additionalProperties: false
      properties:
        any:
          description: OR de grupos AND (DNF fija de dos niveles).
          items:
            $ref: '#/components/schemas/AutomationConditionGroup'
          title: Any
          type: array
      required:
        - any
      title: AutomationConditions
      type: object
    AutomationReply:
      additionalProperties: false
      properties:
        type:
          description: >-
            notify_thread: aviso unidireccional de «sesión iniciada» en el hilo
            desencadenante en el momento del envío (triggers de Slack).
            attach_thread: asociación bidireccional con el hilo desencadenante
            en el momento del envío (triggers de Slack). post_response: entrega
            la respuesta del agente al contexto desencadenante.
          enum:
            - notify_thread
            - attach_thread
            - post_response
          title: Type
          type: string
      required:
        - type
      title: AutomationReply
      type: object
    AutomationSessionConfig-Output:
      additionalProperties: false
      properties:
        bypass_approval:
          default: false
          description: >-
            Aprueba automáticamente la creación de sesiones secundarias (la
            única comprobación que este indicador omite); cualquier comprobación
            futura que se pueda omitir requiere un campo nuevo.
          title: Bypass Approval
          type: boolean
        notifications:
          anyOf:
            - $ref: '#/components/schemas/AutomationSessionNotificationsConfig'
            - type: 'null'
          description: Notificaciones de contenido de sesión (actualmente solo Slack).
        platform:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Plataforma de VM para la sesión. Cuando es null, la sesión usa la
            plataforma predeterminada de la organización en el momento de la
            invocación.
          title: Platform
        playbook_id:
          anyOf:
            - type: string
            - type: 'null'
          description: 'Solo lectura: derivado del primer token @playbook: en el prompt.'
          title: Playbook Id
        repos:
          default: []
          description: 'Solo lectura: derivado de los tokens de repositorio en el prompt.'
          items:
            type: string
          title: Repos
          type: array
        tags:
          default: []
          description: >-
            Etiquetas de sesión. Para empresas con etiquetado obligatorio, se
            requiere exactamente un valor permitido.
          items:
            type: string
          title: Tags
          type: array
      title: AutomationSessionConfig
      type: object
    AutomationConditions-Output:
      additionalProperties: false
      properties:
        any:
          description: OR de grupos AND (DNF fija de dos niveles).
          items:
            $ref: '#/components/schemas/AutomationConditionGroup'
          title: Any
          type: array
      required:
        - any
      title: AutomationConditions
      type: object
    AutomationWebhookResponse:
      additionalProperties: false
      properties:
        secret:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Solo está presente cuando se genera de nuevo (al crear o volver a
            agregar); nunca se puede recuperar otra vez. Reemplazar los
            activadores conserva el secreto existente.
          title: Secret
        url:
          description: >-
            El buzón al que los sistemas externos envían solicitudes POST
            (cabecera X-Webhook-Secret).
          title: Url
          type: string
      required:
        - url
      title: AutomationWebhookResponse
      type: object
    AutomationSessionNotificationsConfig:
      additionalProperties: false
      description: >-
        Dónde se envía el contenido de la sesión creada, en lugar del

        grupo ``notifications`` de nivel de automatización (avisos del estado de
        despacho).
      properties:
        slack:
          anyOf:
            - $ref: '#/components/schemas/AutomationSessionSlackConfig'
            - type: 'null'
          description: >-
            Da a la sesión un destino en Slack: two-way para
            post_updates/forward_thread y post_response una vez que la entrega
            inicial vincula el hilo.
      title: AutomationSessionNotificationsConfig
      type: object
    AutomationHostnameDestination:
      additionalProperties: false
      properties:
        hostname:
          title: Hostname
          type: string
      required:
        - hostname
      title: AutomationHostnameDestination
      type: object
    AutomationIpv4Destination:
      additionalProperties: false
      properties:
        ipv4:
          title: Ipv4
          type: string
      required:
        - ipv4
      title: AutomationIpv4Destination
      type: object
    AutomationIpv6Destination:
      additionalProperties: false
      properties:
        ipv6:
          title: Ipv6
          type: string
      required:
        - ipv6
      title: AutomationIpv6Destination
      type: object
    AutomationConditionGroup:
      additionalProperties: false
      properties:
        all:
          description: 'AND: todas las condiciones del grupo deben cumplirse.'
          items:
            discriminator:
              mapping:
                between:
                  $ref: '#/components/schemas/AutomationRangeCondition'
                contains:
                  $ref: '#/components/schemas/AutomationStringCondition'
                ends_with:
                  $ref: '#/components/schemas/AutomationStringCondition'
                eq:
                  $ref: '#/components/schemas/AutomationComparisonCondition'
                globs:
                  $ref: '#/components/schemas/AutomationGlobCondition'
                gt:
                  $ref: '#/components/schemas/AutomationNumericCondition'
                gte:
                  $ref: '#/components/schemas/AutomationNumericCondition'
                in:
                  $ref: '#/components/schemas/AutomationListCondition'
                is_empty:
                  $ref: '#/components/schemas/AutomationEmptyCondition'
                is_not_empty:
                  $ref: '#/components/schemas/AutomationEmptyCondition'
                lt:
                  $ref: '#/components/schemas/AutomationNumericCondition'
                lte:
                  $ref: '#/components/schemas/AutomationNumericCondition'
                matches:
                  $ref: '#/components/schemas/AutomationMatchCondition'
                neq:
                  $ref: '#/components/schemas/AutomationComparisonCondition'
                not_contains:
                  $ref: '#/components/schemas/AutomationStringCondition'
                not_ends_with:
                  $ref: '#/components/schemas/AutomationStringCondition'
                not_globs:
                  $ref: '#/components/schemas/AutomationGlobCondition'
                not_in:
                  $ref: '#/components/schemas/AutomationListCondition'
                not_matches:
                  $ref: '#/components/schemas/AutomationMatchCondition'
                not_starts_with:
                  $ref: '#/components/schemas/AutomationStringCondition'
                recurrence:
                  $ref: '#/components/schemas/AutomationRecurrenceCondition'
                starts_with:
                  $ref: '#/components/schemas/AutomationStringCondition'
              propertyName: operator
            oneOf:
              - $ref: '#/components/schemas/AutomationComparisonCondition'
              - $ref: '#/components/schemas/AutomationStringCondition'
              - $ref: '#/components/schemas/AutomationNumericCondition'
              - $ref: '#/components/schemas/AutomationEmptyCondition'
              - $ref: '#/components/schemas/AutomationRangeCondition'
              - $ref: '#/components/schemas/AutomationListCondition'
              - $ref: '#/components/schemas/AutomationMatchCondition'
              - $ref: '#/components/schemas/AutomationRecurrenceCondition'
              - $ref: '#/components/schemas/AutomationGlobCondition'
          title: All
          type: array
      required:
        - all
      title: AutomationConditionGroup
      type: object
    AutomationSessionSlackConfig:
      additionalProperties: false
      properties:
        channel_id:
          title: Channel Id
          type: string
        mode:
          description: >-
            post_updates: la sesión conversa en un hilo del canal (disponible
            para activadores que no sean de Slack). forward_thread: lo mismo,
            además de un enlace de retorno publicado en el hilo activador
            (requiere un activador de Slack). post_response: la respuesta final
            de la sesión se publica en el canal como mensaje de nivel superior;
            luego su hilo se vincula para respuestas y mensajes de seguimiento
            (disponible para cualquier activador).
          enum:
            - post_updates
            - forward_thread
            - post_response
          title: Mode
          type: string
      required:
        - mode
        - channel_id
      title: AutomationSessionSlackConfig
      type: object
    AutomationRangeCondition:
      additionalProperties: false
      properties:
        field:
          title: Field
          type: string
        operator:
          const: between
          title: Operator
          type: string
        value:
          description: Rango inclusivo [bajo, alto].
          maxItems: 2
          minItems: 2
          prefixItems:
            - anyOf:
                - type: integer
                - type: number
            - anyOf:
                - type: integer
                - type: number
          title: Value
          type: array
      required:
        - field
        - operator
        - value
      title: AutomationRangeCondition
      type: object
    AutomationStringCondition:
      additionalProperties: false
      properties:
        field:
          title: Field
          type: string
        operator:
          enum:
            - contains
            - not_contains
            - starts_with
            - not_starts_with
            - ends_with
            - not_ends_with
          title: Operator
          type: string
        value:
          title: Value
          type: string
      required:
        - field
        - operator
        - value
      title: AutomationStringCondition
      type: object
    AutomationComparisonCondition:
      additionalProperties: false
      properties:
        field:
          title: Field
          type: string
        operator:
          enum:
            - eq
            - neq
          title: Operator
          type: string
        value:
          anyOf:
            - type: string
            - type: integer
            - type: number
            - type: boolean
          title: Value
      required:
        - field
        - operator
        - value
      title: AutomationComparisonCondition
      type: object
    AutomationGlobCondition:
      additionalProperties: false
      properties:
        field:
          title: Field
          type: string
        operator:
          enum:
            - globs
            - not_globs
          title: Operator
          type: string
        value:
          description: >-
            Patrones glob; coincide cualquier ruta modificada (github:push,
            gitlab:push).
          items:
            type: string
          title: Value
          type: array
      required:
        - field
        - operator
        - value
      title: AutomationGlobCondition
      type: object
    AutomationNumericCondition:
      additionalProperties: false
      properties:
        field:
          title: Field
          type: string
        operator:
          enum:
            - gt
            - lt
            - gte
            - lte
          title: Operator
          type: string
        value:
          anyOf:
            - type: integer
            - type: number
          title: Value
      required:
        - field
        - operator
        - value
      title: AutomationNumericCondition
      type: object
    AutomationListCondition:
      additionalProperties: false
      properties:
        field:
          title: Field
          type: string
        operator:
          enum:
            - in
            - not_in
          title: Operator
          type: string
        value:
          items:
            type: string
          title: Value
          type: array
      required:
        - field
        - operator
        - value
      title: AutomationListCondition
      type: object
    AutomationEmptyCondition:
      additionalProperties: false
      description: >-
        Operador unario: coincide con que el campo esté vacío; `value` no
        contiene datos.
      properties:
        field:
          title: Field
          type: string
        operator:
          enum:
            - is_empty
            - is_not_empty
          title: Operator
          type: string
        value:
          title: Value
          type: 'null'
      required:
        - field
        - operator
      title: AutomationEmptyCondition
      type: object
    AutomationMatchCondition:
      additionalProperties: false
      properties:
        field:
          title: Field
          type: string
        operator:
          enum:
            - matches
            - not_matches
          title: Operator
          type: string
        value:
          description: Expresión regular.
          title: Value
          type: string
      required:
        - field
        - operator
        - value
      title: AutomationMatchCondition
      type: object
    AutomationRecurrenceCondition:
      additionalProperties: false
      properties:
        field:
          title: Field
          type: string
        operator:
          const: recurrence
          title: Operator
          type: string
        value:
          description: >-
            RRULE de iCalendar para el campo rrule de schedule:recurring, p.
            ej., FREQ=WEEKLY;BYDAY=MO;BYHOUR=9;BYMINUTE=0
          title: Value
          type: string
      required:
        - field
        - operator
        - value
      title: AutomationRecurrenceCondition
      type: object
  securitySchemes:
    bearerAuth:
      description: 'Credencial de usuario de servicio (prefijo: cog_)'
      scheme: bearer
      type: http

````