openapi: 3.0.3 info: title: Feathery REST Account End Users 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: End Users description: End user management paths: /api/user/: get: operationId: listUsers summary: List all users description: Retrieve a list of all end users. tags: - End Users parameters: - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/CreatedAfter' - $ref: '#/components/parameters/CreatedBefore' responses: '200': description: List of end users content: application/json: schema: $ref: '#/components/schemas/PaginatedUsers' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createUser summary: Create/fetch user description: Create a new user or fetch an existing user by identifier. tags: - End Users requestBody: required: true content: application/json: schema: type: object properties: user_id: type: string description: Unique user identifier field_values: type: object additionalProperties: true description: Initial field values for the user responses: '200': description: Existing user returned content: application/json: schema: $ref: '#/components/schemas/User' '201': description: User created successfully content: application/json: schema: $ref: '#/components/schemas/User' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' /api/user/{user_id}/: get: operationId: getUser summary: Get user data description: Retrieve data for a specific end user. tags: - End Users parameters: - $ref: '#/components/parameters/UserId' responses: '200': description: User data content: application/json: schema: $ref: '#/components/schemas/User' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteUser summary: Delete user description: Delete a specific end user. tags: - End Users parameters: - $ref: '#/components/parameters/UserId' responses: '204': description: User deleted successfully '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /api/user/{user_id}/form/{form_id}/: get: operationId: getUserFormSession summary: Get user form session description: Retrieve the form session data for a specific user and form combination. tags: - End Users parameters: - $ref: '#/components/parameters/UserId' - $ref: '#/components/parameters/FormId' responses: '200': description: User form session data content: application/json: schema: $ref: '#/components/schemas/UserFormSession' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' components: schemas: User: type: object properties: user_id: type: string description: Unique user identifier field_values: type: object additionalProperties: true description: User field values created_at: type: string format: date-time description: Creation timestamp updated_at: type: string format: date-time description: Last update timestamp PaginatedUsers: allOf: - $ref: '#/components/schemas/PaginatedResponse' - type: object properties: results: type: array items: $ref: '#/components/schemas/User' 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 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 UserFormSession: type: object properties: user_id: type: string description: User identifier form_id: type: string description: Form identifier current_step: type: string description: Current step in the form field_values: type: object additionalProperties: true description: Current field values completed: type: boolean description: Whether the form session is completed created_at: type: string format: date-time updated_at: type: string format: date-time parameters: UserId: name: user_id in: path required: true schema: type: string description: Unique user identifier FormId: name: form_id in: path required: true schema: type: string description: Unique form identifier CreatedBefore: name: created_before in: query schema: type: string format: date-time description: Filter by creation date (before) PageSize: name: page_size in: query schema: type: integer maximum: 1000 default: 100 description: Number of results per page (max 1000) CreatedAfter: name: created_after in: query schema: type: string format: date-time description: Filter by creation date (after) Page: name: page in: query schema: type: integer default: 1 description: Page number responses: BadRequest: description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' Unauthorized: description: Unauthorized - invalid or missing API key content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: Resource not found content: application/json: schema: $ref: '#/components/schemas/Error' securitySchemes: TokenAuth: type: apiKey in: header name: Authorization description: 'Token-based authentication. Format: Token '