---
title: "Evaluate a candidate intent against policy"
method: POST
path: "/v1/trades/dry-run"
tags: ["Trades"]
---

# Evaluate a candidate intent against policy

`POST /v1/trades/dry-run`

## Request

- Base URL: `https://api.marketintell.ai`
- URL: `https://api.marketintell.ai/v1/trades/dry-run`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Policy calculator: evaluate a candidate order against the caller's execution policy WITHOUT writing any rows. If `broker_connection_id` is supplied, the route reads that active broker account snapshot for equity/PnL/open-position gates; otherwise it uses the optional `account` override or a placeholder. Free users can call this — it's a calculator, not an order. Requires `read` scope.

## Request body

- object
  - `symbol` string, required
  - `side` 'buy' | 'sell', required
  - `notional_cents` integer
  - `qty` number
  - `limit_price` number
  - `stop_price` number
  - `broker_connection_id` string, uuid: Optional active broker connection to use for live account equity/PnL/open-position policy gates.
  - `account` object: Optional account snapshot override. If omitted, broker_connection_id is used when supplied; otherwise dry-run falls back to a $10k placeholder.
    - `equity_cents` integer
    - `realised_pnl_today_cents` integer
    - `open_positions_count` integer

## Response `200`

Policy-check result

- object
  - `success` boolean
  - `data` object
    - `dry_run` boolean
    - `passed` boolean
    - `reason` string, nullable
    - `detail` string, nullable
    - `risk_cents` integer
    - `policy` object

## Other responses

- `400`: Invalid intent body

---

[API](https://skmtc.dev/marketintell/apis/marketintell-api.md) · [All operations](https://skmtc.dev/marketintell/apis/marketintell-api/llms.txt) · [OpenAPI document](https://skmtc.dev/marketintell/apis/marketintell-api/revisions/f3ef87afc41f?raw)
