Skip to content

SyncLinks & Fan-out

A SyncLink is a directed mapping from a source capability to a target capability:

source_app.source_capability ──▶ target_app.target_capability

Each link carries a wcp_id — a stable identifier for the synced entity (e.g. a note, a row, a page).

Fan-out means one source writes to multiple targets simultaneously. In WCP, fan-out is achieved by creating multiple SyncLinks from the same source:

obsidian:note_abc ──▶ notion.write_page
obsidian:note_abc ──▶ sheets.append_row
obsidian:note_abc ──▶ slack.post_message

A single wcp sync run iterates all active SyncLinks. The source is read once and written to all targets.

Via the API:

Terminal window
curl -X POST http://localhost:8000/api/links \
-H "Content-Type: application/json" \
-d '{
"wcp_id": "obsidian:note_abc",
"source_app": "obsidian",
"source_capability": "read_note",
"target_app": "notion",
"target_capability": "write_page"
}'

Repeat for each additional target.

StateMeaning
activeIncluded in every sync run
pausedSkipped during sync, preserved for later
errorLast sync failed; will retry on next run

The /api/capabilities/syncable-pairs endpoint returns all valid source→target combinations based on registered capabilities:

[
{
"source": {"app": "obsidian", "capability": "read_note"},
"target": {"app": "notion", "capability": "write_page"}
}
]

Use this to build the link creation UI — only show pairs that actually make sense.