HomeAPI docs
API reference

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.

POST/v1/backtestCyclic backtest on any symbol
GET/v1/signals/confluencesConfluence signals
GET/v1/eventsEvent calendar (coming soon)
GET/v1/overlay/curvesOverlay curves (coming soon)
POST/v1/webhooksPush alerts (coming soon)

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 key
402statusValid 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".

GET/v1/signals/confluences
tickerstringrequiredInstrument symbol (e.g. GC=F)
intervalstringBar interval (e.g. 1d). Default: 1d

Rate 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.

GET/v1/eventscoming soon

Backtest

Run the cyclic backtest against any symbol's historical data. Live now. Computationally expensive — may take some time for long date ranges.

POST/v1/backtest
symbolstringrequiredInstrument symbol (e.g. TSLA)
axesstring[]Optional. Restrict to specific axes
intervalstringOptional bar interval (e.g. 1d). Default: 1d

Rate 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.

GET/v1/overlay/curvescoming soon

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.

POST/v1/webhookscoming soon

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/min
signals/confluencesGET30 requests/min

Note: 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
  }
}
CodeMeaning
400Bad request — check parameters
401Unauthorized — missing, invalid, or revoked API key
402Payment required — valid key, but not on Plus (or subscription ended)
429Rate limit exceeded — check Retry-After header
500Server error — retry or contact support
501Not implemented — endpoint authenticates but is not yet available