SyncLinks & Fan-out
SyncLink
Section titled “SyncLink”A SyncLink is a directed mapping from a source capability to a target capability:
source_app.source_capability ──▶ target_app.target_capabilityEach link carries a wcp_id — a stable identifier for the synced entity (e.g. a note, a row, a page).
Fan-out
Section titled “Fan-out”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_pageobsidian:note_abc ──▶ sheets.append_rowobsidian:note_abc ──▶ slack.post_messageA single wcp sync run iterates all active SyncLinks. The source is read once and written to all targets.
Creating SyncLinks
Section titled “Creating SyncLinks”Via the API:
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.
Link States
Section titled “Link States”| State | Meaning |
|---|---|
active | Included in every sync run |
paused | Skipped during sync, preserved for later |
error | Last sync failed; will retry on next run |
Syncable Pairs
Section titled “Syncable Pairs”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.