{"name":"MENTAT","description":"MENTAT: agent-native OTC venue. Disciplined intelligence. Three settlement paths: escrow on Base (FloorEscrow contract, atomic, no admin keys), CoW Protocol relay (agent-signed, MEV-protected), and an XMR route via Wagyu (XMR in/out routed through XMR1 on Hyperliquid; Wagyu is the settlement counterparty; MENTAT never holds XMR; not trustless). Every fill carries whatever its chain can prove: one proof per leg in proofs[]. FloorEscrow V3 deals are read with get_book and get_deal and prepared unsigned with create_deal; tokens are trusted by address against MENTAT's verified list (verified | unverified | lookalike), never by ticker. ERC-8004 Agent #31596.","url":"https://mentat.market","version":"3.5.0","protocolVersion":"0.3.0","provider":{"organization":"Agora0x","url":"https://mentat.market","contact":"trade@mentat.market"},"capabilities":{"streaming":false,"pushNotifications":false,"extensions":[{"uri":"https://mentat.market/a2a/extensions/settlement-paths/v1","description":"settlement_path, route_legs, and proofs[] on every quote and order response","params":{"settlement_paths":["escrow","cow_relay","wagyu_route"]}}]},"authentication":{"schemes":[]},"mentat":{"tagline":"disciplined intelligence","principle":"every fill carries whatever its chain can prove","contact":"trade@mentat.market","homepage":"https://mentat.market","receipts":"https://mentat.market/ledger","settlement_paths":{"escrow":{"chain":"base","chain_id":8453,"contract":"0x9EC9d882C93F52621CBD0d146D3F2e0929E53AA7","trustless":true,"fee_bps":25,"skills":["execute_trade","check_trade"],"contracts":{"v2":{"name":"FloorEscrow V2","address":"0x9EC9d882C93F52621CBD0d146D3F2e0929E53AA7","used_by":"execute_trade, check_trade and the Telegram bot"},"v3":{"name":"FloorEscrow V3","address":"0x83818036539737a813D1D99f1c6Cd2867c7D6a6d","deploy_block":52006064,"used_by":"web deals: a maker posts at https://mentat.market/new and shares the deal link https://mentat.market/deal/{id}; deals marked open are on the book at https://mentat.market/book (get_book); agents read one deal with get_deal and prepare one with create_deal","flow":"The maker funds the deal when creating it; the taker's fill settles both legs in one transaction; only the maker can cancel. A deal the maker marked open is listed on the book (get_book, the /api/book endpoint, mentat.market/book); a private deal link is not listed, but every deal is public on-chain and anyone with the link can fill it at the stated price. No skill signs for V3: create_deal returns the maker's two transactions unsigned, get_deal and get_book return the taker's fill steps, and maker and taker send them from their own wallets.","post":"https://mentat.market/new","deal_link":"https://mentat.market/deal/{id}","book":"https://mentat.market/book","skills":["get_book","get_deal","create_deal"],"token_trust":"By address against MENTAT's verified list, the same verdict as mentat.market: verified | unverified | lookalike (a token whose symbol or name imitates a listed one), plus unknown when an unlisted token could not be read. Lookalikes and unknown tokens are never given fill steps or prepared; lookalikes are never listed. Match on address, never ticker."}}},"cow_relay":{"chain":"base","chain_id":8453,"settlement":"0x9008D19f58AAbD9eD0D60971565AA8510560ab41","vault_relayer":"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110","custody":"non-custodial","fee_bps":25,"skills":["prepare_trade","submit_signed_trade","check_cow_order"]},"wagyu_route":{"counterparty":"Wagyu (wagyu.xyz)","trustless":false,"custody":"MENTAT never holds XMR","route":"XMR in/out through XMR1 on Hyperliquid spot; three legs: source chain, Hyperliquid swap, destination chain","pairs":["XMR/USDC on Base (both directions)"],"minimums_usd":{"sell_xmr":25,"buy_xmr":500},"fee_bps":25,"fee_note":"MENTAT earns a 25 bps integrator fee on every order, applied inside Wagyu's quoted amount. Included in to_amount; reported by Wagyu as integrator_fee; counted in effective_cost_bps.","paused_state":"When Wagyu answers 503 unavailable the route is paused; quotes return code routing_paused and the tape shows \"XMR routing paused\".","proofs":["deposit_tx (Monero tx hash on XMR legs)","fill_tx (one per Hyperliquid fill hash from hlFills[])","payout_tx (destination-chain tx hash)"],"skills":["get_quote","create_xmr_order","check_xmr_order","get_route_status"]}},"proof_shape":{"chain":"string","kind":"deposit_tx | fill_tx | payout_tx | escrow_create_tx | cow_order_uid | settlement_tx","hash":"string","explorer_url":"string | null"},"identity":{"erc8004_agent_id":31596,"registry":"0x8004A169FB4a3325136EB29fA0ceB6D2e539a432","chain_id":8453},"payments":{"x402":false,"quotes":"free","note":"Every call is free. MENTAT earns its 25 bps fee on settlement, never on a quote."},"launch_limits":{"deal_cap_usd":{"8453":10000},"note":"Launch limits on MENTAT's surfaces (not the contracts; they will be raised): $10,000 per deal on Base. Bigger deals are refused by create_deal (over_launch_cap) and shown without fill steps (over_cap: true)."},"contracts_manifest":"https://api.mentat.market/.well-known/contracts.json","endpoints":{"a2a":"https://api.mentat.market/a2a","rest_quote":"https://api.mentat.market/api/quote","rest_xmr_orders":"https://api.mentat.market/api/xmr/orders","rest_tape":"https://api.mentat.market/api/tape","rest_stats":"https://api.mentat.market/api/stats","rest_book":"https://api.mentat.market/api/book","rest_deal":"https://api.mentat.market/api/deals/{id}","rest_deal_prepare":"https://api.mentat.market/api/deals/prepare","ledger":"https://mentat.market/ledger","book":"https://mentat.market/book","mcp":"https://api.mentat.market/mcp","telegram":"https://t.me/FloorOTCbot"}},"skills":[{"id":"get_quote","name":"Get OTC Quote","description":"Live quote for a token swap at real market rates. USDC, USDT, USDbC, DAI, WETH, ETH, BTC pairs quote against escrow or CoW relay; XMR pairs (XMR/USDC on Base, both directions) quote through the Wagyu route and return settlement_path \"wagyu_route\", the three route_legs, and an empty proofs[]. MENTAT charges 25 bps on every path; on the XMR route it is an integrator fee applied inside Wagyu's quoted amount (mentat_fee_bps, already in to_amount; effective_cost_bps is all-in). Direction-aware minimums: sell XMR from $25, buy XMR from $500. Answers code \"routing_paused\" while XMR routing is paused.","tags":["otc","swap","quote","xmr","wagyu","cow","escrow"],"examples":["Get a quote for swapping 1000 USDC to DAI","Quote 0.1 XMR to USDC on Base","How much XMR do I get for 600 USDC?"]},{"id":"execute_trade","name":"Execute Escrow Trade","description":"Create an escrow deal on Base through the FloorEscrow V2 contract (settlement_path \"escrow\"). Both parties deposit, settlement is atomic, no admin keys. Returns the create tx as the first proof. Web deals (mentat.market/new and deal links) settle through FloorEscrow V3: maker and taker call it from their own wallets (create_deal prepares the maker's transactions unsigned).","tags":["otc","swap","trade","escrow","settlement"],"examples":["Swap 1000 USDC for DAI","Execute trade: 5000 USDC to WETH"]},{"id":"check_trade","name":"Check Escrow Trade","description":"On-chain status of a FloorEscrow V2 deal by its trade ID, with settlement_path, route_legs, and proofs[]. An id the contract has never seen is found: false, status \"not_found\" (never a default status); when the id is a FloorEscrow V3 deal the answer says so and points to get_deal.","tags":["trade","status","escrow"],"examples":["Check trade status for 0x8cb14ec9..."]},{"id":"get_prices","name":"Get Live Prices","description":"Current token prices from CoinGecko for the escrow and CoW pairs, each with its source and observed_at (the time of the read it came from). fallback: true marks a fixed guess used only while CoinGecko has never answered: never trade on it. XMR is priced live by the Wagyu route at quote time.","tags":["prices","market","rates"],"examples":["What are the current token prices?"]},{"id":"prepare_trade","name":"Prepare CoW Order","description":"Build a CoW Protocol order for the calling agent to sign (settlement_path \"cow_relay\"). Returns the EIP-712 typed data, MENTAT appData (25 bps partner fee), and a preflight check on the trader's balance and relayer allowance. The trader signs locally; MENTAT never custodies funds.","tags":["cow","swap","relay","eip-712","sign"],"examples":["Prepare a CoW order to swap 1000 USDC for WETH from 0xabc..."]},{"id":"submit_signed_trade","name":"Submit Signed CoW Order","description":"Forward a trader-signed CoW order to the CoW order book on Base. MENTAT validates the EIP-712 signature locally, then relays. Returns the orderUid (first proof) and explorer URL.","tags":["cow","swap","relay","submit"],"examples":["Submit signed order with signature 0x... and trader 0xabc..."]},{"id":"check_cow_order","name":"Check CoW Order","description":"Status of a CoW order by its 56-byte orderUid: open / fulfilled / cancelled / expired, executed amounts, and proofs[] with the settlement transaction hash(es) once filled.","tags":["cow","status","order"],"examples":["Check CoW order 0x..."]},{"id":"create_xmr_order","name":"Create XMR Order (Wagyu route)","description":"Create a durable XMR order routed through Wagyu: XMR -> USDC on Base or USDC on Base -> XMR. Requires to_address on the destination chain; optional refund_address on the source chain. Returns the exact deposit address, amount, and expiry from the venue (the funding instruction), settlement_path \"wagyu_route\", route_legs, and proofs[] (empty until each leg confirms). MENTAT earns a 25 bps integrator fee applied inside Wagyu's quoted amount (mentat_fee_bps). Wagyu is the settlement counterparty; MENTAT never holds XMR; not trustless.","tags":["xmr","monero","wagyu","hyperliquid","order"],"examples":["Create an order: 0.1 XMR to USDC, pay out to 0xYourBaseAddress","Buy XMR with 600 USDC, deliver to 4AdUnd..."]},{"id":"check_xmr_order","name":"Check XMR Order (Wagyu route)","description":"Status of an XMR order by order_id plus its to_address (the destination address is the read proof; a mismatch is not found). Returns the three legs (source-chain confirmations, Hyperliquid swap, destination delivery) and proofs[]: the Monero deposit tx hash, one fill_tx per Hyperliquid fill hash, and the destination payout tx hash. Hyperliquid fill hashes are appended as Wagyu saves them, including after completion.","tags":["xmr","status","proofs","wagyu"],"examples":["Check XMR order ord_... for 0xYourBaseAddress"]},{"id":"get_route_status","name":"Route Status","description":"Whether XMR routing is live or paused (Wagyu 503 unavailable pauses it), with the pause deadline and reason.","tags":["status","xmr","routing"],"examples":["Is XMR routing paused?"]},{"id":"get_book","name":"Open Book","description":"The open book of FloorEscrow V3 deals on Base: every deal the maker marked open that is still open and not expired, in the taker frame (taker_pays, taker_receives, pair = pays/receives) with the implied price, a reference price from MENTAT's price source with its source and time, and the distance from it on the taker's side (\"x% better/worse than market for the taker\"; null with no fresh reference, never a guess). Each row carries the 25 bps maker-side fee (the taker pays nothing extra), the deal page link and the fill steps: approve exactly taker_pays.atomic to the escrow contract, then fill(dealId) from your own wallet; MENTAT never signs for the taker. Free. Filters: token (address), min_usd (default 25), max_distance_bps, include_unverified, limit. Token trust is by address, as on mentat.market: each side carries trust verified | unverified | lookalike | unknown. Unverified tokens are hidden unless include_unverified=true, then labelled verified: false with warnings[] and a warning on the fill steps; a token whose symbol or name has not been read yet is unknown and its row has no fill steps (check it with get_deal); a lookalike (a fake of a listed token) is never listed (hidden.lookalike counts them). Match on address, never ticker. Each row also carries maker_fills (how many of this maker's V3 deals settled on MENTAT before this one was created; self-trades and fills with a MENTAT wallet do not count) and maker_label (\"new maker\" or \"N fills\"). While the indexer is catching up the answer is synced: false with blocks_behind and no rows. Private deal links are never listed here, but every deal is public on-chain. GET /api/book/reference is the reference on its own (USD per verified token, by address; null when there is no fresh read); GET /api/makers/{address}?before= is one maker's fill count. Every step is sendable as it is (to, data, value) and carries an intent line for wallet approval screens; if_abandoned is the approve(escrow, 0) that clears the approval when step 1 was sent and step 2 will not be. fill.valid_until is the deal expiry.","tags":["otc","book","deals","escrow","orders"],"examples":["Show the open book","Open WETH deals no worse than 25 bps from market","Which deals can I fill with USDC right now?"]},{"id":"get_deal","name":"Check a Deal","description":"One FloorEscrow V3 deal by id (the 0x… in mentat.market/deal/{id}), open-book or private link. Status open | expired | settled | cancelled | not_found | unknown, read from the contract's deals(dealId) when the chain answers (source \"chain\"), else from MENTAT's index (source \"indexer\", with its sync state). The terms come in the book's row shape: taker_pays / taker_receives with trust verified | unverified | lookalike | unknown (a token that could not be checked right now), the implied price, reference and distance, the 25 bps maker-side fee, deal_url, plus warnings[]. Fill steps only from a chain read just now of an open deal; an index-only answer never has them (status_unconfirmed). A lookalike or an unchecked token answers blocked: true and no steps. not_found (found: false) only after the chain itself said the id does not exist — do not send funds to anyone claiming otherwise; when the deal could not be checked at all the answer is status \"unknown\", code chain_unavailable: don't deposit until it can be checked. Free. REST: GET /api/deals/{id}. Every step is sendable as it is (to, data, value) and carries an intent line for wallet approval screens; if_abandoned is the approve(escrow, 0) that clears the approval when step 1 was sent and step 2 will not be. fill.valid_until is the deal expiry. Status unknown answers retryable: true with retry_after_seconds.","tags":["otc","deal","escrow","status","safety"],"examples":["Check deal 0x… before I fill it","Is this mentat.market/deal link real?"]},{"id":"create_deal","name":"Prepare a Deal","description":"Prepare a FloorEscrow V3 deal for your own wallet to send; MENTAT never signs. Input: give_token and get_token (addresses: match on address, never ticker), give_amount and get_amount (decimal strings), expiry_seconds (default 3600, 600 to 2592000), listing (open, the default, or private), optional maker (balance and allowance read as warnings), allow_unverified (needed for a token off MENTAT's verified list; its decimals are then read from the chain), acknowledge_price (needed when the deal hands the taker more than 5% over market, the same check as mentat.market/new). Lookalike tokens are always refused, and so is an unlisted token the chain could not be asked about (chain_unavailable). Returns chain_id, contract, fee_bps, fee_atomic, total_debit_atomic (amount plus the 25 bps fee), two steps with calldata (an exact approve, never unlimited, then createDeal), the price check, warnings and a listing note: a private link is not enforced on-chain, so anyone who finds the deal can fill it. The deal id is in the DealCreated event of the createDeal receipt; share the link only after it confirms. Refusals carry code: invalid_request, invalid_address, same_token, invalid_amount, invalid_expiry, invalid_listing, unverified_token, lookalike_token, chain_unavailable, token_unreadable, price_generous. Free. REST: POST /api/deals/prepare. Every step is sendable as it is (to, data, value) and carries an intent line for wallet approval screens; if_abandoned is the approve(escrow, 0) that clears the approval when step 1 was sent and step 2 will not be. valid_until is when the price check lapses (10 minutes after preparing): prepare again after it. Every refusal carries retryable (true only for chain_unavailable, with retry_after_seconds).","tags":["otc","deal","escrow","maker","calldata"],"examples":["Prepare a deal: give 1000 USDC, get 1001 DAI, listed for 24 hours","Make a private deal: give 1 WETH for slightly above the market price in USDC (a price more than 5% under market for you is refused with price_generous unless acknowledged)"]}],"defaultInputModes":["text"],"defaultOutputModes":["text"]}