Check that a registered strategy can actually run
Instantiates the compiled class and drives it through a bounded synthetic series, so a wiring fault surfaces here instead of at your first backtest. The verdict — pass or fail, plus any engine notices — is recorded and served from GET /strategy/{strategyId}.
Idempotent. If a verdict already exists for the current compilation it comes straight back with 200 and nothing is queued. Otherwise the check is queued and this returns 202; poll GET /strategy/{strategyId} until validation is passed or failed.
Recompiling supersedes a verdict, which makes this callable again — the old answer described bytecode that is no longer what would run.
Request
- Base URL: https://api.qtsurfer.net/v1
- URL: https://api.qtsurfer.net/v1/strategy/{strategyId}/validate
- Auth: HTTP bearer
Path parameters
Unique identifier for a compiled strategy, derived from the source itself: the same code always yields the same id, for every caller. How much formatting the id ignores depends on the language — see POST /strategy for exactly which rewrites preserve it and which do not.
The id returned by POST /strategy
Response
Already validated; the recorded verdict, unchanged
Example response
{
"strategyId": "6bsh31ikwkuivhtgcoa6s4",
"validation": "passed",
"compiledAt": "2026-08-04T16:23:04Z",
"requiredSources": [
"Ticker"
],
"validatedAt": "2026-08-04T16:24:11Z",
"notices": [
{
"level": "WARN",
"code": "indicator.bar-data-on-ticker-path",
"message": "Indicator requires bar data but is on the ticker path",
"provenance": "compile-dry-run"
}
],
"_links": {
"code": {
"href": "/v1/strategy/6bsh31ikwkuivhtgcoa6s4/code"
}
}
}Changes
No recorded changes to this operation across all 50 revisions of this API.