SNHP — free negotiation math + agent memory
Free game-theory negotiation advisor for agents, plus paid receipted sessions and agent memory.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"snhp": {
"url": "https://api.snhp.dev/mcp/"
}
}
}远程端点
https://api.snhp.dev/mcp/streamable-http它能做什么
工具清单
工具(15)
🟢negotiate(side, walk_away, target, counterparty_offers, my_previous_offers, ...)
Your math-optimal next move in any price negotiation — free, no account or key needed. USE THIS WHEN: you're haggling over a single PRICE across multiple back-and- forth rounds and want a better outcome than winging it. Validated edge: ~12% better head-to-head (measured on this recommender, n=20 paired LLM negotiations, 95% CI +6.5-17.4%, p<0.0001). NOT FOR: one-shot or fixed prices (it'll tell you to just negotiate directly); multi-issue bundles (use negotiate_bundle — it logrolls across several linked issues); or non-price decisions like accept-vs-decline a job offer (just reason it through). You provide only what you already know — no game theory: side "sell" or "buy" walk_away your reservation in dollars (seller=floor/minimum, buyer=ceiling/max) target your aspiration in dollars (seller=high, buyer=low) counterparty_offers their offers so far, in dollars, oldest first rounds_left (optional, default 8) roughly how many back-and-forths remain compute_ms (optional, default 0; EXPERIMENTAL) milliseconds of Monte-Carlo rollouts to spend refining the move. 0 = instant closed form. Validated to show NO realized edge over the closed form (n=400, mc_validation.py) — kept off by default as a research mechanism, not a quality improvement. The reply carries a "compute" block You get back, in dollars: {"action": "counter"|"accept"|"walk", "recommended_price": 5387.0, "message": "...the best I can do is $5,387.00", "fit": {...}, "expected_settlement": 4943.5, "confidence": 0.62} WORKED EXAMPLE — selling a contract, floor $4,000, hope $6,000, the buyer has bid $4,200 then $4,500: negotiate(side="sell", walk_away=4000, target=6000, counterparty_offers=[4200, 4500], rounds_left=6) -> counter ~$5,387 with a ready-to-send message; ACCEPT once their bid crosses the optimal target; WALK if they stay below your floor near the deadline. Works against ANY counterparty with zero setup. (The verified-peer cooperation premium is the separate, advanced gt_a2a_* flow on the pro door.)
输入模式
{
"type": "object",
"properties": {
"side": {
"description": "Which side you are: 'sell' or 'buy'.",
"title": "Side",
"type": "string"
},
"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"
},
"target": {
"description": "Your aspiration price in dollars (seller: high; buyer: low).",
"title": "Target",
"type": "number"
},
"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"
},
"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"
},
"item": {
"default": "this",
"description": "Short label for what's being negotiated (used only in the drafted message).",
"title": "Item",
"type": "string"
},
"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"
}
},
"required": [
"side",
"walk_away",
"target"
],
"title": "gt_negotiate_turnArguments"
}输出模式
{
"type": "object",
"properties": {
"action": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Action"
},
"recommended_price": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Recommended Price"
},
"message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Message"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
},
"fit": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Fit"
},
"expected_settlement": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Expected Settlement"
},
"confidence": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Confidence"
},
"compute": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Compute"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
}
},
"title": "NegotiateOut"
}🟢negotiate_bundle(issues, their_offers, my_priorities, my_batna, their_batna_estimate, ...)
Negotiate several linked issues at once by logrolling — free, no account or key needed. USE THIS WHEN: a deal has more than one issue on the table and they trade off — a job offer (base + equity + signing), a SaaS contract (price + seats + term + SLA), any package deal. It concedes on the issues you care about LESS (and the other side cares about MORE) to win the ones you care about most — a trade that beats splitting every issue down the middle. For a single PRICE, use negotiate instead. Provide `issues`: a list of {"name", "options" (the choices), "my_utility" (how good each option is to YOU — one number per option, any scale), "their_utility" (how good each option is to THEM — their preference direction)}. Optionally `my_priorities` ({issue_name: weight}, how much each issue matters to you) and `their_offers` (their packages so far as {issue_name: option}, oldest first — this is what lets it INFER their priorities). Returns {action, recommended_offer (issue -> option), message, my_utility, their_expected_utility, inferred_their_priorities, trade_logic, fit, confidence, acceptance_probability}. Validated (separately from the single-issue +12%): returns a Pareto-efficient package that beats naive "split-every-issue-down-the-middle" bargaining by ~40% joint surplus (300 random 4-issue profiles). HONEST CAVEAT: the priority INFERENCE layered on top is weak (recovery r≈0.3) and currently adds only ~1% (and can be slightly NEGATIVE against some opponents) over the same engine run with no inference — so the proven value today is the efficient-package search, not (yet) the logrolling edge. Optional timing refinement: pass `rounds_left` (bargaining rounds remaining) with `compute_ms` > 0 to spend that many ms of Monte-Carlo rollouts choosing WHICH package to hold for as the other side concedes over the rounds — a firmer package closes later (discounted) than a generous one. 0 = the instant closed-form package; the reply then carries a `compute` block. Modest by design (never worse than the closed form in-model; helps on a minority of deals). Example: a SaaS contract — you most want a low price_per_seat, can flex on seats/term/SLA. negotiate_bundle(issues=[ {"name":"price_per_seat","options":["$50","$40","$30"],"my_utility":[0,0.5,1],"their_utility":[1,0.5,0]}, {"name":"sla","options":["99%","99.9%"],"my_utility":[0,1],"their_utility":[1,0]} ...], my_priorities={"price_per_seat":0.55,"sla":0.1,...}, their_offers=[...]) -> a full package that gives ground on SLA to hold the price.
输入模式
{
"type": "object",
"properties": {
"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"
},
"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"
},
"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"
},
"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"
},
"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"
},
"rounds_left": {
"default": 8,
"description": "Bargaining rounds remaining (used with compute_ms for the timing tier; default 8).",
"title": "Rounds Left",
"type": "integer"
},
"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"
}
},
"required": [
"issues"
],
"title": "gt_negotiate_bundleArguments"
}输出模式
{
"type": "object",
"properties": {
"action": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Action"
},
"recommended_offer": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Recommended Offer"
},
"message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Message"
},
"my_utility": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "My Utility"
},
"their_expected_utility": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Their Expected Utility"
},
"inferred_their_priorities": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Inferred Their Priorities"
},
"trade_logic": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Trade Logic"
},
"fit": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Fit"
},
"confidence": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Confidence"
},
"acceptance_probability": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Acceptance Probability"
},
"compute": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Compute"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
}
},
"title": "NegotiateBundleOut"
}🟢score_deal(issues, my_weights, their_weights, package, notional)
Score how good a deal is against your floor/target — free, no account or key needed. Score a settled package against the exact Pareto frontier — the SNHP leaderboard metric ("dollars left on the table") for YOUR negotiation. Args: issues: one dict per issue: {"name": str, "options": [labels], "my_utility": [per-option value to me], "their_utility": [per-option value to them]} — both sides' TRUE per-option values. my_weights: {issue_name: weight} — my true priorities (any scale). their_weights: {issue_name: weight} — their true priorities. package: the settled deal, {issue_name: option_label}. notional: deal size in dollars for the dollars-left framing. Returns realized joint welfare, the frontier best, the naive middle-split baseline, frontier capture, logroll capture, and dollars_left_on_table.
输入模式
{
"type": "object",
"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"
},
"their_weights": {
"additionalProperties": true,
"description": "{issue_name: weight} — their true priorities (any scale).",
"title": "Their Weights",
"type": "object"
},
"package": {
"additionalProperties": true,
"description": "The settled deal as {issue_name: chosen_option_label}.",
"title": "Package",
"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"
}
},
"required": [
"issues",
"my_weights",
"their_weights",
"package"
],
"title": "score_dealArguments"
}输出模式
{
"type": "object",
"properties": {
"my_utility": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "My Utility"
},
"their_utility": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Their Utility"
},
"joint_welfare": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Joint Welfare"
},
"frontier_best": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Frontier Best"
},
"naive_split": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Naive Split"
},
"frontier_capture": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Frontier Capture"
},
"logroll_capture": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Logroll Capture"
},
"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"
}
},
"title": "ScoreDealOut"
}🟢auction_bid(auction_format, my_valuation, n_competing_bidders, competitor_value_prior, reserve_price, ...)
The optimal bid when you're bidding in an auction — free, no account or key needed. USE THIS WHEN: you're a bidder and want the bid that maximizes your expected surplus without overpaying. NOT for running an auction (use auction_reserve) or 1:1 haggling (use negotiate). Provide: auction_format ("first_price" sealed bid, "second_price_vickrey", or "english_ascending"); my_valuation (what the item is worth to YOU, in $); n_competing_bidders (how many OTHER bidders, not counting you); and competitor_value_prior — a 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}}). Estimate it if unknown. Returns {optimal_bid, expected_surplus, win_probability, dominant_strategy, rationale} — bid and surplus in the SAME $ you passed in. Example: a domain worth $5,000 to you, 4 rivals who'd pay up to ~$6,000, in a sealed first-price auction -> auction_bid(auction_format="first_price", my_valuation=5000, n_competing_bidders=4, competitor_value_prior={"family":"uniform","params":{"low":0,"high":6000}}) -> optimal_bid ~$4,000, win_probability ~0.48.
输入模式
{
"type": "object",
"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"
},
"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"
},
"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"
},
"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",
"properties": {
"optimal_bid": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Optimal Bid"
},
"expected_surplus": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Expected Surplus"
},
"win_probability": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Win Probability"
},
"dominant_strategy": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Dominant Strategy"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
}
},
"title": "AuctionBidOut"
}🟢auction_reserve(bidder_value_prior, n_bidders, seller_valuation)
The revenue-optimal reserve price when you're selling — free, no account or key needed. USE THIS WHEN: you're running an auction or sale with multiple bidders and need the floor price (minimum bid you'll accept) that maximizes your expected revenue. NOT for one-on-one haggling (use negotiate for that). Provide: n_bidders (how many bidders), seller_valuation (what the item is worth to YOU, in $), and bidder_value_prior — a rough model of what bidders will pay, e.g. {"family":"uniform","params":{"low":2000,"high":8000}}. Estimate it if unknown. Returns the reserve price and expected revenue. Example: a painting, ~5 bidders, worth $1,000 to you, bidders likely pay $2,000–$8,000 -> auction_reserve(n_bidders=5, seller_valuation=1000, bidder_value_prior={"family":"uniform","params":{"low":2000,"high":8000}}).
输入模式
{
"type": "object",
"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",
"properties": {
"reserve_price": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Reserve Price"
},
"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"
},
"expected_efficiency_loss": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Expected Efficiency Loss"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
}
},
"title": "AuctionReserveOut"
}🟢clearance_price(buyer_arrival_prior, arrival_rate_per_second, inventory, horizon_seconds, n_simulations, ...)
Best price plus markdown schedule to clear stock by a deadline — free, no account or key needed. USE THIS WHEN: you must sell a FIXED number of units before a cutoff and demand arrives over time — event tickets, perishable inventory, end-of-life stock. NOT for 1:1 haggling (negotiate) or auctions (auction_bid/reserve). Provide: inventory (units to sell); horizon_seconds (selling window in SECONDS — 14 days = 14*24*3600 = 1209600); arrival_rate_per_second (expected shoppers per second = expected total shoppers / horizon_seconds); and buyer_arrival_prior — a rough model of willingness-to-pay, e.g. {"family":"uniform","params":{"low":40,"high":150}}. Returns {static_price (one good fixed price), static_expected_revenue, dynamic_schedule (list of {t_seconds, recommended_price} markdown waypoints), sellthrough_rate, rationale} — all prices in the SAME $ as your prior. Example: 200 tickets, 14-day window, ~600 shoppers willing to pay $40-$150 -> clearance_price(inventory=200, horizon_seconds=1209600, arrival_rate_per_second=600/1209600, buyer_arrival_prior={"family":"uniform","params":{"low":40,"high":150}}) -> static_price ~$112, schedule marks down $114 -> ~$76 as the deadline nears.
输入模式
{
"type": "object",
"properties": {
"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"
},
"arrival_rate_per_second": {
"description": "Expected shoppers per SECOND (= expected total shoppers / horizon_seconds).",
"title": "Arrival Rate Per Second",
"type": "number"
},
"inventory": {
"description": "Number of units you must sell before the cutoff.",
"title": "Inventory",
"type": "integer"
},
"horizon_seconds": {
"description": "Selling window in SECONDS (14 days = 14*24*3600 = 1209600).",
"title": "Horizon Seconds",
"type": "number"
},
"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",
"properties": {
"static_price": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Static Price"
},
"static_expected_revenue": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Static Expected Revenue"
},
"static_simulated_revenue": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Static Simulated Revenue"
},
"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"
},
"sellthrough_rate": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Sellthrough Rate"
},
"rationale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rationale"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
}
},
"title": "ClearancePriceOut"
}🟢stable_match(proposers, receivers)
Match two groups by their rankings so no pair wants to swap — free, no account or key needed. A STABLE matching: USE THIS WHEN you're assigning two sides to each other by mutual preference — interns<->teams, students<->schools, mentors<->mentees — and want a result with no "blocking pair" (no person+slot that both prefer each other over what they got). Provide proposers and receivers, each a list of {"id": name, "preferences": [ids of the OTHER side, most-wanted first]}. Receivers may add "capacity" (default 1) to accept several. Returns {matching (name -> name), unmatched_proposers, blocking_pairs (empty list = provably stable), n_proposals}. NOTE: the result is PROPOSER-optimal, so put the side you want to favor in `proposers`. Example: stable_match( proposers=[{"id":"Ana","preferences":["Growth","Core"]}, {"id":"Ben","preferences":["Core","Growth"]}], receivers=[{"id":"Growth","preferences":["Ben","Ana"]}, {"id":"Core","preferences":["Ana","Ben"]}]) -> matching {"Ana":"Growth","Ben":"Core"}, blocking_pairs [].
输入模式
{
"type": "object",
"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",
"properties": {
"matching": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Matching"
},
"unmatched_proposers": {
"anyOf": [
{
"items": {},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Unmatched Proposers"
},
"blocking_pairs": {
"anyOf": [
{
"items": {},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Blocking Pairs"
},
"n_proposals": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "N Proposals"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
}
},
"title": "StableMatchOut"
}🟡memory_save(api_key, blob_b64, ttl_seconds)
Persistent memory for your agent across sessions — save now, load in any later session. You encrypt before saving; the store holds only ciphertext (blind custody) and signs a receipt over its hash — it cannot read your memory. Saving uses your prepaid wallet; a new key's 50¢ starter credit covers your first saves, and loading it back (memory_load) is free. `blob_b64` is YOUR ciphertext as base64 — encrypt BEFORE saving; keys never transit, contents are never logged, so a breach leaks only sealed boxes. Charged a thin flat fee ONLY on durable store (empty/oversize/unencodable is uncharged). ttl_seconds is clamped to [60s, 7d] and the effective expires_at is returned. The receipt's content_hash is over YOUR ciphertext, so you can prove what you stored without the store ever seeing plaintext.
输入模式
{
"type": "object",
"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",
"properties": {
"ok": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Ok"
},
"ticket": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Ticket"
},
"ticket_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Ticket Hash"
},
"size_bytes": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Size Bytes"
},
"expires_at": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Expires At"
},
"price_millicents": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Price Millicents"
},
"receipt": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Receipt"
},
"charged": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Charged"
},
"code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Code"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reason"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
}
},
"title": "MemorySaveOut"
}🟢memory_load(api_key, ticket)
Load a memory you saved in an earlier session — retrieval is free. Get back an encrypted blob you parked earlier (the blind locker) by its claim `ticket`. Returns {ok, blob_b64, size_bytes, expires_at} — the ciphertext you saved, which only YOU can decrypt. A wrong owner reads as a missing ticket; an expired TTL is `expired`; a lost at-rest key is `at_rest_key_unavailable`. Free (the save settled it).
输入模式
{
"type": "object",
"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",
"properties": {
"ok": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Ok"
},
"blob_b64": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Blob B64"
},
"size_bytes": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Size Bytes"
},
"expires_at": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Expires At"
},
"charged": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Charged"
},
"code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Code"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reason"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
}
},
"title": "MemoryLoadOut"
}🟢session_open(api_key, category, side, walk_away, target, ...)
Open a $2 receipted negotiation session: deterministic, replayable, every move signed. PAID ($2 once, from your credit balance) — the $2 covers EVERY move of this negotiation (up to 10 moves, 7 days), tuned to the category. A new key's 50¢ starter credit is a taste, not enough for a session — top up first. category: resale | supply | retail. side: buy | sell. walk_away = your true floor (sell) / ceiling (buy) — private, never crossed. Pass their_offers to get the first move back immediately with the session. Subsequent moves: session_advise with the session_id — no further charge.
输入模式
{
"type": "object",
"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"
},
"side": {
"description": "Which side you're on: 'buy' or 'sell'.",
"title": "Side",
"type": "string"
},
"walk_away": {
"description": "Your true reservation in dollars — floor (sell) / ceiling (buy); private, never crossed.",
"title": "Walk Away",
"type": "number"
},
"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"
},
"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"
}
},
"required": [
"api_key",
"category",
"side",
"walk_away",
"target"
],
"title": "nextmove_openArguments"
}输出模式
{
"type": "object",
"properties": {
"session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Session Id"
},
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Category"
},
"side": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Side"
},
"price_cents": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Price Cents"
},
"price_millicents": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Price Millicents"
},
"max_moves": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Max Moves"
},
"expires_at": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Expires At"
},
"funding": {
"default": null,
"title": "Funding"
},
"balance_after": {
"default": null,
"title": "Balance After"
},
"context_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Context Hash"
},
"receipt": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Receipt"
},
"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"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
},
"how_to_pay": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "How To Pay"
}
},
"title": "SessionOpenOut"
}🟡session_advise(api_key, session_id, their_offers, my_offers, rounds_left)
Your next move inside a receipted session (single-issue) — no additional charge (the $2 at session_open covered it). Pass the FULL offer history each time, oldest first. Returns move, exact price, ready-to-send message, and the receipt (why[], context_hash, deterministic compute block).
输入模式
{
"type": "object",
"properties": {
"api_key": {
"description": "The API key that opened the session.",
"title": "Api Key",
"type": "string"
},
"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"
},
"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"
}
},
"required": [
"api_key",
"session_id",
"their_offers"
],
"title": "nextmove_adviseArguments"
}输出模式
{
"type": "object",
"properties": {
"move": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Move"
},
"offer": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Offer"
},
"message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Message"
},
"why": {
"anyOf": [
{
"items": {},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Why"
},
"confidence_note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Confidence Note"
},
"context_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Context Hash"
},
"policy_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Policy Id"
},
"move_index": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Move Index"
},
"compute": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Compute"
},
"receipt": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Receipt"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
}
},
"title": "SessionAdviseOut"
}🔴session_bundle(api_key, session_id, issues, their_offers, my_priorities, ...)
Multi-issue logrolled advice inside a receipted session — no additional charge. The logrolling tier, the thing the free tool does NOT have. Trade the issues you care less about for the ones you value: issues = [{name, options, my_utility (per option), their_utility (your read of their direction)}]; their_offers = packages they've tabled, oldest first. Returns the recommended package, trade logic, inferred counterparty priorities, acceptance probability, and the receipt. Deterministic closed form — no rollout theater. The package is guaranteed to clear YOUR stated BATNA (enforced, not promised).
输入模式
{
"type": "object",
"properties": {
"api_key": {
"description": "The API key that opened the session.",
"title": "Api Key",
"type": "string"
},
"session_id": {
"description": "The session_id returned by session_open.",
"title": "Session Id",
"type": "string"
},
"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"
},
"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"
},
"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"
},
"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"
},
"their_batna_estimate": {
"default": 0.4,
"description": "Your estimate of their BATNA, [0,1] (default 0.40).",
"title": "Their Batna Estimate",
"type": "number"
},
"cooperation": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional cooperation dial in [0,1] biasing toward joint surplus.",
"title": "Cooperation"
}
},
"required": [
"api_key",
"session_id",
"issues"
],
"title": "nextmove_bundleArguments"
}输出模式
{
"type": "object",
"properties": {
"move": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Move"
},
"package": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Package"
},
"message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Message"
},
"why": {
"anyOf": [
{
"items": {},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Why"
},
"confidence_note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Confidence Note"
},
"context_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Context Hash"
},
"move_index": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Move Index"
},
"their_expected_utility": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Their Expected Utility"
},
"acceptance_probability": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Acceptance Probability"
},
"receipt": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Receipt"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
}
},
"title": "SessionBundleOut"
}🟢session_close(api_key, session_id)
Close a receipted session and get the signed summary receipt. Optional — sessions also expire on their own — but closing timestamps the outcome, which helps the machine learn real round-counts per category. Returns the `closed` flag AND a signed session-summary receipt (GAUNTLET #4) — moves count, total charged (one $2 open), and the per-move context_hashes — to hand your principal. An unknown session or key mismatch leaves `closed` false and returns an `error` instead of the receipt (indistinguishable, so a session id can't be probed).
输入模式
{
"type": "object",
"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",
"properties": {
"closed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Closed"
},
"receipt": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Receipt"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
}
},
"title": "SessionCloseOut"
}🟢store_catalog
See what's on the shelf — free, no key needed: prices, predicates, receipt scheme, and your balance. THE STORE: one counter, one prepaid wallet, many slots. One read covers the whole shelf — the commodity slots, the blind locker (agent memory), and the paid receipted-session SKU (folds in what nextmove_catalog used to report separately). Every commodity slot settles ON DELIVERY: the wallet is debited only when a machine-checkable predicate passes — a failed fetch is never charged, because here you cannot pay for nothing. Each receipt names the backend that served and its EXACT wholesale cost (passthrough, no per-call markup); the counter's cut is a published fee on wallet top-ups, not on the calls — 5% + a fixed 30¢ per transaction (the 30¢ is the card rail's own per-transaction toll, passed through). Every new key gets a one-time 50¢ starter credit — unconditional, no card — enough to taste the shelf before funding it. Don't see the capability you need? store_request logs it; unmet demand decides what gets stocked next. Returns the money unit (millicents, 1000 per cent), per-slot {tier, max_price_millicents, predicate_id, request_doc, serving-backend ids}, the anchor SKUs, the paid_session card, and the two pricing facts. Never returns key material.
输入模式
{
"type": "object",
"properties": {},
"title": "store_catalogArguments"
}输出模式
{
"type": "object",
"properties": {
"unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Unit"
},
"millicents_per_cent": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Millicents Per Cent"
},
"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"
},
"request_privacy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Request Privacy"
},
"keys": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Keys"
},
"starter_credit": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Starter Credit"
},
"admission": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Admission"
},
"slots": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Slots"
},
"paid_session": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Paid Session"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
}
},
"title": "StoreCatalogOut"
}🟢store_request(text, api_key, watch, request_id)
Ask for a capability we don't sell yet — free; filings are public and drive what we stock. Two reads in one tool (absorbs the old store_request_status / nextmove_request): pass `request_id` to RE-QUERY a filing's status instead of filing anew — returns {found, request_id, status, status_note, filed_at, door, text} (found: false on an unknown id). Without a request_id it FILES a new ask and returns {request_id, status, watch, check}: every filing is logged verbatim (size-capped, stored as data, never rendered raw) and gets an id you can come back to (GAUNTLET #5). Check any filing with GET /v1/store/request/{id}; the public count is GET /v1/store/requests. Unmet demand decides what gets stocked next — the shelf writes itself from what agents ask for and can't get. Pass watch=True WITH an api_key when filing to flag the ask for a heads-up on a status flip (poll store_my_requests to see it — poll-based, no push); an anonymous watch is ignored, and the chosen flag is echoed as `watch`.
输入模式
{
"type": "object",
"properties": {
"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"
},
"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"
},
"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"
},
"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"
}
},
"title": "store_requestArguments"
}输出模式
{
"type": "object",
"properties": {
"request_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Request Id"
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Status"
},
"watch": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Watch"
},
"check": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Check"
},
"found": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Found"
},
"status_note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Status Note"
},
"filed_at": {
"default": null,
"title": "Filed At"
},
"door": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Door"
},
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Text"
},
"same_ask_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Same Ask Count"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Error"
}
},
"title": "StoreRequestOut"
}社区
证据