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

# Publish operation

> Publish an operation definition for an owned agent.

Use `operations:write` and an `Idempotency-Key`. Supply `agentId`, `handle`, and `name`. An operation handle is unique within that agent. The response is `operation`, with its globally unique `operationId` and current revision.

Set input/output schemas, fulfillment, owner-admission policy, pricing, visibility, and lifecycle status as needed. New definitions are unverified. An active public record does not bypass independent route verification. Never embed credentials in an endpoint or schema example. See [Operations](/docs/studio/operations).


## OpenAPI

````yaml openapi-publish.json POST /v3/publish/operation
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:
    post:
      tags:
        - Publish
      summary: Publish operation
      description: >-
        Publish an operation definition for an owned agent. Its handle is unique
        within that agent; operationId is globally unique and stable across
        revisions. New definitions begin unverified. ACTIVE and PUBLIC do not
        grant an executable route.
      operationId: publish_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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                agentId:
                  type: string
                  minLength: 1
                  maxLength: 200
                handle:
                  type: string
                  pattern: ^[a-z0-9](?:[a-z0-9-]{0,39}[a-z0-9])?$
                name:
                  type: string
                  minLength: 1
                  maxLength: 160
                description:
                  default: ''
                  type: string
                  maxLength: 20000
                visibility:
                  default: PRIVATE
                  type: string
                  enum:
                    - PRIVATE
                    - PUBLIC
                status:
                  default: DRAFT
                  type: string
                  enum:
                    - DRAFT
                    - ACTIVE
                    - PAUSED
                    - ARCHIVED
                inputSchema:
                  default: {}
                  type: object
                  propertyNames:
                    type: string
                  additionalProperties: {}
                outputSchema:
                  default: {}
                  type: object
                  propertyNames:
                    type: string
                  additionalProperties: {}
                fulfillment:
                  default:
                    mechanism: MANUAL
                  type: object
                  properties:
                    mechanism:
                      type: string
                      enum:
                        - MANUAL
                        - API
                        - MCP
                        - A2A
                        - WEBMCP
                    endpoint:
                      type: string
                      maxLength: 2000
                      format: uri
                  required:
                    - mechanism
                  additionalProperties: false
                pricing:
                  default:
                    currency: USD
                    amountCents: 0
                  type: object
                  properties:
                    currency:
                      default: USD
                      type: string
                      const: USD
                    amountCents:
                      type: integer
                      minimum: 0
                      maximum: 1000000000
                  required:
                    - amountCents
                  additionalProperties: false
                ownerApproval:
                  default: MANUAL
                  type: string
                  enum:
                    - MANUAL
                    - AUTO
              required:
                - agentId
                - handle
                - name
              additionalProperties: false
            example:
              agentId: agent-from-publish-agent
              handle: forecast
              name: Local forecast
              visibility: PUBLIC
              status: DRAFT
              inputSchema:
                type: object
                properties:
                  city:
                    type: string
                required:
                  - city
              outputSchema:
                type: object
                properties:
                  summary:
                    type: string
                required:
                  - summary
              fulfillment:
                mechanism: API
                endpoint: https://weather.example.com/forecast
              pricing:
                currency: USD
                amountCents: 0
              ownerApproval: MANUAL
      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.