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

# Update Monitor

> Partially update a monitor — send only the fields you want to change. Rename it, change which signal types it listens for, pause or resume it (active), or manage its webhook: a new webhook_url replaces the endpoint and mints a new signing secret (returned once, in this response); webhook_url: null detaches the webhook and leaves the monitor email-only; sending the URL it already has changes nothing and returns no secret. The change is atomic: if the new webhook_url is rejected (400), the monitor keeps its current endpoint and keeps delivering. Changes apply to delivery immediately. Free (0 credits).



## OpenAPI

````yaml PUT /monitors/{id}
openapi: 3.1.0
info:
  title: Monitoring API
  description: >-
    Manage account monitoring over REST. A monitor is a named group of watch
    targets (company domains, LinkedIn company pages, or LinkedIn member
    profiles) with its own signal-type selection and an optional webhook
    endpoint. Create monitors, add and remove targets, change what a monitor
    listens for, pause it, and delete it. The dashboard Monitoring page calls
    the same code path, so monitors created in either place are fully manageable
    from the other.
  license:
    name: MIT
  version: 2.0.0
servers:
  - url: https://www.trysignalbase.com/api/v2
security:
  - bearerAuth: []
paths:
  /monitors/{id}:
    put:
      summary: Update Monitor
      description: >-
        Partially update a monitor — send only the fields you want to change.
        Rename it, change which signal types it listens for, pause or resume it
        (active), or manage its webhook: a new webhook_url replaces the endpoint
        and mints a new signing secret (returned once, in this response);
        webhook_url: null detaches the webhook and leaves the monitor
        email-only; sending the URL it already has changes nothing and returns
        no secret. The change is atomic: if the new webhook_url is rejected
        (400), the monitor keeps its current endpoint and keeps delivering.
        Changes apply to delivery immediately. Free (0 credits).
      operationId: updateMonitor
      parameters:
        - $ref: '#/components/parameters/MonitorId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MonitorUpdateRequest'
            examples:
              changeSignals:
                summary: Rename and change signal types
                value:
                  name: Tier 1 accounts
                  signal_types:
                    - acquisition
                    - job_change
              pause:
                summary: Pause the monitor
                value:
                  active: false
              replaceWebhook:
                summary: Point the monitor at a new endpoint (new secret returned once)
                value:
                  webhook_url: https://example.com/hooks/v2
              detachWebhook:
                summary: Detach the webhook (email-only)
                value:
                  webhook_url: null
      responses:
        '200':
          description: >-
            The updated monitor. data.webhook.secret is present only when this
            request replaced the webhook endpoint.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MonitorResponse'
              example:
                success: true
                data:
                  id: 29681a72-ed3d-41a8-b119-2c2942b34996
                  name: Tier 1 accounts
                  signal_types:
                    - acquisition
                    - job_change
                  active: true
                  webhook:
                    id: 4141b666-835e-482d-8074-22c02eaf196a
                    endpoint_url: https://example.com/hooks/signalbase
                  stats:
                    targets: 4
                    resolved_targets: 2
                    signals_30d: 1
                    last_delivery_at: '2026-09-19T08:00:00.000Z'
                  created_at: '2026-09-20T13:10:38.502Z'
                  updated_at: '2026-09-20T13:11:52.903Z'
                meta:
                  endpoint: monitors.update
                  creditsUsed: 0
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/SubscriptionExpired'
        '404':
          $ref: '#/components/responses/MonitorNotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  parameters:
    MonitorId:
      name: id
      in: path
      required: true
      description: The monitor ID.
      schema:
        type: string
  schemas:
    MonitorUpdateRequest:
      type: object
      minProperties: 1
      description: Send at least one field. Omitted fields are left unchanged.
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 255
        signal_types:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/SignalType'
          description: Replaces the full list.
        webhook_url:
          type:
            - string
            - 'null'
          format: uri
          maxLength: 500
          description: >-
            A new URL replaces the endpoint and mints a new signing secret. null
            detaches the webhook. The current URL is a no-op.
        active:
          type: boolean
          description: false pauses delivery; true resumes it.
    MonitorResponse:
      type: object
      required:
        - success
        - data
        - meta
      properties:
        success:
          type: boolean
          const: true
        data:
          $ref: '#/components/schemas/Monitor'
        meta:
          $ref: '#/components/schemas/ResponseMeta'
    SignalType:
      type: string
      enum:
        - funding_round
        - acquisition
        - job_change
        - hiring
      description: >-
        A signal type a monitor can listen for. funding_round = the company
        raised a round; acquisition = the company acquired or was acquired;
        job_change = someone joined or left the company; hiring = the company
        posted a new job.
    Monitor:
      type: object
      required:
        - id
        - name
        - signal_types
        - active
        - webhook
        - stats
        - created_at
        - updated_at
      properties:
        id:
          type: string
          description: Unique monitor ID (UUID).
        name:
          type: string
          description: Display name.
        signal_types:
          type: array
          items:
            $ref: '#/components/schemas/SignalType'
          description: Signal types this monitor delivers.
        active:
          type: boolean
          description: 'false = paused: targets are kept, nothing is delivered.'
        webhook:
          oneOf:
            - $ref: '#/components/schemas/MonitorWebhook'
            - type: 'null'
          description: The monitor's webhook, or null for an email-only monitor.
        stats:
          oneOf:
            - $ref: '#/components/schemas/MonitorStats'
            - type: 'null'
          description: >-
            Monitor statistics. null only in the rare case where an Update
            Monitor request was applied but its statistics could not be read
            back — the update itself succeeded; call Retrieve Monitor for the
            numbers.
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    ResponseMeta:
      type: object
      required:
        - endpoint
        - creditsUsed
      properties:
        endpoint:
          type: string
          description: Endpoint identifier (e.g. monitors.create).
        creditsUsed:
          type: integer
          minimum: 0
          description: >-
            API credits consumed by this request. Always 0 for the Monitoring
            API.
    ErrorResponse:
      type: object
      required:
        - success
        - error
        - code
      properties:
        success:
          type: boolean
          const: false
        error:
          type: string
          description: Human-readable error message.
        code:
          type: string
          enum:
            - bad_request
            - invalid_api_key
            - subscription_expired
            - not_found
            - rate_limited
            - internal_server_error
            - internal_error
        retryAfter:
          type: integer
          description: >-
            Seconds until a retry is recommended. Present on rate-limit (429)
            responses.
    MonitorWebhook:
      type: object
      required:
        - id
        - endpoint_url
      description: The webhook subscription owned by this monitor.
      properties:
        id:
          type: string
          description: >-
            Webhook subscription ID. Usable with the Webhooks API to send a test
            event, list deliveries, retry a failed delivery, or rotate the
            secret. Editing or deleting it through the Webhooks API is rejected
            with 409 — manage it with Update Monitor.
        endpoint_url:
          type:
            - string
            - 'null'
          description: The endpoint that receives this monitor's signals.
        secret:
          type: string
          description: >-
            Signing secret for verifying deliveries. Present ONLY in the
            response to the request that created this endpoint (Create Monitor
            with webhook_url, or Update Monitor with a new webhook_url).
    MonitorStats:
      type: object
      required:
        - targets
        - resolved_targets
        - signals_30d
        - last_delivery_at
      properties:
        targets:
          type: integer
          minimum: 0
          description: Number of targets in the monitor.
        resolved_targets:
          type: integer
          minimum: 0
          description: Targets matched to a company (status resolved).
        signals_30d:
          type: integer
          minimum: 0
          description: >-
            Signals of any type recorded in the last 30 days for the monitor's
            resolved companies.
        last_delivery_at:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Most recent successful delivery from this monitor (webhook or
            email), or null if none yet.
  responses:
    BadRequest:
      description: >-
        Invalid JSON or field values, an unknown signal type, a non-public
        webhook URL, no valid target in the request, or a team limit was reached
        (20 monitors, 1,000 targets).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error: >-
              signal_types must be a non-empty array of: funding_round,
              acquisition, job_change, hiring
            code: bad_request
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error: Invalid API key. No key found.
            code: invalid_api_key
    SubscriptionExpired:
      description: The API key belongs to a team without an active subscription.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error: >-
              Subscription expired. Please upgrade your subscription:
              https://www.trysignalbase.com/#pricing
            code: subscription_expired
    MonitorNotFound:
      description: No monitor with that ID exists for the authenticated team.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error: Monitor not found
            code: not_found
    RateLimited:
      description: >-
        Rate limit exceeded for this team and endpoint. The response also sets
        Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, and
        X-RateLimit-Reset headers.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error: Too many requests. Please upgrade your plan or slow down.
            code: rate_limited
            retryAfter: 60
    InternalError:
      description: Unexpected server error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error: An unknown error occurred
            code: internal_error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: >-
        Signalbase API key. Include as a Bearer token in the Authorization
        header.

````