REST for CRUD and configuration; WebSocket for realtime streams; an internal event bus for asynchronous workflows. Every mutating endpoint requires authentication, authorisation, validation, idempotency where applicable and audit logging.
Responses return stable error codes and never leak stack traces or secrets. The OpenAPI specification is published and is a release requirement, not an afterthought.
| Method | Path | Purpose | Notes |
|---|---|---|---|
| GET | /v1/assets | List instruments with provenance | Quality flags per feed |
| GET | /v1/ohlcv | Time-series bars | Partitioned retention |
| GET | /v1/strategies | Strategy catalogue | Immutable version IDs |
| POST | /v1/backtests | Submit a backtest run | Assumptions recorded |
| POST | /v1/risk/evaluate | Evaluate an intent against risk policy | Returns reason codes |
| POST | /v1/orders | Submit an approved order intent | Idempotency-Key required |
| GET | /v1/orders/{id} | Order state and fill detail | UNKNOWN triggers reconciliation |
| WS | /v1/stream/market | Sequenced realtime market events | Reconnect + gap reconcile |
| WS | /v1/stream/orders | Order lifecycle events | Idempotent by sequence |
Risk rejections return machine-readable reason codes so your own tooling can react without parsing prose. These are drawn from the published risk taxonomy.
API keys are scoped to the minimum capability your integration needs, separated per environment, restricted by IP where supported, and rotatable without redeploying your service.
Versioned endpoints, published OpenAPI, machine-readable risk reason codes.