FruxonDocs
ApiCollection sources

Updates a reusable collection source.

Replaces the source's mutable definition (fetch config + input mapping + active flag).

PUT
/v1/tenants/{tenant}/collectionSources/{collectionSource}
AuthorizationBearer <token>

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

In: header

Path Parameters

collectionSource*string

The unique identifier of the source.

Formatuuid
tenant*string

The tenant identifier

The replacement 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 PUT "https://api.fruxon.com/v1/tenants/string/collectionSources/497f6eca-6276-4993-bfeb-53cbbbba6f08" \  -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
}