Buy a product / save a standing want
demand.create_wantRecord the user's purchase intent and get back ranked, matched supply in the SAME call. Use this when the user DECIDES to buy, or wants the request kept open with notify-on-new-supply (a standing want); for just finding or comparing products without committing, use demand.search instead. Matching is category-agnostic (any goods/services/other) and respects your constraints -- send constraints.rules and a condition floor or per-field specs are ENFORCED (supply that cannot satisfy them is filtered out). Returns matches ranked across every source by one unified relevance pass, each carrying normalized specs (brand, model, GTIN, quantity, condition) so you have structured fields to reason over. Report what the user does next via demand.record_outcome. iwant.fyi demand-side protocol v1.0 §8.1; spec at https://iwant.fyi/protocol/v1.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Buyer's supply mode preference | |
| title | Yes | What the user is looking for (5-200 chars) | |
| origin | No | Identifies the originating agent. Required for outcome attribution. | |
| category | No | ||
| location | No | Buyer location and search radius | |
| vertical | No | Optional vertical hint. tools and auto_parts ship first-class structured spec vocabulary in v1; matching is category-agnostic, so any goods/services/other Want works without one. | |
| expires_at | No | ISO 8601 timestamp | |
| constraints | No | Machine-evaluable constraints. See spec §5. | |
| description | No | Additional details (optional, max 2000) | |
| price_cents | Yes | Buyer budget in smallest currency unit (e.g. 15000 = $150 USD) | |
| client_token | No | Optional idempotency key (<=128 chars). Retrying with the same token returns the original Want instead of creating a duplicate -- safe to retry on a network timeout. (v1.1 §E) | |
| price_currency | No | ISO 4217 currency code | USD |