Review a trade from an opportunity (preview only)
review_opportunity_tradeRefresh the sized trade ticket of one of YOUR actionable evaluations before the user trades it — the same action as Review trade in the Gambit app. It is a PREVIEW: it places, queues and confirms nothing. Requires the api:recommend scope (403 without it). This runs the recommendation pipeline (LLM calls, except when the answer comes from Gambit's view) and can take up to ~45 seconds: each call uses one run of the SAME monthly recommendation quota generate_recommendation uses (403 tier_limit_exceeded when it is spent) and one of 5 calls per minute that evaluate_opportunity and review_opportunity_trade share (429 rate_limited with Retry-After). Do not call it speculatively. Pass the values from an evaluate_opportunity answer for a Today's Market card (opportunity_id) whose outcome is actionable: opportunity_id, evaluation_id, scenario_id (null when the evaluation has none), advisory_fingerprint and origin_ticket_fingerprint (trade_ticket.advisory_fingerprint and trade_ticket.ticket_fingerprint) and source_snapshot_fingerprint (source.snapshot_fingerprint). The answer is data.status ready, with the refreshed sizing and trade_ticket, or unavailable with reason_code: evaluation_identity_changed (the card or evaluation changed; evaluate again), evaluation_materially_changed (Gambit's judgment moved; evaluate again), evaluation_no_longer_actionable, trade_ticket_unavailable, or a sizing reason. For an evaluation from Gambit's view (it carries a gambit block) the ticket is re-sized from the same view, with the stop from realized volatility around the current mark, and the user's limits; evaluation_materially_changed means the view moved (a new version, direction or listing; a moved price alone only re-sizes the ticket), and gambit_view_not_current, plan_levels_unavailable or instrument_authority_rejected mean it could not be re-sized on this run (retry later). The ticket is sized for the user's connected MANUAL wallet. Placing any order is a separate api:trade step (execute_recommendation, then confirm_trade) that needs the human's explicit approval of the preview; never chain it automatically. A Gambit evaluation's recommendation is advisory: execute_recommendation refuses it (409 advisory_not_executable), so a trade on it is a separately sized propose_trade, approved the same way. The response carries app_url, the card's screen.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | No | evaluation.scenario_id; null or omitted when it has none | |
| evaluation_id | Yes | evaluation.evaluation_id | |
| opportunity_id | Yes | the evaluated card's id | |
| advisory_fingerprint | Yes | evaluation.trade_ticket.advisory_fingerprint | |
| origin_ticket_fingerprint | Yes | evaluation.trade_ticket.ticket_fingerprint | |
| source_snapshot_fingerprint | Yes | evaluation.source.snapshot_fingerprint |