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

# Mettre à jour l’automatisation

> Mettre à jour une automatisation.

Les groupes présents sont fusionnés membre par membre par défaut (RFC 7396) : les membres omis conservent leur valeur enregistrée et les valeurs nulles explicites les effacent. L’appartenance aux listes est entièrement remplacée, et chaque élément envoyé est fusionné avec l’élément enregistré du même type lorsque ce type apparaît exactement une fois de chaque côté.

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

Nécessite un utilisateur de service disposant de l’autorisation `ManageOrgAutomations` au niveau de l’organisation.

<div id="merge-semantics">
  ## Sémantique de fusion
</div>

Avec la sémantique `merge_patch` par défaut, les champs PATCH sont fusionnés membre par membre (selon le style de la RFC 7396) : les membres omis conservent leur valeur enregistrée, les valeurs null explicites les effacent et les groupes vides sont sans effet. Les métadonnées sont fusionnées par clé, les valeurs null supprimant les clés. Les listes sont remplacées dans leur intégralité, tandis que chaque élément envoyé est fusionné avec l’élément enregistré du même type lorsque ce type apparaît exactement une fois de chaque côté.

Avec la sémantique `replace_groups`, aucune fusion n’a lieu : un groupe d’objets envoyé remplace intégralement le groupe enregistré, et une liste `triggers` ou `actions` envoyée remplace intégralement la liste enregistrée, sans fusion élément par élément. Renvoyez chaque membre que vous souhaitez conserver : les membres omis sont effacés ou réinitialisés à leur valeur par défaut. `metadata` constitue également un remplacement complet ; pour supprimer une clé, renvoyez l’ensemble sans cette clé ; les valeurs null dans les métadonnées sont rejetées avec une erreur 400 au lieu de supprimer les clés. Les champs de niveau supérieur omis restent toutefois inchangés.

Vérifiez le champ `update_semantics` de l’[endpoint des schémas d’événements](/fr/api-reference/v3/automations/get-organizations-automations-schemas) afin de connaître la sémantique active pour votre organisation avant de vous appuyer sur l’un ou l’autre comportement. Traitez-le comme une énumération ouverte et acceptez des valeurs autres que les deux ci-dessus.

<div id="webhook-triggers">
  ## Déclencheurs de webhook
</div>

Réajouter un déclencheur `webhook:incoming` génère un nouveau secret et le renvoie dans la réponse de mise à jour. Le secret n'est affiché qu'à ce moment-là : veillez donc à le récupérer dès réception. Le remplacement ou la conservation d'un déclencheur de webhook existant préserve le secret existant.


## OpenAPI

````yaml fr/v3-openapi.yaml PATCH /v3/organizations/{org_id}/automations/{automation_id}
openapi: 3.1.0
info:
  description: API Devin v3 avec authentification par compte de service et RBAC
  title: Devin API v3
  version: 3.0.0
servers: []
security:
  - bearerAuth: []
paths:
  /v3/organizations/{org_id}/automations/{automation_id}:
    patch:
      tags:
        - automations
      summary: Mettre à jour l’automatisation
      description: "Mettre à jour une automatisation.\n\nLes groupes présents sont fusionnés membre par membre par défaut (RFC 7396)\_: les membres omis conservent leur valeur enregistrée et les valeurs nulles explicites les effacent. L’appartenance aux listes est entièrement remplacée, et chaque élément envoyé est fusionné avec l’élément enregistré du même type lorsque ce type apparaît exactement une fois de chaque côté."
      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 d’organisation (préfixe\_: 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: Réponse réussie
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'
          description: Non autorisé
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'
          description: Interdit
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'
          description: Introuvable
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'
          description: Conflit
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'
          description: Contenu non traitable
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetail'
          description: Trop de requêtes
components:
  schemas:
    AutomationUpdateRequest:
      additionalProperties: false
      description: >-
        Par défaut, les champs PATCH sont fusionnés membre par membre : les
        membres omis sont conservés,

        les null explicites les effacent et les groupes vides n'ont aucun effet.
        Les métadonnées sont fusionnées par clé,

        les valeurs null supprimant les clés. Les listes sont entièrement
        remplacées (suppression = renvoyer

        la liste sans l'élément), tandis que chaque élément envoyé est fusionné
        avec l'élément

        enregistré du même type lorsque ce type apparaît exactement une fois des
        deux

        côtés. Les membres d'éléments obligatoires à la création (``prompt``,

        ``setup_prompt``, les configurations Slack de surveillance/triage,
        ``scan_id``) peuvent être

        omis lorsqu'un équivalent existe — ils sont conservés comme tout autre
        membre ;

        un null explicite est refusé.
      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é sous laquelle les sessions générées s’exécutent.
                organization : l’identité d’automatisation de l’organisation
                (l’utilisateur système dans l’application) — les sessions
                utilisent les autorisations système ; les serveurs MCP installés
                avec une connexion personnelle (limitée à l’utilisateur) ne
                peuvent donc pas être sélectionnés, et le passage d’une
                automatisation à organization les retire de sa sélection.
                creator : automatisation personnelle — s’exécute avec les
                propres autorisations du créateur et n’est visible que par le
                créateur et les administrateurs de l’organisation ; refusée pour
                les automatisations créées par un utilisateur de service.
                Obligatoire à la création ; null lors d’une mise à jour
                réinitialise à 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 réinitialise à organization.
          title: Run As
        security_profile:
          anyOf:
            - $ref: '#/components/schemas/AutomationSecurityProfileSelection'
            - type: 'null'
          description: "La liaison de l’automatisation à son profil de sécurité\_: un profile_id verrouille ce profil, {\"profile_id\": null} enregistre une désactivation explicite, et un null explicite rétablit l’héritage depuis l’organisation/l’Enterprise. Nécessite l’autorisation de gérer les profils de sécurité."
        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é sous laquelle s’exécutent les sessions générées. organization: l’identité d’automatisation de l’organisation (l’utilisateur système dans l’application) — les sessions utilisent les autorisations système\_; les serveurs MCP installés avec une connexion personnelle (limitée à l’utilisateur) ne peuvent donc pas être sélectionnés, et le passage d’une automatisation à organization les retire de sa sélection. creator: automatisation personnelle — s’exécute avec les autorisations propres au créateur et n’est visible que par celui-ci et les administrateurs de l’organisation\_; refusée pour les automatisations créées par un utilisateur de service. Obligatoire à la création\_; null lors d’une mise à jour réinitialise la valeur sur 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 liaison au profil de sécurité de l’automatisation et les profils
            directeurs résolus. null lorsque les profils de sécurité ne sont pas
            activés pour l’organisation.
        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: "Corps d’erreur RFC 9457 application/problem+json pour l’API v3.\n\ndetail est conservé de l’ancien corps {\"detail\": ...} pour assurer la rétrocompatibilité\_; les\nautres membres sont ajoutés de manière additive. errors contient les échecs de validation\nau niveau des champs (422 uniquement)."
      properties:
        detail:
          anyOf:
            - type: string
            - type: 'null'
          description: Explication en langage clair, spécifique à cette occurrence.
          title: Detail
        errors:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          description: Erreurs de validation par champ (réponses 422 uniquement).
          title: Errors
        instance:
          anyOf:
            - type: string
            - type: 'null'
          description: Une référence d’URI (le chemin de la requête) pour cette occurrence.
          title: Instance
        status:
          description: Le code d’état HTTP.
          title: Status
          type: integer
        title:
          description: Un bref résumé du type de problème, compréhensible par un humain.
          title: Title
          type: string
        type:
          default: about:blank
          description: Une référence d’URI identifiant le type de problème.
          title: Type
          type: string
      required:
        - title
        - status
      title: ProblemDetail
      type: object
    AutomationMessageSessionActionUpdate:
      additionalProperties: false
      properties:
        auto_create:
          default: false
          description: >-
            Lorsque true, le premier déclencheur crée une session de longue
            durée détenue par l’automatisation, puis les déclencheurs suivants
            lui envoient des messages.
          title: Auto Create
          type: boolean
        prompt:
          anyOf:
            - type: string
            - type: 'null'
          description: "La charge utile de l’événement déclencheur est ajoutée automatiquement. Obligatoire lors de la création ou de l’ajout de cette action\_; lors d’une mise à jour avec sémantique de fusion, omettez-la pour conserver la valeur stockée (null n’est pas valide)."
          title: Prompt
        target_devin_id:
          anyOf:
            - type: string
            - type: 'null'
          description: "Doit appartenir à l’organisation\_; la modification d’une automatisation contenant cette action nécessite un accès en écriture à la session cible (les modifications limitées à l’activation ou à la désactivation sont exemptées). Obligatoire sauf si auto_create est true, auquel cas il est défini côté serveur lorsque le premier déclencheur crée la session\_; les valeurs fournies par le client sont ignorées."
          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: "Injecté dans le prompt système de la session. Même syntaxe de jetons de référence que prompt. Obligatoire lors de la création ou de l’ajout de cette action\_; lors d’une mise à jour avec sémantique de fusion, omettez-le pour conserver la valeur stockée (null n’est pas valide)."
          title: Setup Prompt
        slack_monitor_config:
          anyOf:
            - $ref: '#/components/schemas/AutomationSlackMonitorConfig'
            - type: 'null'
          description: "Nécessite exactement un déclencheur slack:message sur le même canal. Obligatoire lors de la création ou de l’ajout de cette action\_; lors d’une mise à jour avec sémantique de fusion, omettez-le pour conserver la valeur stockée (null n’est pas valide)."
        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 source de vérité unique\_: texte brut avec des jetons de référence en ligne (@{owner}/{repo}, @{path}, @playbook:{id}, @skills:{name}, !{macro}, ${SECRET_NAME}). Les jetons préfixés par type sont validés lors de l'enregistrement\_; les ID inconnus renvoient une erreur 400. La charge utile de l'événement déclencheur est ajoutée automatiquement. Requis lors de la création ou de l'ajout de cette action\_; lors d'une mise à jour avec sémantique de fusion, omettez-le pour conserver la valeur enregistrée (null n'est pas valide)."
          title: Prompt
        session:
          $ref: '#/components/schemas/AutomationSessionConfig-Input'
          description: Configuration de la session générée.
        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: "Nombre maximal d’exécutions en cours pour cette automatisation\_; les événements déclenchés supplémentaires attendent dans sa file d’attente. Une exécution cesse de compter dans la limite lorsque sa session est terminée et attend des instructions supplémentaires, et pas uniquement lorsque la session s’arrête. null = illimité."
          title: Max Concurrent Runs
        max_queue_depth:
          anyOf:
            - minimum: 0
              type: integer
            - type: 'null'
          description: "Nombre maximal d’événements déclenchés en attente d’exécution dans la file d’attente de l’automatisation\_; les événements au-delà de cette limite sont ignorés. Nécessite la définition de max_concurrent_runs. null = illimité."
          title: Max Queue Depth
      title: AutomationConcurrency
      type: object
    AutomationLimits:
      additionalProperties: false
      properties:
        invocations:
          anyOf:
            - $ref: '#/components/schemas/AutomationInvocationLimits'
            - type: 'null'
          description: Limite la fréquence de déclenchement de l’automatisation.
        max_acu_limit:
          anyOf:
            - maximum: 1000
              minimum: 1
              type: integer
            - type: 'null'
          description: Par session générée (même nom que dans l’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: La liaison au profil de sécurité propre à l'automatisation.
      properties:
        profile_id:
          anyOf:
            - type: string
            - type: 'null'
          description: "Profil de sécurité à lier à cette automatisation. null enregistre une exclusion explicite (aucun profil, même lorsque l'organisation ou l'entreprise possède une valeur par défaut recommandée). L'écriture de ce champ requiert l'autorisation de gérer les profils de sécurité\_; une exclusion ne peut pas contourner un profil obligatoire au niveau de l'organisation ou de l'entreprise."
          title: Profile Id
      title: AutomationSecurityProfileSelection
      type: object
    AutomationSessionSettings-Input:
      additionalProperties: false
      description: |-
        Appliqué à chaque session créée par cette automatisation (y compris les
        sessions de surveillance).
      properties:
        devin_mode:
          anyOf:
            - enum:
                - normal
                - fast
                - lite
                - ultra
                - fusion
              type: string
            - type: 'null'
          description: null = valeur par défaut de l'organisation.
          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: Accorder l'accès aux outils Linear.
          title: Linear Enabled
        mcp_servers:
          default: []
          description: >-
            Slugs Marketplace (champ slug de la ressource mcp-servers, par ex.
            'github', 'notion') activés pour les sessions générées. Les serveurs
            installés avec une connexion personnelle (limitée à l'utilisateur)
            nécessitent run_as creator ; leur sélection avec run_as organization
            est refusée, car l'identité de service des automatisations ne
            dispose d'aucun jeton personnel pour ces serveurs, et le passage du
            run_as d'une automatisation à organization les retire de la
            sélection enregistrée.
          items:
            type: string
          title: Mcp Servers
          type: array
        slack_channels:
          default: []
          description: Canaux dans lesquels les outils Slack de la session peuvent publier.
          items:
            $ref: '#/components/schemas/AutomationSlackChannel'
          title: Slack Channels
          type: array
        slack_dm_scope:
          anyOf:
            - enum:
                - org_members
                - workspace
              type: string
            - type: 'null'
          description: >-
            Autoriser les sessions générées à ouvrir des DM Slack individuels
            dans les espaces de travail connectés de l'organisation.
            'org_members' (comptes Enterprise uniquement) limite les
            destinataires des DM aux membres de l'organisation ; 'workspace'
            (comptes non Enterprise uniquement) autorise tout membre éligible de
            l'espace de travail. Omettez cette valeur ou utilisez null pour
            désactiver les 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 correspond à tous les événements.
        event_type:
          description: Type d'événement déclencheur, par ex. '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: >-
            Emplacement auquel la session de ce déclencheur est liée et où sa
            réponse est envoyée. Seules les réponses du déclencheur
            correspondant sont exécutées ; toutes les entrées sont traitées
            indépendamment et dédupliquées.
          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: >-
            Lorsque true, le premier déclencheur crée une session de longue
            durée détenue par l’automatisation, puis les déclencheurs suivants
            lui envoient des messages.
          title: Auto Create
          type: boolean
        prompt:
          description: >-
            La charge utile de l’événement déclencheur est ajoutée
            automatiquement.
          title: Prompt
          type: string
        target_devin_id:
          anyOf:
            - type: string
            - type: 'null'
          description: "Doit appartenir à l’organisation\_; la modification d’une automatisation contenant cette action nécessite un accès en écriture à la session cible (les modifications limitées à l’activation ou à la désactivation sont exemptées). Obligatoire sauf si auto_create est true, auquel cas il est défini côté serveur lorsque le premier déclencheur crée la session\_; les valeurs fournies par le client sont ignorées."
          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: >-
            Injecté dans le prompt système de la session. Même syntaxe de jetons
            de référence que prompt.
          title: Setup Prompt
          type: string
        slack_monitor_config:
          $ref: '#/components/schemas/AutomationSlackMonitorConfig'
          description: Nécessite exactement un déclencheur slack:message sur le même 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 source de vérité unique\_: texte brut avec des jetons de référence en ligne (@{owner}/{repo}, @{path}, @playbook:{id}, @skills:{name}, !{macro}, ${SECRET_NAME}). Les jetons préfixés par type sont validés lors de l'enregistrement\_; les ID inconnus renvoient une erreur 400. La charge utile de l'événement déclencheur est ajoutée automatiquement."
          title: Prompt
          type: string
        session:
          $ref: '#/components/schemas/AutomationSessionConfig-Output'
          description: Configuration de la session générée.
        type:
          const: start_session
          default: start_session
          title: Type
          type: string
      required:
        - prompt
      title: AutomationStartSessionAction
      type: object
    ActorResponse:
      description: >-
        Un principal d’utilisateur ou d’utilisateur de service associé à une
        action ou une ressource.
      properties:
        id:
          description: ID utilisateur ou ID d’utilisateur de service.
          title: Id
          type: string
        name:
          anyOf:
            - type: string
            - type: 'null'
          description: "Nom d’affichage, déterminé côté serveur\_; null si supprimé."
          title: Name
        type:
          description: Type de 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 — énumération ouverte\_; les clients doivent accepter de nouvelles valeurs."
          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 liaison propre à l'automatisation\_: inherit (aucune liaison), none (exclusion explicite) ou profile (fige profile_id). Les sessions résolvent l'ensemble de la chaîne entreprise -> organisation -> automatisation\_: la politique réseau de l'automatisation ne peut que restreindre les politiques des profils applicables, et une exclusion ne peut pas contourner un profil obligatoire au niveau de l'organisation ou de l'entreprise."
          enum:
            - inherit
            - none
            - profile
          title: Selection
          type: string
        warnings:
          default: []
          description: "Conflits de configuration non bloquants, par exemple un serveur MCP recommandé dont le nom d’hôte de l’endpoint est bloqué par le profil applicable (les sessions générées ne pourront pas se connecter à ce serveur). Seuls les noms d’hôte des endpoints MCP distants sont vérifiés\_; une liste vide ne garantit pas que toutes les destinations MCP ou réseau fonctionneront. Renseigné lors de la lecture ou de l’écriture d’une seule automatisation\_; vide dans les réponses de liste."
          items:
            type: string
          title: Warnings
          type: array
      required:
        - selection
      title: AutomationSecurityProfileResponse
      type: object
    AutomationSessionSettings-Output:
      additionalProperties: false
      description: |-
        Appliqué à chaque session créée par cette automatisation (y compris les
        sessions de surveillance).
      properties:
        devin_mode:
          anyOf:
            - enum:
                - normal
                - fast
                - lite
                - ultra
                - fusion
              type: string
            - type: 'null'
          description: null = valeur par défaut de l'organisation.
          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: >-
            Régénéré lorsque triggers est remplacé — non stable d'une
            modification à l'autre.
          title: Trigger Id
          type: string
        webhook:
          anyOf:
            - $ref: '#/components/schemas/AutomationWebhookResponse'
            - type: 'null'
          description: Uniquement pour les déclencheurs 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: "Approuve automatiquement la création de sessions enfants (c'est la seule vérification que cet indicateur contourne)\_; toute future vérification contournable nécessitera un nouveau champ."
          title: Bypass Approval
          type: boolean
        notifications:
          anyOf:
            - $ref: '#/components/schemas/AutomationSessionNotificationsConfig'
            - type: 'null'
          description: >-
            Notifications relatives au contenu des sessions (actuellement
            disponibles uniquement dans Slack).
        platform:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Plateforme VM de la session. Si null, la session utilise la
            plateforme par défaut de l'organisation au moment de l'invocation.
          title: Platform
        playbook_id:
          anyOf:
            - type: string
            - type: 'null'
          description: "Lecture seule\_: dérivé du premier jeton @playbook: du prompt."
          title: Playbook Id
        repos:
          default: []
          description: "Lecture seule\_: dérivé des jetons de dépôt du prompt."
          items:
            type: string
          title: Repos
          type: array
        tags:
          default: []
          description: >-
            Balises de session. Pour les entreprises imposant le balisage, une
            seule valeur autorisée est requise.
          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 = le créateur de l’automatisation\_; obligatoire pour les automatisations créées par un utilisateur de service."
          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: OU de groupes ET (FND fixe à deux niveaux).
          items:
            $ref: '#/components/schemas/AutomationConditionGroup'
          title: Any
          type: array
      required:
        - any
      title: AutomationConditions
      type: object
    AutomationReply:
      additionalProperties: false
      properties:
        type:
          description: "notify_thread: indication unidirectionnelle «\_session démarrée\_» dans le fil déclencheur au moment de l’envoi (déclencheurs Slack). attach_thread: liaison bidirectionnelle avec le fil déclencheur au moment de l’envoi (déclencheurs Slack). post_response: transmet la réponse de l’agent au contexte déclencheur."
          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: "Approuve automatiquement la création de sessions enfants (c'est la seule vérification que cet indicateur contourne)\_; toute future vérification contournable nécessitera un nouveau champ."
          title: Bypass Approval
          type: boolean
        notifications:
          anyOf:
            - $ref: '#/components/schemas/AutomationSessionNotificationsConfig'
            - type: 'null'
          description: >-
            Notifications relatives au contenu des sessions (actuellement
            disponibles uniquement dans Slack).
        platform:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Plateforme VM de la session. Si null, la session utilise la
            plateforme par défaut de l'organisation au moment de l'invocation.
          title: Platform
        playbook_id:
          anyOf:
            - type: string
            - type: 'null'
          description: "Lecture seule\_: dérivé du premier jeton @playbook: du prompt."
          title: Playbook Id
        repos:
          default: []
          description: "Lecture seule\_: dérivé des jetons de dépôt du prompt."
          items:
            type: string
          title: Repos
          type: array
        tags:
          default: []
          description: >-
            Balises de session. Pour les entreprises imposant le balisage, une
            seule valeur autorisée est requise.
          items:
            type: string
          title: Tags
          type: array
      title: AutomationSessionConfig
      type: object
    AutomationConditions-Output:
      additionalProperties: false
      properties:
        any:
          description: OU de groupes ET (FND fixe à deux niveaux).
          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: >-
            Présent uniquement lorsqu'il vient d'être généré (à la création ou
            lors d'un réajout) ; il n'est ensuite plus récupérable. Le
            remplacement de triggers préserve le secret existant.
          title: Secret
        url:
          description: >-
            La boîte de réception vers laquelle les systèmes externes envoient
            des requêtes POST (en-tête X-Webhook-Secret).
          title: Url
          type: string
      required:
        - url
      title: AutomationWebhookResponse
      type: object
    AutomationSessionNotificationsConfig:
      additionalProperties: false
      description: >-
        Destination du contenu de la session générée, par opposition au

        groupe ``notifications`` au niveau de l’automatisation (notifications
        d’état d’envoi).
      properties:
        slack:
          anyOf:
            - $ref: '#/components/schemas/AutomationSessionSlackConfig'
            - type: 'null'
          description: "Associe la session à un espace Slack\_: communication bidirectionnelle pour post_updates/forward_thread et post_response une fois que sa diffusion initiale a associé le fil."
      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: "ET\_: chaque condition du groupe doit correspondre."
          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 session échange dans un fil du canal (disponible pour les déclencheurs autres que Slack). forward_thread\_: idem, avec en plus un lien de retour publié dans le fil à l'origine du déclenchement (nécessite un déclencheur Slack). post_response\_: la réponse finale de la session est publiée dans le canal sous forme de message de premier niveau, puis son fil est associé aux réponses et messages de suivi (disponible pour tout déclencheur)."
          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: Plage inclusive [low, high].
          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: "Motifs glob\_; tout chemin modifié qui correspond (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: "Opérateur unaire\_: correspond selon que le champ est vide\_; `value` ne contient aucune donnée."
      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: Expression régulière.
          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 pour le champ rrule de schedule:recurring, p. ex.
            FREQ=WEEKLY;BYDAY=MO;BYHOUR=9;BYMINUTE=0
          title: Value
          type: string
      required:
        - field
        - operator
        - value
      title: AutomationRecurrenceCondition
      type: object
  securitySchemes:
    bearerAuth:
      description: "Identifiant de compte de service (préfixe\_: cog_)"
      scheme: bearer
      type: http

````