Skip to main content

Access & Authentication

All historical data is free — no key, no sign-up. The full catalogue, every strategy's stats / returns / curve, the aligned export matrix, and book-level summary are open so you can verify every track record against your own model before you commit to anything. Aliases only — the strategy mechanism stays sealed.

The live signals are the product. Real-time, actionable trade signals are served by a separate, keyed API — that's what you subscribe for.

The two APIs live on branded hosts:

APIBase URLAuth
Historical datahttps://api.btcalpha.com.aunone (free)
Live signals + Gaiahttps://signals.btcalpha.com.auX-API-Key

:::note Legacy hosts still work The original hosts — https://btc-strategy-data-api.fly.dev and https://btc-signal-distribution.fly.devremain valid and resolve to the same services. New code should use the branded hosts above; existing integrations don't need to change. :::

Historical data — open, no key

EndpointAccess
GET /v1/strategies (catalogue + headline stats)✅ free
GET /v1/strategies/{id} (metadata, provenance)✅ free
GET /v1/correlation (cross-strategy matrix)✅ free
GET /v1/summary (incl. equal_weight_book)✅ free
GET /v1/strategies/{id}/stats · /returns · /curve✅ free
GET /v1/export (aligned returns matrix)✅ free

Just call them — no header required:

curl https://api.btcalpha.com.au/v1/strategies/helios/stats
curl "https://api.btcalpha.com.au/v1/export?period=daily"

That's the whole point: pull every series, drop it into your optimiser, reconcile it against your own book — for free. The evaluate-against-your-book recipe walks the full flow.

Live signals — the subscription (keyed)

The live signals API is the product. It delivers actionable signals as your strategies fire (mode: "LIVE", is_test: false), gated by a per-client X-API-Key scoped to what you subscribe to. Send the key in the X-API-Key header — server-side only, never in a URL or a browser bundle:

curl https://signals.btcalpha.com.au/v1/signals/latest \
-H "X-API-Key: btca_live_xxxxxxxxxxxxxxxxxxxxxxxx"

Live signals are request-based today — contact for access. (There's a commercial/compliance gate before signals are sold; no public pricing yet.)

How signals are priced

Live-signal pricing is value-based and capacity-aware, not a flat fee. Each strategy is priced on its deployable capacity (finite — bounded by real market liquidity and how it deploys) and its conservative, risk-adjusted expected value (tapered, haircut, provisional pending verification). You pay a fair fraction of the value the edge generates — the majority stays with you. Capacity is capped per strategy to keep the edge sharp for subscribers (protection, not restriction). Verify the full record free, no key, before subscribing. Pricing is bespoke — request-based.

:::warning Leverage — signals imply leveraged positions Following a signal at its base_risk_pct implies a leveraged position, not a 1:1 deployment. Each strategy publishes leverage_typical (~1×) and leverage_max (historically up to ~15× on tight-stop trades) in its metadata; each live signal carries implied_leverage for that specific trade (base_risk_pct ÷ stop-distance). You execute on your own venue at your own size — size to your book and cap leverage at your discretion. Backtested / modelled, provisional — not advice. :::

Sizing a position from a signal

Each signal gives you the inputs to size by risk — you compute the size to your capital. We do not prescribe an absolute size (that would assume your capital and be advice-like).

position_size = (your_capital × base_risk_pct) ÷ | signal_price − stop |

equivalently: position_notional = your_capital × implied_leverage

Worked example — a long signal: signal_price = 64,000, stop = 61,000, base_risk_pct = 0.025, implied_leverage = 0.53. You deploy $1,000,000:

risk budget = 1,000,000 × 0.025 = $25,000 (what you risk if stopped)
stop distance = |64,000 − 61,000| ÷ 64,000 = 4.69%
position notional= 25,000 ÷ 0.0469 ≈ $533,000 (= 1,000,000 × 0.53 implied_leverage)

So you'd open ~$533k of BTC-PERPETUAL — about 0.53× your deployed capital on this (wide-stop) trade. On a tight-stop trade the same risk budget produces a much larger, more leveraged position (see the warning above). signal_price is a reference, not a guaranteed fill — work in around it on your venue.

Response codes

CodeMeaning
200Historical data — always, no key.
401 unauthorizedSignals API only: missing or invalid/revoked key. Historical endpoints never need a key.
429 rate_limitedReserved; not enforced yet.

Every error uses the unified { error, meta } envelope.

CORS

Browser access is restricted to an explicit allowlist (never *):

https://btcalpha.com.au
https://www.btcalpha.com.au
https://docs.btcalpha.com.au # this docs site (so the reference playground works)
http://localhost:5173, :3000, :8100 # local development

Requests from an allowed Origin receive the matching Access-Control-Allow-Origin; others receive none. Server-to-server calls (no Origin) are unaffected. The methods are GET only.

Using the reference playground

Because docs.btcalpha.com.au is allowlisted, the "Send" button in the API Reference calls production directly — and since all historical data is open, every endpoint works with no key.