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

# Set or clear a project's webhook URL

> Sets the project's default webhook URL (`{"url": "https://..."}`) or clears it (`{"url": null}`). The URL goes through the same checks as a job's `callback_url` (400 names the rule it broke). Saving a URL turns the webhook on at once: from then on every async video and image job and every batch of the project that names no `callback_url` sends its signed webhook there. A `callback_url` on the request always wins. Requires the `apikeys:write` scope.



## OpenAPI

````yaml patch /management/v1/projects/{uuid}/webhook
openapi: 3.1.0
info:
  description: Schema-driven generative API that orchestrates LLM-powered workflows.
  title: Task API
  version: 3.0.0
servers:
  - description: Production
    url: https://api.opper.ai
  - description: Local development
    url: http://localhost:8080
security:
  - BearerAuth: []
tags:
  - description: OpenAI-compatible chat completions
    name: Chat
  - description: OpenAI Responses API compatible endpoint
    name: Responses
  - description: Google-compatible interactions endpoint
    name: Interactions
  - description: Model registry and capabilities
    name: Models
  - description: Synchronous image generation
    name: Images
  - description: Text-to-speech and speech-to-text
    name: Audio
  - description: Asynchronous video generation
    name: Videos
  - description: Realtime WebSocket sessions and their ephemeral tickets
    name: Realtime
  - description: Many requests on a provider's batch API at the batch price
    name: Batches
  - description: Reusable file storage for media inputs and generated outputs
    name: Files
  - description: Async generation status and downloads
    name: Artifacts
  - description: >-
      Signed completion webhooks for async jobs, and the project secret that
      signs them
    name: Webhooks
  - description: OpenAI-compatible embeddings
    name: Embeddings
  - description: Recorded HTTP request/response generations
    name: Generations
  - description: System health and status
    name: System
  - description: Roundtable endpoint — fan out a query to multiple LLMs and combine results
    name: Roundtable
  - description: Web search, fetch, and other utility tools
    name: Tools
  - description: Caller identity, credits, and usage
    name: Account
  - description: >-
      Programmatic project and API-key management. Authenticates with an
      `op-mak-…` management token; available on the control_plane and enterprise
      plans.
    name: Management
paths:
  /management/v1/projects/{uuid}/webhook:
    patch:
      tags:
        - Management
      summary: Set or clear a project's webhook URL
      description: >-
        Sets the project's default webhook URL (`{"url": "https://..."}`) or
        clears it (`{"url": null}`). The URL goes through the same checks as a
        job's `callback_url` (400 names the rule it broke). Saving a URL turns
        the webhook on at once: from then on every async video and image job and
        every batch of the project that names no `callback_url` sends its signed
        webhook there. A `callback_url` on the request always wins. Requires the
        `apikeys:write` scope.
      operationId: updateManagementProjectWebhook
      parameters:
        - description: Project UUID
          in: path
          name: uuid
          required: true
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              properties:
                url:
                  description: An https URL, or null to clear it.
                  type:
                    - string
                    - 'null'
              required:
                - url
              type: object
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    properties:
                      previous_secret_valid_until:
                        description: >-
                          Set for 24 hours after a rotation: until then webhooks
                          also carry a signature made with the previous secret.
                        format: date-time
                        type:
                          - string
                          - 'null'
                      secret_created_at:
                        description: >-
                          When the current signing secret was made; null before
                          the project's first secret.
                        format: date-time
                        type:
                          - string
                          - 'null'
                      url:
                        description: >-
                          Where an async job of the project submitted without a
                          `callback_url` sends its webhook; null when the
                          project has none.
                        type:
                          - string
                          - 'null'
                      url_updated_at:
                        description: >-
                          When `url` was last set or cleared; null when it never
                          was.
                        format: date-time
                        type:
                          - string
                          - 'null'
                    required:
                      - url
                      - url_updated_at
                      - secret_created_at
                      - previous_secret_valid_until
                    type: object
                  meta:
                    type: object
                type: object
          description: Successful response
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Bad request
        '401':
          description: Unauthorized - missing or invalid API key
        '403':
          content:
            application/json:
              schema:
                properties:
                  error:
                    type: string
                  required_scope:
                    description: Present on the scope refusal.
                    type: string
                type: object
          description: >-
            The token lacks the scope this endpoint requires (`required_scope`
            is returned).
        '404':
          content:
            application/json:
              schema:
                properties:
                  error:
                    type: string
                type: object
          description: >-
            No such project in the calling organization. A project of another
            organization is indistinguishable from one that does not exist.
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Internal server error
        '503':
          content:
            application/json:
              schema:
                properties:
                  error:
                    type: string
                type: object
          description: Webhook signing is not configured on this deployment.
      security:
        - ManagementBearer: []
components:
  schemas:
    ErrorResponse:
      properties:
        error:
          properties:
            code:
              type: string
            details:
              description: Any value
            message:
              type: string
          required:
            - code
            - message
          type: object
        meta:
          type: object
      required:
        - error
      type: object
  securitySchemes:
    BearerAuth:
      bearerFormat: API Key
      description: API key authentication. Pass your API key as a Bearer token.
      scheme: bearer
      type: http
    ManagementBearer:
      bearerFormat: Management API Key
      description: >-
        Management API authentication. Pass an `op-mak-…` management token as a
        Bearer token. Runtime `op-…` API keys are rejected with 403 — they
        belong on the data-plane endpoints. Mint a management key from the
        platform UI under Settings → API keys.
      scheme: bearer
      type: http

````

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