openapi: 3.0.3 info: title: Feathery REST Account Workspaces API description: 'RESTful API for managing forms, fields, submissions, documents, end users, and workflows. Feathery is an enterprise form SDK and AI-driven data intake platform purpose-built for financial services including insurance and wealth management. Supports multi-region deployments across US, Canada, Europe, and Australia with token-based authentication. ' version: 1.0.0 contact: url: https://www.feathery.io license: name: Proprietary servers: - url: https://api.feathery.io description: US (default) - url: https://api-ca.feathery.io description: Canada - url: https://api-eu.feathery.io description: Europe - url: https://api-au.feathery.io description: Australia security: - TokenAuth: [] tags: - name: Workspaces description: Workspace management paths: /api/workspace/: get: operationId: listWorkspaces summary: List all workspaces description: Retrieve a list of all workspaces. tags: - Workspaces parameters: - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Page' responses: '200': description: List of workspaces content: application/json: schema: $ref: '#/components/schemas/PaginatedWorkspaces' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createWorkspace summary: Create workspace description: Create a new workspace. tags: - Workspaces requestBody: required: true content: application/json: schema: type: object required: - name properties: name: type: string description: Name of the workspace responses: '201': description: Workspace created successfully content: application/json: schema: $ref: '#/components/schemas/Workspace' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' /api/workspace/{workspace_id}/: get: operationId: getWorkspace summary: Retrieve workspace description: Retrieve a specific workspace. tags: - Workspaces parameters: - $ref: '#/components/parameters/WorkspaceId' responses: '200': description: Workspace details content: application/json: schema: $ref: '#/components/schemas/Workspace' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' patch: operationId: updateWorkspace summary: Update workspace description: Update a specific workspace. tags: - Workspaces parameters: - $ref: '#/components/parameters/WorkspaceId' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: New name for the workspace responses: '200': description: Workspace updated successfully content: application/json: schema: $ref: '#/components/schemas/Workspace' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteWorkspace summary: Delete workspace description: Delete a specific workspace. tags: - Workspaces parameters: - $ref: '#/components/parameters/WorkspaceId' responses: '204': description: Workspace deleted successfully '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /api/workspace/{workspace_id}/login-token/: post: operationId: generateWorkspaceLoginToken summary: Generate login token description: Generate a login token for a workspace. tags: - Workspaces parameters: - $ref: '#/components/parameters/WorkspaceId' requestBody: required: false content: application/json: schema: type: object properties: expiry: type: integer description: Token expiry in seconds responses: '200': description: Login token generated content: application/json: schema: type: object properties: token: type: string description: Login token expires_at: type: string format: date-time description: Token expiry datetime '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /api/workspace/{workspace_id}/populate-form/: post: operationId: populateWorkspaceForm summary: Populate workspace from template description: Populate a workspace from a form template. tags: - Workspaces parameters: - $ref: '#/components/parameters/WorkspaceId' requestBody: required: true content: application/json: schema: type: object required: - template_id properties: template_id: type: string description: Template ID to populate from responses: '200': description: Workspace populated successfully '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /api/workspace/{workspace_id}/form-report/: get: operationId: getWorkspaceFormReport summary: Get form report description: Retrieve a form report for a workspace. tags: - Workspaces parameters: - $ref: '#/components/parameters/WorkspaceId' - $ref: '#/components/parameters/StartTime' - $ref: '#/components/parameters/EndTime' responses: '200': description: Form report content: application/json: schema: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /api/workspace/{workspace_id}/submission-report/: get: operationId: getWorkspaceSubmissionReport summary: Get submission report description: Retrieve a submission report for a workspace. tags: - Workspaces parameters: - $ref: '#/components/parameters/WorkspaceId' - $ref: '#/components/parameters/StartTime' - $ref: '#/components/parameters/EndTime' responses: '200': description: Submission report content: application/json: schema: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' components: responses: BadRequest: description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' Unauthorized: description: Unauthorized - invalid or missing API key content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: Resource not found content: application/json: schema: $ref: '#/components/schemas/Error' parameters: EndTime: name: end_time in: query schema: type: string format: date-time description: Filter results up to this datetime WorkspaceId: name: workspace_id in: path required: true schema: type: string format: uuid description: Unique workspace identifier PageSize: name: page_size in: query schema: type: integer maximum: 1000 default: 100 description: Number of results per page (max 1000) StartTime: name: start_time in: query schema: type: string format: date-time description: Filter results from this datetime Page: name: page in: query schema: type: integer default: 1 description: Page number schemas: PaginatedWorkspaces: allOf: - $ref: '#/components/schemas/PaginatedResponse' - type: object properties: results: type: array items: $ref: '#/components/schemas/Workspace' PaginatedResponse: type: object properties: count: type: integer description: Total number of available records next: type: string format: uri nullable: true description: URL for the next page previous: type: string format: uri nullable: true description: URL for the previous page total_pages: type: integer description: Total number of pages current_page: type: integer description: Current page number Workspace: type: object properties: id: type: string format: uuid description: Workspace identifier name: type: string description: Workspace name created_at: type: string format: date-time description: Creation timestamp updated_at: type: string format: date-time description: Last update timestamp Error: type: object properties: detail: type: string description: Error detail message errors: type: object additionalProperties: type: array items: type: string description: Field-level validation errors securitySchemes: TokenAuth: type: apiKey in: header name: Authorization description: 'Token-based authentication. Format: Token '