Documentation

Knowledge Base API

Search manufacturer technical documentation programmatically. Use these endpoints to build LLM-powered integrations that reference Biamp, Crestron, and other manufacturer knowledge bases.

GET /api/v1/knowledge-base/manufacturers

List all available manufacturer knowledge bases with article counts. Use this to discover which manufacturers have documentation before searching.

Response (200 - Success)

{
    "success": true,
    "data": [
        {
            "slug": "biamp",
            "displayName": "Biamp",
            "description": "Tesira, Devio, Parle, Vocia product families",
            "articleCount": 1298,
            "lastImportedAt": "2026-04-19T15:30:00Z",
            "isActive": true
        },
        {
            "slug": "crestron",
            "displayName": "Crestron",
            "description": "Control systems, SIMPL programming, hardware",
            "articleCount": 3533,
            "lastImportedAt": "2026-04-19T15:30:00Z",
            "isActive": true
        }
    ],
    "timestamp": "2026-04-20T12:00:00Z"
}

GET /api/v1/knowledge-base/manufacturers/{slug}

Get details for a single manufacturer knowledge base.

Path Parameters

Parameter Type Description
slug string Manufacturer slug (e.g. biamp, crestron)

Response (200 - Success)

{
    "success": true,
    "data": {
        "slug": "biamp",
        "displayName": "Biamp",
        "description": "Tesira, Devio, Parle, Vocia product families",
        "articleCount": 1298,
        "lastImportedAt": "2026-04-19T15:30:00Z",
        "isActive": true
    },
    "timestamp": "2026-04-20T12:00:00Z"
}

POST /api/v1/knowledge-base/search

Search one manufacturer's documentation for a question. The response holds the passages of that documentation that match the question, best match first. Each passage names the article it belongs to, with the article's id, title and source URL. This is the endpoint to give an LLM as a tool when it needs wiring rules, port specifications, configuration steps or troubleshooting guidance.

Each article's text is divided into passages of at most 400 words, and the search ranks each passage on its own. A short article is a single passage, so the search returns its whole text.

Request Body

Field Type Required Description
query string Yes The question, in plain language
manufacturer string Yes Manufacturer slug from GET /api/v1/knowledge-base/manufacturers (e.g. biamp). Upper and lower case are treated alike, and spaces around the slug are ignored
limit integer No Maximum number of passages, 1 to 10 (default 5). A value outside that range is moved to the nearest end of it

The passages of one response hold at most 3,000 words in total, so a response can hold fewer passages than limit.

Changed on 9 October 2026

Before this date the endpoint returned one row per article. It now returns one row per passage, and the request, the rows in results and the error body changed with it. An integration written for the article search needs these changes:

Before Now
Request: manufacturer was optional manufacturer is required
Request: limit defaulted to 10 limit defaults to 5 and is held to 1 to 10
Request: category, threshold Not read. A request that still sends them is accepted and searched without them
Row: id articleId
Row: contentSnippet, the first 500 characters of the article text, the passage that matches
Row: similarity, rerankScore score, the reranker's relevance score
Row: matchType (Semantic, Keyword, Hybrid) match (semantic, keyword, hybrid)
Row: summary, category Removed, with no replacement
Row: title, sourceUrl, productLine, manufacturerSlug, manufacturerName Unchanged
Response: no manufacturer, no creditsCharged Both are returned beside query and totalResults
Error: "error": "Query is required", a string "error": { "code", "message", "details" }, an object. See Error Responses below

A removed field is absent from the response, so code that still reads id or contentSnippet gets no value and no error.

Example Request

POST /api/v1/knowledge-base/search
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN

{
    "query": "Dante port wiring requirements for TesiraFORTE",
    "manufacturer": "biamp",
    "limit": 5
}

Response (200 - Success)

{
    "success": true,
    "query": "Dante port wiring requirements for TesiraFORTE",
    "manufacturer": "biamp",
    "results": [
        {
            "articleId": 42,
            "title": "TesiraFORTE Network Configuration",
            "manufacturerName": "Biamp",
            "manufacturerSlug": "biamp",
            "productLine": "tesira",
            "sourceUrl": "https://support.biamp.com/...",
            "text": "The TesiraFORTE connects via Dante...",
            "score": 0.912,
            "match": "hybrid"
        }
    ],
    "totalResults": 1,
    "creditsCharged": 1,
    "timestamp": "2026-10-09T12:00:00Z"
}

Response Fields

Field Type Description
success boolean true for a search that ran, with or without passages. false in an error response
query string The question as it was searched, with the spaces around it removed
manufacturer string The slug as it was searched, in lower case with the spaces around it removed
results array The passages, best match first
totalResults integer Number of passages in results
creditsCharged number Credits charged for this search: the price of one search when passages are returned, 0 when none are
timestamp string When the response was written, in UTC

Passage Fields

Every passage in results carries the same nine fields. A field with no value is null.

Field Type Description
articleId integer Id of the article the passage belongs to. Two passages of the same article carry the same id
title string Title of that article
manufacturerName string Display name of the manufacturer
manufacturerSlug string Slug of the manufacturer
productLine string or null Product line of the article, when the article has one
sourceUrl string or null Address of the article on the manufacturer's site, when the article has one
text string The text of the passage
score number or null The reranker's relevance score for the passage, rounded to three decimal places. A higher score is a closer match. null when the reranker did not score the passage
match string How the search found the passage: semantic (by meaning), keyword (by matching words) or hybrid (both)

A search that finds no passage also answers 200, with an empty results array, "totalResults": 0 and "creditsCharged": 0.

Credits

A search costs 1 credit. A search is charged whenever passages come back, and it has no relevance cut-off, so a search of a manufacturer that has documentation returns passages and is charged nearly every time. A search that returns no passage, names an unknown manufacturer or fails is not charged.

The credit balance is checked before the search runs. An organization without the credit gets INSUFFICIENT_CREDITS and no search is made. A key or user with read-only access gets READ_ONLY_ACCESS, and nothing is searched or charged.

Error Responses

Status Code Description
400 VALIDATION_ERROR query is missing or blank ("Query is required"), or manufacturer is missing or blank ("Manufacturer is required"). Nothing is searched or charged
400 INSUFFICIENT_CREDITS The organization does not have the credit for one search ("Insufficient credits for knowledge base search"). Nothing is charged
403 READ_ONLY_ACCESS The key or user making the request has read-only access ("You don't have permission. Contact your administrator."). Nothing is searched or charged
404 MANUFACTURER_NOT_FOUND No active manufacturer has the slug ("Unknown manufacturer 'nosuch'"). Nothing is charged
503 SEARCH_FAILED The search could not be completed ("Knowledge base search failed. Nothing was charged.")

Two answers come before this endpoint runs and are not in the table: 401 for a request without a valid token or API key, and 403 SUBSCRIPTION_REQUIRED for an organization without a subscription that is active, trialing or past due. See Error Handling.

An error carries its code, its message and, for some errors, a hint in details:

{
    "success": false,
    "error": {
        "code": "MANUFACTURER_NOT_FOUND",
        "message": "Unknown manufacturer 'nosuch'",
        "details": "GET /api/v1/knowledge-base/manufacturers lists the slugs."
    },
    "timestamp": "2026-10-09T12:00:00Z"
}

LLM Integration Pattern

To use these endpoints as tools for an external LLM agent:

  1. Discover available manufacturers and their slugs with GET /manufacturers
  2. Search one manufacturer's documentation with POST /search, using the manufacturer's slug and a natural language question. The passages in the response are the documentation text to hand to the LLM

The search matches passages by meaning and by matching words, and a reranker then puts the matches in order. A query written as a full question works best. For example, "How do I wire IR ports on an HD-CTL-101" with the manufacturer crestron searches the Crestron documentation for the passages about IR port wiring.