create_order
Assemble a basket and get exact prices plus Stripe checkout links. Checkout runs on Stripe's hosted page, completed by whoever holds the payment credentials. Pass dryRun:true to REHEARSE: same validation, same price math, clearly labeled, no order recorded, no links issued, nothing billed — integration-test the full flow risk-free. Item ids — plans: 'analyst', 'power', 'pilot', 'desk-private', and 'api' (the Metered API account: your identified key — self-issue one FREE at POST /api/keys, no human in the loop — with billing activated by the desk on this order, usage billed monthly at tariff rates, nothing preset — get_quote prices your exact basket first, get_account shows the live statement); unit: 'watch' (reads of the watched question included). Reads are metered per use at the flat tariff rate, never sold as prepaid packs. Live prices come from /api/tariff; this description states none. Watch topics are SELF-SERVE end to end: pass topics and every one comes back with a checkout link at the published Watch rate — including a topic nobody watches yet, whose price the desk mints on demand with no human in the loop (that one needs your identified key, free and self-issued in one call at POST /api/keys, and arrives in minutes; poll get_order or the statusUrl on the line). The api line still records intent and the desk activates the account. Every line states its own state and what to do next.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| No | Contact email to attach to the order intent (optional) | ||
| items | Yes | Array of {id, quantity?} — catalog ids above; quantity applies to unit items only | |
| dryRun | No | true → rehearse: validate + price the basket, record nothing, issue no links, bill nothing | |
| topics | No | Optional: the quoted topic names (or 1-based topic numbers as strings) this order's Watch lines cover — carried verbatim onto the recorded intent so scoped concerns survive the quote→order handoff. Max 12, each ≤200 chars. | |
| quoteId | No | Optional: the quoteId from get_quote — recorded on the order intent so the desk provisions against that exact quote. | |
| idempotencyKey | No | Optional client key (≤128 chars): makes the orderId deterministic and a retried call return the original intent instead of recording a second one — safe machine retries |