openapi: 3.1.0 info: title: Fini AI Agents Rules API version: v2 description: Public REST API for Fini AI, the self-improving AI agent for enterprise customer support. Manage agents, conversations, knowledge (sources, articles, folders), rules, tags, and prompts, and drive the agent loop via Generate Answer. Structure captured by API Evangelist from the published Fini API reference; not an official Fini-published OpenAPI. contact: name: Fini AI url: https://docs.usefini.com/en/api-reference/authentication x-apis-json-generated: true servers: - url: https://api-prod.usefini.com/v2 description: Production security: - bearerAuth: [] tags: - name: Rules paths: /hc-rules/public: post: operationId: createRule summary: Create a published rule. tags: - Rules description: Create a published rule. Requires the `write` scope. externalDocs: url: https://docs.usefini.com/en/api-reference/create-rule responses: '200': description: Successful response. '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '500': $ref: '#/components/responses/ServerError' requestBody: required: true content: application/json: schema: type: object description: See the Fini API reference for the request body schema. get: operationId: listRules summary: List rules in the workspace by type and draft state. tags: - Rules description: List rules in the workspace by type and draft state. Requires the `read` scope. externalDocs: url: https://docs.usefini.com/en/api-reference/list-rules responses: '200': description: Successful response. '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '500': $ref: '#/components/responses/ServerError' /hc-rules/draft/public: post: operationId: createRuleDraft summary: Generate a draft rule from instructions. tags: - Rules description: Generate a draft rule from instructions. Requires the `write` scope. externalDocs: url: https://docs.usefini.com/en/api-reference/create-rule-draft responses: '200': description: Successful response. '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '500': $ref: '#/components/responses/ServerError' requestBody: required: true content: application/json: schema: type: object description: See the Fini API reference for the request body schema. /hc-rules/{id}/public: delete: operationId: deleteRule summary: Delete one rule. tags: - Rules description: Delete one rule. Requires the `write` scope. externalDocs: url: https://docs.usefini.com/en/api-reference/delete-rule responses: '200': description: Successful response. '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '500': $ref: '#/components/responses/ServerError' '404': $ref: '#/components/responses/NotFound' parameters: - name: id in: path required: true schema: type: string description: The id path parameter. get: operationId: getRule summary: Fetch one rule by ID with its full tree. tags: - Rules description: Fetch one rule by ID with its full tree. Requires the `read` scope. externalDocs: url: https://docs.usefini.com/en/api-reference/get-rule responses: '200': description: Successful response. '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '500': $ref: '#/components/responses/ServerError' '404': $ref: '#/components/responses/NotFound' parameters: - name: id in: path required: true schema: type: string description: The id path parameter. patch: operationId: updateRule summary: Update an existing rule. tags: - Rules description: Update an existing rule. Requires the `write` scope. externalDocs: url: https://docs.usefini.com/en/api-reference/update-rule responses: '200': description: Successful response. '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '500': $ref: '#/components/responses/ServerError' '404': $ref: '#/components/responses/NotFound' parameters: - name: id in: path required: true schema: type: string description: The id path parameter. requestBody: required: true content: application/json: schema: type: object description: See the Fini API reference for the request body schema. /hc-rules/{id}/duplicate/public: post: operationId: duplicateRule summary: Create a copy of an existing rule. tags: - Rules description: Create a copy of an existing rule. Requires the `write` scope. externalDocs: url: https://docs.usefini.com/en/api-reference/duplicate-rule responses: '200': description: Successful response. '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '500': $ref: '#/components/responses/ServerError' '404': $ref: '#/components/responses/NotFound' parameters: - name: id in: path required: true schema: type: string description: The id path parameter. requestBody: required: true content: application/json: schema: type: object description: See the Fini API reference for the request body schema. /hc-rules/{id}/publish/public: post: operationId: publishRuleDraft summary: Publish a draft rule and assign it to one or more agents. tags: - Rules description: Publish a draft rule and assign it to one or more agents. Requires the `write` scope. externalDocs: url: https://docs.usefini.com/en/api-reference/publish-rule-draft responses: '200': description: Successful response. '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '500': $ref: '#/components/responses/ServerError' '404': $ref: '#/components/responses/NotFound' parameters: - name: id in: path required: true schema: type: string description: The id path parameter. requestBody: required: true content: application/json: schema: type: object description: See the Fini API reference for the request body schema. /hc-rules/{id}/refine/public: post: operationId: refineRuleDraft summary: Regenerate a draft rule using refinement instructions. tags: - Rules description: Regenerate a draft rule using refinement instructions. Requires the `write` scope. externalDocs: url: https://docs.usefini.com/en/api-reference/refine-rule-draft responses: '200': description: Successful response. '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '500': $ref: '#/components/responses/ServerError' '404': $ref: '#/components/responses/NotFound' parameters: - name: id in: path required: true schema: type: string description: The id path parameter. requestBody: required: true content: application/json: schema: type: object description: See the Fini API reference for the request body schema. components: responses: Forbidden: description: API key lacks the required scope. content: application/json: schema: $ref: '#/components/schemas/Error' example: statusCode: 403 message: API key does not have the required scope for this operation error: Forbidden Unauthorized: description: Missing or invalid API key. content: application/json: schema: $ref: '#/components/schemas/Error' example: statusCode: 401 message: Unauthorized error: Unauthorized ServerError: description: Internal server error. content: application/json: schema: $ref: '#/components/schemas/Error' example: statusCode: 500 message: Internal Server Error error: Internal Server Error NotFound: description: Resource not found. content: application/json: schema: $ref: '#/components/schemas/Error' example: statusCode: 404 message: Not Found error: Not Found schemas: Error: type: object description: Standard Fini error envelope. properties: statusCode: type: integer example: 403 message: type: string example: API key does not have the required scope for this operation error: type: string example: Forbidden securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: fini_ API key description: 'Bearer token containing your Fini workspace API key. Format: `Bearer fini_...`. The key carries `read` and/or `write` scope; write routes require the `write` scope.'