Skip to main content
POST
/
public
/
v1
/
strategies
/
validate
Validate a strategy payload before create/finalize
curl --request POST \
  --url https://api.example.com/public/v1/strategies/validate \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "strategyAst": {
    "protocol": "traseq.strategy",
    "version": 1,
    "strategy": {
      "kind": "strategy",
      "defaults": {
        "instrument": {
          "symbol": "BTCUSDT"
        },
        "timeframe": "1h",
        "warmupBars": 50
      },
      "entry": {
        "kind": "entry",
        "setup": {
          "kind": "compare",
          "op": "gt",
          "left": {
            "kind": "market",
            "field": "close"
          },
          "right": {
            "kind": "const",
            "value": 20000
          }
        },
        "trigger": {
          "kind": "compare",
          "op": "gt",
          "left": {
            "kind": "market",
            "field": "close"
          },
          "right": {
            "kind": "const",
            "value": 20100
          }
        },
        "filters": [
          {
            "kind": "pattern",
            "name": "hammer"
          }
        ],
        "action": {
          "side": "long",
          "sizing": {
            "mode": "fixed",
            "value": 1
          }
        }
      }
    }
  },
  "settings": {
    "maxConcurrentPositions": 1,
    "warmupPeriod": 200
  },
  "signalGraph": {
    "protocol": "traseq.signal-graph",
    "version": 2,
    "nodes": [
      {
        "id": "close_price",
        "kind": "market",
        "field": "close"
      },
      {
        "id": "breakout_level",
        "kind": "const",
        "value": 20100
      },
      {
        "id": "breakout_trigger",
        "kind": "compare",
        "op": "gt",
        "left": {
          "ref": "close_price"
        },
        "right": {
          "ref": "breakout_level"
        }
      }
    ],
    "strategy": {
      "kind": "strategy",
      "entry": {
        "kind": "entry",
        "trigger": {
          "ref": "breakout_trigger"
        },
        "action": {
          "side": "long",
          "sizing": {
            "mode": "fixed",
            "value": 1
          }
        }
      }
    }
  }
}
'

Authorizations

x-api-key
string
header
required

Workspace API key for public agent API access

Body

application/json
strategyAst
object
required

Canonical strategy protocol payload. Use this when the client already authors StrategyAstV1 directly.

Example:
{
"protocol": "traseq.strategy",
"version": 1,
"strategy": {
"kind": "strategy",
"defaults": {
"instrument": { "symbol": "BTCUSDT" },
"timeframe": "1h",
"warmupBars": 50
},
"entry": {
"kind": "entry",
"setup": {
"kind": "compare",
"op": "gt",
"left": { "kind": "market", "field": "close" },
"right": { "kind": "const", "value": 20000 }
},
"trigger": {
"kind": "compare",
"op": "gt",
"left": { "kind": "market", "field": "close" },
"right": { "kind": "const", "value": 20100 }
},
"filters": [{ "kind": "pattern", "name": "hammer" }],
"action": {
"side": "long",
"sizing": { "mode": "fixed", "value": 1 }
}
}
}
}
settings
object
required
signalGraph
object

Higher-level AI agent authoring graph. The backend compiles this to canonical strategyAst before validation and persistence.

Example:
{
"protocol": "traseq.signal-graph",
"version": 2,
"nodes": [
{
"id": "close_price",
"kind": "market",
"field": "close"
},
{
"id": "breakout_level",
"kind": "const",
"value": 20100
},
{
"id": "breakout_trigger",
"kind": "compare",
"op": "gt",
"left": { "ref": "close_price" },
"right": { "ref": "breakout_level" }
}
],
"strategy": {
"kind": "strategy",
"entry": {
"kind": "entry",
"trigger": { "ref": "breakout_trigger" },
"action": {
"side": "long",
"sizing": { "mode": "fixed", "value": 1 }
}
}
}
}

Response

200

Validation summary with issues