Runtime HTTP API and External Scanner Signals
Updated May 22, 2026 · 1 min read
Use the runtime's local HTTP API to push external scanner signals, check health, and read state, plus how signals reach the LLM prompt.
The Senpi runtime exposes a local HTTP API on `127.0.0.1:8787` by default. Four endpoints:
POST /signalsIngests external scanner signals as a JSON array body.
- body
- Ingest external scanner signals (JSON array body).
GET /auditReturns strategy audit history for a wallet address.
- address
- Wallet address - strategy audit history via the MCP.
GET /healthReports liveness and per-runtime signal queue depth.
- -
- Liveness plus per-runtime signal queue depth.
GET /stateReturns full runtime state for each running runtime, by wallet address.
- address
- Wallet address - full runtime state per running runtime.
Exposing the API to other hosts
Default binding is 127.0.0.1:8787 (localhost only). To call it from Postman or another host, set api.host: 0.0.0.0 in openclaw.json and add a Docker port mapping like 127.0.0.1:8787:8787. The 127.0.0.1: prefix on the host mapping is mandatory - leaving it off exposes the API to your LAN.
Pushing signals from an external scanner
- 1
Define scanner
type: external_scanner + outputs/retention block
- 2
Push data
POST /signals or gateway RPC
- 3
Include fields
address, scanner, asset, direction, signal_type + data
In the LLM prompt, signals are accessible as {{signal_<scanner_name>}} and retained context as {{context_<scanner_name>}}. Flat aliases like {{<scanner_name>}} are not created.
Related articles
Senpi Runtime: Installation, CLI, and Configuration
Install @senpi-ai/runtime and run its CLI for recipes, log levels, diagnostics, and auto-update, plus the strategy templates to start from.
Runtime 1.1.0: New Architecture, Migration, and Common Errors
What Runtime 1.1.0 moves into the execution layer, how to migrate to @senpi-ai/runtime, and fixes for TypeBox and margin errors.
