{"ok":true,"site":{"host":"3way.dev","url":"https://3way.dev/demo/halden/","type":"live","desc":"Halden is a working 3way shop exchange: a person, their visiting agent, and the store's service agent share an attributed return or support session.","tools":[{"name":"search_products","kind":"answer","impl":"imperative","description":"Search the catalogue.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Free text search."}},"required":["query"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo/halden/","pages":["/demo/halden/"]},{"name":"get_product","kind":"answer","impl":"imperative","description":"Fetch one product by SKU.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"sku":{"type":"string","description":"Product SKU."}},"required":["sku"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo/halden/","pages":["/demo/halden/"]},{"name":"list_my_orders","kind":"answer","impl":"imperative","description":"List the signed-in customer's orders.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo/halden/","pages":["/demo/halden/"]},{"name":"get_order_status","kind":"answer","impl":"imperative","description":"Status and contents of one order.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"orderId":{"type":"string","description":"Order id."}},"required":["orderId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo/halden/","pages":["/demo/halden/"]},{"name":"get_policy","kind":"answer","impl":"imperative","description":"The full returns and warranty policy text.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo/halden/","pages":["/demo/halden/"]},{"name":"get_conversation","kind":"answer","impl":"imperative","description":"The conversation so far, with who said each line.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo/halden/","pages":["/demo/halden/"]},{"name":"evaluate_return_eligibility","kind":"act","impl":"imperative","description":"Authoritative verdict on whether an item can be returned, and by which route. Always call this instead of reasoning about the policy yourself.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"orderId":{"type":"string","description":"Order id."},"itemId":{"type":"string","description":"The id of the line within the order — the `itemId` field returned by get_order_status or list_my_orders, e.g. \"IT-1\". Call one of those first if you do not have it. This is not the SKU and not the product title."},"reason":{"type":"string","enum":["defect","changed-mind","wrong-item","damaged-in-transit"],"description":"Why the item is coming back. Pick by what the customer actually described, and do not reason about the policy consequences — that is what the verdict is for. defect: the item itself is faulty or arrived broken, with nothing said about the parcel or the courier — a cracked, dead, or misbehaving item is this one. damaged-in-transit: the customer described damage to the shipment — a crushed box, torn packaging, a courier incident. Do not choose this merely because the item is broken; it needs something said about the shipping. wrong-item: we shipped something other than what was ordered. changed-mind: nothing is wrong with it."}},"required":["orderId","itemId","reason"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo/halden/","pages":["/demo/halden/"]},{"name":"send_message","kind":"transact","impl":"imperative","description":"Add a message to the shared exchange. The person and the service can see it. Set intent to \"relay\" only when passing on what the person said; otherwise the message is attributed to the visiting agent speaking for itself.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"What to say."},"intent":{"type":"string","enum":["relay","own"],"description":"Defaults to \"own\"."}},"required":["text"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo/halden/","pages":["/demo/halden/"]},{"name":"provide_context","kind":"act","impl":"imperative","description":"Front-load what you already know about the customer and their problem, so the store does not have to ask. Call this first, before anything else.","inputSchema":{"type":"object","properties":{"summary":{"type":"string","description":"One or two sentences on what the customer wants."},"data":{"type":"object","description":"Structured facts: orderId, dates, what was tried."}},"required":["summary"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo/halden/","pages":["/demo/halden/"]},{"name":"request_return","kind":"act","impl":"imperative","description":"Propose a return or warranty claim. Always allowed — this only creates a pending request and tells you whether it qualifies. It does not move any money.","inputSchema":{"type":"object","properties":{"orderId":{"type":"string","description":"Order id."},"itemId":{"type":"string","description":"The id of the line within the order — the `itemId` field returned by get_order_status or list_my_orders, e.g. \"IT-1\". Call one of those first if you do not have it. This is not the SKU and not the product title."},"reason":{"type":"string","enum":["defect","changed-mind","wrong-item","damaged-in-transit"],"description":"Why the item is coming back. Pick by what the customer actually described, and do not reason about the policy consequences — that is what the verdict is for. defect: the item itself is faulty or arrived broken, with nothing said about the parcel or the courier — a cracked, dead, or misbehaving item is this one. damaged-in-transit: the customer described damage to the shipment — a crushed box, torn packaging, a courier incident. Do not choose this merely because the item is broken; it needs something said about the shipping. wrong-item: we shipped something other than what was ordered. changed-mind: nothing is wrong with it."}},"required":["orderId","itemId","reason"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo/halden/","pages":["/demo/halden/"]},{"name":"request_cancel","kind":"transact","impl":"imperative","description":"Propose cancelling an order before it arrives. Always allowed — this only creates a pending request and tells you whether the order can still be stopped. It cancels nothing on its own.","inputSchema":{"type":"object","properties":{"orderId":{"type":"string","description":"Order id."}},"required":["orderId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo/halden/","pages":["/demo/halden/"]},{"name":"request_address_change","kind":"act","impl":"imperative","description":"Propose redirecting an order to a different address before it arrives. Always allowed — this only creates a pending request and tells you whether the order can still be redirected. It changes nothing on its own.","inputSchema":{"type":"object","properties":{"orderId":{"type":"string","description":"Order id."},"address":{"type":"string","description":"The full new delivery address, as the customer gave it."}},"required":["orderId","address"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo/halden/","pages":["/demo/halden/"]},{"name":"request_records_release","kind":"act","impl":"imperative","description":"Propose releasing the customer's own account records for one order — the card type and its last four digits, the billing postcode, and the delivery address on file. Always allowed: this only creates a pending request and discloses nothing. The records are not readable any other way, including by you.","inputSchema":{"type":"object","properties":{"orderId":{"type":"string","description":"Order id."}},"required":["orderId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo/halden/","pages":["/demo/halden/"]},{"name":"disclose_order_records","kind":"transact","impl":"imperative","description":"Release the customer's account records for a pending request: card type and last four digits, billing postcode, and delivery address. The values are held by the server and returned only against a completed confirmation — this page never has them beforehand, so there is nothing here to read without the customer present. This is a consequential action. It only succeeds after the customer confirms it themselves in the widget — you cannot confirm on their behalf.","inputSchema":{"type":"object","properties":{"requestId":{"type":"string","description":"The id returned by request_records_release."}},"required":["requestId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo/halden/","pages":["/demo/halden/"]},{"name":"await_reply","kind":"act","impl":"imperative","description":"Wait here until someone else says something. Nothing is pushed to you otherwise: this page can only answer calls you make, so after you say something, the reply exists in the conversation but you will not see it until your next call. Call this to wait for it instead of ending your turn or polling in a loop. It returns as soon as there is anything new, or after a few seconds with nothing_new: true if the conversation stayed quiet — call it again if you are still waiting. Safe to call at any time; it changes nothing and can wait on nothing but conversation.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"timeout_ms":{"type":"number","description":"How long to wait before giving up, in milliseconds. Default 25000, max 30000."}},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo/halden/","pages":["/demo/halden/"]},{"name":"confirm_return","kind":"act","impl":"imperative","description":"Confirm and complete a pending return or warranty claim, refunding the customer. This is a consequential action. It only succeeds after the customer confirms it themselves in the widget — you cannot confirm on their behalf.","inputSchema":{"type":"object","properties":{"requestId":{"type":"string","description":"The id returned by request_return."}},"required":["requestId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo/halden/","pages":["/demo/halden/"]},{"name":"cancel_order","kind":"transact","impl":"imperative","description":"Cancel the order. This is a consequential action. It only succeeds after the customer confirms it themselves in the widget — you cannot confirm on their behalf.","inputSchema":{"type":"object","properties":{"requestId":{"type":"string","description":"The id returned by request_cancel."}},"required":["requestId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo/halden/","pages":["/demo/halden/"]},{"name":"change_address","kind":"act","impl":"imperative","description":"Change the delivery address. This is a consequential action. It only succeeds after the customer confirms it themselves in the widget — you cannot confirm on their behalf.","inputSchema":{"type":"object","properties":{"requestId":{"type":"string","description":"The id returned by request_address_change."}},"required":["requestId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo/halden/","pages":["/demo/halden/"]}],"category":"Developer Tools","favicon":"/favicons/3way.dev.png","apiSurface":"spec","toolCount":18}}