Product Fruits Users API

User identification and management

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/product-fruits-users-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

product-fruits-users-api-openapi.yml Raw ↑
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.