Developer API

The engine, from your own stack.

Author, backtest and validate over REST — the same routes the app itself calls. Including the ones that can tell you your edge is not real.

Four calls, end to end

Every example below is a real route on the live API. The full reference — request and response schemas for all 155 customer endpoints — is generated from the server itself at the interactive reference, so it cannot drift from what the API actually accepts.

01

Get a key

Keys are minted in the app under Settings → API keys, by a workspace owner or admin on a Trader or Enterprise plan. The plaintext is shown exactly once and stored only as a hash — we cannot recover it for you, and neither can anyone who reads our database.

curl https://api.quantparadox.com/v1/me \
  -H "Authorization: Bearer qp_live_..."
02

Turn a description into a strategy

English, or pasted Pine/MQL/Python. You get back a validated spec the engine can run, plus what it had to assume where your description was silent — the assumptions are the interesting part, because they are the decisions you did not know you were making.

curl -X POST https://api.quantparadox.com/v1/wizard/author \
  -H "Authorization: Bearer qp_live_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"source": "buy the second touch of a fresh support level", "kind": "english"}'
03

Backtest it

Costs applied, out-of-sample by time, sub-bar resolution where the bar touched both your stop and your target. The same engine the app runs — there is no separate, friendlier API path.

curl -X POST https://api.quantparadox.com/v1/wizard/backtest \
  -H "Authorization: Bearer qp_live_..." \
  -d '{"spec": {...}, "market": "EUR/USD", "tf": "H1"}'
04

Ask whether it is real

The part worth paying for. Deflated Sharpe, walk-forward, and a selection-luck correction that accounts for how many variants you tried. It can come back and tell you the edge is not distinguishable from luck.

curl -X POST https://api.quantparadox.com/v1/institutional/validate \
  -H "Authorization: Bearer qp_live_..." \
  -d '{"strategy_id": "..."}'

What it costs, and what a retry costs

Access

API keys are a Trader or Enterprise capability, and only a workspace owner or admin can mint one — issuing credentials is a privileged act, not something every seat should do.

Usage

Calls that spend compute spend credits, at the same rate as the app. Reads are free. Every charge lands in the ledger line by line, so an invoice is answerable rather than a total.

Idempotency

Send an Idempotency-Key header on a paid call and a retry returns the first answer without charging or re-running the work. It is honoured for 24 hours, scoped to your workspace, and a request repeated while the first is still in flight gets a 409 rather than a second charge.

Honoured on every route that spends credits — authoring, backtesting, the AI chat, optimise, rewrite, follow, the prop simulator and the replay inference. Reads are free and need no key. Send one on any write you would not want to happen twice.

The endpoint most APIs don't have

Running a backtest is the easy half, and every platform in this category will run one for you. The question that decides whether you should trade the thing is whether the result survives the number of variants you tried to get it — and that is the call we expose.

/v1/institutional/validate can return a refusal. A strategy with a flattering equity curve and 200 attempts behind it comes back as not distinguishable from luck, with the correction shown. An API that only ever agrees with you is not a research tool.

Worth knowing

A refusal is a result, and it is billed like any other run. You are paying for the measurement, not for a favourable answer.

Running a strategy forward

A deployment is a strategy running from a moment you choose. In paper we simulate it on our archive and the record counts only trades taken since you started. In live your executor polls for the decision at each closed bar and reports back what it filled.

We do not hold broker credentials and we do not place orders. The executor is yours — we ship a readable reference one at /v1/deployments/{id}/client, and it contains no strategy logic and no credentials of any kind.

# start it
curl -X POST https://api.quantparadox.com/v1/deployments \
  -H "Authorization: Bearer qp_live_..." \
  -d '{"strategy_id": "...", "mode": "live", "risk_pct": 1}'

# your executor, once per closed bar
curl https://api.quantparadox.com/v1/deployments/$ID/poll \
  -H "Authorization: Bearer qp_live_..."
# -> {"halted": false, "signal": {"side":"long","sl":...,"tp":...}, "manage": {...}}

# tell us what you filled (idempotent per bar+kind+side, so retries are safe)
curl -X POST https://api.quantparadox.com/v1/deployments/$ID/fill \
  -H "Authorization: Bearer qp_live_..." \
  -d '{"t": 1785999600, "side": "long", "price": 1.0812, "kind": "entry"}'
Worth knowing

Stopping a deployment stops the signal, not your positions. The next poll returns haltedwith no decision — closing what is already open is your executor's job, because it is the only thing that knows what it opened.

Practical notes

  • Auth. Authorization: Bearer qp_... on every request. Keys are stored hashed and compared in constant time; a revoked key stops working immediately.
  • Versioning. Everything lives under /v1. Additive changes — new fields, new routes — ship without notice; anything that could break a caller gets a new version.
  • Errors. Non-2xx responses carry a detail explaining what to change. A 402 means the workspace is out of credits, not that the request was wrong.
  • Rate limits. Compute-heavy routes are throttled per workspace. The exact ceiling is published in the response headers rather than here, because a number on a marketing page is the one that goes stale.
  • No SDK yet. There is no pip install — the REST API is the API. If you want a client in your language, the schema at /openapi.json generates one.

Already have a key? Manage keys · Full API reference

Point your own stack at it.

A key takes a minute. The first author call takes about four lines.

No card required · sales is for desks and teams