Skip to Content
PlatformHow-to guidesConnect a source

How to connect a source

Use this guide when a program needs evidence from an external system (the open literature and knowledge sources, a document library, analytical tools) or a source you cite by hand. You start with a program that has no connection; you end with a connection record, a sync run, and a source record in Evidence. The two read-only connectors with partner onboarding steps have their own guides: How to connect an ELN and How to connect a QMS. The steps need program.connections.manage, program.connections.sync and evidence.sources.manage; reading needs the matching .read permissions.

Every provider is designed until the R1 gates pass. A new connection starts as pending; a manual sync of document_library or analysis_tools finishes as skipped with a NotImplemented error entry because those adapters do not fetch data, while literature_search reads the open sources with platform keys. The steps below record what the product is designed to do.

Prerequisites

  • A program you can open (the program appears in your switcher).
  • The permissions named in each step, for example through the program_lead or program_owner persona.

Open Setup › Connections

In the rail choose Setup, then Connections in the panel (/p/<slug>/setup/connections). The page lists the program’s connections with provider, status, health, enabled flag, write policy, pinned API version and last sync. The header summarises the providers and their release status. Needs program.connections.read.

Add a connection

Choose Add connection (needs program.connections.manage). In the form that expands in the connections list pick a Provider from literature_search (“Literature search”), benchling (“ELN connector”), veeva_qualitydocs (“QMS/SOP connector”), document_library (“Document library”) or analysis_tools (“Analytical and design tools”), give it a Name, optionally pick a Stage (the program’s current stage is the default) and submit. The form calls POST /programs/{program_id}/connections; the record appears with status pending until the credentials are configured (platform keys for the literature sources; per-connection service credentials for the two read-only connectors). Secret values are never stored in the database: secret_refs hold references only. Connections are program-scoped and carry scope_rules, write_policy and api_version.

Trigger a sync run

Select the connection, then Sync now (needs program.connections.sync). This calls POST /programs/{program_id}/connections/{connection_id}/sync and queues a sync run with trigger manual. The run list under the connection (GET .../connections/{connection_id}/runs) shows it move from queued to succeeded (or skipped for a provider without an adapter) once the worker’s background lane claims it.

Register a source by hand

In the rail choose Evidence, then Sources in the panel (/p/<slug>/evidence/sources). Choose Add source (needs evidence.sources.manage), pick a Kind (publication, eln_entry, protocol, report, dataset, sop_document, registry_record, preprint or other), enter a Title, optionally a Citation, an External reference (a DOI, PMID or record id in the connected system), a Licence code and a Summary, and submit. The source is created with status pending, origin = human and a “Saved” confirmation. Sources the agent proposes in the console arrive the same way with origin = agent after you approve them.

Open the source and link it to a question, finding or hypothesis (needs evidence.sources.link, route POST /programs/{program_id}/evidence/sources/{source_id}/links with target_type in question, finding or hypothesis). Findings that cite the source keep the link in source_ids.

Troubleshooting

SymptomCauseFix
Add connection is not shownYou lack program.connections.manageAsk a program owner for the program_lead persona or a direct assignment
The sync run stays queuedNo worker process is runningRun make worker in api/
The sync run finishes skippedExpected for document_library and analysis_tools, which have no adapterNothing to fix; the error entry says NotImplemented
403 with permission in the bodyThe route needs a permission you do not holdThe problem document names the missing key
Last updated on