FruxonDocs
ApiCollection sources

Creates a reusable collection source.

Validates the source config (tool / inline / RAG-index minimum fields) for its kind.

POST
/v1/tenants/{tenant}/collectionSources
AuthorizationBearer <token>

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

In: header

Path Parameters

tenant*string

The tenant identifier

The source definition.

displayName?string|null
active?boolean
source?

Where items come from, for a collection pipeline and for a work shape alike: an existing paged integration "list" tool driven headlessly (no LLM), an inline set supplied by a caller, or a RAG index. Stored as JSONB on Fruxon.Model.CollectionPipelines.CollectionPipeline and on a trigger's work shape.

One type, because there was never a second kind of source. A work shape carried its own near-identical copy of this block — same integration config, same list tool, same records path, same cursor parameter, same item-id path — differing only by the durable watermark below. Two declarations of one idea meant two validators, two editors, and an adapter in admission that copied one into the other field by field before every fetch. The watermark quartet (Fruxon.Model.CollectionPipelines.CollectionSourceConfig.CursorPath, Fruxon.Model.CollectionPipelines.CollectionSourceConfig.WatermarkParamName, Fruxon.Model.CollectionPipelines.CollectionSourceConfig.WatermarkFormat, Fruxon.Model.CollectionPipelines.CollectionSourceConfig.OverlapWindowMs) is what the work shape genuinely added, and it is useful to any source that is listed repeatedly: Fruxon.Model.CollectionPipelines.CollectionSourceConfig.CursorParamName is within-run paging and persists nothing between runs, so without it a Gmail source cannot express after:<last admitted> and re-lists the mailbox on every pass. A pipeline that leaves them null behaves exactly as it did before.

inputMapping?

How each source item is mapped into the per-item agent run's inputs. Values are dotted paths into the item (e.g. fields.summary) or {{template}} interpolations over it — the same resolution the tool-source mapper uses. Stored as JSONB on Fruxon.Model.CollectionPipelines.CollectionPipeline.

[key: string]?never

Response Body

curl -X POST "https://api.fruxon.com/v1/tenants/string/collectionSources" \  -H "Content-Type: application/json" \  -d '{}'
{
  "id": "00000000-0000-0000-0000-000000000000",
  "tenantId": "00000000-0000-0000-0000-000000000000",
  "createdAt": 0,
  "modifiedAt": 0,
  "displayName": "string",
  "active": false,
  "source": {
    "kind": "TOOL",
    "ragAssetId": "string",
    "ragReadMode": "DOCUMENTS",
    "ragSearch": "string",
    "pageSize": 0,
    "integrationConfigId": "string",
    "listToolId": "string",
    "getToolId": "string",
    "recordsPath": "string",
    "cursorParamName": "string",
    "parameters": {},
    "itemIdPath": "string",
    "sinkTargetPath": "string",
    "skipWhen": {
      "match": "ALL",
      "conditions": []
    },
    "sourceUrlPath": "string",
    "cursorPath": "string",
    "watermarkParamName": "string",
    "watermarkFormat": "RAW",
    "overlapWindowMs": 0,
    "flattenSheetRows": false
  },
  "inputMapping": {
    "userQuery": "string",
    "parameters": {},
    "attachmentUrlPath": "string"
  }
}
{
  "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
}