> ## 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.

# Aggiorna l'automazione

> Aggiorna un'automazione.

Per impostazione predefinita, i gruppi presenti vengono uniti membro per membro (RFC 7396): i membri omessi
mantengono il valore memorizzato, mentre i valori null espliciti li eliminano. L'appartenenza a un elenco
viene sostituita integralmente e ogni elemento inviato viene unito all'elemento memorizzato
dello stesso tipo quando quel tipo ricorre esattamente una volta in entrambi.

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

Richiede un utente di servizio con l'autorizzazione `ManageOrgAutomations` a livello di organizzazione.

<div id="merge-semantics">
  ## Semantica di merge
</div>

Con la semantica predefinita `merge_patch`, i campi PATCH vengono uniti membro per membro (in stile RFC 7396): i membri omessi mantengono il valore memorizzato, i valori null espliciti cancellano e i gruppi vuoti non producono effetti. I metadati vengono uniti per chiave e i valori null eliminano le chiavi. Gli elenchi vengono sostituiti integralmente, mentre ogni elemento inviato viene unito all'elemento memorizzato dello stesso tipo quando tale tipo compare esattamente una volta in entrambi.

Con la semantica `replace_groups`, non viene eseguito alcun merge: un gruppo di oggetti inviato sostituisce integralmente il gruppo memorizzato e un elenco `triggers` o `actions` inviato sostituisce integralmente l'elenco memorizzato, senza merge a livello di elemento. Invia nuovamente ogni membro che desideri mantenere: i membri omessi vengono cancellati o reimpostati al valore predefinito. Anche `metadata` viene sostituito integralmente, quindi per rimuovere una chiave devi inviare nuovamente l'insieme senza quella chiave; i valori null nei metadati vengono rifiutati con un errore 400 anziché eliminare le chiavi. I campi di primo livello omessi rimangono comunque invariati.

Verifica il campo `update_semantics` dell'[endpoint degli schemi degli eventi](/it/api-reference/v3/automations/get-organizations-automations-schemas) per conoscere la semantica attiva nella tua organizzazione prima di fare affidamento su uno dei due comportamenti. Consideralo un enum aperto e gestisci anche valori diversi dai due indicati sopra.

<div id="webhook-triggers">
  ## Trigger webhook
</div>

L'aggiunta nuovamente di un trigger `webhook:incoming` genera un nuovo segreto e lo restituisce nella risposta di aggiornamento. Il segreto viene mostrato solo in questa occasione, quindi acquisiscilo quando lo ricevi. La sostituzione o il mantenimento di un trigger webhook esistente preserva il segreto esistente.


## OpenAPI

````yaml it/v3-openapi.yaml PATCH /v3/organizations/{org_id}/automations/{automation_id}
openapi: 3.1.0
info:
  description: API Devin v3 con autenticazione utente di servizio e RBAC
  title: Devin API v3
  version: 3.0.0
servers: []
security:
  - bearerAuth: []
paths:
  /v3/organizations/{org_id}/automations/{automation_id}:
    patch:
      tags:
        - automations
      summary: Aggiorna l'automazione
      description: >-
        Aggiorna un'automazione.


        Per impostazione predefinita, i gruppi presenti vengono uniti membro per
        membro (RFC 7396): i membri omessi

        mantengono il valore memorizzato, mentre i valori null espliciti li
        eliminano. L'appartenenza a un elenco

        viene sostituita integralmente e ogni elemento inviato viene unito
        all'elemento memorizzato

        dello stesso tipo quando quel tipo ricorre esattamente una volta in
        entrambi.
      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 dell''organizzazione (prefisso: 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: Risposta riuscita
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'
          description: Non autorizzato
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'
          description: Vietato
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'
          description: Non trovato
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'
          description: Conflitto
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'
          description: Contenuto non elaborabile
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'
          description: Troppe richieste
components:
  schemas:
    AutomationUpdateRequest:
      additionalProperties: false
      description: >-
        Per impostazione predefinita, i campi PATCH vengono uniti membro per
        membro: i membri omessi vengono mantenuti,

        i valori null espliciti li cancellano e i gruppi vuoti non producono
        effetti. I metadati vengono uniti per chiave,

        con valori null che eliminano le chiavi. Le liste vengono sostituite
        integralmente (eliminazione = inviare nuovamente

        la lista senza l'elemento), mentre ogni elemento inviato viene unito
        all'elemento

        memorizzato dello stesso tipo quando tale tipo ricorre esattamente una
        volta su entrambi

        i lati. I membri dell'elemento obbligatori alla creazione (``prompt``,

        ``setup_prompt``, le configurazioni Slack di monitoraggio/triage,
        ``scan_id``) possono essere

        omessi quando esiste una controparte: vengono mantenuti come qualsiasi
        altro membro;

        null esplicito viene rifiutato.
      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: >-
                Identità con cui vengono eseguite le sessioni generate.
                organization: l'identità di automazione dell'org (l'utente di
                sistema nell'app) — le sessioni usano le autorizzazioni di
                sistema, quindi non è possibile selezionare server MCP
                installati con una connessione personale (con ambito utente) e
                il passaggio di un'automazione a organization li rimuove dalla
                relativa selezione. creator: automazione personale — viene
                eseguita con le autorizzazioni del creatore ed è visibile solo
                al creatore e agli amministratori dell'org; rifiutata per le
                automazioni create da utenti di servizio. Obbligatorio alla
                creazione; null durante l'aggiornamento reimposta su
                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 reimposta su organization.
          title: Run As
        security_profile:
          anyOf:
            - $ref: '#/components/schemas/AutomationSecurityProfileSelection'
            - type: 'null'
          description: >-
            L'associazione al profilo di sicurezza dell'automazione: un
            profile_id blocca quel profilo, {"profile_id": null} registra
            un'esclusione esplicita e null esplicito ripristina l'ereditarietà
            dall'org/Enterprise. Richiede l'autorizzazione per la gestione dei
            profili di sicurezza.
        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: >-
            Identità con cui vengono eseguite le sessioni generate.
            organization: l'identità di automazione dell'org (l'Utente di
            sistema nell'app) — le sessioni usano autorizzazioni di sistema,
            quindi non è possibile selezionare server MCP installati con una
            connessione personale (con ambito utente); passando un'automazione a
            organization, tali server vengono rimossi dalla selezione. creator:
            automazione personale — viene eseguita con le autorizzazioni del
            creatore ed è visibile solo al creatore e agli admin dell'org; non
            consentita per le automazioni create da utenti di servizio.
            Obbligatorio alla creazione; null in aggiornamento reimposta a
            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: >-
            L'associazione dell'automazione al profilo di sicurezza e i profili
            applicabili risultanti. null quando i profili di sicurezza non sono
            abilitati per l'organizzazione.
        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: >-
        Corpo dell'errore application/problem+json RFC 9457 per l'API v3.


        detail è mantenuto dal corpo legacy {"detail": ...} per
        retrocompatibilità; gli

        altri membri sono aggiuntivi. errors contiene gli errori di validazione
        a livello di campo

        (solo 422).
      properties:
        detail:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Una spiegazione leggibile dall'utente, specifica per questa
            occorrenza.
          title: Detail
        errors:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          description: Errori di convalida a livello di campo (solo per le risposte 422).
          title: Errors
        instance:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Un riferimento URI (il percorso della richiesta) per questa
            occorrenza.
          title: Instance
        status:
          description: Il codice di stato HTTP.
          title: Status
          type: integer
        title:
          description: Un breve riepilogo del tipo di problema, leggibile dall'utente.
          title: Title
          type: string
        type:
          default: about:blank
          description: Un riferimento URI che identifica il tipo di problema.
          title: Type
          type: string
      required:
        - title
        - status
      title: ProblemDetail
      type: object
    AutomationMessageSessionActionUpdate:
      additionalProperties: false
      properties:
        auto_create:
          default: false
          description: >-
            Se true, il primo trigger crea una nuova sessione a lunga esecuzione
            di proprietà dell'automazione e i trigger successivi le inviano
            messaggi.
          title: Auto Create
          type: boolean
        prompt:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Il payload dell'evento attivante viene aggiunto automaticamente.
            Obbligatorio durante la creazione o l'aggiunta di questa action; in
            un aggiornamento con semantica di merge, omettilo per mantenere il
            valore memorizzato (null non è valido).
          title: Prompt
        target_devin_id:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Deve appartenere all'org; la modifica di un'automazione contenente
            questa action richiede accesso in scrittura alla sessione di
            destinazione (sono escluse le modifiche di sola
            abilitazione/disabilitazione). Obbligatorio a meno che auto_create
            non sia true, nel qual caso viene impostato lato server quando il
            primo trigger crea la sessione; i valori forniti dal client vengono
            ignorati.
          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: >-
            Inserito nel prompt di sistema della sessione. Usa la stessa
            grammatica dei token di riferimento di prompt. Obbligatorio durante
            la creazione o l'aggiunta di questa action; in un aggiornamento con
            semantica di merge, omettilo per mantenere il valore memorizzato
            (null non è valido).
          title: Setup Prompt
        slack_monitor_config:
          anyOf:
            - $ref: '#/components/schemas/AutomationSlackMonitorConfig'
            - type: 'null'
          description: >-
            Richiede esattamente un trigger slack:message sullo stesso canale.
            Obbligatorio durante la creazione o l'aggiunta di questa action; in
            un aggiornamento con semantica di merge, omettilo per mantenere il
            valore memorizzato (null non è valido).
        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: >-
            L'unica fonte di verità: testo semplice con token di riferimento
            inline (@{owner}/{repo}, @{path}, @playbook:{id}, @skills:{name},
            !{macro}, ${SECRET_NAME}). I token con prefisso del tipo vengono
            convalidati al salvataggio; gli ID sconosciuti restituiscono un
            errore 400. Il payload dell'evento attivante viene aggiunto
            automaticamente. Obbligatorio durante la creazione o l'aggiunta di
            questa action; in un aggiornamento con semantica di merge, ometterlo
            per mantenere il valore memorizzato (null non è valido).
          title: Prompt
        session:
          $ref: '#/components/schemas/AutomationSessionConfig-Input'
          description: Configurazione per la sessione generata.
        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: >-
            Numero massimo di run in corso per questa automazione; gli eventi
            attivati aggiuntivi attendono nella relativa coda. Un run non viene
            più conteggiato ai fini del limite quando la relativa sessione
            termina ed è in attesa di ulteriori istruzioni, non solo quando la
            sessione si arresta. null = illimitato.
          title: Max Concurrent Runs
        max_queue_depth:
          anyOf:
            - minimum: 0
              type: integer
            - type: 'null'
          description: >-
            Numero massimo di eventi attivati in attesa di esecuzione nella coda
            dell'automazione; gli eventi oltre questo limite vengono scartati.
            Richiede l'impostazione di max_concurrent_runs. null = illimitato.
          title: Max Queue Depth
      title: AutomationConcurrency
      type: object
    AutomationLimits:
      additionalProperties: false
      properties:
        invocations:
          anyOf:
            - $ref: '#/components/schemas/AutomationInvocationLimits'
            - type: 'null'
          description: Limita la frequenza di attivazione dell'automazione.
        max_acu_limit:
          anyOf:
            - maximum: 1000
              minimum: 1
              type: integer
            - type: 'null'
          description: Per ogni sessione generata (stesso nome dell'API sessions).
          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: L'associazione dell'automazione al proprio profilo di sicurezza.
      properties:
        profile_id:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Profilo di sicurezza da associare a questa automazione. null
            registra un'esclusione esplicita (nessun profilo, anche quando l'org
            o l'enterprise dispone di un valore predefinito consigliato). La
            scrittura di questo campo richiede l'autorizzazione per la gestione
            dei profili di sicurezza; un'esclusione non può eludere un profilo
            obbligatorio dell'org o dell'enterprise.
          title: Profile Id
      title: AutomationSecurityProfileSelection
      type: object
    AutomationSessionSettings-Input:
      additionalProperties: false
      description: >-
        Applicato a ogni sessione generata da questa automazione (incluse le
        sessioni

        di monitoraggio).
      properties:
        devin_mode:
          anyOf:
            - enum:
                - normal
                - fast
                - lite
                - ultra
                - fusion
              type: string
            - type: 'null'
          description: null = valore predefinito dell'org.
          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 l'accesso agli strumenti Linear.
          title: Linear Enabled
        mcp_servers:
          default: []
          description: >-
            Slug del Marketplace (il campo slug della risorsa mcp-servers, ad
            es. 'github', 'notion') abilitati per le sessioni generate. I server
            installati con una connessione personale (con ambito utente)
            richiedono run_as creator; selezionarli con run_as organization
            viene rifiutato poiché l'identità di servizio di Automations non
            dispone di un token personale per tali server e il passaggio di
            run_as di un'automazione a organization li rimuove dalla selezione
            memorizzata.
          items:
            type: string
          title: Mcp Servers
          type: array
        slack_channels:
          default: []
          description: >-
            Canali in cui gli strumenti Slack della sessione possono pubblicare
            messaggi.
          items:
            $ref: '#/components/schemas/AutomationSlackChannel'
          title: Slack Channels
          type: array
        slack_dm_scope:
          anyOf:
            - enum:
                - org_members
                - workspace
              type: string
            - type: 'null'
          description: >-
            Consenti alle sessioni generate di aprire DM Slack 1:1 nei workspace
            connessi dell'organizzazione. 'org_members' (solo per gli account
            Enterprise) limita i destinatari dei DM ai membri
            dell'organizzazione; 'workspace' (solo per gli account non
            Enterprise) consente qualsiasi membro idoneo del workspace. Ometti o
            usa null per disabilitare i DM.
          title: Slack Dm Scope
      title: AutomationTools
      type: object
    AutomationTriggerRequest-Input:
      additionalProperties: false
      properties:
        conditions:
          anyOf:
            - $ref: '#/components/schemas/AutomationConditions-Input'
            - type: 'null'
          description: null corrisponde a ogni evento.
        event_type:
          description: Tipo di evento del trigger, ad es. '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: >-
            Dove viene associata la sessione di questo trigger e dove viene
            recapitata la relativa risposta. Vengono eseguite solo le risposte
            del trigger corrispondente; tutte le voci operano in modo
            indipendente e vengono deduplicate.
          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: >-
            Se true, il primo trigger crea una nuova sessione a lunga esecuzione
            di proprietà dell'automazione e i trigger successivi le inviano
            messaggi.
          title: Auto Create
          type: boolean
        prompt:
          description: Il payload dell'evento attivante viene aggiunto automaticamente.
          title: Prompt
          type: string
        target_devin_id:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Deve appartenere all'org; la modifica di un'automazione contenente
            questa action richiede accesso in scrittura alla sessione di
            destinazione (sono escluse le modifiche di sola
            abilitazione/disabilitazione). Obbligatorio a meno che auto_create
            non sia true, nel qual caso viene impostato lato server quando il
            primo trigger crea la sessione; i valori forniti dal client vengono
            ignorati.
          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: >-
            Inserito nel prompt di sistema della sessione. Usa la stessa
            grammatica dei token di riferimento di prompt.
          title: Setup Prompt
          type: string
        slack_monitor_config:
          $ref: '#/components/schemas/AutomationSlackMonitorConfig'
          description: Richiede esattamente un trigger slack:message sullo stesso canale.
        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: >-
            L'unica fonte di verità: testo semplice con token di riferimento
            inline (@{owner}/{repo}, @{path}, @playbook:{id}, @skills:{name},
            !{macro}, ${SECRET_NAME}). I token con prefisso del tipo vengono
            convalidati al salvataggio; gli ID sconosciuti restituiscono un
            errore 400. Il payload dell'evento attivante viene aggiunto
            automaticamente.
          title: Prompt
          type: string
        session:
          $ref: '#/components/schemas/AutomationSessionConfig-Output'
          description: Configurazione per la sessione generata.
        type:
          const: start_session
          default: start_session
          title: Type
          type: string
      required:
        - prompt
      title: AutomationStartSessionAction
      type: object
    ActorResponse:
      description: >-
        Un principal utente o utente di servizio associato a un'azione o a una
        risorsa.
      properties:
        id:
          description: ID utente o ID dell'utente di servizio.
          title: Id
          type: string
        name:
          anyOf:
            - type: string
            - type: 'null'
          description: Nome visualizzato, determinato lato server; null se eliminato.
          title: Name
        type:
          description: Tipo di 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 — enum aperto; i client devono
            tollerare nuovi valori.
          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: >-
            L'associazione dell'automazione: inherit (nessuna associazione),
            none (esclusione esplicita) o profile (fissa profile_id). Le
            sessioni risolvono l'intera catena enterprise -> org -> automazione:
            la policy di rete dell'automazione restringe soltanto le policy dei
            profili applicabili e un'esclusione non può eludere un profilo
            obbligatorio dell'org o dell'enterprise.
          enum:
            - inherit
            - none
            - profile
          title: Selection
          type: string
        warnings:
          default: []
          description: >-
            Conflitti di configurazione non bloccanti, ad es. un server MCP
            consigliato il cui hostname dell'endpoint è bloccato dal profilo
            applicabile (le sessioni generate non potranno connettersi a quel
            server). Vengono controllati solo gli hostname degli endpoint MCP
            remoti; un elenco vuoto non garantisce il funzionamento di ogni
            destinazione MCP o di rete. Popolato nelle letture e scritture di
            una singola automazione; vuoto nelle risposte elenco.
          items:
            type: string
          title: Warnings
          type: array
      required:
        - selection
      title: AutomationSecurityProfileResponse
      type: object
    AutomationSessionSettings-Output:
      additionalProperties: false
      description: >-
        Applicato a ogni sessione generata da questa automazione (incluse le
        sessioni

        di monitoraggio).
      properties:
        devin_mode:
          anyOf:
            - enum:
                - normal
                - fast
                - lite
                - ultra
                - fusion
              type: string
            - type: 'null'
          description: null = valore predefinito dell'org.
          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: >-
            Rigenerato quando triggers viene sostituito: non è stabile tra una
            modifica e l'altra.
          title: Trigger Id
          type: string
        webhook:
          anyOf:
            - $ref: '#/components/schemas/AutomationWebhookResponse'
            - type: 'null'
          description: Solo nei trigger 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: >-
            Approva automaticamente la creazione di sessioni figlie (l'unico
            controllo aggirato da questo flag); qualsiasi futuro controllo
            aggirabile richiede un nuovo campo.
          title: Bypass Approval
          type: boolean
        notifications:
          anyOf:
            - $ref: '#/components/schemas/AutomationSessionNotificationsConfig'
            - type: 'null'
          description: Notifiche sul contenuto delle sessioni (attualmente solo Slack).
        platform:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Piattaforma VM per la sessione. Se null, la sessione usa la
            piattaforma predefinita dell'organizzazione al momento
            dell'invocazione.
          title: Platform
        playbook_id:
          anyOf:
            - type: string
            - type: 'null'
          description: 'Sola lettura: derivato dal primo token @playbook: nel prompt.'
          title: Playbook Id
        repos:
          default: []
          description: 'Sola lettura: derivato dai token repo nel prompt.'
          items:
            type: string
          title: Repos
          type: array
        tags:
          default: []
          description: >-
            Tag di sessione. Per le enterprise con applicazione obbligatoria dei
            tag è richiesto esattamente un valore consentito.
          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 = il creatore dell'automazione; obbligatorio per le automazioni
            create da utenti di servizio.
          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 di gruppi AND (DNF fissa a due livelli).
          items:
            $ref: '#/components/schemas/AutomationConditionGroup'
          title: Any
          type: array
      required:
        - any
      title: AutomationConditions
      type: object
    AutomationReply:
      additionalProperties: false
      properties:
        type:
          description: >-
            notify_thread: indicatore unidirezionale di 'sessione avviata' nel
            thread attivante al momento dell'invio (trigger Slack).
            attach_thread: associazione bidirezionale al thread attivante al
            momento dell'invio (trigger Slack). post_response: invia la risposta
            dell'agente al contesto attivante.
          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: >-
            Approva automaticamente la creazione di sessioni figlie (l'unico
            controllo aggirato da questo flag); qualsiasi futuro controllo
            aggirabile richiede un nuovo campo.
          title: Bypass Approval
          type: boolean
        notifications:
          anyOf:
            - $ref: '#/components/schemas/AutomationSessionNotificationsConfig'
            - type: 'null'
          description: Notifiche sul contenuto delle sessioni (attualmente solo Slack).
        platform:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Piattaforma VM per la sessione. Se null, la sessione usa la
            piattaforma predefinita dell'organizzazione al momento
            dell'invocazione.
          title: Platform
        playbook_id:
          anyOf:
            - type: string
            - type: 'null'
          description: 'Sola lettura: derivato dal primo token @playbook: nel prompt.'
          title: Playbook Id
        repos:
          default: []
          description: 'Sola lettura: derivato dai token repo nel prompt.'
          items:
            type: string
          title: Repos
          type: array
        tags:
          default: []
          description: >-
            Tag di sessione. Per le enterprise con applicazione obbligatoria dei
            tag è richiesto esattamente un valore consentito.
          items:
            type: string
          title: Tags
          type: array
      title: AutomationSessionConfig
      type: object
    AutomationConditions-Output:
      additionalProperties: false
      properties:
        any:
          description: OR di gruppi AND (DNF fissa a due livelli).
          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: >-
            Presente solo quando appena generato (creazione o nuova aggiunta);
            non è mai più recuperabile. La sostituzione di triggers conserva il
            secret esistente.
          title: Secret
        url:
          description: >-
            L'endpoint di ricezione a cui i sistemi esterni inviano richieste
            POST (header X-Webhook-Secret).
          title: Url
          type: string
      required:
        - url
      title: AutomationWebhookResponse
      type: object
    AutomationSessionNotificationsConfig:
      additionalProperties: false
      description: >-
        Dove viene inviato il contenuto della sessione generata, anziché nel
        gruppo

        ``notifications`` a livello di automazione (notifiche sullo stato di
        invio).
      properties:
        slack:
          anyOf:
            - $ref: '#/components/schemas/AutomationSessionSlackConfig'
            - type: 'null'
          description: >-
            Assegna alla sessione un punto di riferimento su Slack: interazione
            bidirezionale per post_updates/forward_thread e post_response dopo
            che la consegna iniziale ha associato il thread.
      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: tutte le condizioni nel gruppo devono corrispondere.'
          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 sessione conversa in un thread nel canale
            (disponibile per trigger non Slack). forward_thread: come sopra, più
            un collegamento inverso pubblicato nel thread che ha attivato
            l'azione (richiede un trigger Slack). post_response: la risposta
            finale della sessione viene pubblicata nel canale come messaggio di
            primo livello, quindi il relativo thread viene associato per
            risposte e messaggi successivi (disponibile per qualsiasi trigger).
          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: Intervallo inclusivo [minimo, massimo].
          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: >-
            Pattern glob; corrisponde a qualsiasi percorso modificato
            (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: >-
        Operatore unario: verifica se il campo è vuoto; `value` non contiene
        dati.
      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: Espressione regolare.
          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 iCalendar per il campo rrule di schedule:recurring, ad es.
            FREQ=WEEKLY;BYDAY=MO;BYHOUR=9;BYMINUTE=0
          title: Value
          type: string
      required:
        - field
        - operator
        - value
      title: AutomationRecurrenceCondition
      type: object
  securitySchemes:
    bearerAuth:
      description: 'Credenziale dell''utente del servizio (prefisso: cog_)'
      scheme: bearer
      type: http

````