FruxonDocs
ApiKnowledge bases

Asks the consolidator about clusters of a reviewed report, without changing any document.

The consolidator reads each named cluster and classifies it (duplicate, overlapping, related or distinct). For a cluster it would merge it also writes the merged article, which the run's report carries as a PROPOSED cluster: the survivor, the proposed title, body and tags, and its reason. No document is written, so the text can be read before it exists anywhere an agent looks; approve it with `:approve`. Members are revalidated against the report like `:apply` does — a cluster whose documents changed is reported STALE. Queues a propose run and returns it; the run list omits proposed bodies, so read the run itself for them. Asking again about a cluster already answered — kept apart by the consolidator or by a person — is how an answer is overruled; the newest answer is the one that counts. `note` is handed to the consolidator with every cluster, typically why the person thinks a group is one article after all.

POST
/v1/tenants/{tenant}/knowledgeBases/{knowledgeBase}/consolidations/{consolidation}:propose
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
consolidation*string

The report-only run whose clusters are being asked about.

Formatuuid
tenant*string

The tenant identifier

The clusters to ask about, the report version they were read from, and an optional note for the consolidator.

clusterIds?array<string>

Which of the report's clusters to merge. Selective on purpose: a report is reviewed cluster by cluster, and an all-or-nothing apply would make one bad candidate reject every good one.

expectedReportVersion?integer

The report version the caller read. Sent back so a report produced by a different shape cannot be applied through semantics it was never written under.

Formatint32
note?string|null

What the person asking wants the consolidator to weigh — typically, asking again about a group it kept apart, why they think it is one article. It is evidence, not an order: the consolidator still decides, and says why when it disagrees. Leave it out for a plain ask.

[key: string]?never

Response Body

curl -X POST "https://api.fruxon.com/v1/tenants/string/knowledgeBases/497f6eca-6276-4993-bfeb-53cbbbba6f08/consolidations/497f6eca-6276-4993-bfeb-53cbbbba6f08:propose" \  -H "Content-Type: application/json" \  -d '{}'
{
  "id": "00000000-0000-0000-0000-000000000000",
  "knowledgeBaseId": "00000000-0000-0000-0000-000000000000",
  "status": "QUEUED",
  "trigger": "MANUAL",
  "consolidationPolicyVersion": 0,
  "consolidationCadence": "MANUAL",
  "consolidationMode": "REPORT_ONLY",
  "requestedBy": "string",
  "reportOnly": false,
  "reportOnlyReason": "string",
  "similarityThreshold": 0,
  "maxClusterSize": 0,
  "recentWriteWindowMinutes": 0,
  "basedOnRunId": "00000000-0000-0000-0000-000000000000",
  "clusterIds": [
    "00000000-0000-0000-0000-000000000000"
  ],
  "reviewerNote": "string",
  "startedAt": 0,
  "completedAt": 0,
  "error": "string",
  "report": {
    "version": 0,
    "knowledgeBaseId": "00000000-0000-0000-0000-000000000000",
    "reportOnly": false,
    "consolidatorAgentId": "string",
    "similarityThreshold": 0,
    "maxClusterSize": 0,
    "recentWriteWindowMinutes": 0,
    "documentsConsidered": 0,
    "documentsSkippedAsRecentlyModified": 0,
    "embeddingsComputed": 0,
    "embeddingsReused": 0,
    "embeddingTokens": 0,
    "embeddingModel": "string",
    "clusters": [
      {
        "clusterId": "00000000-0000-0000-0000-000000000000",
        "index": 0,
        "members": [],
        "maxSimilarity": 0,
        "minSimilarity": 0,
        "sectionOverlap": null,
        "outcome": "UNSPECIFIED",
        "classification": "UNSPECIFIED",
        "survivorId": null,
        "proposedTitle": "string",
        "proposedBodyMarkdown": "string",
        "proposedTags": [],
        "authorAgentId": "string",
        "archivedIds": [],
        "note": "string",
        "conflicts": [],
        "executionRecordId": null,
        "decidedBy": "string",
        "earlierDecision": null
      }
    ],
    "repeatedFacts": [
      {
        "factId": "00000000-0000-0000-0000-000000000000",
        "title": "string",
        "minSimilarity": 0,
        "occurrences": [],
        "check": null
      }
    ],
    "sectionsCompared": 0,
    "repeatedFactsSkippedReason": "string",
    "openingBoilerplate": [
      "string"
    ],
    "clustersFound": 1,
    "clustersMerged": 0,
    "clustersKeptSeparate": 0,
    "clustersFailed": 0,
    "clustersProposed": 0,
    "clustersRelated": 0,
    "documentsArchived": 0
  },
  "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
}
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "property1": null,
  "property2": null
}