Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,536Letters: 14Defects: 1,322counted 4 min ago
teppi

Server definition

Hash
sha256:585f15afceeb2e4a42dbe3c0bbdd68d8cdc8dcfff9156c1176b23693ede13c26
What it is
What a remote MCP server returned when asked what it offers: 15 tools

The blob, as servednamed by its sha256

{ "instructions": "Free, one-call negotiation math for agents — no account, no key. START WITH `negotiate` (your math-optimal next move in any price haggle) or `negotiate_bundle` (several linked issues at once, logrolled); `score_deal`, `auction_bid`, `auction_reserve`, `clearance_price`, and `stable_match` round out the free math. When you need it ON THE RECORD, `session_open` opens a $2 receipted, replayable negotiation session (then session_advise / session_bundle / session_close). When your agent needs to REMEMBER, `memory_save` / `memory_load` are persistent cross-session memory — you encrypt before saving; the store holds only ciphertext (blind custody) and cannot read it. `store_catalog` shows the shelf and your balance; `store_request` files what we don't stock yet. Empirical anchor: the negotiate recommender is ~12% better head-to-head (n=20 paired LLM negotiations, p<0.0001). Power users: the FULL surface (verified agent-to-agent + AP2 settlement, first-strike attestation, auction design/sim, offer-graph engine, legacy names) is the pro door at /mcp/pro/.", "tools": [ { "description": "The optimal bid when you're bidding in an auction — free, no account or key needed.\n\nUSE THIS WHEN: you're a bidder and want the bid that maximizes your expected\nsurplus without overpaying. NOT for running an auction (use\nauction_reserve) or 1:1 haggling (use negotiate).\n\nProvide: auction_format (\"first_price\" sealed bid, \"second_price_vickrey\",\nor \"english_ascending\"); my_valuation (what the item is worth to YOU, in $);\nn_competing_bidders (how many OTHER bidders, not counting you); and\ncompetitor_value_prior — a rough model of what rivals will pay, e.g.\n{\"family\":\"uniform\",\"params\":{\"low\":0,\"high\":6000}} (or\n{\"family\":\"lognorm\",\"params\":{\"mu\":8.5,\"sigma\":0.4}}). Estimate it if unknown.\nReturns {optimal_bid, expected_surplus, win_probability, dominant_strategy,\nrationale} — bid and surplus in the SAME $ you passed in.\n\nExample: a domain worth $5,000 to you, 4 rivals who'd pay up to ~$6,000, in a\nsealed first-price auction -> auction_bid(auction_format=\"first_price\",\nmy_valuation=5000, n_competing_bidders=4,\ncompetitor_value_prior={\"family\":\"uniform\",\"params\":{\"low\":0,\"high\":6000}})\n-> optimal_bid ~$4,000, win_probability ~0.48.\n", "inputSchema": { "properties": { "auction_format": { "description": "'first_price' (sealed), 'second_price_vickrey', or 'english_ascending'.", "enum": [ "first_price", "second_price_vickrey", "english_ascending" ], "title": "Auction Format", "type": "string" }, "competitor_value_prior": { "additionalProperties": true, "description": "Rough model of what rivals will pay, e.g. {family:'uniform', params:{low:0, high:6000}} or {family:'lognorm', params:{mu:8.5, sigma:0.4}}.", "title": "Competitor Value Prior", "type": "object" }, "my_valuation": { "description": "What the item is worth to YOU, in dollars.", "title": "My Valuation", "type": "number" }, "n_competing_bidders": { "description": "How many OTHER bidders there are (not counting you).", "title": "N Competing Bidders", "type": "integer" }, "reserve_price": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "description": "The auction's reserve/minimum bid in dollars, if any (optional).", "title": "Reserve Price" }, "risk_aversion": { "default": 1, "description": "Your risk aversion; 1.0 = risk-neutral (default 1.0).", "title": "Risk Aversion", "type": "number" } }, "required": [ "auction_format", "my_valuation", "n_competing_bidders", "competitor_value_prior" ], "title": "gt_auction_optimal_bidArguments", "type": "object" }, "name": "auction_bid", "outputSchema": { "properties": { "dominant_strategy": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Dominant Strategy" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Error" }, "expected_surplus": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Expected Surplus" }, "optimal_bid": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Optimal Bid" }, "rationale": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Rationale" }, "win_probability": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Win Probability" } }, "title": "AuctionBidOut", "type": "object" } }, { "description": "The revenue-optimal reserve price when you're selling — free, no account or key needed.\n\nUSE THIS WHEN: you're running an auction or sale with multiple bidders and need\nthe floor price (minimum bid you'll accept) that maximizes your expected\nrevenue. NOT for one-on-one haggling (use negotiate for that).\n\nProvide: n_bidders (how many bidders), seller_valuation (what the item is worth\nto YOU, in $), and bidder_value_prior — a rough model of what bidders will pay,\ne.g. {\"family\":\"uniform\",\"params\":{\"low\":2000,\"high\":8000}}. Estimate it if\nunknown. Returns the reserve price and expected revenue.\n\nExample: a painting, ~5 bidders, worth $1,000 to you, bidders likely pay\n$2,000–$8,000 -> auction_reserve(n_bidders=5, seller_valuation=1000,\nbidder_value_prior={\"family\":\"uniform\",\"params\":{\"low\":2000,\"high\":8000}}).\n", "inputSchema": { "properties": { "bidder_value_prior": { "additionalProperties": true, "description": "Rough model of what bidders will pay, e.g. {family:'uniform', params:{low:2000, high:8000}}.", "title": "Bidder Value Prior", "type": "object" }, "n_bidders": { "description": "How many bidders you expect.", "title": "N Bidders", "type": "integer" }, "seller_valuation": { "description": "What the item is worth to YOU, in dollars (your floor).", "title": "Seller Valuation", "type": "number" } }, "required": [ "bidder_value_prior", "n_bidders", "seller_valuation" ], "title": "gt_auction_optimal_reserveArguments", "type": "object" }, "name": "auction_reserve", "outputSchema": { "properties": { "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Error" }, "expected_efficiency_loss": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Expected Efficiency Loss" }, "expected_revenue": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Expected Revenue" }, "expected_revenue_no_reserve": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Expected Revenue No Reserve" }, "rationale": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Rationale" }, "reserve_price": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Reserve Price" } }, "title": "AuctionReserveOut", "type": "object" } }, { "description": "Best price plus markdown schedule to clear stock by a deadline — free, no account or key needed.\n\nUSE THIS WHEN: you must sell a FIXED number of units before a cutoff and\ndemand arrives over time — event tickets, perishable inventory, end-of-life\nstock. NOT for 1:1 haggling (negotiate) or auctions (auction_bid/reserve).\n\nProvide: inventory (units to sell); horizon_seconds (selling window in\nSECONDS — 14 days = 14*24*3600 = 1209600); arrival_rate_per_second (expected\nshoppers per second = expected total shoppers / horizon_seconds); and\nbuyer_arrival_prior — a rough model of willingness-to-pay, e.g.\n{\"family\":\"uniform\",\"params\":{\"low\":40,\"high\":150}}. Returns {static_price\n(one good fixed price), static_expected_revenue, dynamic_schedule (list of\n{t_seconds, recommended_price} markdown waypoints), sellthrough_rate,\nrationale} — all prices in the SAME $ as your prior.\n\nExample: 200 tickets, 14-day window, ~600 shoppers willing to pay $40-$150 ->\nclearance_price(inventory=200, horizon_seconds=1209600,\narrival_rate_per_second=600/1209600,\nbuyer_arrival_prior={\"family\":\"uniform\",\"params\":{\"low\":40,\"high\":150}})\n-> static_price ~$112, schedule marks down $114 -> ~$76 as the deadline nears.\n", "inputSchema": { "properties": { "arrival_rate_per_second": { "description": "Expected shoppers per SECOND (= expected total shoppers / horizon_seconds).", "title": "Arrival Rate Per Second", "type": "number" }, "buyer_arrival_prior": { "additionalProperties": true, "description": "Rough model of buyer willingness-to-pay, e.g. {family:'uniform', params:{low:40, high:150}}.", "title": "Buyer Arrival Prior", "type": "object" }, "horizon_seconds": { "description": "Selling window in SECONDS (14 days = 14*24*3600 = 1209600).", "title": "Horizon Seconds", "type": "number" }, "inventory": { "description": "Number of units you must sell before the cutoff.", "title": "Inventory", "type": "integer" }, "n_simulations": { "default": 2000, "description": "Monte-Carlo sample count for the estimate (default 2000).", "title": "N Simulations", "type": "integer" }, "seed": { "default": 42, "description": "RNG seed for reproducibility (default 42).", "title": "Seed", "type": "integer" } }, "required": [ "buyer_arrival_prior", "arrival_rate_per_second", "inventory", "horizon_seconds" ], "title": "gt_mechanism_posted_price_optimalArguments", "type": "object" }, "name": "clearance_price", "outputSchema": { "properties": { "dynamic_schedule": { "anyOf": [ { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Dynamic Schedule" }, "dynamic_value_estimate": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Dynamic Value Estimate" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Error" }, "rationale": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Rationale" }, "sellthrough_rate": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Sellthrough Rate" }, "static_expected_revenue": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Static Expected Revenue" }, "static_price": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Static Price" }, "static_simulated_revenue": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Static Simulated Revenue" } }, "title": "ClearancePriceOut", "type": "object" } }, { "description": "Load a memory you saved in an earlier session — retrieval is free.\n\nGet back an encrypted blob you parked earlier (the blind locker) by its\nclaim `ticket`. Returns {ok, blob_b64, size_bytes, expires_at} — the\nciphertext you saved, which only YOU can decrypt. A wrong owner reads as a\nmissing ticket; an expired TTL is `expired`; a lost at-rest key is\n`at_rest_key_unavailable`. Free (the save settled it).", "inputSchema": { "properties": { "api_key": { "description": "The same SNHP API key you saved under (a different owner reads as a missing ticket).", "title": "Api Key", "type": "string" }, "ticket": { "description": "The claim ticket returned by memory_save.", "title": "Ticket", "type": "string" } }, "required": [ "api_key", "ticket" ], "title": "store_retrieveArguments", "type": "object" }, "name": "memory_load", "outputSchema": { "properties": { "blob_b64": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Blob B64" }, "charged": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Charged" }, "code": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Code" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Error" }, "expires_at": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Expires At" }, "ok": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Ok" }, "reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Reason" }, "size_bytes": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Size Bytes" } }, "title": "MemoryLoadOut", "type": "object" } }, { "description": "Persistent memory for your agent across sessions — save now, load in any later session.\n\nYou encrypt before saving; the store holds only ciphertext (blind custody)\nand signs a receipt over its hash — it cannot read your memory.\n\nSaving uses your prepaid wallet; a new key's 50¢ starter credit covers\nyour first saves, and loading it back (memory_load) is free. `blob_b64`\nis YOUR ciphertext as base64 — encrypt BEFORE saving; keys never transit,\ncontents are never logged, so a breach leaks only sealed boxes. Charged a\nthin flat fee ONLY on durable store (empty/oversize/unencodable is\nuncharged). ttl_seconds is clamped to [60s, 7d] and the effective\nexpires_at is returned. The receipt's content_hash is over YOUR\nciphertext, so you can prove what you stored without the store ever seeing\nplaintext.", "inputSchema": { "properties": { "api_key": { "description": "Your SNHP API key (a new key's 50c starter credit covers first saves).", "title": "Api Key", "type": "string" }, "blob_b64": { "description": "YOUR ciphertext as base64 — encrypt BEFORE saving; the store holds only the sealed box and cannot read it.", "title": "Blob B64", "type": "string" }, "ttl_seconds": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "description": "How long to keep it, clamped to [60s, 7 days]; the effective expiry is returned (optional).", "title": "Ttl Seconds" } }, "required": [ "api_key", "blob_b64" ], "title": "store_parkArguments", "type": "object" }, "name": "memory_save", "outputSchema": { "properties": { "charged": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Charged" }, "code": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Code" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Error" }, "expires_at": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Expires At" }, "ok": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Ok" }, "price_millicents": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Price Millicents" }, "reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Reason" }, "receipt": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Receipt" }, "size_bytes": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Size Bytes" }, "ticket": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Ticket" }, "ticket_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Ticket Hash" } }, "title": "MemorySaveOut", "type": "object" } }, { "description": "Your math-optimal next move in any price negotiation — free, no account or key needed.\n\nUSE THIS WHEN: you're haggling over a single PRICE across multiple back-and-\nforth rounds and want a better outcome than winging it. Validated edge: ~12%\nbetter head-to-head (measured on this recommender, n=20 paired LLM\nnegotiations, 95% CI +6.5-17.4%, p<0.0001). NOT FOR: one-shot or fixed prices\n(it'll tell you to just negotiate directly); multi-issue bundles (use\nnegotiate_bundle — it logrolls across several linked issues); or non-price\ndecisions like accept-vs-decline a job offer (just reason it through).\n\nYou provide only what you already know — no game theory:\n side \"sell\" or \"buy\"\n walk_away your reservation in dollars (seller=floor/minimum, buyer=ceiling/max)\n target your aspiration in dollars (seller=high, buyer=low)\n counterparty_offers their offers so far, in dollars, oldest first\n rounds_left (optional, default 8) roughly how many back-and-forths remain\n compute_ms (optional, default 0; EXPERIMENTAL) milliseconds of Monte-Carlo\n rollouts to spend refining the move. 0 = instant closed form.\n Validated to show NO realized edge over the closed form (n=400,\n mc_validation.py) — kept off by default as a research mechanism,\n not a quality improvement. The reply carries a \"compute\" block\n\nYou get back, in dollars:\n {\"action\": \"counter\"|\"accept\"|\"walk\", \"recommended_price\": 5387.0,\n \"message\": \"...the best I can do is $5,387.00\", \"fit\": {...},\n \"expected_settlement\": 4943.5, \"confidence\": 0.62}\n\nWORKED EXAMPLE — selling a contract, floor $4,000, hope $6,000, the buyer has\nbid $4,200 then $4,500:\n negotiate(side=\"sell\", walk_away=4000, target=6000,\n counterparty_offers=[4200, 4500], rounds_left=6)\n -> counter ~$5,387 with a ready-to-send message; ACCEPT once their bid crosses\n the optimal target; WALK if they stay below your floor near the deadline.\n\nWorks against ANY counterparty with zero setup. (The verified-peer cooperation\npremium is the separate, advanced gt_a2a_* flow on the pro door.)\n", "inputSchema": { "properties": { "compute_ms": { "default": 0, "description": "EXPERIMENTAL. Milliseconds of Monte-Carlo rollouts to spend refining the move; 0 = instant closed form (validated to show no realized edge, off by default).", "title": "Compute Ms", "type": "integer" }, "counterparty_offers": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "The other side's offers so far, in dollars, oldest first. Omit if they haven't offered yet.", "title": "Counterparty Offers" }, "item": { "default": "this", "description": "Short label for what's being negotiated (used only in the drafted message).", "title": "Item", "type": "string" }, "my_previous_offers": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "Your own offers so far, in dollars, oldest first (optional context).", "title": "My Previous Offers" }, "rounds_left": { "default": 8, "description": "Roughly how many back-and-forth rounds remain before the deadline (default 8).", "title": "Rounds Left", "type": "integer" }, "side": { "description": "Which side you are: 'sell' or 'buy'.", "title": "Side", "type": "string" }, "target": { "description": "Your aspiration price in dollars (seller: high; buyer: low).", "title": "Target", "type": "number" }, "walk_away": { "description": "Your reservation price in dollars — the worst you'd accept (seller: your floor/minimum; buyer: your ceiling/maximum).", "title": "Walk Away", "type": "number" } }, "required": [ "side", "walk_away", "target" ], "title": "gt_negotiate_turnArguments", "type": "object" }, "name": "negotiate", "outputSchema": { "properties": { "action": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Action" }, "compute": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Compute" }, "confidence": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Confidence" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Error" }, "expected_settlement": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Expected Settlement" }, "fit": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Fit" }, "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Message" }, "rationale": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Rationale" }, "recommended_price": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Recommended Price" } }, "title": "NegotiateOut", "type": "object" } }, { "description": "Negotiate several linked issues at once by logrolling — free, no account or key needed.\n\nUSE THIS WHEN: a deal has more than one issue on the table and they trade off —\na job offer (base + equity + signing), a SaaS contract (price + seats + term +\nSLA), any package deal. It concedes on the issues you care about LESS (and the\nother side cares about MORE) to win the ones you care about most — a trade that\nbeats splitting every issue down the middle. For a single PRICE, use\nnegotiate instead.\n\nProvide `issues`: a list of {\"name\", \"options\" (the choices), \"my_utility\" (how\ngood each option is to YOU — one number per option, any scale), \"their_utility\"\n(how good each option is to THEM — their preference direction)}. Optionally\n`my_priorities` ({issue_name: weight}, how much each issue matters to you) and\n`their_offers` (their packages so far as {issue_name: option}, oldest first —\nthis is what lets it INFER their priorities). Returns {action, recommended_offer\n(issue -> option), message, my_utility, their_expected_utility,\ninferred_their_priorities, trade_logic, fit, confidence, acceptance_probability}.\n\nValidated (separately from the single-issue +12%): returns a Pareto-efficient\npackage that beats naive \"split-every-issue-down-the-middle\" bargaining by ~40%\njoint surplus (300 random 4-issue profiles). HONEST CAVEAT: the priority\nINFERENCE layered on top is weak (recovery r≈0.3) and currently adds only ~1%\n(and can be slightly NEGATIVE against some opponents) over the same engine run\nwith no inference — so the proven value today is the efficient-package search,\nnot (yet) the logrolling edge.\n\nOptional timing refinement: pass `rounds_left` (bargaining rounds remaining)\nwith `compute_ms` > 0 to spend that many ms of Monte-Carlo rollouts choosing\nWHICH package to hold for as the other side concedes over the rounds — a firmer\npackage closes later (discounted) than a generous one. 0 = the instant\nclosed-form package; the reply then carries a `compute` block. Modest by design\n(never worse than the closed form in-model; helps on a minority of deals).\n\nExample: a SaaS contract — you most want a low price_per_seat, can flex on\nseats/term/SLA. negotiate_bundle(issues=[\n {\"name\":\"price_per_seat\",\"options\":[\"$50\",\"$40\",\"$30\"],\"my_utility\":[0,0.5,1],\"their_utility\":[1,0.5,0]},\n {\"name\":\"sla\",\"options\":[\"99%\",\"99.9%\"],\"my_utility\":[0,1],\"their_utility\":[1,0]} ...],\n my_priorities={\"price_per_seat\":0.55,\"sla\":0.1,...}, their_offers=[...])\n -> a full package that gives ground on SLA to hold the price.\n", "inputSchema": { "properties": { "compute_ms": { "default": 0, "description": "EXPERIMENTAL. Milliseconds of rollouts to choose WHICH package to hold as they concede; 0 = instant closed-form package.", "title": "Compute Ms", "type": "integer" }, "issues": { "description": "One dict per issue: {name, options (the choices), my_utility (value of each option to YOU), their_utility (value to THEM)} — utilities are one number per option, any scale.", "items": { "additionalProperties": true, "type": "object" }, "title": "Issues", "type": "array" }, "my_batna": { "default": 0.4, "description": "Your best alternative to no deal, as a utility fraction in [0,1] (default 0.40); the returned package is guaranteed to beat it.", "title": "My Batna", "type": "number" }, "my_priorities": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "description": "{issue_name: weight} — how much each issue matters to you (any scale). Optional.", "title": "My Priorities" }, "rounds_left": { "default": 8, "description": "Bargaining rounds remaining (used with compute_ms for the timing tier; default 8).", "title": "Rounds Left", "type": "integer" }, "their_batna_estimate": { "default": 0.4, "description": "Your estimate of the other side's BATNA, [0,1] (default 0.40).", "title": "Their Batna Estimate", "type": "number" }, "their_offers": { "anyOf": [ { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "Packages the other side has tabled, oldest first, each as {issue_name: chosen_option} — lets it infer their priorities.", "title": "Their Offers" } }, "required": [ "issues" ], "title": "gt_negotiate_bundleArguments", "type": "object" }, "name": "negotiate_bundle", "outputSchema": { "properties": { "acceptance_probability": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Acceptance Probability" }, "action": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Action" }, "compute": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Compute" }, "confidence": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Confidence" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Error" }, "fit": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Fit" }, "inferred_their_priorities": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Inferred Their Priorities" }, "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Message" }, "my_utility": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "My Utility" }, "recommended_offer": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Recommended Offer" }, "their_expected_utility": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Their Expected Utility" }, "trade_logic": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Trade Logic" } }, "title": "NegotiateBundleOut", "type": "object" } }, { "description": "Score how good a deal is against your floor/target — free, no account or key needed.\n\nScore a settled package against the exact Pareto frontier — the SNHP\nleaderboard metric (\"dollars left on the table\") for YOUR negotiation.\n\nArgs:\n issues: one dict per issue: {\"name\": str, \"options\": [labels],\n \"my_utility\": [per-option value to me], \"their_utility\":\n [per-option value to them]} — both sides' TRUE per-option values.\n my_weights: {issue_name: weight} — my true priorities (any scale).\n their_weights: {issue_name: weight} — their true priorities.\n package: the settled deal, {issue_name: option_label}.\n notional: deal size in dollars for the dollars-left framing.\n\nReturns realized joint welfare, the frontier best, the naive middle-split\nbaseline, frontier capture, logroll capture, and dollars_left_on_table.\n", "inputSchema": { "properties": { "issues": { "description": "One dict per issue: {name, options, my_utility, their_utility} — both sides' TRUE per-option values (one number per option).", "items": { "additionalProperties": true, "type": "object" }, "title": "Issues", "type": "array" }, "my_weights": { "additionalProperties": true, "description": "{issue_name: weight} — your true priorities (any scale).", "title": "My Weights", "type": "object" }, "notional": { "default": 10000, "description": "Deal size in dollars, used for the 'dollars left on the table' framing (default 10000).", "title": "Notional", "type": "number" }, "package": { "additionalProperties": true, "description": "The settled deal as {issue_name: chosen_option_label}.", "title": "Package", "type": "object" }, "their_weights": { "additionalProperties": true, "description": "{issue_name: weight} — their true priorities (any scale).", "title": "Their Weights", "type": "object" } }, "required": [ "issues", "my_weights", "their_weights", "package" ], "title": "score_dealArguments", "type": "object" }, "name": "score_deal", "outputSchema": { "properties": { "dollars_left_on_table": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Dollars Left On Table" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Error" }, "frontier_best": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Frontier Best" }, "frontier_capture": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Frontier Capture" }, "joint_welfare": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Joint Welfare" }, "logroll_capture": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Logroll Capture" }, "my_utility": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "My Utility" }, "naive_split": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Naive Split" }, "their_utility": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Their Utility" } }, "title": "ScoreDealOut", "type": "object" } }, { "description": "Your next move inside a receipted session (single-issue) — no additional charge (the $2 at session_open covered it).\n\nPass the FULL offer history each time, oldest first. Returns move, exact\nprice, ready-to-send message, and the receipt (why[], context_hash,\ndeterministic compute block).", "inputSchema": { "properties": { "api_key": { "description": "The API key that opened the session.", "title": "Api Key", "type": "string" }, "my_offers": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "Your own offer history, in dollars, oldest first (optional).", "title": "My Offers" }, "rounds_left": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "description": "Bargaining rounds remaining (optional).", "title": "Rounds Left" }, "session_id": { "description": "The session_id returned by session_open.", "title": "Session Id", "type": "string" }, "their_offers": { "description": "The FULL counterparty offer history, in dollars, oldest first.", "items": { "type": "number" }, "title": "Their Offers", "type": "array" } }, "required": [ "api_key", "session_id", "their_offers" ], "title": "nextmove_adviseArguments", "type": "object" }, "name": "session_advise", "outputSchema": { "properties": { "compute": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Compute" }, "confidence_note": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Confidence Note" }, "context_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Context Hash" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Error" }, "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Message" }, "move": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Move" }, "move_index": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Move Index" }, "offer": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Offer" }, "policy_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Policy Id" }, "receipt": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Receipt" }, "why": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "default": null, "title": "Why" } }, "title": "SessionAdviseOut", "type": "object" } }, { "description": "Multi-issue logrolled advice inside a receipted session — no additional charge.\n\nThe logrolling tier, the thing the free tool does NOT have. Trade the\nissues you care less about for the ones you value: issues = [{name,\noptions, my_utility (per option), their_utility (your read of their\ndirection)}]; their_offers = packages they've tabled, oldest\nfirst. Returns the recommended package, trade logic, inferred\ncounterparty priorities, acceptance probability, and the receipt.\nDeterministic closed form — no rollout theater. The package is\nguaranteed to clear YOUR stated BATNA (enforced, not promised).", "inputSchema": { "properties": { "api_key": { "description": "The API key that opened the session.", "title": "Api Key", "type": "string" }, "cooperation": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "description": "Optional cooperation dial in [0,1] biasing toward joint surplus.", "title": "Cooperation" }, "issues": { "description": "One dict per issue: {name, options, my_utility (per option), their_utility (your read of their direction)}.", "items": { "additionalProperties": true, "type": "object" }, "title": "Issues", "type": "array" }, "my_batna": { "default": 0.4, "description": "Your BATNA as a utility fraction in [0,1] (default 0.40); the package is guaranteed to clear it.", "title": "My Batna", "type": "number" }, "my_priorities": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "description": "{issue_name: weight} — how much each issue matters to you (optional).", "title": "My Priorities" }, "session_id": { "description": "The session_id returned by session_open.", "title": "Session Id", "type": "string" }, "their_batna_estimate": { "default": 0.4, "description": "Your estimate of their BATNA, [0,1] (default 0.40).", "title": "Their Batna Estimate", "type": "number" }, "their_offers": { "anyOf": [ { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "Packages they've tabled, oldest first, each {issue_name: option} (optional).", "title": "Their Offers" } }, "required": [ "api_key", "session_id", "issues" ], "title": "nextmove_bundleArguments", "type": "object" }, "name": "session_bundle", "outputSchema": { "properties": { "acceptance_probability": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Acceptance Probability" }, "confidence_note": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Confidence Note" }, "context_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Context Hash" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Error" }, "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Message" }, "move": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Move" }, "move_index": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Move Index" }, "package": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Package" }, "receipt": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Receipt" }, "their_expected_utility": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Their Expected Utility" }, "why": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "default": null, "title": "Why" } }, "title": "SessionBundleOut", "type": "object" } }, { "description": "Close a receipted session and get the signed summary receipt.\n\nOptional — sessions also expire on their own — but closing timestamps the\noutcome, which helps the machine learn real round-counts per\ncategory. Returns the `closed` flag AND a signed session-summary\nreceipt (GAUNTLET #4) — moves count, total charged (one $2 open), and\nthe per-move context_hashes — to hand your principal. An unknown session\nor key mismatch leaves `closed` false and returns an `error` instead of\nthe receipt (indistinguishable, so a session id can't be probed).", "inputSchema": { "properties": { "api_key": { "description": "The API key that opened the session.", "title": "Api Key", "type": "string" }, "session_id": { "description": "The session_id to close.", "title": "Session Id", "type": "string" } }, "required": [ "api_key", "session_id" ], "title": "nextmove_closeArguments", "type": "object" }, "name": "session_close", "outputSchema": { "properties": { "closed": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Closed" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Error" }, "receipt": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Receipt" } }, "title": "SessionCloseOut", "type": "object" } }, { "description": "Open a $2 receipted negotiation session: deterministic, replayable, every move signed.\n\nPAID ($2 once, from your credit balance) — the $2 covers EVERY move of\nthis negotiation (up to 10 moves, 7 days), tuned to the category. A new\nkey's 50¢ starter credit is a taste, not enough for a session — top up\nfirst. category: resale | supply | retail. side: buy | sell.\nwalk_away = your true floor (sell) / ceiling (buy) — private,\nnever crossed. Pass their_offers to get the first move back\nimmediately with the session. Subsequent moves: session_advise\nwith the session_id — no further charge.", "inputSchema": { "properties": { "api_key": { "description": "Your SNHP API key; $2 is debited from its credit balance (covers every move of this one negotiation).", "title": "Api Key", "type": "string" }, "category": { "description": "Negotiation category for tuning: 'resale' | 'supply' | 'retail'.", "title": "Category", "type": "string" }, "my_offers": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "Your own offers so far, in dollars, oldest first (optional).", "title": "My Offers" }, "rounds_left": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "description": "Bargaining rounds remaining for this move (optional; overrides the category default).", "title": "Rounds Left" }, "seed": { "default": 0, "description": "RNG seed for the deterministic engine (default 0).", "title": "Seed", "type": "integer" }, "side": { "description": "Which side you're on: 'buy' or 'sell'.", "title": "Side", "type": "string" }, "target": { "description": "Your aspiration price in dollars.", "title": "Target", "type": "number" }, "their_offers": { "anyOf": [ { "items": { "type": "number" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "The other side's offers so far, in dollars, oldest first — pass to get the first move back with the session (optional).", "title": "Their Offers" }, "walk_away": { "description": "Your true reservation in dollars — floor (sell) / ceiling (buy); private, never crossed.", "title": "Walk Away", "type": "number" } }, "required": [ "api_key", "category", "side", "walk_away", "target" ], "title": "nextmove_openArguments", "type": "object" }, "name": "session_open", "outputSchema": { "properties": { "balance_after": { "default": null, "title": "Balance After" }, "category": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Category" }, "context_hash": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Context Hash" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Error" }, "expires_at": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Expires At" }, "first_move": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "First Move" }, "first_move_error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "First Move Error" }, "funding": { "default": null, "title": "Funding" }, "how_to_pay": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "How To Pay" }, "max_moves": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Max Moves" }, "price_cents": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Price Cents" }, "price_millicents": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Price Millicents" }, "receipt": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Receipt" }, "session_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Session Id" }, "side": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Side" } }, "title": "SessionOpenOut", "type": "object" } }, { "description": "Match two groups by their rankings so no pair wants to swap — free, no account or key needed.\n\nA STABLE matching: USE THIS WHEN you're assigning two sides to each other by\nmutual preference — interns<->teams, students<->schools, mentors<->mentees —\nand want a result with no \"blocking pair\" (no person+slot that both prefer\neach other over what they got).\n\nProvide proposers and receivers, each a list of {\"id\": name,\n\"preferences\": [ids of the OTHER side, most-wanted first]}. Receivers may add\n\"capacity\" (default 1) to accept several. Returns {matching (name -> name),\nunmatched_proposers, blocking_pairs (empty list = provably stable),\nn_proposals}. NOTE: the result is PROPOSER-optimal, so put the side you want\nto favor in `proposers`.\n\nExample: stable_match(\n proposers=[{\"id\":\"Ana\",\"preferences\":[\"Growth\",\"Core\"]},\n {\"id\":\"Ben\",\"preferences\":[\"Core\",\"Growth\"]}],\n receivers=[{\"id\":\"Growth\",\"preferences\":[\"Ben\",\"Ana\"]},\n {\"id\":\"Core\",\"preferences\":[\"Ana\",\"Ben\"]}])\n-> matching {\"Ana\":\"Growth\",\"Ben\":\"Core\"}, blocking_pairs [].\n", "inputSchema": { "properties": { "proposers": { "description": "List of {id, preferences:[ids of the OTHER side, most-wanted first]}. The result is PROPOSER-optimal — put the side you want to favor here.", "items": { "additionalProperties": true, "type": "object" }, "title": "Proposers", "type": "array" }, "receivers": { "description": "List of {id, preferences:[...], capacity (optional, default 1)}.", "items": { "additionalProperties": true, "type": "object" }, "title": "Receivers", "type": "array" } }, "required": [ "proposers", "receivers" ], "title": "gt_mechanism_gale_shapleyArguments", "type": "object" }, "name": "stable_match", "outputSchema": { "properties": { "blocking_pairs": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "default": null, "title": "Blocking Pairs" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Error" }, "matching": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Matching" }, "n_proposals": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "N Proposals" }, "unmatched_proposers": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "default": null, "title": "Unmatched Proposers" } }, "title": "StableMatchOut", "type": "object" } }, { "description": "See what's on the shelf — free, no key needed: prices, predicates, receipt scheme, and your balance.\n\nTHE STORE: one counter, one prepaid wallet, many slots. One read covers\nthe whole shelf — the commodity slots, the blind locker (agent memory),\nand the paid receipted-session SKU (folds in what nextmove_catalog used\nto report separately).\n\nEvery commodity slot settles ON DELIVERY: the wallet is debited only\nwhen a machine-checkable predicate passes — a failed fetch is never\ncharged, because here you cannot pay for nothing. Each receipt names\nthe backend that served and its EXACT wholesale cost (passthrough, no\nper-call markup); the counter's cut is a published fee on wallet\ntop-ups, not on the calls — 5% + a fixed 30¢ per transaction (the 30¢\nis the card rail's own per-transaction toll, passed through).\n\nEvery new key gets a one-time 50¢ starter credit — unconditional, no\ncard — enough to taste the shelf before funding it. Don't see the\ncapability you need? store_request logs it; unmet demand decides what\ngets stocked next. Returns the money unit (millicents, 1000 per cent),\nper-slot {tier, max_price_millicents, predicate_id, request_doc,\nserving-backend ids}, the anchor SKUs, the paid_session card, and the\ntwo pricing facts. Never returns key material.", "inputSchema": { "properties": {}, "title": "store_catalogArguments", "type": "object" }, "name": "store_catalog", "outputSchema": { "properties": { "admission": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Admission" }, "counter_fee": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Counter Fee" }, "counter_fee_pct": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Counter Fee Pct" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Error" }, "keys": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Keys" }, "millicents_per_cent": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Millicents Per Cent" }, "paid_session": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Paid Session" }, "request_privacy": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Request Privacy" }, "slots": { "anyOf": [ { "items": { "additionalProperties": true, "type": "object" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Slots" }, "starter_credit": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Starter Credit" }, "unit": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Unit" } }, "title": "StoreCatalogOut", "type": "object" } }, { "description": "Ask for a capability we don't sell yet — free; filings are public and drive what we stock.\n\nTwo reads in one tool (absorbs the old store_request_status /\nnextmove_request): pass `request_id` to RE-QUERY a filing's status\ninstead of filing anew — returns {found, request_id, status, status_note,\nfiled_at, door, text} (found: false on an unknown id). Without a\nrequest_id it FILES a new ask and returns {request_id, status, watch,\ncheck}: every filing is logged verbatim (size-capped, stored as data,\nnever rendered raw) and gets an id you can come back to (GAUNTLET #5).\nCheck any filing with GET /v1/store/request/{id}; the public count is\nGET /v1/store/requests. Unmet demand decides what gets stocked next — the\nshelf writes itself from what agents ask for and can't get.\n\nPass watch=True WITH an api_key when filing to flag the ask for a heads-up\non a status flip (poll store_my_requests to see it — poll-based, no push);\nan anonymous watch is ignored, and the chosen flag is echoed as `watch`.", "inputSchema": { "properties": { "api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Your SNHP API key (optional; required only if you set watch=True).", "title": "Api Key" }, "request_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Pass an existing filing id to RE-QUERY its status instead of filing a new request.", "title": "Request Id" }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "What capability you want that we don't stock yet (free-text). Omit when re-querying with request_id.", "title": "Text" }, "watch": { "default": false, "description": "Set True (with an api_key) to flag the ask for a status-flip heads-up; anonymous watches are ignored.", "title": "Watch", "type": "boolean" } }, "title": "store_requestArguments", "type": "object" }, "name": "store_request", "outputSchema": { "properties": { "check": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Check" }, "door": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Door" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Error" }, "filed_at": { "default": null, "title": "Filed At" }, "found": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Found" }, "request_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Request Id" }, "same_ask_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Same Ask Count" }, "status": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Status" }, "status_note": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Status Note" }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Text" }, "watch": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Watch" } }, "title": "StoreRequestOut", "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:585f15afceeb2e4a42dbe3c0bbdd68d8cdc8dcfff9156c1176b23693ede13c26 | sha256sum