openapi: 3.0.3 info: title: Feathery REST Account Document Intelligence 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: Document Intelligence description: AI-driven document extraction paths: /api/ai/run/{extraction_id}/: post: operationId: runExtraction summary: Extract data from documents description: Extract data from documents using AI (multipart/form-data). tags: - Document Intelligence parameters: - $ref: '#/components/parameters/ExtractionId' requestBody: required: true content: multipart/form-data: schema: type: object properties: file: type: string format: binary description: Document file to extract data from user_id: type: string description: User or submission identifier responses: '200': description: Extraction completed successfully content: application/json: schema: $ref: '#/components/schemas/ExtractionRun' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /api/ai/extraction/: get: operationId: listExtractions summary: List all extractions description: Retrieve a list of all extraction configurations. tags: - Document Intelligence parameters: - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Page' responses: '200': description: List of extractions content: application/json: schema: $ref: '#/components/schemas/PaginatedExtractions' '401': $ref: '#/components/responses/Unauthorized' /api/ai/extraction/{extraction_id}/: get: operationId: getExtraction summary: Retrieve extraction configuration description: Retrieve the configuration for a specific extraction. tags: - Document Intelligence parameters: - $ref: '#/components/parameters/ExtractionId' responses: '200': description: Extraction configuration content: application/json: schema: $ref: '#/components/schemas/ExtractionConfig' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /api/ai/run/batch/{extraction_id}/: get: operationId: listExtractionRuns summary: List extraction runs description: List all runs for a specific extraction. tags: - Document Intelligence parameters: - $ref: '#/components/parameters/ExtractionId' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/StartTime' - $ref: '#/components/parameters/EndTime' responses: '200': description: List of extraction runs content: application/json: schema: $ref: '#/components/schemas/PaginatedExtractionRuns' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' components: schemas: ExtractionConfig: type: object properties: id: type: string format: uuid description: Extraction configuration identifier name: type: string description: Extraction name file_type: type: string enum: - image - csv - meeting - ai_query description: Type of file to extract from extraction_type: type: string description: Extraction method type merge_files: type: boolean description: Whether to merge multiple files before extraction confidence_scores_enabled: type: boolean description: Whether to include confidence scores in results context_rules: type: array items: type: string description: Contextual rules for extraction file_sources: type: array items: type: object description: Field references for file sources queries: type: array items: $ref: '#/components/schemas/ExtractionQuery' description: Extraction queries variants: type: array items: type: object description: Use-case overrides rules: type: array items: type: object description: Post-extraction logic rules integrations: type: array items: type: object description: Integration configurations ExtractionRun: type: object properties: id: type: string description: Run identifier user_id: type: string description: Submission reference file_name: type: string description: Name of the processed file success: type: boolean description: Whether the extraction was successful approved: type: boolean description: Whether the result has been approved approver: type: string format: email nullable: true description: Email of the approver identity: type: string description: Trigger email identity data: type: array items: type: object properties: field_internal_id: type: string format: uuid value: description: Extracted value description: Extracted data email_extracted_at: type: string format: date-time nullable: true description: When data was extracted from email document_extracted_at: type: string format: date-time description: When data was extracted from document created_at: type: string format: date-time description: Creation timestamp updated_at: type: string format: date-time description: Last update timestamp 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 PaginatedExtractions: allOf: - $ref: '#/components/schemas/PaginatedResponse' - type: object properties: results: type: array items: $ref: '#/components/schemas/ExtractionConfig' ExtractionQuery: type: object properties: id: type: string format: uuid description: Query identifier question_type: type: string enum: - one_value - multiple_value - yes_no - page_number description: Type of question/extraction entities: type: array items: type: string description: Entities to extract criteria: type: string description: Extraction instructions data_validation_rules: type: array items: type: string description: Rules for validating extracted data save_to_fields: type: array items: type: object description: Field references to save extracted data to run_email_mode: type: string enum: - email_only - email_document - document_only description: Email processing mode 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 PaginatedExtractionRuns: allOf: - $ref: '#/components/schemas/PaginatedResponse' - type: object properties: results: type: array items: $ref: '#/components/schemas/ExtractionRun' responses: Unauthorized: description: Unauthorized - invalid or missing API key content: application/json: schema: $ref: '#/components/schemas/Error' BadRequest: description: Bad Request 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 ExtractionId: name: extraction_id in: path required: true schema: type: string format: uuid description: Unique extraction identifier StartTime: name: start_time in: query schema: type: string format: date-time description: Filter results from this datetime PageSize: name: page_size in: query schema: type: integer maximum: 1000 default: 100 description: Number of results per page (max 1000) Page: name: page in: query schema: type: integer default: 1 description: Page number securitySchemes: TokenAuth: type: apiKey in: header name: Authorization description: 'Token-based authentication. Format: Token '