openapi: 3.1.0 info: title: Product Fruits REST Events Users API description: REST API for the Product Fruits product adoption platform. Provides programmatic control over user identification, event tracking, knowledge base management, and feedback collection for SaaS teams. version: 1.0.0 contact: name: Product Fruits Support url: https://help.productfruits.com email: info@productfruits.com termsOfService: https://productfruits.com/terms servers: - url: https://api.productfruits.com description: Production API server security: - BearerAuth: [] tags: - name: Users description: User identification and management paths: /v1/identify: post: operationId: identifyUser summary: Create or update a user description: Performs an upsert operation on a tracked user. Synchronizes user properties from backend systems and can trigger real-time content updates if the user is currently online. tags: - Users requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/IdentifyUserRequest' example: user: username: user-123 firstname: Jane lastname: Doe role: admin signUpAt: '2024-01-15T10:00:00Z' props: plan: pro trialDays: 14 isVerified: true responses: '200': description: User created or updated successfully '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/RateLimitExceeded' /v1/users/{username}: delete: operationId: deleteUser summary: Delete a tracked user description: Deletes the given tracked user by username. The username must be URL-encoded. tags: - Users parameters: - $ref: '#/components/parameters/Username' responses: '200': description: User deleted successfully '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/RateLimitExceeded' /v1/users/{username}/conversations: delete: operationId: deleteUserConversations summary: Delete user AI conversations description: Deletes the user's conversation traces from the AI infrastructure. tags: - Users parameters: - $ref: '#/components/parameters/Username' responses: '200': description: User conversations deleted successfully '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/RateLimitExceeded' components: parameters: Username: name: username in: path required: true description: The tracked user's unique username (URL-encoded) schema: type: string responses: NotFound: description: Resource not found content: application/json: schema: $ref: '#/components/schemas/Error' RateLimitExceeded: description: Rate limit exceeded (5 requests per second) content: application/json: schema: $ref: '#/components/schemas/Error' Unauthorized: description: Missing or invalid API key content: application/json: schema: $ref: '#/components/schemas/Error' schemas: Error: type: object properties: message: type: string description: Error message IdentifyUserRequest: type: object required: - user properties: user: type: object required: - username properties: username: type: string description: Unique identifier for the user (required) firstname: type: string description: User's first name lastname: type: string description: User's last name role: type: string description: User's role signUpAt: type: string format: date-time description: Date/time the user signed up (JSON Date/DateTime format) props: type: object description: Custom user properties additionalProperties: oneOf: - type: number - type: boolean - type: string - type: array securitySchemes: BearerAuth: type: http scheme: bearer description: API key generated from the Integrations section in Product Fruits. Should never be exposed in front-end environments.