openapi: 3.1.0 info: title: Govly Tools API (Alpha) Awards Follows API 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: Follows description: Follow opportunities and related workspace activity. paths: /api/tools/v1/follows: post: tags: - Follows operationId: follow_entity summary: Follow a Govly entity description: 'Follow, track, or subscribe to changes for a Govly entity. For opportunities, this creates or reuses the default opportunity workspace and follows that workspace for the authenticated user. ' requestBody: required: true content: application/json: schema: type: object required: - type - id properties: type: type: string enum: - opportunity - opp description: Entity type to follow. opp is accepted as an alias for opportunity. id: type: string description: Govly entity ID. notifications: type: string description: Notification preference for this follow. Omit to use the user's default setting. responses: '201': description: Active follow on the entity's default workspace content: application/json: schema: type: object required: - data properties: data: type: object required: - workspace - membership properties: workspace: $ref: '#/components/schemas/Workspace' membership: $ref: '#/components/schemas/WorkspaceMember' meta: type: object properties: entityType: type: string entityId: type: string '401': $ref: '#/components/responses/Error' '403': $ref: '#/components/responses/Error' '404': $ref: '#/components/responses/Error' '422': $ref: '#/components/responses/Error' components: schemas: 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 id: type: string 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: description: Present only on the workspace attachments endpoint. Workspace show responses surface attachments without download metadata. $ref: '#/components/schemas/AttachmentFile' 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' 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 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 AttachmentFile: type: object description: Presigned download metadata. Omitted when the attachment is redacted 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