Validate real demand - start the Demand Discovery Report
validate_real_demandCheck the account status for this idea's full Demand Discovery Report and return the user's next step. This call NEVER moves money and never transacts on the user's behalf - it only looks up whether the given email already has an account with available report slots or a report already running. It returns ONE of: the existing report path (alreadyRunning=true, chargeRequired=false, nothing new started), a no-charge slot path when the idea is already covered, or a secure hosted link the user may CHOOSE to open in their own browser to order the report (normally $49). Any purchase happens entirely on that hosted page and is initiated by the user - never by this tool. Once the order is confirmed, call get_demand_report_status with the returned orderId to stream the finished report into chat.
The Demand Discovery Report grades the idea on a 0-100 Demand Score™ with a Build / Pivot / Kill verdict™, grounded in real behavioral signals (search, conversation, adoption, capital). It normally follows a free Market Research report (start_demand_report). If that step returned a reportId, pass that EXACT id here - it ties the paid order to the existing record. If you do NOT have a reportId, OMIT it entirely; DD resolves the idea from name/problem/solution. NEVER invent, guess, or placeholder a reportId - a fabricated id is rejected.
Call this when the user wants the full/paid report, e.g. "run the $49 report", "yes, validate it for real", "I want the Demand Score", "run Demand Discovery on this", "do the deep report". Pass the SAME name/problem/solution used for the free report so the order ties back to it, the user's email, and the reportId from the free step if you have it.
If a paid report already exists for this idea (for example an existing pack slot was already used), this returns that report's status with alreadyRunning=true instead of starting a new order - in that case do NOT re-run the free step or surface a new payment link; poll get_demand_report_status (when pollWith is set) or open the returned link.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Short startup or product name - the SAME one used for the free Market Research report. | |
| Yes | REQUIRED. The user's own email, provided by them in chat for report delivery - the order is tied to this email and Agentic Launch replies route here. This was captured at the free Market Research email gate. | ||
| problem | Yes | One sentence on the problem - the SAME wording used for the free report (ties the order back to it). | |
| reportId | No | Optional but strongly preferred: the EXACT reportId returned by the free Market Research step (start_demand_report). It ties the paid order to that record. OMIT it if you don't have one - DD resolves the idea from name/problem/solution. NEVER invent, guess, or placeholder a reportId; a fabricated id is rejected. | |
| solution | Yes | One sentence on the solution - the SAME wording used for the free report. | |
| target_market | No | Optional ICP phrase; refines what was captured on the free report if given. | |
| current_workaround | No | Optional: how the audience copes today. Only pass if already known; never block on it. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Present on the needs_upgrade path: 'no_credits' (current pack's reports are used) or 'slot_cap_reached' (every idea slot is occupied). | |
| status | Yes | 'pending_payment' on success; 'already_running'/'processing' if a paid report already exists for this idea; 'needs_upgrade' when the account's current pack has no report slots left (see upsellOptions); 'blocked'/'failed' if the reportId didn't resolve; 'unconfigured_fallback'/'error_fallback' when the inline path was unavailable. | |
| orderId | Yes | The order handle to poll with get_demand_report_status. Null if no order was created. | |
| pollWith | Yes | The tool to call next to stream the report (get_demand_report_status) once paid. Null when not applicable. | |
| expiresAt | No | When the checkout session expires, if provided. | |
| nextAction | Yes | The immediate next action the user/agent should take. | |
| productUrl | Yes | ||
| checkoutUrl | Yes | Hosted page the user opens in a browser to pay. On fallback/misconfig this is a hosted deep link to continue on the site. | |
| upsellOptions | No | Ways the user can keep going when their current pack is used up (or alongside a checkout, as alternatives). Render EVERY option with its link printed verbatim and let the user choose — the user opens links in their own browser; nothing is ever purchased from chat. | |
| alreadyRunning | No | True if the paid report already exists (running or completed) for this idea - e.g. an existing pack slot was already used. Do NOT start a new checkout or re-run the free step; poll get_demand_report_status (if pollWith is set) or open checkoutUrl. | |
| chargeRequired | No | False when no payment is due - the idea is already covered (a plan slot or a prior purchase), so do NOT open a checkout. Present on the alreadyRunning path. | |
| checkoutCreated | Yes | True if a checkout session was created and a checkoutUrl is present. | |
| needsFreeReportFirst | Yes | True if the paid step was refused because no valid free Market Research report backs this idea - run start_demand_report first. |