Connector Runner
The connector runner was retired on October 10, 2026. What was removed, what remains, and how to move integrations off it.
The connector runner was the background service that polled supported EHR, FHIR-store, and warehouse sources, delivered eligible world-model events to supported destinations, ran the gap scanner, and dispatched due outbound tasks. It had no public API of its own. Its Platform API surface changed as follows.
Removed
POST /v1/{workspace_id}/data-sources/{data_source_id}/syncPOST /v1/{workspace_id}/settings/gap-scanner/previewandPOST /v1/{workspace_id}/settings/gap-scanner/scanGET /v1/{workspace_id}/health/synchealth_status,last_sync_*, andis_staleon data-source responsesThe connector status fields on pipeline status, and
last_pollandlast_sync_*on the pipeline source list and overviewlast_poll_at,last_change_at, andsync_healthyon FHIR statusThe
pipelinesection of the workspace health snapshotPlatform SDK 0.111.0 removes
dataSources.triggerSync(),settings.gapScanner.preview(), andsettings.gapScanner.scan(); 0.112.0 removessettings.gapScanner.get()andupdate()
On October 9, 2026, the Developer Console removed its Outreach and EHR Sync pages and the Data Sources connector catalog and detail pages. Customer workspaces have no connector catalog or connector detail page.
What Remains
Data-source records. Data Sources create, read, update, delete, status, and sync history remain. A saved data source is stored, but nothing polls it.
Gap-scanner settings.
GETandPUT /v1/{workspace_id}/settings/gap-scannerstill read and save settings, but no scanner acts on them. Platform SDK 0.112.0 has no methods for them.Pipeline reads over stored data. The pipeline endpoints below report stored events, history, throughput, outbound logs, and entity-resolution counts. They no longer report live connector state.
Moving Off the Connector Runner
Place outreach calls through the Calls API. A trigger action can still write an
outbound_task, but nothing dispatches it.Send source records to the world model through FHIR, Bulk Import, or Customer Data Intake.
Read from or write to an external system during a conversation through an integration, and verify the result at the destination.
Pipeline Observability
Read-only pipeline endpoints remain under /v1/{workspace_id}/pipeline/. All operations require viewer+ access and are workspace-scoped.
Pipeline Status
Pipeline dashboard: Lakebase entity count + Delta read-model event counts.
API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.
Successful Response
Read-model event count for the last 7 days. Null means the read model is empty or unavailable; zero means the read model is ready and has no events.
emptyPossible values: 0Rate limit exceeded
GET /v1/{workspace_id}/pipeline/status HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"total_events": 1,
"event_read_model_status": "empty",
"event_read_model_synced_at": "2026-01-01T00:00:00.000Z",
"total_entities": 0
}List Sources
Data sources with persisted health status.
API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.
Search by name, ID, type, or health status
Filter by source type
Filter by health status
Filter by active state
Successful Response
0Validation Error
Rate limit exceeded
GET /v1/{workspace_id}/pipeline/sources HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
[
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"name": "text",
"display_name": "text",
"source_type": "ehr",
"is_active": true,
"health_status": "unknown",
"event_count": 0
}
]Source Overview
Consolidated source detail: metadata, health, recent failures, last poll, outbound summary.
API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.
Successful Response
00Data source not found
Validation Error
Rate limit exceeded
GET /v1/{workspace_id}/pipeline/sources/{source_id}/overview HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"name": "text",
"display_name": "text",
"source_type": "ehr",
"is_active": true,
"health_status": "unknown",
"created_at": "text",
"event_count": 0,
"entity_count": 0,
"recent_failures": [
{
"event_id": "123e4567-e89b-12d3-a456-426614174000",
"event_type": "text",
"fhir_resource_type": "text",
"sync_error": "text",
"ingested_at": "text"
}
],
"outbound": {
"total": 0,
"synced": 0,
"failed": 0,
"pending": 0,
"last_synced_at": "text"
}
}Source History
Event counts bucketed by time window for a specific source.
API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.
1hPossible values: Successful Response
Validation Error
Rate limit exceeded
GET /v1/{workspace_id}/pipeline/sources/{source_id}/history HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
[
{
"bucket": "text",
"source_system": "text",
"event_count": 1
}
]Source Events
Paginated events for a specific data source.
API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.
[]50Filter by event type
Filter by entity type
Filter events ingested on or after this time
Filter events ingested on or before this time
Successful Response
Validation Error
Rate limit exceeded
GET /v1/{workspace_id}/pipeline/sources/{source_id}/events HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"items": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"event_type": "text",
"entity_type": "text",
"entity_id": "123e4567-e89b-12d3-a456-426614174000",
"source": "text",
"source_system": "text",
"confidence": 1,
"ingested_at": "2026-01-01T00:00:00.000Z"
}
],
"has_more": true,
"continuation_token": null
}Outbound Summary
Per-sink outbound sync aggregation: synced/failed/pending counts.
API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.
Successful Response
Rate limit exceeded
GET /v1/{workspace_id}/pipeline/outbound HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
[
{
"data_source_id": "123e4567-e89b-12d3-a456-426614174000",
"data_source_name": "text",
"total": 1,
"synced": 1,
"failed": 1,
"pending": 1,
"last_synced_at": "text"
}
]Outbound Log
Paginated outbound sync log for a specific sink.
API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.
50Successful Response
Validation Error
Rate limit exceeded
GET /v1/{workspace_id}/pipeline/outbound/{data_source_id}/log HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"items": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"event_id": "123e4567-e89b-12d3-a456-426614174000",
"synced_at": "2026-01-01T00:00:00.000Z",
"sync_error": "text",
"attempt_count": 1,
"created_at": "2026-01-01T00:00:00.000Z"
}
],
"has_more": true,
"continuation_token": null
}Entity Resolution Metrics
Historical same_as merge-edge counts (written by the pre-SDP resolver; merge detection now lives in the Databricks pipeline — new edges are not produced) and entity resolution loop status.
API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.
Successful Response
Rate limit exceeded
GET /v1/{workspace_id}/pipeline/entity-resolution HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"total_same_as_edges": 1,
"recent_merges_24h": 1
}Legacy Review Counters
The retired event-review pipeline has no producer. Its compatibility counters remain zero and do not represent external write proposals.
Review queue depth, approval rate, and average review time.
API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.
Successful Response
0Rate limit exceeded
GET /v1/{workspace_id}/pipeline/review HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"queue_depth": 1,
"pending_by_priority": {
"ANY_ADDITIONAL_PROPERTY": 1
},
"approved_7d": 1,
"rejected_7d": 1,
"avg_review_time_hours": 1,
"total_items": 0
}Throughput
Event throughput time series across all sources.
API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.
1dPossible values: Successful Response
Validation Error
Rate limit exceeded
GET /v1/{workspace_id}/pipeline/throughput HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
[
{
"bucket": "text",
"source_system": "text",
"event_count": 1
}
]Last updated
Was this helpful?

