Product Fruits Knowledge Base API
Knowledge base article and category management
Knowledge base article and category management
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/product-fruits-knowledge-base-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Product Fruits REST Events Knowledge Base 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: Knowledge Base
description: Knowledge base article and category management
paths:
/v1/knowledgebase/import:
post:
operationId: importArticles
summary: Import or update knowledge base articles
description: Imports or updates knowledge base articles with multilingual content support. Maximum 50 articles per request. Maximum 20 content languages per article.
tags:
- Knowledge Base
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ImportArticlesRequest'
example:
articles:
- correlationId: article-getting-started
categoryCorrelationId: cat-onboarding
isPrivate: false
contents:
- lang: en
title: Getting Started with Product Fruits
content: '## Welcome\n\nThis guide helps you get started...'
format: markdown
publishStatus: published
responses:
'200':
description: Import completed
content:
application/json:
schema:
$ref: '#/components/schemas/ImportArticlesResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimitExceeded'
/v1/knowledgebase/articles:
get:
operationId: listArticles
summary: List knowledge base articles
description: Retrieves all knowledge base articles. Supports filtering by category.
tags:
- Knowledge Base
parameters:
- name: categoryCorrelationId
in: query
description: Filter articles by category correlation ID
required: false
schema:
type: string
responses:
'200':
description: List of articles
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Article'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimitExceeded'
/v1/knowledgebase/articles/{correlationId}:
delete:
operationId: deleteArticle
summary: Delete a knowledge base article
description: Removes an entire article by its correlation ID.
tags:
- Knowledge Base
parameters:
- $ref: '#/components/parameters/CorrelationId'
responses:
'200':
description: Article deleted successfully
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimitExceeded'
/v1/knowledgebase/articles/{correlationId}/content/{lang}:
delete:
operationId: deleteArticleLanguageContent
summary: Delete language-specific article content
description: Removes language-specific content from an article.
tags:
- Knowledge Base
parameters:
- $ref: '#/components/parameters/CorrelationId'
- $ref: '#/components/parameters/Lang'
responses:
'200':
description: Language content deleted successfully
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimitExceeded'
/v1/knowledgebase/articles/{correlationId}/content/{lang}/{id}:
delete:
operationId: deleteArticleContentVersion
summary: Delete a specific content version
description: Removes a specific content version from an article.
tags:
- Knowledge Base
parameters:
- $ref: '#/components/parameters/CorrelationId'
- $ref: '#/components/parameters/Lang'
- name: id
in: path
required: true
description: Content version ID
schema:
type: string
responses:
'200':
description: Content version deleted successfully
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimitExceeded'
/v1/knowledgebase/categories:
get:
operationId: listCategories
summary: List knowledge base categories
description: Retrieves all knowledge base categories.
tags:
- Knowledge Base
responses:
'200':
description: List of categories
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Category'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimitExceeded'
/v1/knowledgebase/categories/import:
post:
operationId: importCategories
summary: Import or update knowledge base categories
description: Imports or updates knowledge base categories.
tags:
- Knowledge Base
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ImportCategoriesRequest'
responses:
'200':
description: Categories imported successfully
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimitExceeded'
/v1/knowledgebase/categories/{correlationId}:
get:
operationId: getCategory
summary: Get a specific category
description: Retrieves a specific knowledge base category by correlation ID.
tags:
- Knowledge Base
parameters:
- $ref: '#/components/parameters/CorrelationId'
responses:
'200':
description: Category details
content:
application/json:
schema:
$ref: '#/components/schemas/Category'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimitExceeded'
put:
operationId: updateCategory
summary: Update a knowledge base category
description: Updates details of an existing knowledge base category.
tags:
- Knowledge Base
parameters:
- $ref: '#/components/parameters/CorrelationId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateCategoryRequest'
responses:
'200':
description: Category updated successfully
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimitExceeded'
delete:
operationId: deleteCategory
summary: Delete a knowledge base category
description: Removes a knowledge base category by correlation ID.
tags:
- Knowledge Base
parameters:
- $ref: '#/components/parameters/CorrelationId'
responses:
'200':
description: Category deleted successfully
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimitExceeded'
/v1/knowledgebase/upload-image:
post:
operationId: uploadImage
summary: Upload an image for knowledge base articles
description: Uploads an image to be used in knowledge base articles.
tags:
- Knowledge Base
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
file:
type: string
format: binary
description: Image file to upload
responses:
'200':
description: Image uploaded successfully
content:
application/json:
schema:
type: object
properties:
url:
type: string
description: URL of the uploaded image
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimitExceeded'
components:
schemas:
Category:
type: object
properties:
correlationId:
type: string
name:
type: string
description:
type: string
Article:
type: object
properties:
correlationId:
type: string
articleId:
type: number
categoryCorrelationId:
type: string
isPrivate:
type: boolean
contents:
type: array
items:
$ref: '#/components/schemas/ArticleContent'
ImportArticlesResponse:
type: object
properties:
errors:
type: array
items:
type: string
results:
type: array
items:
type: object
properties:
correlationId:
type: string
articleId:
type: number
status:
type: string
enum:
- created
- updated
contents:
type: array
items:
type: object
properties:
lang:
type: string
contentId:
type: number
slug:
type: string
status:
type: string
published:
type: boolean
errors:
type: array
items:
type: string
ImportCategoriesRequest:
type: object
required:
- categories
properties:
categories:
type: array
items:
type: object
required:
- correlationId
- name
properties:
correlationId:
type: string
description: External ID for idempotent upserts
name:
type: string
description: Category name
description:
type: string
description: Category description
ImportArticlesRequest:
type: object
required:
- articles
properties:
articles:
type: array
maxItems: 50
items:
$ref: '#/components/schemas/ArticleImport'
UpdateCategoryRequest:
type: object
properties:
name:
type: string
description: Updated category name
description:
type: string
description: Updated category description
ArticleImport:
type: object
required:
- correlationId
- contents
properties:
correlationId:
type: string
description: External ID for the article used for idempotent upserts
categoryCorrelationId:
type: string
description: Correlation ID of the category this article belongs to
isPrivate:
type: boolean
description: Whether the article is private
contents:
type: array
maxItems: 20
items:
$ref: '#/components/schemas/ArticleContent'
Error:
type: object
properties:
message:
type: string
description: Error message
ArticleContent:
type: object
required:
- lang
- title
- content
properties:
lang:
type: string
description: Language code (e.g., en, fr, de)
title:
type: string
description: Article title
content:
type: string
description: Article body content
format:
type: string
enum:
- markdown
description: Content format
publishStatus:
type: string
enum:
- published
- unpublished
description: Publication status of the article
responses:
Unauthorized:
description: Missing or invalid API key
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'
NotFound:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
parameters:
CorrelationId:
name: correlationId
in: path
required: true
description: External correlation ID for the resource
schema:
type: string
Lang:
name: lang
in: path
required: true
description: Language code (e.g., en, fr, de)
schema:
type: string
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.