openapi: 3.1.0 info: title: Govly Tools API (Alpha) Awards Workspace Attachments 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: Workspace Attachments description: List and upload workspace attachments. paths: /api/tools/v1/workspaces/{workspaceId}/attachments: get: tags: - Workspace Attachments operationId: list_workspace_attachments summary: List workspace attachments parameters: - $ref: '#/components/parameters/workspaceId' responses: '200': description: Workspace attachments content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/WorkspaceAttachment' meta: $ref: '#/components/schemas/CountMeta' '401': $ref: '#/components/responses/Error' '403': $ref: '#/components/responses/Error' '404': $ref: '#/components/responses/Error' post: tags: - Workspace Attachments operationId: upload_workspace_attachments summary: Upload workspace attachments parameters: - $ref: '#/components/parameters/workspaceId' requestBody: required: true content: multipart/form-data: schema: type: object required: - attachments properties: attachments: type: array items: type: string format: binary application/json: schema: type: object required: - attachments properties: attachments: type: array items: type: string description: ActiveStorage signed blob ID responses: '201': description: Created attachments content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/WorkspaceAttachment' meta: $ref: '#/components/schemas/CountMeta' '401': $ref: '#/components/responses/Error' '403': $ref: '#/components/responses/Error' '422': $ref: '#/components/responses/Error' components: parameters: workspaceId: name: workspaceId in: path required: true schema: type: string schemas: CountMeta: type: object required: - count properties: count: type: integer 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' 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 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