From 037bed44ac95bbbafc486118caee8105561894ac Mon Sep 17 00:00:00 2001 From: Sahil Date: Tue, 21 Oct 2025 16:32:48 -0400 Subject: [PATCH 1/3] Remove FAI OpenAPI specification MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit removes the FAI OpenAPI specification file (fern/apis/fai/openapi.json) which contained 4494 lines of API definitions for the FAI service including analytics, chat, conversation, Discord integration, document management, feedback, and query endpoints. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- fern/apis/fai/openapi.json | 4494 ------------------------------------ 1 file changed, 4494 deletions(-) delete mode 100644 fern/apis/fai/openapi.json diff --git a/fern/apis/fai/openapi.json b/fern/apis/fai/openapi.json deleted file mode 100644 index a96ea74a3..000000000 --- a/fern/apis/fai/openapi.json +++ /dev/null @@ -1,4494 +0,0 @@ -{ - "openapi": "3.1.0", - "info": { - "title": "FAI", - "summary": "The FAI API.", - "version": "0.0.0" - }, - "paths": { - "/analytics/histogram/{domain}": { - "get": { - "tags": [ - "Analytics" - ], - "summary": "Get Analytics Histogram", - "operationId": "get_analytics_histogram", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - }, - { - "name": "start_date", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "description": "The start date of the period to retrieve analytics for", - "title": "Start Date" - }, - "description": "The start date of the period to retrieve analytics for" - }, - { - "name": "end_date", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "description": "The end date of the period to retrieve analytics for", - "title": "End Date" - }, - "description": "The end date of the period to retrieve analytics for" - }, - { - "name": "group_by", - "in": "query", - "required": false, - "schema": { - "$ref": "#/components/schemas/GroupBy", - "description": "The field to group the analytics by", - "default": "DAY" - }, - "description": "The field to group the analytics by" - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetHistogramAnalyticsResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/analytics/insights/generate_all": { - "post": { - "tags": [ - "Analytics" - ], - "summary": "Generate All Insights", - "description": "Generate insights for all domains with queries in the specified period.", - "operationId": "generate_all_insights", - "parameters": [ - { - "name": "start_date", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "description": "The start date of the period to generate insights for", - "title": "Start Date" - }, - "description": "The start date of the period to generate insights for" - }, - { - "name": "end_date", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "description": "The end date of the period to generate insights for", - "title": "End Date" - }, - "description": "The end date of the period to generate insights for" - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - }, - "/analytics/insights/trigger_scheduled": { - "post": { - "tags": [ - "Analytics" - ], - "summary": "Trigger Scheduled Insights Generation", - "description": "Manually trigger the scheduled weekly insights generation job.", - "operationId": "trigger_scheduled_insights_generation", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - }, - "/analytics/insights/{domain}": { - "get": { - "tags": [ - "Analytics" - ], - "summary": "Get Query Insights", - "description": "Get the most recent insights for a domain.", - "operationId": "get_query_insights", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetInsightsResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/analytics/scheduler/status": { - "get": { - "tags": [ - "Analytics" - ], - "summary": "Get Scheduler Status", - "description": "Get the status of the scheduler and its jobs.", - "operationId": "get_scheduler_status", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - }, - "/analytics/resolution/{domain}": { - "get": { - "tags": [ - "Analytics" - ], - "summary": "Get Conversation Resolution", - "description": "Get conversation resolution metrics for a domain in a given time period.", - "operationId": "get_conversation_resolution", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - }, - { - "name": "start_date", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "description": "The start date of the period to retrieve resolution metrics for", - "title": "Start Date" - }, - "description": "The start date of the period to retrieve resolution metrics for" - }, - { - "name": "end_date", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "description": "The end date of the period to retrieve resolution metrics for", - "title": "End Date" - }, - "description": "The end date of the period to retrieve resolution metrics for" - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetConversationResolutionResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/chat/{domain}": { - "post": { - "tags": [ - "Chat" - ], - "summary": "Post Chat Completion", - "operationId": "post_chat_completion", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PostChatCompletionRequest" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PostChatCompletionResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "customers" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/conversation/{domain}/{conversation_id}": { - "get": { - "tags": [ - "Conversation" - ], - "summary": "Get Conversation By Id", - "operationId": "get_conversation_by_id", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - }, - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Conversation Id" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetConversationResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/discord/install": { - "post": { - "tags": [ - "Discord" - ], - "summary": "Create Discord Integration", - "operationId": "create_discord_integration", - "parameters": [ - { - "name": "domain", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiscordIntegrationResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "customers" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/discord/install/callback": { - "get": { - "tags": [ - "Discord" - ], - "summary": "Handle Discord Install Callback", - "operationId": "handle_discord_install_callback", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - }, - "/document/{domain}/create": { - "post": { - "tags": [ - "Document" - ], - "summary": "Create Document", - "operationId": "create_document", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateDocumentRequest" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CreateDocumentResponse" - }, - "title": "Response Create Document Document Domain Create Post" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "customers" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/document/{domain}/batch-create": { - "post": { - "tags": [ - "Document" - ], - "summary": "Batch Create Document", - "operationId": "batch_create_document", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CreateDocumentRequest" - }, - "title": "Body" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CreateDocumentResponse" - }, - "title": "Response Batch Create Document Document Domain Batch Create Post" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "customers" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/document/{domain}/{document_id}": { - "patch": { - "tags": [ - "Document" - ], - "summary": "Update Document", - "operationId": "update_document", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - }, - { - "name": "document_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Document Id" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateDocumentRequest" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateDocumentResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "customers" - ], - "security": [ - { - "bearerAuth": [] - } - ] - }, - "get": { - "tags": [ - "Document" - ], - "summary": "Get Document By Id", - "operationId": "get_document_by_id", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - }, - { - "name": "document_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Document Id" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetDocumentResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "customers" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/document/{domain}/delete": { - "delete": { - "tags": [ - "Document" - ], - "summary": "Delete Document By Id", - "operationId": "delete_document_by_id", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteDocumentRequest" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteDocumentResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "customers" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/document/{domain}/batch-delete": { - "delete": { - "tags": [ - "Document" - ], - "summary": "Batch Delete Document", - "operationId": "batch_delete_document", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DeleteDocumentRequest" - }, - "title": "Body" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteDocumentResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "customers" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/document/{domain}": { - "get": { - "tags": [ - "Document" - ], - "summary": "Get Documents", - "operationId": "get_documents", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - }, - { - "name": "page", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "The page number for pagination", - "title": "Page" - }, - "description": "The page number for pagination" - }, - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "The number of documents per page", - "title": "Limit" - }, - "description": "The number of documents per page" - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetDocumentsResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "customers" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/document/{domain}/delete-all": { - "delete": { - "tags": [ - "Document" - ], - "summary": "Delete All Documents", - "operationId": "delete_all_documents", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteDocumentResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "customers" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/feedback/{domain}": { - "post": { - "tags": [ - "Feedback" - ], - "summary": "Create Feedback", - "operationId": "create_feedback", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateFeedbackRequest" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateFeedbackResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - }, - "/feedback/{domain}/{conversation_id}": { - "get": { - "tags": [ - "Feedback" - ], - "summary": "Get Feedback By Id", - "operationId": "get_feedback_by_id", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - }, - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Conversation Id" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetFeedbackResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/guidance/{domain}/create": { - "post": { - "tags": [ - "Guidance" - ], - "summary": "Create Guidance", - "operationId": "create_guidance", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateGuidanceRequest" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateGuidanceResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "customers" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/guidance/{domain}/{guidance_id}": { - "patch": { - "tags": [ - "Guidance" - ], - "summary": "Update", - "operationId": "update", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - }, - { - "name": "guidance_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Guidance Id" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateGuidanceRequest" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateGuidanceResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "customers" - ], - "security": [ - { - "bearerAuth": [] - } - ] - }, - "delete": { - "tags": [ - "Guidance" - ], - "summary": "Delete Guidance By Id", - "operationId": "delete_guidance_by_id", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - }, - { - "name": "guidance_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Guidance Id" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteGuidanceResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "customers" - ], - "security": [ - { - "bearerAuth": [] - } - ] - }, - "get": { - "tags": [ - "Guidance" - ], - "summary": "Get Guidance By Id", - "operationId": "get_guidance_by_id", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - }, - { - "name": "guidance_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Guidance Id" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetGuidanceResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "customers" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/guidance/{domain}": { - "get": { - "tags": [ - "Guidance" - ], - "summary": "Get Guidances", - "operationId": "get_guidances", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - }, - { - "name": "page", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "The page number for pagination", - "title": "Page" - }, - "description": "The page number for pagination" - }, - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "The number of documents per page", - "title": "Limit" - }, - "description": "The number of documents per page" - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetGuidancesResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "customers" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/health": { - "get": { - "tags": [ - "Health" - ], - "summary": "Health Check", - "description": "Health check endpoint that returns the application status.", - "operationId": "health_check", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - }, - "/index/{domain}/reconstruct": { - "post": { - "tags": [ - "Index" - ], - "summary": "Reconstruct Query Index", - "operationId": "reconstruct_query_index", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ReconstructIndexResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/index/{domain}/sync": { - "post": { - "tags": [ - "Index" - ], - "summary": "Sync Index To Query Index", - "operationId": "sync_index_to_query_index", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SyncIndexRequest" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SyncIndexResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/jobs/{job_id}/status": { - "get": { - "tags": [ - "Index" - ], - "summary": "Get Job Status", - "operationId": "get_job_status", - "parameters": [ - { - "name": "job_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Job Id" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/JobStatusResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - }, - "/mcp/semantic/{domain}": { - "post": { - "tags": [ - "Mcp" - ], - "summary": "Get Mcp Semantic Query", - "operationId": "get_mcp_semantic_query", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetMcpSemanticQueryRequest" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetMcpSemanticQueryResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/mcp/bmf/{domain}": { - "post": { - "tags": [ - "Mcp" - ], - "summary": "Get Mcp Bmf Query", - "operationId": "get_mcp_bmf_query", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetMcpBmfQueryRequest" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetMcpBmfQueryResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/queries": { - "post": { - "tags": [ - "Query" - ], - "summary": "Create Query", - "operationId": "create_query", - "parameters": [ - { - "name": "domain", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Query" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateQueryResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/queries/{domain}": { - "get": { - "tags": [ - "Query" - ], - "summary": "Get Recent Queries", - "operationId": "get_recent_queries", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - }, - { - "name": "page", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "The page number for pagination", - "title": "Page" - }, - "description": "The page number for pagination" - }, - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "The number of queries per page", - "title": "Limit" - }, - "description": "The number of queries per page" - }, - { - "name": "cutoff_time", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "description": "Only return queries after this time", - "title": "Cutoff Time" - }, - "description": "Only return queries after this time" - }, - { - "name": "include_assistant", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "description": "Whether to include assistant responses in the results", - "title": "Include Assistant" - }, - "description": "Whether to include assistant responses in the results" - }, - { - "name": "start_date", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "description": "The start date of the period to retrieve analytics for", - "title": "Start Date" - }, - "description": "The start date of the period to retrieve analytics for" - }, - { - "name": "end_date", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "description": "The end date of the period to retrieve analytics for", - "title": "End Date" - }, - "description": "The end date of the period to retrieve analytics for" - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetQueriesResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/settings/ask-ai": { - "get": { - "tags": [ - "Settings" - ], - "summary": "Get Settings", - "description": "Get settings for a domain and organization.", - "operationId": "get_settings", - "parameters": [ - { - "name": "domain", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetSettingsResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - }, - "/settings/ask-ai/docs": { - "get": { - "tags": [ - "Settings" - ], - "summary": "Get Docs Settings", - "description": "Get settings for a domain and organization.", - "operationId": "get_docs_settings", - "parameters": [ - { - "name": "domain", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetSettingsResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - }, - "/settings/ask-ai/slack": { - "get": { - "tags": [ - "Settings" - ], - "summary": "Get Slack Settings", - "description": "Get settings for a domain and organization.", - "operationId": "get_slack_settings", - "parameters": [ - { - "name": "domain", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetSettingsResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - }, - "/settings/ask-ai/discord": { - "get": { - "tags": [ - "Settings" - ], - "summary": "Get Discord Settings", - "description": "Get settings for a domain and organization.", - "operationId": "get_discord_settings", - "parameters": [ - { - "name": "domain", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetSettingsResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - }, - "/settings/ask-ai/toggle": { - "post": { - "tags": [ - "Settings" - ], - "summary": "Toggle Ask Ai", - "description": "Toggle Ask AI setting and return job_id for tracking.\n\nArgs:\n domain: Domain to toggle Ask AI for\n org_name: Organization name\n preview: Whether this is a preview deployment\n locations: Optional list of locations to enable. Valid values: docs, slack, discord", - "operationId": "toggle_ask_ai", - "parameters": [ - { - "name": "domain", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - }, - { - "name": "org_name", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Org Name" - } - }, - { - "name": "preview", - "in": "query", - "required": false, - "schema": { - "type": "boolean", - "default": false, - "title": "Preview" - } - }, - { - "name": "locations", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "array", - "items": { - "enum": [ - "docs", - "slack", - "discord" - ], - "type": "string" - } - }, - { - "type": "null" - } - ], - "title": "Locations" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ToggleAskAiResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/settings/ask-ai/reindex": { - "post": { - "tags": [ - "Settings" - ], - "summary": "Reindex Ask Ai", - "description": "Manually trigger reindex for an already enabled Ask AI setup.", - "operationId": "reindex_ask_ai", - "parameters": [ - { - "name": "domain", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - }, - { - "name": "org_name", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Org Name" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ToggleAskAiResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/settings/ask-ai/toggle/status": { - "get": { - "tags": [ - "Settings" - ], - "summary": "Get Toggle Status", - "description": "Get the status of Ask AI toggle operation.", - "operationId": "get_toggle_status", - "parameters": [ - { - "name": "domain", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ToggleStatusResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/settings/reindex-preview-callback": { - "post": { - "tags": [ - "Settings" - ], - "summary": "Reindex Preview Callback", - "description": "Handle callback from Upstash QStash when preview reindex completes.", - "operationId": "reindex_preview_callback", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpstashCallbackRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - }, - "/slack/integrations": { - "post": { - "tags": [ - "Slack" - ], - "summary": "Create Slack Integration", - "operationId": "create_slack_integration", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateSlackIntegration" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SlackIntegrationResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - }, - "/slack/events": { - "post": { - "tags": [ - "Slack" - ], - "summary": "Handle Slack Events", - "operationId": "handle_slack_events", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - }, - "/slack/slash-commands": { - "post": { - "tags": [ - "Slack" - ], - "summary": "Handle Slack Slash Commands", - "operationId": "handle_slack_slash_commands", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - }, - "/slack/interactions": { - "post": { - "tags": [ - "Slack" - ], - "summary": "Handle Slack Interactions", - "operationId": "handle_slack_interactions", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - }, - "/slack/oauth/callback": { - "get": { - "tags": [ - "Slack" - ], - "summary": "Handle Slack Oauth Callback", - "operationId": "handle_slack_oauth_callback", - "parameters": [ - { - "name": "code", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Code" - } - }, - { - "name": "state", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "State" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - }, - "/slack/get-install": { - "get": { - "tags": [ - "Slack" - ], - "summary": "Get Slack Install Link", - "operationId": "get_slack_install_link", - "parameters": [ - { - "name": "domain", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "customers" - ], - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/slack/integrations/{domain}": { - "get": { - "tags": [ - "Slack" - ], - "summary": "List Slack Integrations", - "operationId": "list_slack_integrations", - "parameters": [ - { - "name": "domain", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Domain" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - }, - "/slack/get-install/{integration_id}": { - "get": { - "tags": [ - "Slack" - ], - "summary": "Get Slack Install Link By Id", - "operationId": "get_slack_install_link_by_id", - "parameters": [ - { - "name": "integration_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Integration Id" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-fern-audiences": [ - "internal" - ] - } - } - }, - "components": { - "schemas": { - "ChatMessage": { - "properties": { - "role": { - "type": "string", - "enum": [ - "user", - "assistant" - ], - "title": "Role" - }, - "content": { - "type": "string", - "title": "Content" - } - }, - "type": "object", - "required": [ - "role", - "content" - ], - "title": "ChatMessage" - }, - "Conversation": { - "properties": { - "conversation_id": { - "type": "string", - "title": "Conversation Id" - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Created At" - }, - "turns": { - "items": { - "$ref": "#/components/schemas/ConversationTurn" - }, - "type": "array", - "title": "Turns" - } - }, - "type": "object", - "required": [ - "conversation_id", - "created_at", - "turns" - ], - "title": "Conversation" - }, - "ConversationTurn": { - "properties": { - "role": { - "type": "string", - "title": "Role" - }, - "text": { - "type": "string", - "title": "Text" - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Created At" - }, - "feedback": { - "anyOf": [ - { - "$ref": "#/components/schemas/ConversationTurnFeedback" - }, - { - "type": "null" - } - ] - } - }, - "type": "object", - "required": [ - "role", - "text", - "created_at" - ], - "title": "ConversationTurn" - }, - "ConversationTurnFeedback": { - "properties": { - "is_helpful": { - "type": "boolean", - "title": "Is Helpful" - }, - "feedback_message": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Feedback Message" - } - }, - "type": "object", - "required": [ - "is_helpful" - ], - "title": "ConversationTurnFeedback" - }, - "CreateDocumentRequest": { - "properties": { - "document": { - "type": "string", - "title": "Document", - "description": "The content of the document that will be returned to Ask Fern during document retrieval." - }, - "chunk": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Chunk", - "description": "The textual content that should be vectorized when indexing the document. If not provided, the full document will be vectorized." - }, - "title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Title", - "description": "The title of the document. This will be used with the `url` when Ask Fern cites this document." - }, - "url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Url", - "description": "The url of the document. This will be used as the source of the document when Ask Fern cites it." - }, - "version": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Version", - "description": "The version of the document. This will be compared against when running Ask Fern with version filters. If null, the document will be retrievable by all versions." - }, - "product": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Product", - "description": "The product of the document. This will be used to filter documents when running Ask Fern with product filters. If null, the document will be retrievable by all products." - }, - "keywords": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Keywords", - "description": "The keywords of the document. Adding keywords can improve document matching." - }, - "authed": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Authed", - "description": "Whether the document is authed. If true, the document will be retrievable by all users." - } - }, - "type": "object", - "required": [ - "document" - ], - "title": "CreateDocumentRequest" - }, - "CreateDocumentResponse": { - "properties": { - "document_id": { - "type": "string", - "title": "Document Id", - "description": "The unique identifier of the created document" - } - }, - "type": "object", - "required": [ - "document_id" - ], - "title": "CreateDocumentResponse" - }, - "CreateFeedbackRequest": { - "properties": { - "conversation_id": { - "type": "string", - "title": "Conversation Id", - "description": "The ID of the conversation" - }, - "query_id": { - "type": "string", - "title": "Query Id", - "description": "The ID of the query" - }, - "domain": { - "type": "string", - "title": "Domain", - "description": "The domain of the conversation" - }, - "is_helpful": { - "type": "boolean", - "title": "Is Helpful", - "description": "Whether the conversation was helpful" - }, - "feedback_message": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Feedback Message", - "description": "The feedback message from the user" - }, - "user_email": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "User Email", - "description": "The email of the user" - } - }, - "type": "object", - "required": [ - "conversation_id", - "query_id", - "domain", - "is_helpful", - "feedback_message", - "user_email" - ], - "title": "CreateFeedbackRequest" - }, - "CreateFeedbackResponse": { - "properties": { - "feedback_id": { - "type": "string", - "title": "Feedback Id", - "description": "The ID of the created feedback" - } - }, - "type": "object", - "required": [ - "feedback_id" - ], - "title": "CreateFeedbackResponse" - }, - "CreateGuidanceRequest": { - "properties": { - "context": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Context", - "description": "The context of the guidance document, as a list of strings, that will be indexed. Each string will be vectorized separately to generate a separate record." - }, - "document": { - "type": "string", - "title": "Document", - "description": "The content of the guidance document that will be returned to Ask Fern during Ask Fern retrieval." - } - }, - "type": "object", - "required": [ - "context", - "document" - ], - "title": "CreateGuidanceRequest" - }, - "CreateGuidanceResponse": { - "properties": { - "guidance_id": { - "type": "string", - "title": "Guidance Id", - "description": "The unique identifier of the created guidance document" - } - }, - "type": "object", - "required": [ - "guidance_id" - ], - "title": "CreateGuidanceResponse" - }, - "CreateQueryResponse": { - "properties": { - "query_id": { - "type": "string", - "title": "Query Id", - "description": "Unique identifier for the query" - } - }, - "type": "object", - "required": [ - "query_id" - ], - "title": "CreateQueryResponse" - }, - "CreateSlackIntegration": { - "properties": { - "domain": { - "type": "string", - "title": "Domain" - } - }, - "type": "object", - "required": [ - "domain" - ], - "title": "CreateSlackIntegration" - }, - "DeleteDocumentRequest": { - "properties": { - "document_id": { - "type": "string", - "title": "Document Id", - "description": "The unique identifier of the document to delete" - } - }, - "type": "object", - "required": [ - "document_id" - ], - "title": "DeleteDocumentRequest" - }, - "DeleteDocumentResponse": { - "properties": { - "success": { - "type": "boolean", - "title": "Success", - "description": "Whether the documents was successfully deleted" - } - }, - "type": "object", - "required": [ - "success" - ], - "title": "DeleteDocumentResponse" - }, - "DeleteGuidanceResponse": { - "properties": { - "success": { - "type": "boolean", - "title": "Success", - "description": "Whether the guidance document was successfully deleted" - } - }, - "type": "object", - "required": [ - "success" - ], - "title": "DeleteGuidanceResponse" - }, - "DiscordIntegrationResponse": { - "properties": { - "integration_url": { - "type": "string", - "title": "Integration Url" - } - }, - "type": "object", - "required": [ - "integration_url" - ], - "title": "DiscordIntegrationResponse" - }, - "Document": { - "properties": { - "document_id": { - "type": "string", - "title": "Document Id" - }, - "domain": { - "type": "string", - "title": "Domain" - }, - "chunk": { - "type": "string", - "title": "Chunk" - }, - "document": { - "type": "string", - "title": "Document" - }, - "title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Title" - }, - "url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Url" - }, - "version": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Version" - }, - "product": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Product" - }, - "keywords": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Keywords" - }, - "authed": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Authed" - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Created At" - }, - "updated_at": { - "type": "string", - "format": "date-time", - "title": "Updated At" - } - }, - "type": "object", - "required": [ - "document_id", - "domain", - "chunk", - "document", - "created_at", - "updated_at" - ], - "title": "Document" - }, - "Feedback": { - "properties": { - "query_id": { - "type": "string", - "title": "Query Id" - }, - "conversation_id": { - "type": "string", - "title": "Conversation Id" - }, - "domain": { - "type": "string", - "title": "Domain" - }, - "is_helpful": { - "type": "boolean", - "title": "Is Helpful" - }, - "feedback_message": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Feedback Message" - }, - "user_email": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "User Email" - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Created At" - } - }, - "type": "object", - "required": [ - "query_id", - "conversation_id", - "domain", - "is_helpful", - "created_at" - ], - "title": "Feedback" - }, - "GetConversationResolutionResponse": { - "properties": { - "total_conversations": { - "type": "integer", - "title": "Total Conversations", - "description": "Total number of conversations in the period" - }, - "resolved_conversations": { - "type": "integer", - "title": "Resolved Conversations", - "description": "Number of resolved conversations" - }, - "unresolved_conversations": { - "type": "integer", - "title": "Unresolved Conversations", - "description": "Number of unresolved conversations" - }, - "resolution_rate": { - "type": "number", - "title": "Resolution Rate", - "description": "Percentage of conversations resolved (0-100)" - } - }, - "type": "object", - "required": [ - "total_conversations", - "resolved_conversations", - "unresolved_conversations", - "resolution_rate" - ], - "title": "GetConversationResolutionResponse" - }, - "GetConversationResponse": { - "properties": { - "conversation": { - "$ref": "#/components/schemas/Conversation", - "description": "The complete conversation with all turns" - } - }, - "type": "object", - "required": [ - "conversation" - ], - "title": "GetConversationResponse" - }, - "GetDocumentResponse": { - "properties": { - "document": { - "$ref": "#/components/schemas/Document", - "description": "The requested document" - } - }, - "type": "object", - "required": [ - "document" - ], - "title": "GetDocumentResponse" - }, - "GetDocumentsResponse": { - "properties": { - "documents": { - "items": { - "$ref": "#/components/schemas/Document" - }, - "type": "array", - "title": "Documents", - "description": "List of documents for the domain" - }, - "pagination": { - "$ref": "#/components/schemas/PaginationResponse", - "description": "Pagination information for the document list" - } - }, - "type": "object", - "required": [ - "documents", - "pagination" - ], - "title": "GetDocumentsResponse" - }, - "GetFeedbackResponse": { - "properties": { - "feedback": { - "$ref": "#/components/schemas/Feedback", - "description": "The returned feedback" - } - }, - "type": "object", - "required": [ - "feedback" - ], - "title": "GetFeedbackResponse" - }, - "GetGuidanceResponse": { - "properties": { - "guidance": { - "$ref": "#/components/schemas/Guidance", - "description": "The requested guidance document" - } - }, - "type": "object", - "required": [ - "guidance" - ], - "title": "GetGuidanceResponse" - }, - "GetGuidancesResponse": { - "properties": { - "guidances": { - "items": { - "$ref": "#/components/schemas/Guidance" - }, - "type": "array", - "title": "Guidances", - "description": "List of guidance documents for the domain" - }, - "pagination": { - "$ref": "#/components/schemas/PaginationResponse", - "description": "Pagination information for the guidance document list" - } - }, - "type": "object", - "required": [ - "guidances", - "pagination" - ], - "title": "GetGuidancesResponse" - }, - "GetHistogramAnalyticsResponse": { - "properties": { - "bars": { - "items": { - "$ref": "#/components/schemas/HistogramAnalyticsBar" - }, - "type": "array", - "title": "Bars", - "description": "List of histogram analytics bars" - } - }, - "type": "object", - "required": [ - "bars" - ], - "title": "GetHistogramAnalyticsResponse" - }, - "GetInsightsResponse": { - "properties": { - "insights": { - "items": { - "$ref": "#/components/schemas/InsightWithMetadata" - }, - "type": "array", - "title": "Insights", - "description": "List of insights with query counts" - } - }, - "type": "object", - "required": [ - "insights" - ], - "title": "GetInsightsResponse" - }, - "GetMcpBmfQueryRequest": { - "properties": { - "keywords": { - "type": "string", - "title": "Keywords", - "description": "The bm25 keywords to get the documents for" - } - }, - "type": "object", - "required": [ - "keywords" - ], - "title": "GetMcpBmfQueryRequest" - }, - "GetMcpBmfQueryResponse": { - "properties": { - "documents": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Documents", - "description": "A list of documents that are relevant to the keyword" - } - }, - "type": "object", - "required": [ - "documents" - ], - "title": "GetMcpBmfQueryResponse" - }, - "GetMcpSemanticQueryRequest": { - "properties": { - "semantic_query": { - "type": "string", - "title": "Semantic Query", - "description": "The semantic query to get the documents for" - } - }, - "type": "object", - "required": [ - "semantic_query" - ], - "title": "GetMcpSemanticQueryRequest" - }, - "GetMcpSemanticQueryResponse": { - "properties": { - "documents": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Documents", - "description": "A list of documents that are semantically relevant to the query" - } - }, - "type": "object", - "required": [ - "documents" - ], - "title": "GetMcpSemanticQueryResponse" - }, - "GetQueriesResponse": { - "properties": { - "queries": { - "items": { - "$ref": "#/components/schemas/Query" - }, - "type": "array", - "title": "Queries", - "description": "List of queries matching the request criteria" - }, - "pagination": { - "$ref": "#/components/schemas/PaginationResponse", - "description": "Pagination information" - } - }, - "type": "object", - "required": [ - "queries", - "pagination" - ], - "title": "GetQueriesResponse" - }, - "GetSettingsResponse": { - "properties": { - "ask_ai_enabled": { - "type": "boolean", - "title": "Ask Ai Enabled", - "description": "Whether Ask AI is enabled" - }, - "job_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Job Id", - "description": "Active job ID if reindexing is in progress" - } - }, - "type": "object", - "required": [ - "ask_ai_enabled" - ], - "title": "GetSettingsResponse" - }, - "GroupBy": { - "type": "string", - "enum": [ - "DAY", - "WEEK", - "MONTH" - ], - "title": "GroupBy" - }, - "Guidance": { - "properties": { - "domain": { - "type": "string", - "title": "Domain" - }, - "context": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Context" - }, - "document": { - "type": "string", - "title": "Document" - }, - "guidance_id": { - "type": "string", - "title": "Guidance Id" - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Created At" - }, - "updated_at": { - "type": "string", - "format": "date-time", - "title": "Updated At" - } - }, - "type": "object", - "required": [ - "domain", - "context", - "document", - "guidance_id", - "created_at", - "updated_at" - ], - "title": "Guidance" - }, - "HTTPValidationError": { - "properties": { - "detail": { - "items": { - "$ref": "#/components/schemas/ValidationError" - }, - "type": "array", - "title": "Detail" - } - }, - "type": "object", - "title": "HTTPValidationError" - }, - "HistogramAnalyticsBar": { - "properties": { - "label": { - "type": "string", - "title": "Label" - }, - "queryCount": { - "type": "integer", - "title": "Querycount" - }, - "conversationCount": { - "type": "integer", - "title": "Conversationcount" - }, - "conversationsPositiveCount": { - "type": "integer", - "title": "Conversationspositivecount" - }, - "conversationsNegativeCount": { - "type": "integer", - "title": "Conversationsnegativecount" - } - }, - "type": "object", - "required": [ - "label", - "queryCount", - "conversationCount", - "conversationsPositiveCount", - "conversationsNegativeCount" - ], - "title": "HistogramAnalyticsBar" - }, - "InsightExample": { - "properties": { - "query": { - "type": "string", - "title": "Query" - }, - "conversationId": { - "type": "string", - "title": "Conversationid" - } - }, - "type": "object", - "required": [ - "query", - "conversationId" - ], - "title": "InsightExample" - }, - "InsightWithMetadata": { - "properties": { - "insightText": { - "type": "string", - "title": "Insighttext" - }, - "numberOfQueries": { - "type": "integer", - "title": "Numberofqueries" - }, - "examples": { - "items": { - "$ref": "#/components/schemas/InsightExample" - }, - "type": "array", - "title": "Examples" - } - }, - "type": "object", - "required": [ - "insightText", - "numberOfQueries", - "examples" - ], - "title": "InsightWithMetadata" - }, - "JobStatusResponse": { - "properties": { - "job_id": { - "type": "string", - "title": "Job Id", - "description": "The job ID" - }, - "status": { - "type": "string", - "title": "Status", - "description": "Current status of the job" - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Created At", - "description": "When the job was created" - }, - "started_at": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "Started At", - "description": "When the job started" - }, - "completed_at": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "Completed At", - "description": "When the job completed" - }, - "success": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Success", - "description": "Whether the job succeeded (only set when completed)" - }, - "error": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Error", - "description": "Error message if the job failed" - } - }, - "type": "object", - "required": [ - "job_id", - "status", - "created_at" - ], - "title": "JobStatusResponse" - }, - "LanguageModel": { - "type": "string", - "enum": [ - "claude-4-sonnet-20250514", - "command-a-03-2025" - ], - "title": "LanguageModel" - }, - "PaginationResponse": { - "properties": { - "total": { - "type": "integer", - "title": "Total" - }, - "page": { - "type": "integer", - "title": "Page" - }, - "limit": { - "type": "integer", - "title": "Limit" - } - }, - "type": "object", - "required": [ - "total", - "page", - "limit" - ], - "title": "PaginationResponse" - }, - "PostChatCompletionRequest": { - "properties": { - "model": { - "anyOf": [ - { - "$ref": "#/components/schemas/LanguageModel" - }, - { - "type": "null" - } - ], - "description": "The model to use for the chat completion" - }, - "system_prompt": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "System Prompt", - "description": "The system prompt to use for the chat completion" - }, - "messages": { - "items": { - "$ref": "#/components/schemas/ChatMessage" - }, - "type": "array", - "title": "Messages", - "description": "The messages to use for the chat completion" - } - }, - "type": "object", - "required": [ - "messages" - ], - "title": "PostChatCompletionRequest" - }, - "PostChatCompletionResponse": { - "properties": { - "turns": { - "items": { - "$ref": "#/components/schemas/ChatMessage" - }, - "type": "array", - "title": "Turns", - "description": "The conversation turns in the chat completion" - }, - "citations": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Citations", - "description": "List of citation strings" - } - }, - "type": "object", - "required": [ - "turns", - "citations" - ], - "title": "PostChatCompletionResponse" - }, - "Query": { - "properties": { - "query_id": { - "type": "string", - "title": "Query Id" - }, - "conversation_id": { - "type": "string", - "title": "Conversation Id" - }, - "domain": { - "type": "string", - "title": "Domain" - }, - "text": { - "type": "string", - "title": "Text" - }, - "role": { - "type": "string", - "title": "Role" - }, - "source": { - "type": "string", - "title": "Source" - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Created At" - }, - "time_to_first_token": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Time To First Token" - } - }, - "type": "object", - "required": [ - "query_id", - "conversation_id", - "domain", - "text", - "role", - "source", - "created_at" - ], - "title": "Query" - }, - "ReconstructIndexResponse": { - "properties": { - "success": { - "type": "boolean", - "title": "Success", - "description": "Whether the query index reconstruction was successful" - } - }, - "type": "object", - "required": [ - "success" - ], - "title": "ReconstructIndexResponse" - }, - "SlackIntegrationResponse": { - "properties": { - "integration_id": { - "type": "string", - "title": "Integration Id" - }, - "domain": { - "type": "string", - "title": "Domain" - }, - "slack_team_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Slack Team Id" - }, - "slack_team_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Slack Team Name" - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Created At" - }, - "installed_at": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "Installed At" - } - }, - "type": "object", - "required": [ - "integration_id", - "domain", - "created_at" - ], - "title": "SlackIntegrationResponse" - }, - "SyncIndexRequest": { - "properties": { - "index_name": { - "type": "string", - "title": "Index Name", - "description": "The name of the index to sync" - } - }, - "type": "object", - "required": [ - "index_name" - ], - "title": "SyncIndexRequest" - }, - "SyncIndexResponse": { - "properties": { - "job_id": { - "type": "string", - "title": "Job Id", - "description": "The ID of the sync job" - } - }, - "type": "object", - "required": [ - "job_id" - ], - "title": "SyncIndexResponse" - }, - "ToggleAskAiResponse": { - "properties": { - "success": { - "type": "boolean", - "title": "Success", - "description": "Whether the toggle operation was successful" - }, - "job_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Job Id", - "description": "Job ID for tracking reindex progress (only when enabling Ask AI)" - }, - "ask_ai_enabled": { - "type": "boolean", - "title": "Ask Ai Enabled", - "description": "Current state of Ask AI (true if enabled, false if disabled)" - } - }, - "type": "object", - "required": [ - "success", - "ask_ai_enabled" - ], - "title": "ToggleAskAiResponse" - }, - "ToggleStatusResponse": { - "properties": { - "status": { - "type": "string", - "title": "Status", - "description": "Current job status (running, completed, failed, etc.)" - }, - "ask_ai_enabled": { - "type": "boolean", - "title": "Ask Ai Enabled", - "description": "Current state of Ask AI" - }, - "last_reindex_time": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Last Reindex Time", - "description": "ISO timestamp of last reindex" - } - }, - "type": "object", - "required": [ - "status", - "ask_ai_enabled" - ], - "title": "ToggleStatusResponse" - }, - "UpdateDocumentRequest": { - "properties": { - "document": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Document", - "description": "The updated content of the document that will be returned to Ask Fern during document retrieval. If not provided, this field will remain unchanged." - }, - "chunk": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Chunk", - "description": "The updated textual content that should be vectorized when indexing the document. If not provided, this field will remain unchanged." - }, - "title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Title", - "description": "The updated title of the document. If not provided, this field will remain unchanged." - }, - "url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Url", - "description": "The updated url of the document. If not provided, this field will remain unchanged." - }, - "version": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Version", - "description": "The updated version of the document. If not provided, this field will remain unchanged." - }, - "product": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Product", - "description": "The updated product of the document. If not provided, this field will remain unchanged." - }, - "keywords": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Keywords", - "description": "The updated keywords of the document. If not provided, this field will remain unchanged." - }, - "authed": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "title": "Authed", - "description": "The updated authed status of the document. If not provided, this field will remain unchanged." - } - }, - "type": "object", - "title": "UpdateDocumentRequest" - }, - "UpdateDocumentResponse": { - "properties": { - "document": { - "$ref": "#/components/schemas/Document", - "description": "The updated document" - } - }, - "type": "object", - "required": [ - "document" - ], - "title": "UpdateDocumentResponse" - }, - "UpdateGuidanceRequest": { - "properties": { - "context": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Context", - "description": "The updated context of the guidance document, as a list of strings, that will be indexed. If not provided, this field will remain unchanged." - }, - "document": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Document", - "description": "The updated content of the guidance document that will be returned to Ask Fern during Ask Fern retrieval. If not provided, this field will remain unchanged." - } - }, - "type": "object", - "title": "UpdateGuidanceRequest" - }, - "UpdateGuidanceResponse": { - "properties": { - "guidance": { - "$ref": "#/components/schemas/Guidance", - "description": "The updated guidance document" - } - }, - "type": "object", - "required": [ - "guidance" - ], - "title": "UpdateGuidanceResponse" - }, - "UpstashCallbackRequest": { - "properties": { - "status": { - "type": "integer", - "title": "Status" - }, - "sourceMessageId": { - "type": "string", - "title": "Sourcemessageid" - }, - "url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Url" - }, - "method": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Method" - }, - "sourceHeader": { - "anyOf": [ - { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": "object" - }, - { - "type": "null" - } - ], - "title": "Sourceheader" - }, - "sourceBody": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Sourcebody" - }, - "notBefore": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Notbefore" - }, - "createdAt": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Createdat" - }, - "scheduleId": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Scheduleid" - }, - "callerIP": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Callerip" - } - }, - "type": "object", - "required": [ - "status", - "sourceMessageId" - ], - "title": "UpstashCallbackRequest", - "description": "Callback payload from Upstash QStash when a queued job completes." - }, - "ValidationError": { - "properties": { - "loc": { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "integer" - } - ] - }, - "type": "array", - "title": "Location" - }, - "msg": { - "type": "string", - "title": "Message" - }, - "type": { - "type": "string", - "title": "Error Type" - } - }, - "type": "object", - "required": [ - "loc", - "msg", - "type" - ], - "title": "ValidationError" - } - }, - "securitySchemes": { - "bearerAuth": { - "type": "http", - "scheme": "bearer", - "bearerFormat": "JWT" - } - } - }, - "servers": [ - { - "url": "https://fai.buildwithfern.com", - "x-fern-server-name": "Production" - }, - { - "url": "https://fai-dev.buildwithfern.com", - "x-fern-server-name": "Development" - }, - { - "url": "http://localhost:8080", - "x-fern-server-name": "Local" - } - ] -} \ No newline at end of file From b0a83ba8a98e938bdcb914c2fb2543c18f65864b Mon Sep 17 00:00:00 2001 From: Devin Logan Date: Tue, 21 Oct 2025 16:39:44 -0400 Subject: [PATCH 2/3] chore: clean up vale styles based on recent PRs, change all warnings to suggestions (#1356) --- .vale.ini | 32 ++- .vale/styles/FernStyles/Adverbs.yml | 272 ++++++++++++++++++ .vale/styles/FernStyles/Ellipses.yml | 9 + .vale/styles/FernStyles/FirstPerson.yml | 16 ++ .../styles/FernStyles/HeadingPunctuation.yml | 13 + .vale/styles/FernStyles/Hyphens.yml | 14 + .vale/styles/FernStyles/We.yml | 11 + 7 files changed, 359 insertions(+), 8 deletions(-) create mode 100644 .vale/styles/FernStyles/Adverbs.yml create mode 100644 .vale/styles/FernStyles/Ellipses.yml create mode 100644 .vale/styles/FernStyles/FirstPerson.yml create mode 100644 .vale/styles/FernStyles/HeadingPunctuation.yml create mode 100644 .vale/styles/FernStyles/Hyphens.yml create mode 100644 .vale/styles/FernStyles/We.yml diff --git a/.vale.ini b/.vale.ini index 3badffffb..425b358e0 100644 --- a/.vale.ini +++ b/.vale.ini @@ -11,13 +11,29 @@ mdx = md BasedOnStyles = Microsoft, FernStyles # Disable specific rules -Microsoft.GenderBias = NO # Not relevant for technical documentation -Microsoft.Acronyms = NO # Handled in FernStyles -Microsoft.Vocab = NO # Too granular for now -Microsoft.HeadingAcronyms = NO # Not relevant for Fern audience -Microsoft.GeneralURL = NO # Not relevant for Fern audience -Microsoft.Headings = NO # Handled in FernStyles -Microsoft.Passive = NO # Too noisy -Microsoft.Accessibility = NO # Too noisy +# Not relevant for technical documentation +Microsoft.GenderBias = NO + +# Too granular +Microsoft.Accessibility = NO +Microsoft.Passive = NO +Microsoft.Suspended = NO +Microsoft.Vocab = NO + +# Not relevant for Fern audience +Microsoft.GeneralURL = NO +Microsoft.HeadingAcronyms = NO +Microsoft.Terms = NO + +# Handled in FernStyles +Microsoft.Acronyms = NO +Microsoft.Adverbs = NO +Microsoft.Ellipses = NO +Microsoft.FirstPerson = NO +Microsoft.Headings = NO +Microsoft.HeadingPunctuation = NO +Microsoft.Hyphens = NO +Microsoft.We = NO + diff --git a/.vale/styles/FernStyles/Adverbs.yml b/.vale/styles/FernStyles/Adverbs.yml new file mode 100644 index 000000000..4a96dc6f4 --- /dev/null +++ b/.vale/styles/FernStyles/Adverbs.yml @@ -0,0 +1,272 @@ +extends: existence +message: "Remove '%s' if it's not important to the meaning of the statement." +link: https://docs.microsoft.com/en-us/style-guide/word-choice/use-simple-words-concise-sentences +ignorecase: true +level: suggestion +action: + name: remove +tokens: + - abnormally + - absentmindedly + - accidentally + - adventurously + - anxiously + - arrogantly + - awkwardly + - bashfully + - beautifully + - bitterly + - bleakly + - blindly + - blissfully + - boastfully + - boldly + - bravely + - briefly + - brightly + - briskly + - broadly + - busily + - calmly + - carefully + - carelessly + - cautiously + - cheerfully + - cleverly + - closely + - coaxingly + - colorfully + - continually + - coolly + - courageously + - crossly + - cruelly + - curiously + - daintily + - dearly + - deceivingly + - deeply + - defiantly + - deliberately + - delightfully + - diligently + - dimly + - doubtfully + - dreamily + - easily + - effectively + - elegantly + - energetically + - enormously + - enthusiastically + - excitedly + - extremely + - fairly + - faithfully + - famously + - ferociously + - fervently + - fiercely + - fondly + - foolishly + - fortunately + - frankly + - frantically + - freely + - frenetically + - frightfully + - furiously + - generally + - generously + - gently + - gladly + - gleefully + - gracefully + - gratefully + - greatly + - greedily + - happily + - hastily + - healthily + - heavily + - helplessly + - honestly + - hopelessly + - hungrily + - innocently + - inquisitively + - intensely + - intently + - interestingly + - inwardly + - irritably + - jaggedly + - jealously + - jovially + - joyfully + - joyously + - jubilantly + - judgmentally + - justly + - keenly + - kiddingly + - kindheartedly + - knavishly + - knowingly + - knowledgeably + - lazily + - lightly + - limply + - lively + - loftily + - longingly + - loosely + - loudly + - lovingly + - loyally + - madly + - majestically + - meaningfully + - mechanically + - merrily + - miserably + - mockingly + - mortally + - mysteriously + - naturally + - nearly + - neatly + - nervously + - nicely + - noisily + - obediently + - obnoxiously + - oddly + - offensively + - optimistically + - overconfidently + - painfully + - partially + - patiently + - perfectly + - playfully + - politely + - poorly + - positively + - potentially + - powerfully + - promptly + - properly + - punctually + - quaintly + - queasily + - queerly + - questionably + - quickly + - quietly + - quirkily + - quite + - quizzically + - randomly + - rapidly + - rarely + - readily + - really + - reassuringly + - recklessly + - regularly + - reluctantly + - repeatedly + - reproachfully + - restfully + - righteously + - rightfully + - rigidly + - roughly + - rudely + - safely + - scarcely + - scarily + - searchingly + - sedately + - seemingly + - selfishly + - separately + - seriously + - shakily + - sharply + - sheepishly + - shrilly + - shyly + - silently + - sleepily + - slowly + - smoothly + - softly + - solemnly + - solidly + - speedily + - stealthily + - sternly + - strictly + - suddenly + - supposedly + - surprisingly + - suspiciously + - sweetly + - swiftly + - sympathetically + - tenderly + - tensely + - terribly + - thankfully + - thoroughly + - thoughtfully + - tightly + - tremendously + - triumphantly + - truthfully + - ultimately + - unabashedly + - unaccountably + - unbearably + - unethically + - unexpectedly + - unfortunately + - unimpressively + - unnaturally + - unnecessarily + - urgently + - usefully + - uselessly + - utterly + - vacantly + - vaguely + - vainly + - valiantly + - vastly + - verbally + - very + - viciously + - victoriously + - violently + - vivaciously + - voluntarily + - warmly + - weakly + - wearily + - wetly + - wholly + - wildly + - willfully + - wisely + - woefully + - wonderfully + - worriedly + - yawningly + - yearningly + - yieldingly + - youthfully + - zealously + - zestfully + - zestily diff --git a/.vale/styles/FernStyles/Ellipses.yml b/.vale/styles/FernStyles/Ellipses.yml new file mode 100644 index 000000000..6a00a613b --- /dev/null +++ b/.vale/styles/FernStyles/Ellipses.yml @@ -0,0 +1,9 @@ +extends: existence +message: "In general, don't use an ellipsis." +link: https://docs.microsoft.com/en-us/style-guide/punctuation/ellipses +nonword: true +level: suggestion +action: + name: remove +tokens: + - '\.\.\.' diff --git a/.vale/styles/FernStyles/FirstPerson.yml b/.vale/styles/FernStyles/FirstPerson.yml new file mode 100644 index 000000000..2b10b23ec --- /dev/null +++ b/.vale/styles/FernStyles/FirstPerson.yml @@ -0,0 +1,16 @@ +extends: existence +message: "Use first person (such as '%s') sparingly." +link: https://docs.microsoft.com/en-us/style-guide/grammar/person +ignorecase: true +level: suggestion +nonword: true +tokens: + - (?:^|\s)I(?=\s) + - (?:^|\s)I(?=,\s) + - \bI'd\b + - \bI'll\b + - \bI'm\b + - \bI've\b + - \bme\b + - \bmy\b + - \bmine\b diff --git a/.vale/styles/FernStyles/HeadingPunctuation.yml b/.vale/styles/FernStyles/HeadingPunctuation.yml new file mode 100644 index 000000000..6292aa2e7 --- /dev/null +++ b/.vale/styles/FernStyles/HeadingPunctuation.yml @@ -0,0 +1,13 @@ +extends: existence +message: "Don't use end punctuation in headings." +link: https://docs.microsoft.com/en-us/style-guide/punctuation/periods +nonword: true +level: suggestion +scope: heading +action: + name: edit + params: + - trim_right + - ".?!" +tokens: + - "[a-z][.?!]$" diff --git a/.vale/styles/FernStyles/Hyphens.yml b/.vale/styles/FernStyles/Hyphens.yml new file mode 100644 index 000000000..deda8c47f --- /dev/null +++ b/.vale/styles/FernStyles/Hyphens.yml @@ -0,0 +1,14 @@ +extends: existence +message: "'%s' doesn't need a hyphen." +link: https://docs.microsoft.com/en-us/style-guide/punctuation/dashes-hyphens/hyphens +level: suggestion +ignorecase: false +nonword: true +action: + name: edit + params: + - regex + - "-" + - " " +tokens: + - '\b[^\s-]+ly-\w+\b' diff --git a/.vale/styles/FernStyles/We.yml b/.vale/styles/FernStyles/We.yml new file mode 100644 index 000000000..b5ebdaef9 --- /dev/null +++ b/.vale/styles/FernStyles/We.yml @@ -0,0 +1,11 @@ +extends: existence +message: "Try to avoid using first-person plural like '%s'." +link: https://docs.microsoft.com/en-us/style-guide/grammar/person#avoid-first-person-plural +level: suggestion +ignorecase: true +tokens: + - we + - we'(?:ve|re) + - ours? + - us + - let's From b46b4c945515c6536018070e9066c57332451800 Mon Sep 17 00:00:00 2001 From: "devin-ai-integration[bot]" <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 14:48:14 -0600 Subject: [PATCH 3/3] Fix changelog icon CSS to only target sidebar links (#1354) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Kapil Gowru --- fern/assets/styles.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fern/assets/styles.css b/fern/assets/styles.css index 831be6076..66852b0f7 100644 --- a/fern/assets/styles.css +++ b/fern/assets/styles.css @@ -1104,6 +1104,6 @@ h1, h2, h3 { /*** END -- FERN EDITOR STYLING ***/ /* HACK: hide the changelog icon for changelog pages */ -a[href$="changelog"] svg { +.fern-sidebar-link[href$="changelog"] > svg { display: none; -} \ No newline at end of file +}