External Endpoints
Synthetic Heart supports connecting to external AI services through the External Endpoints section in the Web UI. External endpoints can be used as first-class providers for the built-in cortex, vox, auris, and live subsystems.
Overview
The External Endpoints workflow is designed to be simple and guided for users who do not already know provider URLs or configuration details.
Known providers are exposed as built-in presets in the Add Endpoint wizard.
Presets pre-fill the protocol, base URL, and subsystem defaults.
For commercial providers, only the API key is typically required.
Custom endpoints are still supported and remain fully editable.
Supported endpoint types include:
Gemini
Anthropic
OpenRouter
GitHub Models / Copilot
Ollama local hosts
Selenium LLM Engine
Generic OpenAI-compatible services
Legacy HTTP TTS services via
custommode
Note
Each provider preset is implemented as a separate JSON file under the
project-level providers/ directory. This keeps the core engine agnostic and
allows users to remove unused provider presets without breaking the rest of the
project.
Built-in default endpoint
Selenium LLM Engine is distributed as a default endpoint for new installs. It is available automatically, but users may remove it if they do not need it. If removed, it can be restored from the provider presets list.
Getting started
Open the Web UI and navigate to Settings > External Endpoints.
Click + Add Endpoint.
Choose a provider preset or select Custom Endpoint.
Complete the form: -
Name: internal identifier (unique engine name) -Display Label: human-readable label -Base URL: pre-filled for known providers or entered manually -API Key: required only when the provider needs one -Capabilities: select which subsystems the endpoint should supportSave the endpoint.
After saving, Synthetic Heart performs a probe to detect capabilities, available models, and register the endpoint with the chosen subsystems.
Provider presets
Known providers appear as a preset grid when adding a new endpoint. A preset usually does the following:
pre-fills the protocol and base URL
sets sensible default capability mappings
reduces the configuration burden to just an API key and a display name
keeps the base URL locked by default for known providers, while still allowing manual override if needed
The Custom Endpoint preset is also available for any service that is not already covered by the built-in presets.
Probe status
The endpoint card displays probe status:
success: reachable endpoint, models enumeratedfailed: endpoint unreachable or unsupported responsepending: probe is in progressnever: probe has not been run yet
Model list and default model
After a successful probe, available models appear in the endpoint card.
If no default model is configured, the first discovered model is set automatically.
You can change the default model at any time from the card.
If the model list is empty, verify that the endpoint supports
/v1/models
and returns a valid OpenAI-style response.
Subsystem mapping
Each endpoint may be mapped to one or more subsystems:
cortex: chat and reasoningvox: text-to-speechauris: speech-to-textlive: real-time or multimodal behavior
The endpoint card shows the current effective mapping. To change mapping, open the endpoint with the Edit button and update the capability checkboxes.
Use cases
Local development and testing:
Start Selenium LLM Engine and add it as an external endpoint using the built-in Selenium preset.
Confirm probe success and map the endpoint to
cortexfor chat usage.
Multi-provider setups:
Add Gemini, Anthropic, OpenRouter, or GitHub Models endpoints.
Map each endpoint to the subsystems where it is strongest.
Legacy HTTP TTS endpoints
Legacy TTS servers can still be integrated as a Vox provider using the
custom protocol.
Protocol:customBase URL: root path of the legacy TTS serverExtra Config: add at least{"legacy_http_tts": true}
Optional extra config keys:
tts_voice_wav: path to the reference WAV file used by the remote servertts_endpoint_path: custom POST path when the server does not accept requests at the base URL
After saving, set ACTIVE_VOX_ENGINE to the endpoint Name you created.
This registers the endpoint as a first-class Vox engine.
Troubleshooting
If probe fails: - verify network connectivity from inside the container - use container DNS such as
host.docker.internalwhen needed - verify the endpoint exposes/.well-known/openai-configurationand/v1/modelsIf the model list is missing: - ensure the provider returns valid
data[]objects withidfields - check whether an API key or provider-specific permission is required
API Reference
See core/external_endpoints/registry.py and
core/external_endpoints/probe.py for implementation details and field
meanings.