FruxonDocs
ApiKnowledge bases

Adds a source to a knowledge base, linking one or having one built.

Management mode chooses the route, not kind — both routes can produce conversations, and what differs is who owns the implementation afterwards. Linked (the default) records an implementation the user already runs: every typed target is revalidated in the current tenant, and the source and its resource links are stored atomically as user-owned, to be inspected but never updated or deleted. Managed asks Fruxon to materialize one from the stock conversation recipe — agents, automation and ledger, each stamped as managed as it is created, with the customer's connector configuration referenced rather than owned. A built source lands paused: preview it, then resume it when you are satisfied with what it will read.

POST
/v1/tenants/{tenant}/knowledgeBases/{knowledgeBase}/sources
AuthorizationBearer <token>

JWT Authorization header using the Bearer scheme. Enter 'Bearer' [space] and then your token.

In: header

Path Parameters

knowledgeBase*string

The knowledge base id.

Formatuuid
tenant*string

The tenant identifier

Source metadata and policy, plus either existing resources or recipe configuration.

displayName?string
kind?string

The evidence origin represented by a Fruxon.Model.KnowledgeBases.KnowledgeSource.

Value in"UNSPECIFIED" | "PROVIDER_CONVERSATIONS" | "FRUXON_CONVERSATIONS" | "FILES" | "SAAS_DOCUMENTS" | "STRUCTURED_RECORDS" | "CUSTOM_AUTOMATION"
managementMode?string

Whether the user supplies the implementation or Fruxon materializes one.

Value in"UNSPECIFIED" | "MANAGED" | "LINKED"
config?unknown

Linked sources only: product-level configuration to record against the source. Free-form, because what is worth recording about an implementation Knowledge did not build is the user's to decide. A managed source's configuration is Fruxon.Model.KnowledgeBases.CreateKnowledgeSourceRequest.Conversations, which the recipe reads.

approvalPolicy?string

How generated or materially changed knowledge is accepted into the authoring corpus.

Value in"UNSPECIFIED" | "MANUAL" | "SAMPLED" | "AUTOMATIC"
approvalSamplePercent?integer

Percentage of otherwise eligible Sampled outputs that stay in Draft for quality review. Risk-flagged, low-confidence and rewrite outputs always stay in Draft regardless of this value.

Formatint32
Range0 <= value <= 100
publishPolicy?string

When accepted authoring changes are published to the KB's retrieval index.

Value in"UNSPECIFIED" | "MANUAL" | "AUTOMATIC_AFTER_APPROVAL"
resources?

Linked sources only: the existing resources that implement this source.

conversations?

Managed PROVIDER_CONVERSATIONS sources only: what the stock recipe needs to build one — which connector and query to read, what the conversations are about and in what language, which models run the two stages, and when it should scan.

The recipe's own input type rather than a parallel copy of it. A second shape here would have to be kept in step with the recipe by hand, and the thing it would be protecting against — platform Agent and Trigger payloads reaching the product API — is already prevented: this carries a door, a language and two model choices, and the agents and automation are composed behind it.

[key: string]?never

Response Body

curl -X POST "https://api.fruxon.com/v1/tenants/string/knowledgeBases/497f6eca-6276-4993-bfeb-53cbbbba6f08/sources" \  -H "Content-Type: application/json" \  -d '{}'
{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "knowledgeBaseId": "619a59ff-6d34-4e0c-9a58-4d2cf062eac9",
  "displayName": "string",
  "kind": "UNSPECIFIED",
  "status": "UNSPECIFIED",
  "managementMode": "UNSPECIFIED",
  "recipeKey": "string",
  "recipeVersion": 0,
  "config": null,
  "approvalPolicy": "UNSPECIFIED",
  "approvalSamplePercent": 0,
  "publishPolicy": "UNSPECIFIED",
  "settingsEditable": true,
  "settingsNotEditableReason": "string",
  "resources": [
    {
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "resourceKind": "UNSPECIFIED",
      "resourceId": "string",
      "role": "UNSPECIFIED",
      "ownership": "UNSPECIFIED"
    }
  ],
  "createdAt": 0,
  "modifiedAt": 0
}
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "property1": null,
  "property2": null
}
Empty
Empty
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "property1": null,
  "property2": null
}