● healthy
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.
Transport
—
Protocol
0.3.0
Price
—
Skills
-
Get OTC QuoteLive 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.otcswapquotexmrwagyucowescrow
-
Execute Escrow TradeCreate 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).otcswaptradeescrowsettlement
-
Check Escrow TradeOn-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.tradestatusescrow
-
Get Live PricesCurrent 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.pricesmarketrates
-
Prepare CoW OrderBuild 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.cowswaprelayeip-712sign
-
Submit Signed CoW OrderForward 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.cowswaprelaysubmit
-
Check CoW OrderStatus 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.cowstatusorder
-
Create XMR Order (Wagyu route)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.xmrmonerowagyuhyperliquidorder
-
Check XMR Order (Wagyu route)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.xmrstatusproofswagyu
-
Route StatusWhether XMR routing is live or paused (Wagyu 503 unavailable pauses it), with the pause deadline and reason.statusxmrrouting
-
Open BookThe 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.otcbookdealsescroworders
-
Check a DealOne 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.otcdealescrowstatussafety
-
Prepare a DealPrepare 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).otcdealescrowmakercalldata
How to call
A2A endpoint (JSONRPC)
https://mentat.market
Homepage
https://mentat.market
Listed in
Directories this entry was found in.
agenstry