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

# Update operation

> Update an owned operation without overwriting concurrent edits.

Read [Get operation](/docs/reference/studio-get-operation), then send its `revision` as `expectedRevision` with an `Idempotency-Key`. Omitted fields stay unchanged. The stable `operationId` stays the same; the revision increments.

An edit creates a new definition revision and resets executable-route verification. Earlier bindings do not silently authorize changed inputs or effects. Archived operations cannot be edited. A stale revision returns `409`.


## OpenAPI

````yaml openapi-publish.json PATCH /v3/publish/operation/{operationId}
openapi: 3.1.0
info:
  title: Publish
  version: 3.0.0
  description: >-
    Owner-authorized agent and operation publishing, operating decisions and
    analytics, and durable campaign management. Publishing records does not
    bypass independent execution verification. Campaign submission requests
    review; it does not activate delivery or authorize spending.
servers:
  - url: https://api.darwin.so/api
security: []
paths:
  /v3/publish/operation/{operationId}:
    patch:
      tags:
        - Publish
      summary: Update operation
      description: >-
        Update a definition with expectedRevision. Each edit creates a new
        operation revision and resets route verification; old execution bindings
        are not silently reused. Archived operations cannot be changed.
      operationId: update_published_operation
      parameters:
        - name: Idempotency-Key
          in: header
          required: true
          description: >-
            Stable key for this exact mutation. Reusing it with different input
            returns 409.
          schema:
            type: string
            minLength: 1
            maxLength: 200
        - name: operationId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                handle:
                  type: string
                  pattern: ^[a-z0-9](?:[a-z0-9-]{0,39}[a-z0-9])?$
                name:
                  type: string
                  minLength: 1
                  maxLength: 160
                description:
                  type: string
                  maxLength: 20000
                visibility:
                  type: string
                  enum:
                    - PRIVATE
                    - PUBLIC
                status:
                  type: string
                  enum:
                    - DRAFT
                    - ACTIVE
                    - PAUSED
                    - ARCHIVED
                inputSchema:
                  type: object
                  propertyNames:
                    type: string
                  additionalProperties: {}
                outputSchema:
                  type: object
                  propertyNames:
                    type: string
                  additionalProperties: {}
                fulfillment:
                  type: object
                  properties:
                    mechanism:
                      type: string
                      enum:
                        - MANUAL
                        - API
                        - MCP
                        - A2A
                        - WEBMCP
                    endpoint:
                      type: string
                      maxLength: 2000
                      format: uri
                  required:
                    - mechanism
                  additionalProperties: false
                pricing:
                  type: object
                  properties:
                    currency:
                      default: USD
                      type: string
                      const: USD
                    amountCents:
                      type: integer
                      minimum: 0
                      maximum: 1000000000
                  required:
                    - amountCents
                  additionalProperties: false
                ownerApproval:
                  type: string
                  enum:
                    - MANUAL
                    - AUTO
                expectedRevision:
                  type: integer
                  minimum: 1
                  maximum: 2147483647
              required:
                - expectedRevision
              additionalProperties: false
            example:
              expectedRevision: 1
              description: A local forecast for the requested city.
      responses:
        '200':
          description: >-
            Current owner-scoped result. A mutation retry returns its saved
            response.
          content:
            application/json:
              schema:
                type: object
                properties:
                  operation:
                    type: object
                    properties:
                      operationId:
                        type: string
                      agentId:
                        type: string
                      handle:
                        anyOf:
                          - type: string
                          - type: 'null'
                      name:
                        type: string
                      description:
                        type: string
                      revision:
                        type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                      visibility:
                        type: string
                      status:
                        type: string
                      readiness:
                        type: string
                      inputSchema: {}
                      outputSchema: {}
                      fulfillment: {}
                      pricing: {}
                      ownerApproval:
                        type: string
                        enum:
                          - MANUAL
                          - AUTO
                      createdAt:
                        type: string
                        format: date-time
                        pattern: >-
                          ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                      updatedAt:
                        type: string
                        format: date-time
                        pattern: >-
                          ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                    required:
                      - operationId
                      - agentId
                      - handle
                      - name
                      - description
                      - revision
                      - visibility
                      - status
                      - readiness
                      - inputSchema
                      - outputSchema
                      - fulfillment
                      - pricing
                      - ownerApproval
                      - createdAt
                      - updatedAt
                    additionalProperties: false
                  pendingApprovals:
                    type: array
                    items:
                      type: object
                      properties:
                        approvalId:
                          type: string
                        requestId:
                          type: string
                        operationRevision:
                          type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                        expectedUpdatedAt:
                          type: string
                          format: date-time
                          pattern: >-
                            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                        reviewToken:
                          type: string
                        expiresAt:
                          anyOf:
                            - type: string
                              format: date-time
                              pattern: >-
                                ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                            - type: 'null'
                      required:
                        - approvalId
                        - requestId
                        - operationRevision
                        - expectedUpdatedAt
                        - reviewToken
                        - expiresAt
                      additionalProperties: false
                required:
                  - operation
                additionalProperties: false
        '400':
          description: Invalid request.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type:
                      - string
                      - array
                  code:
                    type: string
        '401':
          description: Missing or invalid credentials.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type:
                      - string
                      - array
                  code:
                    type: string
        '403':
          description: Insufficient scope or user authority.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type:
                      - string
                      - array
                  code:
                    type: string
        '404':
          description: Resource is absent or not owned by this caller.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type:
                      - string
                      - array
                  code:
                    type: string
        '409':
          description: Revision, handle, idempotency, or decision conflict.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type:
                      - string
                      - array
                  code:
                    type: string
        '503':
          description: Canonical product storage or migration is unavailable.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type:
                      - string
                      - array
                  code:
                    type: string
      security:
        - apiKey: []
        - apiKeyBearer: []
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
    apiKeyBearer:
      type: http
      scheme: bearer
      description: A Darwin API key supplied as an Authorization Bearer token.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.