Three Axis Data API
Cyclical alternative data computed from proprietary cyclic models. Confluence signals identify where multiple axes reach structural events within the same time window. All responses are abstracted to axis / structural vocabulary — the raw internal detail behind each axis is not exposed.
Overview
Base URL: https://api.threeaxis.live/v1
All responses are JSON. Timestamps are ISO 8601 UTC. Prices are in the instrument's native currency.
The API computes cyclic signal curves across independent axes. When multiple axes have structural events (peaks, troughs, zero crossings, level shifts) within the same window, a confluence signal is generated.
Responses are abstracted to axis / structural vocabulary (Axis-N, structural events, cyclic signals). The raw internal model detail behind each axis is intentionally not exposed.
API access is included with a Three Axis Plus subscription. A key stops working when the subscription ends.
Authentication
Pass your API key in the Authorization header:
curl https://api.threeaxis.live/v1/signals/confluences?ticker=GC=F \
-H "Authorization: Bearer 3ax_your_key_here"API access is included with a Three Axis Plus subscription, and a key stops working when the subscription ends. The API returns:
401statusMissing, invalid, or revoked API key402statusValid key, but the account is not on Plus (or the subscription has ended)Keys are available in your account settings under the API section. Keep your key secret — it identifies your account and counts against your rate limit.
Confluence Signals
Returns confluence signals for a ticker — windows where multiple axes have structural events together. Live now. The response is sanitized to Axis-N vocabulary: clusters carry confluence_axes and axis_count, and each event exposes its axis and event_type: "structural".
tickerstringrequiredInstrument symbol (e.g. GC=F)intervalstringBar interval (e.g. 1d). Default: 1dRate limit: 30 requests/min per API key.
curl "https://api.threeaxis.live/v1/signals/confluences?ticker=GC=F&interval=1d" \
-H "Authorization: Bearer 3ax_..."
# Response
{
"ok": true,
"ticker": "GC=F",
"interval": "1d",
"cached": true,
"config": { ... },
"results": { ... },
"confluence_stats": { ... },
"clusters": [
{
"date": "2026-04-22",
"confluence_axes": ["axis-1", "axis-3", "axis-5"],
"axis_count": 3,
"events": [
{ "axis": "axis-3", "event_type": "structural", "date": "2026-04-21" },
{ "axis": "axis-1", "event_type": "structural", "date": "2026-04-23" }
]
}
]
}Event CalendarComing soon
Not yet available. This endpoint authenticates but currently returns HTTP 501 — it has no data yet. Per-axis structural events (peaks, troughs, zero crossings, level shifts, velocity extremes) will be served here.
Backtest
Run the cyclic backtest against any symbol's historical data. Live now. Computationally expensive — may take some time for long date ranges.
symbolstringrequiredInstrument symbol (e.g. TSLA)axesstring[]Optional. Restrict to specific axesintervalstringOptional bar interval (e.g. 1d). Default: 1dRate limit: 30 requests/min per API key.
curl -X POST "https://api.threeaxis.live/v1/backtest" \
-H "Authorization: Bearer 3ax_..." \
-H "Content-Type: application/json" \
-d '{
"symbol": "TSLA",
"interval": "1d"
}'
# Response
{
"ok": true,
"symbol": "TSLA",
"interval": "1d",
"cached": true,
"config": { ... },
"results": { ... }
}Overlay DataComing soon
Not yet available. This endpoint authenticates but currently returns HTTP 501 — it has no data yet. Time-series cyclic signal curves for charting will be served here.
WebhooksComing soon
Not yet available. This endpoint authenticates but currently returns HTTP 501 — it has no data yet. Push notifications for detected confluence signals will be served here.
MCP Server
Use Three Axis as tools inside an AI agent (Claude Desktop, Cursor, Claude Code) via the Model Context Protocol. The MCP server is a thin wrapper over this same API — each tool maps 1:1 to a /v1 endpoint and forwards your key. It exposes:
get_confluence_signalstool→ GET /v1/signals/confluences (ticker, interval)run_backtesttool→ POST /v1/backtest (symbol, interval, axes)It requires the same Plus API key (set as THREEAXIS_API_KEY). Configure it in your client's MCP settings:
{
"mcpServers": {
"threeaxis": {
"command": "python",
"args": ["/path/to/mcp-server/server.py"],
"env": { "THREEAXIS_API_KEY": "3ax_your_key" }
}
}
}Setup and source: mcp-server/ (see its README). The agent reads the tool list and calls them on your behalf; responses come back in the same abstracted Axis-N / structural form as the REST API.
Rate Limits
Rate limits are enforced per API key. When a limit is exceeded the API returns HTTP 429 with a Retry-After header indicating how many seconds to wait before retrying.
Per-endpoint limits:
backtestPOST30 requests/minsignals/confluencesGET30 requests/minNote: X-RateLimit-Limit / Remaining / Reset response headers are planned but not currently emitted. Use the Retry-After header on a 429 response to back off.
Errors
Standard HTTP status codes. Error responses include a machine-readable code and human-readable message.
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Retry after 3 seconds.",
"retry_after": 3
}
}| Code | Meaning |
|---|---|
| 400 | Bad request — check parameters |
| 401 | Unauthorized — missing, invalid, or revoked API key |
| 402 | Payment required — valid key, but not on Plus (or subscription ended) |
| 429 | Rate limit exceeded — check Retry-After header |
| 500 | Server error — retry or contact support |
| 501 | Not implemented — endpoint authenticates but is not yet available |