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

# Unfollow a Govly entity

> Stops following an opportunity, award, or contact for the authenticated user. Whether anything is cleared is decided entirely by the caller's follow on the entity's default workspace. When that follow is in the following state, it is cleared along with the caller's follows on every other workspace for the same entity, not only the default one returned in the response, and a subsequent follow restores the default workspace alone. When there is no default workspace for the entity, or the caller's follow on it is in any other state, nothing is cleared anywhere and meta.noOp is true — including when the caller holds an active follow on a non-default workspace, which this operation cannot clear. Idempotent: the call succeeds without writing anything and reports meta.noOp true with a null workspace and membership whenever there is no follow to clear. Only follows in the following state are cleared — a follow in any other state (considered, assigned, invited, disinterested, or already unfollowed) is left unchanged and also reports meta.noOp true, so meta.noOp true does not by itself mean the user has no workspace membership for the entity. A 404 means the target is not currently visible to the caller and does not imply that no follow exists; a follow on a target that has left the caller's visibility cannot be cleared through this operation. This applies to contacts, which are resolvable only while active, and to opportunities, whose visibility depends on the caller's access; awards are resolved without a visibility filter, so a 404 for an award means it does not exist. Unfollowing emits no event, activity, or webhook. The notifications parameter is not accepted here and is ignored if sent.




## OpenAPI

````yaml /openapi/tools-v1.yaml delete /api/tools/v1/follows
openapi: 3.1.0
info:
  title: Govly Tools API (Alpha)
  version: 1.0.0-alpha
  description: >
    ALPHA / UNSTABLE: This API is still in active development. Endpoint
    behavior, request fields, response fields, error codes, and operation names
    may change before the Tools API is declared stable.

    REST-callable tool surface for agent and automation workflows. Agents are
    the primary consumer, but integrations can be built on this API. Responses
    are JSON for typed clients; MCP tools may render action results into
    text-oriented formats separately.
servers:
  - url: https://app.govly.com
security:
  - bearerApiKey: []
  - headerApiKey: []
tags:
  - name: Opportunities
    description: Search, fetch, and inspect Govly opportunity records.
  - name: Awards
    description: Search and inspect awarded government contracts.
  - name: Contacts
    description: Search and inspect government points of contact.
  - name: Signals
    description: Search clustered procurement and market intelligence signals.
  - name: Workspaces
    description: Create, update, and inspect opportunity workspaces.
  - name: Workspace Members
    description: Add users and teams to workspaces.
  - name: Workspace Attachments
    description: List and upload workspace attachments.
  - name: Workspace Comments
    description: Post comments to workspaces.
  - name: Follows
    description: Follow opportunities and related workspace activity.
  - name: Saved Searches
    description: List saved opportunity searches and cached matches.
  - name: Documents
    description: >-
      Read document representations and request temporary original-file
      downloads.
  - name: Quote Submissions
    description: >-
      Inspect quote submission requirements, submit quotes, and poll submission
      status.
  - name: Inbox
    description: Read and triage the authenticated user's matched inbox items.
paths:
  /api/tools/v1/follows:
    delete:
      tags:
        - Follows
      summary: Unfollow a Govly entity
      description: >
        Stops following an opportunity, award, or contact for the authenticated
        user. Whether anything is cleared is decided entirely by the caller's
        follow on the entity's default workspace. When that follow is in the
        following state, it is cleared along with the caller's follows on every
        other workspace for the same entity, not only the default one returned
        in the response, and a subsequent follow restores the default workspace
        alone. When there is no default workspace for the entity, or the
        caller's follow on it is in any other state, nothing is cleared anywhere
        and meta.noOp is true — including when the caller holds an active follow
        on a non-default workspace, which this operation cannot clear.
        Idempotent: the call succeeds without writing anything and reports
        meta.noOp true with a null workspace and membership whenever there is no
        follow to clear. Only follows in the following state are cleared — a
        follow in any other state (considered, assigned, invited, disinterested,
        or already unfollowed) is left unchanged and also reports meta.noOp
        true, so meta.noOp true does not by itself mean the user has no
        workspace membership for the entity. A 404 means the target is not
        currently visible to the caller and does not imply that no follow
        exists; a follow on a target that has left the caller's visibility
        cannot be cleared through this operation. This applies to contacts,
        which are resolvable only while active, and to opportunities, whose
        visibility depends on the caller's access; awards are resolved without a
        visibility filter, so a 404 for an award means it does not exist.
        Unfollowing emits no event, activity, or webhook. The notifications
        parameter is not accepted here and is ignored if sent.
      operationId: unfollow_entity
      parameters:
        - name: type
          in: query
          required: true
          schema:
            type: string
            enum:
              - opportunity
              - opp
              - award
              - contact
          description: >-
            Entity type to unfollow. opp is accepted as an alias for
            opportunity.
        - name: id
          in: query
          required: true
          schema:
            type: string
          description: Govly entity ID.
      responses:
        '200':
          description: Follow cleared, or already absent
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                  - meta
                properties:
                  data:
                    type: object
                    required:
                      - workspace
                      - membership
                    properties:
                      workspace:
                        oneOf:
                          - $ref: '#/components/schemas/Workspace'
                          - type: 'null'
                      membership:
                        oneOf:
                          - $ref: '#/components/schemas/WorkspaceMember'
                          - type: 'null'
                  meta:
                    type: object
                    required:
                      - entityType
                      - entityId
                      - noOp
                    properties:
                      entityType:
                        type: string
                      entityId:
                        type: string
                      noOp:
                        type: boolean
                        description: >
                          True when the call changed nothing — either no follow
                          exists, or the existing follow was not in the
                          following state.
        '401':
          $ref: '#/components/responses/Error'
        '403':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
        '422':
          $ref: '#/components/responses/Error'
components:
  schemas:
    Workspace:
      type: object
      required:
        - id
        - name
        - status
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        commentsCount:
          type: integer
        status:
          type: object
          required:
            - category
            - label
          properties:
            category:
              type: string
              description: >-
                Coarse status bucket. Triage is the default for newly created
                workspaces.
            label:
              type: string
              description: >-
                Human-readable status name. Falls back to the category label
                when no custom status is set.
        primaryFocus:
          $ref: '#/components/schemas/AssociatedEntity'
        comments:
          type: array
          description: >-
            Recent comments. Only present on show/create/update responses,
            capped at the most recent 20.
          items:
            $ref: '#/components/schemas/Comment'
        attachments:
          type: array
          description: Workspace attachments. Only present on show/create/update responses.
          items:
            $ref: '#/components/schemas/WorkspaceAttachment'
    WorkspaceMember:
      type: object
      required:
        - id
        - member
      properties:
        id:
          type: string
        state:
          type: string
        notifications:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        member:
          type: object
          required:
            - type
            - id
          properties:
            type:
              type: string
              enum:
                - user
                - team
            id:
              type: string
            name:
              type: string
            email:
              type: string
              format: email
            organization:
              type: object
              properties:
                id:
                  type: string
                name:
                  type: string
    AssociatedEntity:
      type: object
      required:
        - type
        - id
      properties:
        type:
          type: string
          enum:
            - opportunity
            - award
            - contact
        id:
          type: string
    Comment:
      type: object
      required:
        - id
        - body
        - createdAt
        - attachments
      properties:
        id:
          type: string
        body:
          type: string
          description: Markdown body for the comment.
        attachments:
          type: array
          description: Workspace attachments tied to this comment.
          items:
            $ref: '#/components/schemas/WorkspaceAttachment'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    WorkspaceAttachment:
      type: object
      required:
        - id
        - workspaceId
        - filename
      properties:
        id:
          type: string
        workspaceId:
          type: string
        commentId:
          type: string
          nullable: true
        filename:
          type: string
        contentType:
          type: string
        byteSize:
          type: integer
        createdAt:
          type: string
          format: date-time
        file:
          $ref: '#/components/schemas/AttachmentFile'
          description: >-
            Present only on the workspace attachments endpoint. Workspace show
            responses surface attachments without download metadata.
    ErrorEnvelope:
      type: object
      required:
        - errors
      properties:
        errors:
          type: array
          items:
            type: object
            required:
              - status
              - code
              - title
              - detail
            properties:
              status:
                type: string
              code:
                type: string
              title:
                type: string
              detail:
                type: string
              source:
                type: object
                properties:
                  pointer:
                    type: string
    AttachmentFile:
      type: object
      description: >-
        Presigned download metadata. Omitted when attachment content is
        unavailable or URLs are excluded.
      required:
        - url
        - expiresAt
      properties:
        url:
          type: string
          format: uri
        expiresAt:
          type: string
          format: date-time
  responses:
    Error:
      description: Error response
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
  securitySchemes:
    bearerApiKey:
      type: http
      scheme: bearer
      bearerFormat: API key
    headerApiKey:
      type: apiKey
      in: header
      name: X-API-KEY

````