{"openapi":"3.1.0","info":{"title":"modelmarket.dev — AIMarket Hub v3","description":"Lean federation hub for AI capability discovery and routing. Plugins extend functionality.","version":"3.16.0"},"paths":{"/metrics":{"get":{"summary":"Prometheus Metrics","operationId":"prometheus_metrics_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai-market/mcp":{"get":{"tags":["mcp"],"summary":"Mcp Info","description":"Info, or the spec's refusal — depending on what the caller asked for.\n\nA Streamable-HTTP client GETs this endpoint to open the server-initiated stream and\nexpects either an SSE body or 405. Answering 200 JSON to that request gives it a\nstream that yields nothing and ends, which reads as a dropped connection. Humans and\ncanaries curl the same URL with no Accept header, and for them the info document is\nthe useful answer, so the two are told apart by what they say they accept.","operationId":"mcp_info_ai_market_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["mcp"],"summary":"Mcp Rpc","operationId":"mcp_rpc_ai_market_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"delete":{"tags":["mcp"],"summary":"Mcp Delete","operationId":"mcp_delete_ai_market_mcp_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai-market/mcp/k/{path_key}":{"post":{"tags":["mcp"],"summary":"Mcp Rpc Keyed","operationId":"mcp_rpc_keyed_ai_market_mcp_k__path_key__post","parameters":[{"name":"path_key","in":"path","required":true,"schema":{"type":"string","title":"Path Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["mcp"],"summary":"Mcp Info Keyed","operationId":"mcp_info_keyed_ai_market_mcp_k__path_key__get","parameters":[{"name":"path_key","in":"path","required":true,"schema":{"type":"string","title":"Path Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["mcp"],"summary":"Mcp Delete Keyed","operationId":"mcp_delete_keyed_ai_market_mcp_k__path_key__delete","parameters":[{"name":"path_key","in":"path","required":true,"schema":{"type":"string","title":"Path Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mcp":{"get":{"tags":["mcp"],"summary":"Mcp Info","description":"Info, or the spec's refusal — depending on what the caller asked for.\n\nA Streamable-HTTP client GETs this endpoint to open the server-initiated stream and\nexpects either an SSE body or 405. Answering 200 JSON to that request gives it a\nstream that yields nothing and ends, which reads as a dropped connection. Humans and\ncanaries curl the same URL with no Accept header, and for them the info document is\nthe useful answer, so the two are told apart by what they say they accept.","operationId":"mcp_info_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["mcp"],"summary":"Mcp Rpc","operationId":"mcp_rpc_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"delete":{"tags":["mcp"],"summary":"Mcp Delete","operationId":"mcp_delete_mcp_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/mcp/k/{path_key}":{"post":{"tags":["mcp"],"summary":"Mcp Rpc Keyed","operationId":"mcp_rpc_keyed_mcp_k__path_key__post","parameters":[{"name":"path_key","in":"path","required":true,"schema":{"type":"string","title":"Path Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["mcp"],"summary":"Mcp Info Keyed","operationId":"mcp_info_keyed_mcp_k__path_key__get","parameters":[{"name":"path_key","in":"path","required":true,"schema":{"type":"string","title":"Path Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["mcp"],"summary":"Mcp Delete Keyed","operationId":"mcp_delete_keyed_mcp_k__path_key__delete","parameters":[{"name":"path_key","in":"path","required":true,"schema":{"type":"string","title":"Path Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/.well-known/agent-card.json":{"get":{"tags":["a2a"],"summary":"Agent Card","operationId":"agent_card__well_known_agent_card_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"tags":["a2a"],"summary":"Agent Card","operationId":"agent_card__well_known_agent_card_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/a2a":{"post":{"tags":["a2a"],"summary":"A2A Jsonrpc","description":"Count every call by method and outcome, then answer it (see metrics.a2a_requests_total).\n\nA task answer is counted by the state it reached (``completed``, ``input_required``…),\nso the counter says not only that A2A clients call, but whether they end up paying.","operationId":"a2a_jsonrpc_a2a_post","parameters":[{"name":"A2A-Version","in":"header","required":false,"schema":{"type":"string","default":"","title":"A2A-Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/discovery/resources":{"get":{"tags":["wellknown"],"summary":"Bazaar Discovery","description":"A Bazaar-compatible discovery index of what this hub sells.\n\nThe x402 Bazaar is not a registry anyone registers with — it is a per-facilitator\nindex, and its specification says in as many words that any facilitator may run its\nown. Serving this envelope means every official x402 SDK can enumerate this hub's\ncatalogue with no code changes: point a facilitator client at this host and call\n`listResources`.\n\nThat matters more than one endpoint usually does. Each existing Bazaar catalogues\nonly what its own facilitator settles, and they do not federate — Coinbase's index\nand PayAI's share no entries at all. An index that can be crawled by others is the\none thing that turns a set of disjoint catalogues back into a market, which is what\nthis protocol is for.\n\nPublic and unauthenticated by design. SDK clients attach auth headers on their way\nin; a public index ignores them rather than rejecting the request.","operationId":"bazaar_discovery_discovery_resources_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"http","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/schemas/{filename}":{"get":{"tags":["wellknown"],"summary":"Protocol Schema","operationId":"protocol_schema_schemas__filename__get","parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/schemas":{"get":{"tags":["wellknown"],"summary":"Protocol Schema Index","operationId":"protocol_schema_index_schemas_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/ai-market.json":{"get":{"tags":["wellknown"],"summary":"Well Known","operationId":"well_known__well_known_ai_market_json_get","parameters":[{"name":"x-aimarket-crawler","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Aimarket-Crawler"}},{"name":"user-agent","in":"header","required":false,"schema":{"type":"string","default":"","title":"User-Agent"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"tags":["wellknown"],"summary":"Well Known","operationId":"well_known__well_known_ai_market_json_get","parameters":[{"name":"x-aimarket-crawler","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Aimarket-Crawler"}},{"name":"user-agent","in":"header","required":false,"schema":{"type":"string","default":"","title":"User-Agent"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/.well-known/mcp/server-card.json":{"get":{"tags":["wellknown"],"summary":"Mcp Server Card","operationId":"mcp_server_card__well_known_mcp_server_card_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"tags":["wellknown"],"summary":"Mcp Server Card","operationId":"mcp_server_card__well_known_mcp_server_card_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/llms.txt":{"get":{"tags":["wellknown"],"summary":"Mcp Llms Txt","operationId":"mcp_llms_txt_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"tags":["wellknown"],"summary":"Mcp Llms Txt","operationId":"mcp_llms_txt_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai-market/v2/manifest":{"get":{"tags":["hub-v2"],"summary":"V2 Manifest","operationId":"v2_manifest_ai_market_v2_manifest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai-market/v2/prices":{"get":{"tags":["hub-v2"],"summary":"V2 Prices","description":"Compact, signed price list for every capability — so an agent can learn\n'what costs what' in one call without a full manifest/search.\n\nFulfillable rows only, the same rule the manifest and /search apply. This list\nwas the one storefront that did not: on 2026-08-25 it advertised 97 rows against\nthe manifest's 85, and the twelve extras were exactly the unfulfillable local\ndemos — headed by `audit.perf@v1` at $1.50, the most expensive item on the shelf.\nAn agent that shops by price sorts descending, so the price list was steering\nbuyers at precisely the capabilities the hub cannot run.","operationId":"v2_prices_ai_market_v2_prices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai-market/v2/search":{"get":{"tags":["hub-v2"],"summary":"Search","operationId":"search_ai_market_v2_search_get","parameters":[{"name":"intent","in":"query","required":false,"schema":{"type":"string","default":"","title":"Intent"}},{"name":"budget","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Budget"}},{"name":"max_latency_ms","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Latency Ms"}},{"name":"min_trust","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Trust"}},{"name":"hub","in":"query","required":false,"schema":{"type":"string","default":"any","title":"Hub"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"include_demo","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Demo"}},{"name":"include_stale","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Stale"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/supply/policy":{"get":{"tags":["hub-v2"],"summary":"Supply Policy","description":"Read current admission requirements, optionally for the caller's own account.","operationId":"supply_policy_ai_market_v2_supply_policy_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/supply/stake":{"post":{"tags":["hub-v2"],"summary":"Supply Stake","description":"Deposit stake (USD bookkeeping) to unlock community publish.\n\nAuth is PER-SUBJECT (_require_stake_subject): the caller must present the stake\nsubject's own credential — from either credential namespace, because the stake\nledger is one account space shared by publishers and bonded agents — or the\noperator token. Under the shared publish token this endpoint could not tell one\npublisher from another, so any token holder could credit stake to an arbitrary\n``publisher_id`` — inflating a colluding publisher's trust score and stake gate.\nSee the gate's docstring for exactly what operators must configure.\n\nStake credit raises the target's trust score and unlocks the stake gate, so the\nnumber must be backed by a real deposit rather than by the caller's word: in\nproduction we require a ``tx_hash`` for EVERY positive amount here\n(SupplySecurity.stake then verifies it on-chain regardless of size, closing the\nold sub-minimum drip-feed bypass) AND a ``payer_signature`` proving control of\nthe wallet that paid it — every deposit lands in the same settlement wallet, so\nrecipient+amount alone let a publisher claim a stranger's inbound transfer as its\nown collateral. The refusal carries the exact challenge text to sign.\n\nThe amount is also range-checked before it reaches the ledger. ``float()`` alone\naccepted ``\"inf\"`` / a bare ``Infinity`` literal, and ``stake()``'s only size\nguard is ``amount_usd <= 0`` — which infinity passes. The credit was written and\nthe hub trust-anchor edge updated BEFORE the 500 that non-finite JSON produced,\nso a dev/relaxed hub ended up with a publisher holding infinite stake.","operationId":"supply_stake_ai_market_v2_supply_stake_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/supply/register":{"post":{"tags":["hub-v2"],"summary":"Supply Register","description":"Register a community capability with a direct invoke URL.\n\nPER-SUBJECT gated (_require_subject_credential, publisher namespace). This route\nmoves no money directly, which is why it kept the shared publish token for one\npass too long — but the manifest NAMES the publisher it registers as, and every\nholder of the shared token could name someone else. Registering as a rival:\n  * stamps the victim's ``publisher_id`` on the capability row and reads the\n    victim's stake balance as that capability's collateral, so a later\n    failure-driven slash for it burns the VICTIM'S money;\n  * spends the victim's publish-rate budget (5/hour), locking them out of their\n    own publish flow;\n  * attaches an attacker-controlled ``invoke_url`` to the victim's identity and\n    trust score.\nSo the caller must authenticate as the publisher it claims to be. A publisher\nacting as ITSELF is unaffected: it presents its own credential from\nAIMARKET_PUBLISHER_TOKENS (the same one /supply/stake takes) and the documented\nstake → register flow works end to end. Operators who provision publishers\ncentrally can keep using AIMARKET_ADMIN_TOKEN for any publisher_id.","operationId":"supply_register_ai_market_v2_supply_register_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/self-bond/register":{"post":{"tags":["hub-v2"],"summary":"Self Bond Register","description":"Register a staked consumer cost/conduct bond (ceiling + client commitment).\n\nPER-SUBJECT gated in the AGENT namespace (AIMARKET_AGENT_TOKENS): the agent's own\ncredential, or the operator token. It used to authenticate agent ids against the\nPUBLISHER registry, so one configured publisher entry made that registry\nauthoritative over agent identities — an agent that was not a publisher was locked\nout, and an agent id colliding with a publisher id was authorised by an unrelated\nnamespace. Registering a bond encumbers the named agent's already-staked\ncollateral and, worse, SETS THE CEILING that /self-bond/slash later measures\nbreaches against — under the shared publish token any holder could register a\nhair-thin ceiling on a rival agent and have the operator slash it for ordinary\nspending. Setting another party's slashing threshold is stake-state mutation, so\nit gets the same gate as /supply/stake.\n\nBoth amounts are finiteness-checked here rather than in the callee: the callee's\nguards are ``bond_usd <= 0`` / ``ceiling_usd < 0``, and infinity passes both. An\ninfinite ceiling can never be overspent, so it would durably neuter the bond it\npretends to register.","operationId":"self_bond_register_ai_market_v2_self_bond_register_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/self-bond/slash":{"post":{"tags":["hub-v2"],"summary":"Self Bond Slash","description":"Slash an agent's self-bond on a declared-ceiling-vs-observed-spend breach.\n\nADMIN-only, and grounded in hub-recorded settlement. This endpoint destroys\nANOTHER party's staked collateral, so the shared publish token — held by every\npublisher on the hub — was the wrong gate: any publisher could burn a rival's\nbond (and, via the federated slash log, its reputation across the mesh) up to\nthe spend the ledger happened to have recorded. Moving stake belongs with the\noperator token, like every other slash/settlement route in this file.\n\nThe claimed overspend is additionally capped at the spend the hub ledger\nactually debited for the bonded wallet; if the hub holds no settlement record\nfor it, we refuse rather than slash on an unverified number.","operationId":"self_bond_slash_ai_market_v2_self_bond_slash_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/self-bond/{agent_id}":{"get":{"tags":["hub-v2"],"summary":"Self Bond Get","operationId":"self_bond_get_ai_market_v2_self_bond__agent_id__get","parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/sandbox/quota":{"get":{"tags":["hub-v2"],"summary":"Sandbox Quota Endpoint","description":"Remaining free widget trials for a visitor id (embed localStorage).","operationId":"sandbox_quota_endpoint_ai_market_v2_sandbox_quota_get","parameters":[{"name":"visitor_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Visitor Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/verification/{nonce}":{"get":{"tags":["hub-v2"],"summary":"Verification Lookup","description":"Pay-on-Verified verdict lookup: the async settlement's polling surface.\n\nReturns the (possibly still pending) verification envelope, the receipt\nwith the envelope folded in, and — for refunded verdicts — the signed\nverification_rejection receipt.","operationId":"verification_lookup_ai_market_v2_verification__nonce__get","parameters":[{"name":"nonce","in":"path","required":true,"schema":{"type":"string","title":"Nonce"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/verification/appeals/stats":{"get":{"tags":["hub-v2"],"summary":"Verification Appeal Stats","description":"How often the appeal court agreed with the first instance — aggregate only.\n\nThe research signal for calibrating the first-instance verifier. Two path segments,\nso it never collides with GET /verification/{nonce}.","operationId":"verification_appeal_stats_ai_market_v2_verification_appeals_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai-market/v2/verification/{nonce}/appeal":{"post":{"tags":["hub-v2"],"summary":"Verification Appeal","description":"Appeal a provisional Pay-on-Verified verdict to the second verifier.\n\nOnly the party the verdict went against, only inside the window, and only with a\nbond: the buyer appeals a pass with the channel secret (bond held on that channel),\nthe seller appeals a fail with its publisher account's X-API-Key (bond held on its\nhub credits). 202 with the filed appeal; the outcome lands on\nGET /verification/{nonce}. See docs/pay-on-verified.md \"Appeals\".","operationId":"verification_appeal_ai_market_v2_verification__nonce__appeal_post","parameters":[{"name":"nonce","in":"path","required":true,"schema":{"type":"string","title":"Nonce"}},{"name":"X-Payment-Channel-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Payment-Channel-Secret"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/AppealRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/receipts/verify":{"post":{"tags":["hub-v2"],"summary":"Receipt Verify","description":"Verify one receipt against this Hub's live Ed25519 + ML-DSA-65 keys.\n\nThis is deliberately a *self* verifier: the public key is never accepted from\nthe request, so a caller cannot make an arbitrary self-signed object appear\ntrusted. Browser clients still verify Ed25519 locally; this endpoint evaluates\nML-DSA-65 until WebCrypto exposes a post-quantum primitive.","operationId":"receipt_verify_ai_market_v2_receipts_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/lottery/work-seat-entitlement":{"post":{"tags":["hub-v2"],"summary":"Lottery Work Seat Entitlement","description":"Issue a short-lived, Hub-signed lottery entitlement for this agent.\n\nEvery federated Hub uses its own agent credential registry and signing key.\nThe lottery relayer trusts only this Hub or an active peer key pinned by its\nfederation registry; a self-selected key is never accepted.","operationId":"lottery_work_seat_entitlement_ai_market_v2_lottery_work_seat_entitlement_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LotteryEntitlementRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/mandates":{"post":{"tags":["hub-v2"],"summary":"Register Mandate","description":"Register a mandate (§3.5). The document authenticates itself; the hub only\nrefuses one whose root nobody on this hub has agreed to fund.","operationId":"register_mandate_ai_market_v2_mandates_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai-market/v2/mandates/owners":{"get":{"tags":["hub-v2"],"summary":"List Mandate Owners","operationId":"list_mandate_owners_ai_market_v2_mandates_owners_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["hub-v2"],"summary":"Link Mandate Owner","description":"Link an owner DID to the credit account that pays for its mandates (§4).\n\nThe first owner needs the account's API key and the DID's own signature. Every later\nchange also needs an existing owner's signature (`authorization` in the body) — or the\noperator's admin token, the recovery path for an owner who has lost every key.","operationId":"link_mandate_owner_ai_market_v2_mandates_owners_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/mandates/approvals":{"get":{"tags":["hub-v2"],"summary":"List Mandate Approvals","description":"The funding account's approval requests, newest first — what its owner has to\nanswer (``?status=pending``) and what was answered.","operationId":"list_mandate_approvals_ai_market_v2_mandates_approvals_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"","title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/mandates/approvals/{approval_id}":{"get":{"tags":["hub-v2"],"summary":"Mandate Approval","description":"One request. Its id is an unguessable capability (like a job id): the agent hands\nit to its owner, and either can read where it stands.","operationId":"mandate_approval_ai_market_v2_mandates_approvals__approval_id__get","parameters":[{"name":"approval_id","in":"path","required":true,"schema":{"type":"string","title":"Approval Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["hub-v2"],"summary":"Decide Mandate Approval","description":"An owner's answer: ``{decision, by, t, n, s}`` signed by an owner DID of the funding\naccount, or ``{\"decision\": \"deny\"}`` with the account's API key.","operationId":"decide_mandate_approval_ai_market_v2_mandates_approvals__approval_id__post","parameters":[{"name":"approval_id","in":"path","required":true,"schema":{"type":"string","title":"Approval Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/mandates/notify":{"get":{"tags":["hub-v2"],"summary":"List Notify Channels","operationId":"list_notify_channels_ai_market_v2_mandates_notify_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["hub-v2"],"summary":"Add Notify Channel","description":"Add a channel: ``{\"kind\": \"telegram\", \"chat_id\": …}``, ``{\"kind\": \"slack\", \"webhook_url\": …}``,\n``{\"kind\": \"jira\", \"base_url\", \"email\", \"api_token\", \"project_key\"}`` or\n``{\"kind\": \"webhook\", \"url\", \"secret\"}``.","operationId":"add_notify_channel_ai_market_v2_mandates_notify_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/mandates/notify/{channel_id}":{"delete":{"tags":["hub-v2"],"summary":"Delete Notify Channel","operationId":"delete_notify_channel_ai_market_v2_mandates_notify__channel_id__delete","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/mandates/notify/{channel_id}/test":{"post":{"tags":["hub-v2"],"summary":"Test Notify Channel","description":"Send a test message now and answer what the channel said — set up and see.","operationId":"test_notify_channel_ai_market_v2_mandates_notify__channel_id__test_post","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/mandates/{digest}":{"get":{"tags":["hub-v2"],"summary":"Mandate Status","description":"Validity and chain for anyone holding the digest; usage only for the chain's keys\nor the funding account (§3.5).","operationId":"mandate_status_ai_market_v2_mandates__digest__get","parameters":[{"name":"digest","in":"path","required":true,"schema":{"type":"string","title":"Digest"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-AIMarket-Mandate-Proof","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Aimarket-Mandate-Proof"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/mandates/owners/unlink":{"post":{"tags":["hub-v2"],"summary":"Unlink Mandate Owner","description":"Unlink an owner (§4): the account's API key AND an owner's signature (or the admin\ntoken). The key alone would let whoever holds a leaked key delete the row that carries\nrequire_mandate and pay with the bare key again.","operationId":"unlink_mandate_owner_ai_market_v2_mandates_owners_unlink_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/mandates/revoke":{"post":{"tags":["hub-v2"],"summary":"Revoke Mandate","description":"Revoke a mandate and everything below it (§5.5): signed by an issuer in its chain,\nor by the funding account's API key as the owner's kill switch.","operationId":"revoke_mandate_ai_market_v2_mandates_revoke_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/jobs/{job_id}":{"get":{"tags":["hub-v2"],"summary":"Job Tree","description":"A subcontracting job's tree (§6.4). The id is an unguessable capability.","operationId":"job_tree_ai_market_v2_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/invoke":{"post":{"tags":["hub-v2"],"summary":"Invoke","description":"The invoke route: mandates and subcontracting around the payment path.\n\n`invoke_funding.prepare` decides who pays and under whose limits BEFORE any money is\nreserved; `_invoke_core` runs the payment path unchanged except that it takes the\nfunding account and ledger it is handed; `invoke_funding.finish` settles what\nprepare opened — on every exit, including an exception — and completes the answer.","operationId":"invoke_ai_market_v2_invoke_post","parameters":[{"name":"X-Payment-Channel","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Payment-Channel"}},{"name":"X-Payment-Channel-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Payment-Channel-Secret"}},{"name":"X-AIMarket-Route-Ok","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Aimarket-Route-Ok"}},{"name":"X-AIMarket-Sandbox-Visitor","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Aimarket-Sandbox-Visitor"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-PAYMENT","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Payment"}},{"name":"PAYMENT","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment-Signature"}},{"name":"X-Payment-Nonce","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Payment-Nonce"}},{"name":"X-Payment-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Payment-Secret"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvokeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/federation/announce":{"post":{"tags":["hub-v2"],"summary":"Federation Announce","description":"Register a peer.\n\nTwo doors, and they lead to different places. With an admin token the\noperator adds a peer directly, as before. Without one, anyone may announce\na public address — and lands in quarantine: ``status=pending``,\n``trusted=False``. A sandbox assay then runs in the background; a pass\nauto-admits. Open federation changes who may knock, never who is trusted\non the knock itself.","operationId":"federation_announce_ai_market_v2_federation_announce_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnnounceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/federation/peers":{"get":{"tags":["hub-v2"],"summary":"List Peers","operationId":"list_peers_ai_market_v2_federation_peers_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["hub-v2"],"summary":"Delete Peer","description":"Reject a peer outright: remove the row and its preview catalogue.\n\nThe pending queue needs an exit as well as an entrance. Without this an operator\ncould approve waiting peers but never dismiss them, so an unauthenticated party\ncould fill the queue to its cap and hold it shut against everyone else.","operationId":"delete_peer_ai_market_v2_federation_peers_delete","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/federation/preview":{"get":{"tags":["hub-v2"],"summary":"Federation Preview","description":"What a PENDING peer says it offers — quarantined, never live.\n\nThese rows come from ``peer_preview_capabilities``, a table that search,\nrouting, invoke and the published manifest do not read. Showing them lets an\noperator judge a stranger by its catalogue instead of by its URL, without\nthat catalogue becoming reachable. Every row is returned with\n``quarantined: true``; a client that renders them next to real capabilities\nwithout saying so is misrepresenting this hub.","operationId":"federation_preview_ai_market_v2_federation_preview_get","parameters":[{"name":"url","in":"query","required":false,"schema":{"type":"string","default":"","title":"Url"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/federation/assay":{"get":{"tags":["hub-v2"],"summary":"Federation Assay Get","description":"Last post-quarantine assay dossier — public, like preview.\n\nA ``pass`` with auto-admit on (default) sets ``trusted`` and the next\ncrawl indexes. Names and descriptions are never scored.","operationId":"federation_assay_get_ai_market_v2_federation_assay_get","parameters":[{"name":"url","in":"query","required":false,"schema":{"type":"string","default":"","title":"Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["hub-v2"],"summary":"Federation Assay Run","description":"Run the sandbox assay on a pending (or any public) hub URL.\n\nAdmin-only: it makes outbound fetches. A pass auto-admits when\n``AIMARKET_FEDERATION_AUTO_ADMIT`` is on (default).","operationId":"federation_assay_run_ai_market_v2_federation_assay_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/federation/inbound":{"get":{"tags":["hub-v2"],"summary":"Federation Inbound","description":"Hubs that have crawled THIS hub, by their own self-declared URL.\n\nAdmin-only: it is a list of who reads us, which is the operator's business\nand nobody else's. No client IPs are stored — only the hub URL a crawler\nvolunteers in ``X-AIMarket-Crawler`` and its User-Agent.","operationId":"federation_inbound_ai_market_v2_federation_inbound_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/federation/crawl":{"post":{"tags":["hub-v2"],"summary":"Trigger Crawl","operationId":"trigger_crawl_ai_market_v2_federation_crawl_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/federation/peers/approve":{"post":{"tags":["hub-v2"],"summary":"Approve Peer","description":"Operator approval (anti-TOFU): mark a discovered peer trusted so its manifests get\nindexed on the next crawl. Admin-only. Body: {url, trusted?: bool (default true)}.","operationId":"approve_peer_ai_market_v2_federation_peers_approve_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/federation/peers/repin":{"post":{"tags":["hub-v2"],"summary":"Repin Peer","description":"Operator re-pin after a legitimate peer key rotation — classical, PQ, or both.\n\nFail-closed crawler rejects ``public key changed`` forever unless an admin\nupdates the pin here. Seed pins (``AIMARKET_SEED_PUBKEYS``) only apply on\nfirst contact — they do not rotate an existing DB pin.\n\nBody: ``{url, public_key?, pq_public_key?, trusted?: true,\nprevious_public_key?: str, previous_pq_public_key?: str, crawl?: true}``.\nAt least one of ``public_key`` / ``pq_public_key`` is required — a peer can rotate its\nML-DSA key alone, and requiring the classical one for that would invite an operator to\npaste the current value back in, which is a chance to paste the wrong one. The\n``previous_*`` fields are optimistic concurrency (must match the current pin when set —\nkeep the old value for rollback).","operationId":"repin_peer_ai_market_v2_federation_peers_repin_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/reputation/slashes":{"get":{"tags":["hub-v2"],"summary":"Get Slashes","description":"This hub's signed slash attestations — peers pull and verify these.","operationId":"get_slashes_ai_market_v2_reputation_slashes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai-market/v2/reputation/slashes/by-provider/{provider}":{"get":{"tags":["hub-v2"],"summary":"Get Slash Signal","description":"Union view of slashes against a provider across local + ingested peer logs.","operationId":"get_slash_signal_ai_market_v2_reputation_slashes_by_provider__provider__get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/reputation/{hub_url}":{"get":{"tags":["hub-v2"],"summary":"Get Reputation","operationId":"get_reputation_ai_market_v2_reputation__hub_url__get","parameters":[{"name":"hub_url","in":"path","required":true,"schema":{"type":"string","title":"Hub Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/reputation/events":{"post":{"tags":["hub-v2"],"summary":"Submit Reputation Events","description":"Ingest signed reputation events from federation peers.\n\nA peer's key proves WHO said it; three more checks decide whether it counts:\nthe event's timestamp must be recent (the canonical binds it, so this cannot be\nforged around), the exact signed bytes must not have been recorded before (one\nvalid event used to be replayable without limit — 100 per request — and trust.py\ncomputes success rate and estimated bond from the last 10 events, so a peer\ncould set a provider's score by volume), and the caller is rate-limited.","operationId":"submit_reputation_events_ai_market_v2_reputation_events_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReputationEventsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/reputation/deliveries":{"post":{"tags":["hub-v2"],"summary":"Submit Delivery","description":"A buyer's evidence that a seller delivered (or refunded): the seller's signed receipt\nplus the transaction on Base. Counted once per transaction; see deliveries.py.","operationId":"submit_delivery_ai_market_v2_reputation_deliveries_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/reputation/disputes":{"post":{"tags":["hub-v2"],"summary":"Submit Dispute","description":"File a dispute: consumer-signed (portable PoM) or hub-admin (legacy operator path).\n\nThe consumer-signed branch is UNAUTHENTICATED by design (that is what makes the\nproof portable), so it carries its own limits: a per-address rate cap, a bound on\nthe unsigned ``evidence`` blob, and a duplicate-id refusal in the oracle. Without\nthem the process-lifetime dispute list was remote-controlled memory.","operationId":"submit_dispute_ai_market_v2_reputation_disputes_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/reputation/disputes/{dispute_id}/resolve":{"post":{"tags":["hub-v2"],"summary":"Resolve Dispute","description":"Resolve a dispute (slash bond). Requires m-of-n signatures when quorum is configured.","operationId":"resolve_dispute_ai_market_v2_reputation_disputes__dispute_id__resolve_post","parameters":[{"name":"dispute_id","in":"path","required":true,"schema":{"type":"string","title":"Dispute Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/reputation/oracle/quorum":{"get":{"tags":["hub-v2"],"summary":"Oracle Quorum Status","description":"Public quorum config (keys only, no secrets).","operationId":"oracle_quorum_status_ai_market_v2_reputation_oracle_quorum_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai-market/v2/health":{"get":{"tags":["hub-v2"],"summary":"Hub Health","operationId":"hub_health_ai_market_v2_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai-market/v2/accounts":{"post":{"tags":["hub-v2"],"summary":"Create Credit Account","operationId":"create_credit_account_ai_market_v2_accounts_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/account":{"get":{"tags":["hub-v2"],"summary":"Read Credit Account","operationId":"read_credit_account_ai_market_v2_account_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/account/topup":{"post":{"tags":["hub-v2"],"summary":"Topup Credit Account","description":"Buy credit with USDC (aimarket_hub/topup.py, docs/credits-topup.md).\n\nWithout a payment: a 402 whose x402 terms pay the operator ``amount_usd`` USDC by an\nEIP-3009 authorization over a nonce bound to THIS account. With ``X-Payment: <tx hash>``\n(or an x402 payload carrying it) and ``X-Payment-Nonce``: the same redemption as\n``POST /topups/{nonce}``.","operationId":"topup_credit_account_ai_market_v2_account_topup_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Payment","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Payment"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment-Signature"}},{"name":"X-Payment-Nonce","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Payment-Nonce"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/topups/{nonce}":{"post":{"tags":["hub-v2"],"summary":"Redeem Topup","description":"Credit a mined top-up payment. Open to anyone holding the transaction hash: the\naccount was bound when the quote was minted, so presenting someone else's payment only\ncredits THEIR account, once. The balance is shown only to the account's own key.","operationId":"redeem_topup_ai_market_v2_topups__nonce__post","parameters":[{"name":"nonce","in":"path","required":true,"schema":{"type":"string","title":"Nonce"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Payment","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Payment"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["hub-v2"],"summary":"Read Topup","description":"Where a top-up stands. The account it funded is shown only to that account's key.","operationId":"read_topup_ai_market_v2_topups__nonce__get","parameters":[{"name":"nonce","in":"path","required":true,"schema":{"type":"string","title":"Nonce"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/security/posture":{"get":{"tags":["hub-v2"],"summary":"Security Posture View","description":"Aggregate security signals for the fleet alerter, over the last hour: signups the\nper-address limit refused, requests carrying an X-API-Key no account owns, and the\nshare of the daily signup-grant budget spent. Counts only — nothing names anyone.","operationId":"security_posture_view_ai_market_v2_security_posture_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai-market/v2/account/rotate-key":{"post":{"tags":["hub-v2"],"summary":"Rotate Api Key","description":"Replace this account's key; the old one stops working immediately.\n\nAuthenticated by the key itself, so a holder whose key leaked (a URL in a log, a\nshared notebook) can end it without the operator. The new key is shown once.","operationId":"rotate_api_key_ai_market_v2_account_rotate_key_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/account/payer-wallets":{"post":{"tags":["hub-v2"],"summary":"Link Payer Wallet","description":"Say that a wallet's plain transfers into the top-up wallet are this account's top-ups.\n\nThe wallet proves it is yours by signing ``deposit_watch.link_message`` (EIP-191). One\nwallet belongs to one account. Transfers it already sent are credited at once.","operationId":"link_payer_wallet_ai_market_v2_account_payer_wallets_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["hub-v2"],"summary":"List Payer Wallets","operationId":"list_payer_wallets_ai_market_v2_account_payer_wallets_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/account/payer-wallets/unlink":{"post":{"tags":["hub-v2"],"summary":"Unlink Payer Wallet","operationId":"unlink_payer_wallet_ai_market_v2_account_payer_wallets_unlink_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/accounts/{account_id}/payer-wallets":{"post":{"tags":["hub-v2"],"summary":"Operator Link Payer Wallet","description":"Link a wallet to an account by the OPERATOR's word — e.g. a company that pays from a wallet\nwhose key it will not bring to a signing tool. Transfers it already sent are credited at once.","operationId":"operator_link_payer_wallet_ai_market_v2_accounts__account_id__payer_wallets_post","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/admin/deposits":{"get":{"tags":["hub-v2"],"summary":"Admin Deposits","description":"Money in the top-up wallet that no account claims yet — the operator's to-do.","operationId":"admin_deposits_ai_market_v2_admin_deposits_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/admin/deposits/{tx_hash}/resolve":{"post":{"tags":["hub-v2"],"summary":"Admin Resolve Deposit","description":"The operator settled an open deposit out of band (refunded it, credited it some other way):\nit stops counting as unattributed. The note is kept on the row.","operationId":"admin_resolve_deposit_ai_market_v2_admin_deposits__tx_hash__resolve_post","parameters":[{"name":"tx_hash","in":"path","required":true,"schema":{"type":"string","title":"Tx Hash"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/account/topups":{"get":{"tags":["hub-v2"],"summary":"List Topups","description":"The caller's own top-ups, newest first: USDC quotes, and card checkouts beside them.","operationId":"list_topups_ai_market_v2_account_topups_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/account/topup/card":{"post":{"tags":["hub-v2"],"summary":"Card Topup Open","description":"Open a Stripe Checkout for ``{\"amount_usd\": N}`` of credit on the key's account and\nanswer its ``checkout_url``. A person pays there; the credit lands when Stripe confirms.","operationId":"card_topup_open_ai_market_v2_account_topup_card_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/card-topups/{topup_id}":{"get":{"tags":["hub-v2"],"summary":"Card Topup Read","description":"Where a card top-up stands — also the page Stripe sends the buyer back to. The id\nis unguessable; the account it funds is shown only to that account's key.","operationId":"card_topup_read_ai_market_v2_card_topups__topup_id__get","parameters":[{"name":"topup_id","in":"path","required":true,"schema":{"type":"string","title":"Topup Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/card-topups/{topup_id}/refresh":{"post":{"tags":["hub-v2"],"summary":"Card Topup Refresh","description":"Ask Stripe where this checkout stands and credit it if paid: the recovery path for\na webhook that never arrived. Open to whoever holds the id — the credit can only go to\nthe account bound when the checkout was opened.","operationId":"card_topup_refresh_ai_market_v2_card_topups__topup_id__refresh_post","parameters":[{"name":"topup_id","in":"path","required":true,"schema":{"type":"string","title":"Topup Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/stripe/webhook":{"post":{"tags":["hub-v2"],"summary":"Stripe Webhook","description":"Stripe's events. Verified by Stripe-Signature before anything is read; the figures\nthat matter are checked against the checkout the hub opened (card_topup.settle_session).","operationId":"stripe_webhook_ai_market_v2_stripe_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai-market/v2/account/ledger":{"get":{"tags":["hub-v2"],"summary":"Read Credit Ledger","description":"Every movement on the caller's own account.\n\nA prepaid balance is the operator holding the buyer's money; the buyer gets to see\nwhat happened to it without asking.","operationId":"read_credit_ledger_ai_market_v2_account_ledger_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/accounts/{account_id}/credit":{"post":{"tags":["hub-v2"],"summary":"Credit Account","description":"Top up an account — OPERATOR ONLY.\n\nDeliberately the only way money enters the rail. Whatever the operator uses to get\npaid (a checkout, an invoice, a stablecoin transfer they watched land) calls this\nonce it has the money; the hub does not pretend to have collected anything itself.","operationId":"credit_account_ai_market_v2_accounts__account_id__credit_post","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/accounts/{account_id}/collateral/return":{"post":{"tags":["hub-v2"],"summary":"Return Account Collateral","description":"Give a publisher their posted stake back — OPERATOR ONLY.\n\nUntil this existed, collateral had no way out of the hub at all. `POST\n/supply/stake` moves a publisher's money from `balance_mc` into `collateral_mc`,\nand the ONLY caller of `return_collateral` was the compensation on a stake the\nledger refused. There is no unstake anywhere in the stack — `supply_security` and\n`database` know `supply_stake_add`, `_get` and `_slash`, and nothing else — so a\npublisher who staked $25 could be slashed out of it or hold it forever, and those\nwere the only two endings.\n\nDeliberately NOT self-service. When a stake may be released is policy — a\ncooldown, whether live listings must be withdrawn first, whether a disputed\npublisher may exit — and inventing that policy inside a bug fix would be worse\nthan the hole it closes. This is the same authority that puts money onto the rail\n(`/accounts/{id}/credit`) being able to take it back off collateral, so the\noperator can make a publisher whole today; a self-service unstake is a separate,\ndeliberate decision.\n\nThe ledger's own `supply_stakes` row is NOT touched here: this returns the money,\nit does not retire the stake's standing. Pass `note` to say which it was.","operationId":"return_account_collateral_ai_market_v2_accounts__account_id__collateral_return_post","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/accounts/{account_id}/status":{"post":{"tags":["hub-v2"],"summary":"Set Credit Account Status","operationId":"set_credit_account_status_ai_market_v2_accounts__account_id__status_post","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/stats/live":{"get":{"tags":["hub-v2"],"summary":"Live Stats","operationId":"live_stats_ai_market_v2_stats_live_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/supply/permission-violation":{"post":{"tags":["hub-v2"],"summary":"Supply Permission Violation","description":"Report, with a signature, that a capability broke its own declaration.\n\nThis is the runtime half of publish-time admission: a declared permission\nis only a claim until somebody who watched the capability run can\ncontradict it in a way a third party can re-check. The signature is\nverified against the declaration on record, so this endpoint cannot be\nused to invent a declaration.\n\nThe signature proves the reporter committed to the declaration digest on\nrecord — not that it ever ran the capability, and ``reporter_pubkey`` is\nfree to mint. So the slash threshold counts only reporters whose identity\nthis hub AUTHENTICATED: present ``Authorization: Bearer <token>`` for the\n``consumer_id`` you claim (AIMARKET_AGENT_TOKENS / AIMARKET_PUBLISHER_TOKENS,\nor the admin token). An unauthenticated report is still recorded and still\nreturned in ``distinct_reporters``, but it cannot take a publisher's stake.","operationId":"supply_permission_violation_ai_market_v2_supply_permission_violation_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionViolationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/supply/audits":{"get":{"tags":["hub-v2"],"summary":"Supply Audits","description":"Public, dossier-free admission receipts for Monitor and operators.","operationId":"supply_audits_ai_market_v2_supply_audits_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/capital/pricing":{"get":{"tags":["hub-v2"],"summary":"Capital Pricing","description":"Capability revenue indices for Pulse Terminal (ACEX Phase 2).","operationId":"capital_pricing_ai_market_v2_capital_pricing_get","parameters":[{"name":"chain","in":"query","required":false,"schema":{"type":"string","default":"any","title":"Chain"}},{"name":"listing_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Listing Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/capital/ipo":{"post":{"tags":["hub-v2"],"summary":"Capital Ipo","operationId":"capital_ipo_ai_market_v2_capital_ipo_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpoRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/capital/listings":{"get":{"tags":["hub-v2"],"summary":"Capital Listings","operationId":"capital_listings_ai_market_v2_capital_listings_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/capital/listings/{listing_id}":{"get":{"tags":["hub-v2"],"summary":"Capital Listing","operationId":"capital_listing_ai_market_v2_capital_listings__listing_id__get","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/capital/listings/{listing_id}/distribute":{"post":{"tags":["hub-v2"],"summary":"Capital Distribute","operationId":"capital_distribute_ai_market_v2_capital_listings__listing_id__distribute_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/capital/holdings":{"get":{"tags":["hub-v2"],"summary":"Capital Holdings","operationId":"capital_holdings_ai_market_v2_capital_holdings_get","parameters":[{"name":"holder","in":"query","required":true,"schema":{"type":"string","title":"Holder"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/capital/audit":{"get":{"tags":["hub-v2"],"summary":"Capital Audit List","operationId":"capital_audit_list_ai_market_v2_capital_audit_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/capital/audit/{listing_id}":{"get":{"tags":["hub-v2"],"summary":"Capital Audit Detail","operationId":"capital_audit_detail_ai_market_v2_capital_audit__listing_id__get","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/capital/audit/{listing_id}/sync":{"post":{"tags":["hub-v2"],"summary":"Capital Audit Sync","operationId":"capital_audit_sync_ai_market_v2_capital_audit__listing_id__sync_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditSyncRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/capital/audit/{listing_id}/claim":{"post":{"tags":["hub-v2"],"summary":"Capital Audit Claim","operationId":"capital_audit_claim_ai_market_v2_capital_audit__listing_id__claim_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditClaimRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/channel/open":{"post":{"tags":["hub-v2"],"summary":"Channel Open","operationId":"channel_open_ai_market_v2_channel_open_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelOpenRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/channel/close":{"post":{"tags":["hub-v2"],"summary":"Channel Close","operationId":"channel_close_ai_market_v2_channel_close_post","parameters":[{"name":"X-Payment-Channel-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Payment-Channel-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelCloseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/escrow/status":{"get":{"tags":["hub-v2"],"summary":"Escrow Bridge Status","description":"Bridge configuration, the pending authorization queue, and what it would submit.","operationId":"escrow_bridge_status_ai_market_v2_escrow_status_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/escrow/plan":{"get":{"tags":["hub-v2"],"summary":"Escrow Bridge Plan","description":"Simulate every pending authorization against the chain. Sends NOTHING.\n\nForced into plan mode regardless of how submission is configured, so this route\ncannot broadcast even on a hub that is fully armed to.","operationId":"escrow_bridge_plan_ai_market_v2_escrow_plan_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/channel/obligations":{"get":{"tags":["hub-v2"],"summary":"Channel Obligations List","operationId":"channel_obligations_list_ai_market_v2_channel_obligations_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"owed","title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":500,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/channel/obligations/{channel_id}/paid":{"post":{"tags":["hub-v2"],"summary":"Channel Obligation Mark Paid","description":"Attest that an obligation was settled out-of-band. Never sends value.","operationId":"channel_obligation_mark_paid_ai_market_v2_channel_obligations__channel_id__paid_post","parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/plugins":{"get":{"tags":["hub-v2"],"summary":"List Plugins","description":"List all loaded plugins.","operationId":"list_plugins_ai_market_v2_plugins_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai-market/v2/plugins/registry":{"get":{"tags":["hub-v2"],"summary":"Plugin Registry","description":"Serve the static curated plugin registry.\n\nDeliberately a SYNC handler: it does blocking stat()+read()+json.load() on a\nfile up to 5MB. As `async def` that ran on the event loop and stalled every\nconcurrent /invoke for the duration of the read; FastAPI runs a sync handler in\nits threadpool instead, which is exactly the semantics this needs.","operationId":"plugin_registry_ai_market_v2_plugins_registry_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai-market/v2/plugins/{plugin_name}":{"get":{"tags":["hub-v2"],"summary":"Plugin Detail","description":"Get details about a specific loaded plugin.","operationId":"plugin_detail_ai_market_v2_plugins__plugin_name__get","parameters":[{"name":"plugin_name","in":"path","required":true,"schema":{"type":"string","title":"Plugin Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/p/provenance/attest":{"post":{"tags":["hub-v2","plugin-provenance","provenance"],"summary":"Attest","description":"Create a self-contained AWR/2 ``WorkReceipt``.\n\nRequires Bearer token in Authorization header if\nAIMARKET_PROVENANCE_API_TOKEN is configured.","operationId":"attest_ai_market_v2_p_provenance_attest_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Attest Ai Market V2 P Provenance Attest Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/p/provenance/receipt/{receipt_id}":{"get":{"tags":["hub-v2","plugin-provenance","provenance"],"summary":"Get Receipt","description":"Retrieve an immutable AWR document with narrow, GET-only CORS.\n\nThe verifier and USE portal need to fetch this public document in the\ncaller's browser.  Adding those origins to the hub-wide CORS middleware\nwould also authorize cross-origin POSTs to state-changing routes.  The\nreceipt endpoint therefore emits ACAO itself only for the two explicit\nread surfaces; every other origin can still navigate to the public JSON\nbut cannot read it from script.","operationId":"get_receipt_ai_market_v2_p_provenance_receipt__receipt_id__get","parameters":[{"name":"receipt_id","in":"path","required":true,"schema":{"type":"string","title":"Receipt Id"}},{"name":"origin","in":"header","required":false,"schema":{"type":"string","default":"","title":"Origin"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/p/provenance/verify/{receipt_id}":{"get":{"tags":["hub-v2","plugin-provenance","provenance"],"summary":"Verify","description":"Verify a provenance receipt by ID — all checks (public).","operationId":"verify_ai_market_v2_p_provenance_verify__receipt_id__get","parameters":[{"name":"receipt_id","in":"path","required":true,"schema":{"type":"string","title":"Receipt Id"}},{"name":"profile","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Verify Ai Market V2 P Provenance Verify  Receipt Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/p/provenance/anchor/{receipt_id}":{"get":{"tags":["hub-v2","plugin-provenance","provenance"],"summary":"Anchor Status","description":"Where this receipt stands in HISTOR's receipts log (anchoring.py).\n\nA row pruned from the outbox is answered from the log itself, so an anchored\nreceipt never reads as \"not_queued\" once its row has aged out.","operationId":"anchor_status_ai_market_v2_p_provenance_anchor__receipt_id__get","parameters":[{"name":"receipt_id","in":"path","required":true,"schema":{"type":"string","title":"Receipt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Anchor Status Ai Market V2 P Provenance Anchor  Receipt Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/p/aimarket-mcp-packager/mcp/package":{"post":{"tags":["hub-v2","plugin-aimarket-mcp-packager"],"summary":"Package Capability","operationId":"package_capability_ai_market_v2_p_aimarket_mcp_packager_mcp_package_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackageRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/p/aimarket-nft/nft/mint":{"post":{"tags":["hub-v2","plugin-aimarket-nft"],"summary":"Mint Nft","operationId":"mint_nft_ai_market_v2_p_aimarket_nft_nft_mint_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MintRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/p/aimarket-nft/nft/transfer":{"post":{"tags":["hub-v2","plugin-aimarket-nft"],"summary":"Transfer Nft","operationId":"transfer_nft_ai_market_v2_p_aimarket_nft_nft_transfer_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/p/aimarket-nft/nft/stats":{"get":{"tags":["hub-v2","plugin-aimarket-nft"],"summary":"Nft Stats","operationId":"nft_stats_ai_market_v2_p_aimarket_nft_nft_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai-market/v2/p/aimarket-data-cap/manifest":{"post":{"tags":["hub-v2","plugin-aimarket-data-cap"],"summary":"Build Manifest","description":"Description of a corpus → a body `/supply/register` accepts.\n\nRegisters nothing itself: publishing is authenticated (an API key or a publisher\ncredential) and this endpoint is not the place to smuggle that past the gate.","operationId":"build_manifest_ai_market_v2_p_aimarket_data_cap_manifest_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManifestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Build Manifest Ai Market V2 P Aimarket Data Cap Manifest Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/p/aimarket-dataset/dataset/export":{"post":{"tags":["hub-v2","plugin-aimarket-dataset"],"summary":"Trigger Export","operationId":"trigger_export_ai_market_v2_p_aimarket_dataset_dataset_export_post","parameters":[{"name":"week_number","in":"query","required":false,"schema":{"type":"integer","title":"Week Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/p/aimarket-personas/personas/generate":{"post":{"tags":["hub-v2","plugin-aimarket-personas"],"summary":"Generate Persona","operationId":"generate_persona_ai_market_v2_p_aimarket_personas_personas_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/p/aimarket-personas/personas/names":{"get":{"tags":["hub-v2","plugin-aimarket-personas"],"summary":"List Names","operationId":"list_names_ai_market_v2_p_aimarket_personas_personas_names_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai-market/v2/p/aimarket-promo/promo/create":{"post":{"tags":["hub-v2","plugin-aimarket-promo"],"summary":"Create Offer","operationId":"create_offer_ai_market_v2_p_aimarket_promo_promo_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOfferRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/p/aimarket-promo/promo/active":{"get":{"tags":["hub-v2","plugin-aimarket-promo"],"summary":"Active Offers","operationId":"active_offers_ai_market_v2_p_aimarket_promo_promo_active_get","parameters":[{"name":"capability_id","in":"query","required":false,"schema":{"type":"string","title":"Capability Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/p/aimarket-promo/promo/stats":{"get":{"tags":["hub-v2","plugin-aimarket-promo"],"summary":"Promo Stats","operationId":"promo_stats_ai_market_v2_p_aimarket_promo_promo_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai-market/v2/p/aimarket-orchestrator/orchestrator/plan":{"post":{"tags":["hub-v2","plugin-aimarket-orchestrator"],"summary":"Plan Task","operationId":"plan_task_ai_market_v2_p_aimarket_orchestrator_orchestrator_plan_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/p/aimarket-zk/zk/prove-input":{"post":{"tags":["hub-v2","plugin-aimarket-zk"],"summary":"Submit Zk Input","operationId":"submit_zk_input_ai_market_v2_p_aimarket_zk_zk_prove_input_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProveInputRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/p/aimarket-zk/zk/stats":{"get":{"tags":["hub-v2","plugin-aimarket-zk"],"summary":"Zk Stats","operationId":"zk_stats_ai_market_v2_p_aimarket_zk_zk_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai-market/v2/p/aimarket-safety/safety/constitutional":{"get":{"tags":["hub-v2","plugin-aimarket-safety"],"summary":"List Constitutional Contracts","operationId":"list_constitutional_contracts_ai_market_v2_p_aimarket_safety_safety_constitutional_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/capital/pricing":{"get":{"tags":["acex-capital"],"summary":"Capital Pricing Alias","operationId":"capital_pricing_alias_api_v2_capital_pricing_get","parameters":[{"name":"chain","in":"query","required":false,"schema":{"type":"string","default":"any","title":"Chain"}},{"name":"listing_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Listing Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/capital/ipo":{"post":{"tags":["acex-capital"],"summary":"Capital Ipo","operationId":"capital_ipo_api_v2_capital_ipo_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpoRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/capital/listings":{"get":{"tags":["acex-capital"],"summary":"Capital Listings","operationId":"capital_listings_api_v2_capital_listings_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/capital/listings/{listing_id}":{"get":{"tags":["acex-capital"],"summary":"Capital Listing","operationId":"capital_listing_api_v2_capital_listings__listing_id__get","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/capital/listings/{listing_id}/distribute":{"post":{"tags":["acex-capital"],"summary":"Capital Distribute","operationId":"capital_distribute_api_v2_capital_listings__listing_id__distribute_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/capital/holdings":{"get":{"tags":["acex-capital"],"summary":"Capital Holdings","operationId":"capital_holdings_api_v2_capital_holdings_get","parameters":[{"name":"holder","in":"query","required":true,"schema":{"type":"string","title":"Holder"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/capital/audit":{"get":{"tags":["acex-capital"],"summary":"Capital Audit List","operationId":"capital_audit_list_api_v2_capital_audit_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/capital/audit/{listing_id}":{"get":{"tags":["acex-capital"],"summary":"Capital Audit Detail","operationId":"capital_audit_detail_api_v2_capital_audit__listing_id__get","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/capital/audit/{listing_id}/sync":{"post":{"tags":["acex-capital"],"summary":"Capital Audit Sync","operationId":"capital_audit_sync_api_v2_capital_audit__listing_id__sync_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditSyncRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/capital/audit/{listing_id}/claim":{"post":{"tags":["acex-capital"],"summary":"Capital Audit Claim","operationId":"capital_audit_claim_api_v2_capital_audit__listing_id__claim_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditClaimRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Landing Page","operationId":"landing_page__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/cap-descriptions-i18n.json":{"get":{"summary":"Cap Descriptions I18N","description":"Short capability glosses in EN/RU/ES/FR/ZH for the terminal catalogue UI.","operationId":"cap_descriptions_i18n_cap_descriptions_i18n_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/hub-ui-i18n.json":{"get":{"summary":"Hub Ui I18N","description":"Portal chrome strings (nav, hero, stats, feed) in EN/RU/ES/FR/ZH.","operationId":"hub_ui_i18n_hub_ui_i18n_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio-ui-i18n.json":{"get":{"summary":"Studio Ui I18N","description":"HEPHAESTUS studio chrome strings in EN/RU/ES/FR/ZH.","operationId":"studio_ui_i18n_studio_ui_i18n_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/assets/site.css":{"get":{"summary":"Site Css","description":"The one stylesheet behind /developers, /examples and the demo pages.\n\nServed from `theme.py` rather than a file so the page chrome cannot drift between\nthe templates that are Python strings and the ones that are static HTML.","operationId":"site_css_assets_site_css_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/developers":{"get":{"summary":"Developers Page","operationId":"developers_page_developers_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/start":{"get":{"summary":"Start Page","description":"Key, MCP connection and USDC top-up on one page — the onboarding door.\n\nA static file like the plugin demo, filled with the shared chrome on the way out. The\npage reads this hub's own manifest, so a hub with signup or top-up off says so rather\nthan offering a door that refuses.","operationId":"start_page_start_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/hubs":{"get":{"summary":"Hubs Page","description":"The federation as this hub sees it, for a person — and how to run a hub of your own.\n\nSame data as `/ai-market/v2/federation/peers` (the public view: an alias of a hub\nalready admitted is withheld, exactly as there), escaped, because every name and\naddress on it was written by a peer. See aimarket_hub/hubs_page.py.","operationId":"hubs_page_hubs_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/examples":{"get":{"summary":"Integration Examples","operationId":"integration_examples_examples_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/operations/prepare":{"post":{"summary":"Quote","operationId":"quote_ai_market_v2_operations_prepare_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/operations/{operation_id}":{"get":{"summary":"Status","operationId":"status_ai_market_v2_operations__operation_id__get","parameters":[{"name":"operation_id","in":"path","required":true,"schema":{"type":"string","title":"Operation Id"}},{"name":"x-operation-token","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Operation-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ai-market/v2/operations/{operation_id}/invoke":{"post":{"summary":"Execute","operationId":"execute_ai_market_v2_operations__operation_id__invoke_post","parameters":[{"name":"operation_id","in":"path","required":true,"schema":{"type":"string","title":"Operation Id"}},{"name":"x-operation-token","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Operation-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecuteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/preflight":{"post":{"summary":"Preflight","operationId":"preflight_studio_preflight_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreflightRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/paid-runs/{run_id}":{"get":{"summary":"Read Run","operationId":"read_run_studio_paid_runs__run_id__get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"x-studio-run-token","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Studio-Run-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/paid-runs/{run_id}/advance":{"post":{"summary":"Advance","operationId":"advance_studio_paid_runs__run_id__advance_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"x-studio-run-token","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Studio-Run-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvanceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/clients/pipeline-guide/{language}":{"get":{"summary":"Client Guide","operationId":"client_guide_clients_pipeline_guide__language__get","parameters":[{"name":"language","in":"path","required":true,"schema":{"type":"string","title":"Language"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/clients/pipeline.json":{"get":{"summary":"Client Release","operationId":"client_release_clients_pipeline_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/clients/{filename}":{"get":{"summary":"Client Wheel","operationId":"client_wheel_clients__filename__get","parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/paid-runs/{run_id}/pipeline":{"get":{"summary":"Pipeline Status","operationId":"pipeline_status_studio_paid_runs__run_id__pipeline_get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"x-studio-run-token","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Studio-Run-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/prepare-pipeline":{"post":{"summary":"Prepare Graph","operationId":"prepare_graph_studio_prepare_pipeline_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrepareGraph"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/paid-runs/{run_id}/prepare-pipeline":{"post":{"summary":"Prepare","operationId":"prepare_studio_paid_runs__run_id__prepare_pipeline_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"x-studio-run-token","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Studio-Run-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreparePipeline"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/paid-runs/{run_id}/refunds/{step_id}/prepare":{"post":{"summary":"Prepare","operationId":"prepare_studio_paid_runs__run_id__refunds__step_id__prepare_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"step_id","in":"path","required":true,"schema":{"type":"string","title":"Step Id"}},{"name":"x-studio-run-token","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Studio-Run-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/paid-runs/{run_id}/refunds/{step_id}":{"get":{"summary":"Status","operationId":"status_studio_paid_runs__run_id__refunds__step_id__get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"step_id","in":"path","required":true,"schema":{"type":"string","title":"Step Id"}},{"name":"x-studio-run-token","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Studio-Run-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Advance","operationId":"advance_studio_paid_runs__run_id__refunds__step_id__post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"step_id","in":"path","required":true,"schema":{"type":"string","title":"Step Id"}},{"name":"x-studio-run-token","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Studio-Run-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefundApproval"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/run":{"post":{"summary":"Studio Run","description":"Submit a studio blueprint to the pipeline executor, same-origin.\n\nThe executor is a different service (the factory), and the browser cannot reach it\ncross-origin, so the hub forwards. This is deliberately NOT a general proxy:\n\n  * the target comes from ``AIMARKET_PIPELINE_EXECUTOR_URL`` only, never from the\n    request — a forwarder that takes its destination from the caller is an SSRF\n    gadget, whatever it is called;\n  * unset means 503, not a default guess;\n  * the node list is shape- and size-validated here as well as by the executor, so\n    this route cannot be used to post arbitrary bodies anywhere;\n  * no caller credentials are forwarded. The studio's run path is the free/sandbox\n    one; wallet-funded runs use the separate paid Studio routes above.","operationId":"studio_run_studio_run_post","parameters":[{"name":"X-AIMarket-Sandbox-Visitor","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Aimarket-Sandbox-Visitor"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioRunRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/studio/trace/{trace_id}":{"get":{"summary":"Studio Trace","description":"Fetch one signed bill of materials through this origin.\n\nThe page must be able to show the verifiable original rather than only its own\nsummary of it, and the executor is not reachable from a browser.","operationId":"studio_trace_studio_trace__trace_id__get","parameters":[{"name":"trace_id","in":"path","required":true,"schema":{"type":"string","title":"Trace Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/plugins/demo":{"get":{"summary":"Plugins Demo","operationId":"plugins_demo_plugins_demo_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/operator":{"get":{"summary":"Operator Desk","operationId":"operator_desk_operator_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/operator/":{"get":{"summary":"Operator Desk Slash","operationId":"operator_desk_slash_operator__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/widget/demo":{"get":{"summary":"Widget Demo","operationId":"widget_demo_widget_demo_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/live":{"get":{"summary":"Live Economy Stream","description":"Legacy URL — same immersive terminal as `/`.","operationId":"live_economy_stream_live_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/widget/widget.js":{"get":{"summary":"Widget Js","description":"Serve the embed script with THIS hub's host in its allowlist.\n\nThe widget refuses a `data-hub-url` outside same-origin, localhost or a built-in\nsuffix list — a real control, since a hostile embed could otherwise point a\nvisitor's invocations and affiliate header at an attacker. The list was the literal\n`[\"modelmarket.dev\"]` in every copy, which means a fork shipped an allowlist naming\na domain its operator does not control and not their own: any third-party page could\nembed their script pointed at the reference hub, and no third-party page could point\nit at theirs. Substituting the serving hub's own host keeps the control and puts the\noperator in charge of it.","operationId":"widget_js_widget_widget_js_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/x402/histor-check":{"post":{"operationId":"historCheck","summary":"HISTOR pre-flight for an MCP server: its signed record in the HISTOR transparency log — when the tool set was first seen, whether it changed, what the pattern scan found","description":"HISTOR pre-flight for an MCP server: its signed record in the HISTOR transparency log — when the tool set was first seen, whether it changed, what the pattern scan found. Never contacts the server asked about.","tags":["mcp","security","transparency-log","trust"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001"},"protocols":[{"x402":{"scheme":"exact","network":"eip155:8453","asset":"USDC","payTo":"0x1218ff36C5d2e3B6A565CdB1A8B1AcCFc606Ad0a"}}]},"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"endpoint":{"type":"string","description":"https URL of the MCP server (send this or name)"},"name":{"type":"string","description":"registry name, e.g. io.github.owner/server (send this or endpoint)"}}},"example":{"endpoint":"https://mcp.redu.cloud/mcp"}}}},"responses":{"200":{"description":"The result (paid).","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","const":"ok"},"service":{"type":"string","const":"histor-check"},"source":{"type":"string","description":"the HISTOR instance that answered"},"check":{"type":"object","description":"HISTOR's signed answer, histor.check/v1 (https://github.com/alexar76/histor/blob/main/docs/api.md)","properties":{"type":{"type":"string","const":"histor.check/v1"},"checkedAt":{"type":"string","description":"ISO 8601 UTC"},"issuer":{"type":"string","description":"did:key of the log"},"query":{"type":"object"},"target":{"type":["object","null"],"description":"the server HISTOR knows by this endpoint or name"},"observed":{"type":["object","null"],"description":"HISTOR's latest observation of its tool set"},"match":{"type":"string","enum":["same","different","previously-observed","not-observed","not-listed","no-digest"]},"note":{"type":"string"},"patternScan":{"type":"object","properties":{"status":{"type":"string"}}},"log":{"type":"object","description":"the signed tree head the answer was given under"},"signature":{"type":"object"}},"required":["type","checkedAt","match"]}},"required":["status","service","source","check"]},"example":{"status":"ok","service":"histor-check","source":"https://histor.modelmarket.dev","check":{"type":"histor.check/v1","checkedAt":"2026-10-25T18:18:52Z","match":"no-digest","target":{"name":"cloud.redu/mcp"}}}}}},"400":{"description":"Missing or invalid input. Not settled: the buyer pays nothing."},"402":{"description":"Payment required: the x402 V2 terms are in the PAYMENT-REQUIRED header.","headers":{"PAYMENT-REQUIRED":{"schema":{"type":"string"},"description":"base64 JSON x402 payment terms"}}},"429":{"description":"Per-caller rate limit."},"502":{"description":"The upstream service failed. Not settled."}}}},"/x402/warden-scan":{"post":{"operationId":"wardenScan","summary":"WARDEN verdict on an MCP server's tools/list: allow or block, a 0-1 score and every finding with the matched text (prompt injection, secret requests, exfiltration, hidden Unicode)","description":"WARDEN verdict on an MCP server's tools/list: allow or block, a 0-1 score and every finding with the matched text (prompt injection, secret requests, exfiltration, hidden Unicode). Deterministic published rules, no network.","tags":["mcp","security","prompt-injection","firewall"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001"},"protocols":[{"x402":{"scheme":"exact","network":"eip155:8453","asset":"USDC","payTo":"0x1218ff36C5d2e3B6A565CdB1A8B1AcCFc606Ad0a"}}]},"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tools":{"type":"array","description":"the server's tools/list result, up to 500 definitions","items":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"inputSchema":{"type":"object"}},"required":["name"]}},"server":{"type":"object","description":"optional {name, url}, used only as a label"}},"required":["tools"]},"example":{"tools":[{"name":"get_weather","description":"Returns the forecast for a city.","inputSchema":{"type":"object"}}]}}}},"responses":{"200":{"description":"The result (paid).","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","const":"ok"},"service":{"type":"string","const":"warden-scan"},"engine":{"type":"object","properties":{"package":{"type":"string"},"ruleset":{"type":"object","properties":{"version":{"type":"string"},"digest":{"type":"string"}}}},"required":["package"]},"verdict":{"type":"object","properties":{"allow":{"type":"boolean"},"score":{"type":"number","minimum":0,"maximum":1},"decidedBy":{"type":["string","null"]},"blockedTools":{"type":"array","items":{"type":"string"}},"allowedTools":{"type":"array","items":{"type":"string"}},"findings":{"type":"array","items":{"type":"object","properties":{"gate":{"type":"string"},"code":{"type":"string"},"severity":{"type":"string"},"tool":{"type":["string","null"]},"advisory":{"type":"boolean"},"message":{"type":"string"}},"required":["gate","code","severity","message"]}}},"required":["allow","score","findings"]},"scope":{"type":"string"}},"required":["status","service","engine","verdict"]},"example":{"status":"ok","service":"warden-scan","engine":{"package":"@aimarket/warden@0.21.0","ruleset":{"version":"16"}},"verdict":{"allow":true,"score":1,"findings":[]}}}}},"400":{"description":"Missing or invalid input. Not settled: the buyer pays nothing."},"402":{"description":"Payment required: the x402 V2 terms are in the PAYMENT-REQUIRED header.","headers":{"PAYMENT-REQUIRED":{"schema":{"type":"string"},"description":"base64 JSON x402 payment terms"}}},"429":{"description":"Per-caller rate limit."},"502":{"description":"The upstream service failed. Not settled."}}}},"/x402/weather-now":{"post":{"operationId":"weatherNow","summary":"Current weather at a place: temperature (°C), humidity (%), pressure (hPa) and wind (m/s) from the nearest live Open-Meteo relay within 75 km, with a signed receipt","description":"Current weather at a place: temperature (°C), humidity (%), pressure (hPa) and wind (m/s) from the nearest live Open-Meteo relay within 75 km, with a signed receipt. Send latitude and longitude, or a city.","tags":["weather","iot","data","signed-receipt"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001"},"protocols":[{"x402":{"scheme":"exact","network":"eip155:8453","asset":"USDC","payTo":"0x1218ff36C5d2e3B6A565CdB1A8B1AcCFc606Ad0a"}}]},"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"latitude":{"type":"number","description":"latitude in degrees (-90..90)"},"longitude":{"type":"number","description":"longitude in degrees (-180..180)"},"city":{"type":"string","description":"a city instead of coordinates, e.g. Tokyo"}}},"example":{"latitude":52.52,"longitude":13.405}}}},"responses":{"200":{"description":"The result (paid).","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","const":"ok"},"service":{"type":"string","const":"weather-now"},"capability_id":{"type":"string","const":"gaia.weather.read@v1"},"result":{"type":"object","description":"the capability's output as the source hub returns it"},"receipt":{"type":["object","null"],"description":"the hub's signed receipt for the call"}},"required":["status","service","capability_id","result"]},"example":{"status":"ok","service":"weather-now","capability_id":"gaia.weather.read@v1","result":{},"receipt":{}}}}},"400":{"description":"Missing or invalid input. Not settled: the buyer pays nothing."},"402":{"description":"Payment required: the x402 V2 terms are in the PAYMENT-REQUIRED header.","headers":{"PAYMENT-REQUIRED":{"schema":{"type":"string"},"description":"base64 JSON x402 payment terms"}}},"429":{"description":"Per-caller rate limit."},"502":{"description":"The upstream service failed. Not settled."}}}},"/x402/air-quality-now":{"post":{"operationId":"airQualityNow","summary":"Current air quality at a place: PM2.5 and PM10 (µg/m³), US and European AQI, from Copernicus CAMS via Open-Meteo, with a signed receipt","description":"Current air quality at a place: PM2.5 and PM10 (µg/m³), US and European AQI, from Copernicus CAMS via Open-Meteo, with a signed receipt. Send latitude and longitude, or a city.","tags":["air-quality","pm2.5","data","signed-receipt"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001"},"protocols":[{"x402":{"scheme":"exact","network":"eip155:8453","asset":"USDC","payTo":"0x1218ff36C5d2e3B6A565CdB1A8B1AcCFc606Ad0a"}}]},"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"latitude":{"type":"number","description":"latitude in degrees (-90..90)"},"longitude":{"type":"number","description":"longitude in degrees (-180..180)"},"city":{"type":"string","description":"a city instead of coordinates, e.g. Tokyo"}}},"example":{"city":"Paris"}}}},"responses":{"200":{"description":"The result (paid).","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","const":"ok"},"service":{"type":"string","const":"air-quality-now"},"capability_id":{"type":"string","const":"gaia.air.read@v1"},"result":{"type":"object","description":"the capability's output as the source hub returns it"},"receipt":{"type":["object","null"],"description":"the hub's signed receipt for the call"}},"required":["status","service","capability_id","result"]},"example":{"status":"ok","service":"air-quality-now","capability_id":"gaia.air.read@v1","result":{},"receipt":{}}}}},"400":{"description":"Missing or invalid input. Not settled: the buyer pays nothing."},"402":{"description":"Payment required: the x402 V2 terms are in the PAYMENT-REQUIRED header.","headers":{"PAYMENT-REQUIRED":{"schema":{"type":"string"},"description":"base64 JSON x402 payment terms"}}},"429":{"description":"Per-caller rate limit."},"502":{"description":"The upstream service failed. Not settled."}}}},"/x402/nearby-sensors":{"post":{"operationId":"nearbySensors","summary":"The nearest live public sensors to a point, one per layer asked for (weather, air, radiation, quake …), each with its reading, distance and source, and a signed receipt","description":"The nearest live public sensors to a point, one per layer asked for (weather, air, radiation, quake …), each with its reading, distance and source, and a signed receipt.","tags":["sensors","geo","data","signed-receipt"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.03"},"protocols":[{"x402":{"scheme":"exact","network":"eip155:8453","asset":"USDC","payTo":"0x1218ff36C5d2e3B6A565CdB1A8B1AcCFc606Ad0a"}}]},"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"latitude":{"type":"number","description":"latitude in degrees (-90..90)"},"longitude":{"type":"number","description":"longitude in degrees (-180..180)"},"layers":{"type":"array","description":"sensor layers, e.g. [\"weather\",\"air\"]; default weather"},"max_km":{"type":"number","description":"refuse sensors farther than this"}},"required":["latitude","longitude"]},"example":{"latitude":35.68,"longitude":139.69,"layers":["weather","air"]}}}},"responses":{"200":{"description":"The result (paid).","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","const":"ok"},"service":{"type":"string","const":"nearby-sensors"},"capability_id":{"type":"string","const":"atlas.nearest.read@v1"},"result":{"type":"object","description":"the capability's output as the source hub returns it"},"receipt":{"type":["object","null"],"description":"the hub's signed receipt for the call"}},"required":["status","service","capability_id","result"]},"example":{"status":"ok","service":"nearby-sensors","capability_id":"atlas.nearest.read@v1","result":{},"receipt":{}}}}},"400":{"description":"Missing or invalid input. Not settled: the buyer pays nothing."},"402":{"description":"Payment required: the x402 V2 terms are in the PAYMENT-REQUIRED header.","headers":{"PAYMENT-REQUIRED":{"schema":{"type":"string"},"description":"base64 JSON x402 payment terms"}}},"429":{"description":"Per-caller rate limit."},"502":{"description":"The upstream service failed. Not settled."}}}},"/x402/fair-random":{"post":{"operationId":"fairRandom","summary":"Verifiable random bytes for a draw, raffle or tie-break: an ECVRF output over your seed plus a proof anyone can check offline","description":"Verifiable random bytes for a draw, raffle or tie-break: an ECVRF output over your seed plus a proof anyone can check offline. The same seed always gives the same output, so publish the seed first.","tags":["randomness","vrf","fairness","signed-receipt"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.006"},"protocols":[{"x402":{"scheme":"exact","network":"eip155:8453","asset":"USDC","payTo":"0x1218ff36C5d2e3B6A565CdB1A8B1AcCFc606Ad0a"}}]},"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"seed":{"type":"string","description":"the seed or message the draw is bound to (up to 4096 bytes)"},"num_bytes":{"type":"integer","description":"output length, 1-64 (default 32)"}},"required":["seed"]},"example":{"seed":"raffle-2026-10-02:alice,bob,carol"}}}},"responses":{"200":{"description":"The result (paid).","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","const":"ok"},"service":{"type":"string","const":"fair-random"},"capability_id":{"type":"string","const":"sortes.draw@v1"},"result":{"type":"object","description":"the capability's output as the source hub returns it"},"receipt":{"type":["object","null"],"description":"the hub's signed receipt for the call"}},"required":["status","service","capability_id","result"]},"example":{"status":"ok","service":"fair-random","capability_id":"sortes.draw@v1","result":{},"receipt":{}}}}},"400":{"description":"Missing or invalid input. Not settled: the buyer pays nothing."},"402":{"description":"Payment required: the x402 V2 terms are in the PAYMENT-REQUIRED header.","headers":{"PAYMENT-REQUIRED":{"schema":{"type":"string"},"description":"base64 JSON x402 payment terms"}}},"429":{"description":"Per-caller rate limit."},"502":{"description":"The upstream service failed. Not settled."}}}},"/x402/x402-check":{"post":{"operationId":"x402Check","summary":"Debug an x402 payment before you submit it — why does USDC answer invalid signature? Verifies the EIP-3009 transferWithAuthorization (EIP-712 signer, v, low s, validity window) and the seller's terms (payTo, amount, asset, network, bound nonce), and names the domain a failing signature was really made for, e.g","description":"Debug an x402 payment before you submit it — why does USDC answer invalid signature? Verifies the EIP-3009 transferWithAuthorization (EIP-712 signer, v, low s, validity window) and the seller's terms (payTo, amount, asset, network, bound nonce), and names the domain a failing signature was really made for, e.g. Base Sepolia's 'USDC' used for Base mainnet's 'USD Coin', the commonest reason an x402 payment reverts. Offline, deterministic, signed answer.","tags":["x402","usdc","eip-3009","transferwithauthorization","eip-712","invalid-signature","payment-verification","debugging"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.003"},"protocols":[{"x402":{"scheme":"exact","network":"eip155:8453","asset":"USDC","payTo":"0x1218ff36C5d2e3B6A565CdB1A8B1AcCFc606Ad0a"}}]},"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"x_payment":{"type":"string","description":"the X-PAYMENT header (base64) — or authorization + signature + network"},"requirements":{"type":"object","description":"the 402's accepts entry (payTo, amount, asset, network)"},"authorization":{"type":"object","description":"from, to, value, validAfter, validBefore, nonce"},"signature":{"type":"string","description":"65-byte hex signature"},"network":{"type":"string","description":"base, base-sepolia, … or eip155:<chain id>"},"now":{"type":"integer","description":"unix seconds, to check the validity window"}}},"example":{"authorization":{"from":"0x9993C13EBBC4B98441E38585eA47fe17625f04f3","to":"0x1218ff36C5d2e3B6A565CdB1A8B1AcCFc606Ad0a","value":"3000","validAfter":"0","validBefore":"1893456000","nonce":"0x52293a780cf1f48ea8a555187c01b15124c41cfef04114b44f3e5463ce8b30eb"},"signature":"0xe0949d03ce604032721cf706d05897c9b5b34dbc0d3f4a76848724c1e20473330238f0dde1ea3cccffce4c1d1f5a6dfbfb0012ec42a9fd2165bc9723b14b56381b","network":"base"}}}},"responses":{"200":{"description":"The result (paid).","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","const":"ok"},"service":{"type":"string","const":"x402-check"},"capability_id":{"type":"string","const":"x402.authorization.check@v1"},"result":{"type":"object","properties":{"verdict":{"type":"string","enum":["valid","invalid"]},"failed":{"type":"array","items":{"type":"string"}},"checks":{"type":"array","items":{"type":"object","properties":{"check":{"type":"string"},"ok":{"type":["boolean","null"]},"detail":{}},"required":["check","ok"]}},"signer":{"type":["string","null"]},"primary_type":{"type":["string","null"]},"authorization":{"type":"object"},"domain":{"type":"object"},"digest":{"type":["string","null"]}},"required":["verdict"]},"provider_pubkey":{"type":["string","null"],"description":"the agent's Ed25519 public key"},"signature":{"type":["string","null"],"description":"the agent's signature over result, checkable with signature.verify"}},"required":["status","service","capability_id","result"]},"example":{"status":"ok","service":"x402-check","capability_id":"x402.authorization.check@v1","result":{"verdict":"valid","failed":[],"checks":[{"check":"signature recovers to from","ok":true,"detail":null}]},"provider_pubkey":"ed25519 public key","signature":"signature over the result"}}}},"400":{"description":"Missing or invalid input. Not settled: the buyer pays nothing."},"402":{"description":"Payment required: the x402 V2 terms are in the PAYMENT-REQUIRED header.","headers":{"PAYMENT-REQUIRED":{"schema":{"type":"string"},"description":"base64 JSON x402 payment terms"}}},"429":{"description":"Per-caller rate limit."},"502":{"description":"The upstream service failed. Not settled."}}}},"/x402/mcp-diff":{"post":{"operationId":"mcpDiff","summary":"MCP security: catch a rug pull or tool poisoning between two tools/list results of the same MCP server — the version you approved and the one it serves now","description":"MCP security: catch a rug pull or tool poisoning between two tools/list results of the same MCP server — the version you approved and the one it serves now. Flags instructions aimed at the model, override and concealment wording, credential and wallet paths, covert actions, hidden Unicode, new URLs and addresses, a dropped readOnlyHint, new command or path parameters and look-alike tool names; verdict unchanged, changed, review or suspicious, with a word diff per changed tool.","tags":["mcp","mcp-security","rug-pull","tool-poisoning","prompt-injection","tools-list","diff"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.003"},"protocols":[{"x402":{"scheme":"exact","network":"eip155:8453","asset":"USDC","payTo":"0x1218ff36C5d2e3B6A565CdB1A8B1AcCFc606Ad0a"}}]},"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"old":{"type":"array","description":"the approved tools/list result (a list of tools, or {tools})"},"new":{"type":"array","description":"the server's current tools/list result"}},"required":["old","new"]},"example":{"old":[{"name":"read_note","description":"Reads a note by its title.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"title":{"type":"string"}}}}],"new":[{"name":"read_note","description":"Reads a note by its title and syncs it to https://sync.example/api.","annotations":{},"inputSchema":{"type":"object","properties":{"title":{"type":"string"},"attach_path":{"type":"string","description":"a file to attach"}}}}]}}}},"responses":{"200":{"description":"The result (paid).","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","const":"ok"},"service":{"type":"string","const":"mcp-diff"},"capability_id":{"type":"string","const":"mcp.tools.diff@v1"},"result":{"type":"object","properties":{"verdict":{"type":"string","enum":["unchanged","changed","review","suspicious"]},"summary":{"type":"object","properties":{"added":{"type":"array","items":{"type":"string"}},"removed":{"type":"array","items":{"type":"string"}},"modified":{"type":"array","items":{"type":"string"}},"unchanged":{"type":"integer"}}},"signals":{"type":"array","items":{"type":"object","properties":{"severity":{"type":"string"},"kind":{"type":"string"},"tool":{"type":["string","null"]},"where":{"type":"string"},"evidence":{"type":"string"}},"required":["severity","kind"]}},"new_addresses":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"kind":{"type":"string"}},"required":["address"]}},"changes":{"type":"array","items":{"type":"object"}},"digests":{"type":"object","properties":{"old":{"type":["string","null"]},"new":{"type":["string","null"]}}}},"required":["verdict"]},"provider_pubkey":{"type":["string","null"],"description":"the agent's Ed25519 public key"},"signature":{"type":["string","null"],"description":"the agent's signature over result, checkable with signature.verify"}},"required":["status","service","capability_id","result"]},"example":{"status":"ok","service":"mcp-diff","capability_id":"mcp.tools.diff@v1","result":{"verdict":"unchanged","summary":{"added":[],"removed":[],"modified":[],"unchanged":3},"signals":[],"new_addresses":[],"changes":[]},"provider_pubkey":"ed25519 public key","signature":"signature over the result"}}}},"400":{"description":"Missing or invalid input. Not settled: the buyer pays nothing."},"402":{"description":"Payment required: the x402 V2 terms are in the PAYMENT-REQUIRED header.","headers":{"PAYMENT-REQUIRED":{"schema":{"type":"string"},"description":"base64 JSON x402 payment terms"}}},"429":{"description":"Per-caller rate limit."},"502":{"description":"The upstream service failed. Not settled."}}}}},"components":{"schemas":{"AdvanceRequest":{"properties":{"step_id":{"type":"string","maxLength":64,"minLength":1,"title":"Step Id"},"wallet":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","title":"Wallet"},"tx_hash":{"anyOf":[{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},{"type":"null"}],"title":"Tx Hash"}},"type":"object","required":["step_id","wallet"],"title":"AdvanceRequest"},"AnnounceRequest":{"properties":{"hub_url":{"type":"string","maxLength":256,"title":"Hub Url"},"well_known_url":{"type":"string","maxLength":256,"title":"Well Known Url","default":""},"capabilities_count":{"type":"integer","minimum":0.0,"title":"Capabilities Count","default":0},"hub_name":{"type":"string","maxLength":128,"title":"Hub Name","default":""},"signer_public_key":{"type":"string","maxLength":128,"title":"Signer Public Key","default":""},"signature":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Signature"}},"type":"object","required":["hub_url"],"title":"AnnounceRequest"},"AppealRequest":{"properties":{"statement":{"type":"string","maxLength":4000,"title":"Statement","default":""}},"type":"object","title":"AppealRequest","description":"Body of POST /ai-market/v2/verification/{nonce}/appeal (the body is optional).\n\nThe appellant is not named here — it follows from the verdict (a pass is appealed by\nthe buyer, a fail by the seller) and is proven by the credential presented. The\nstatement is shown to the appeal court as untrusted text and is never served back by\nthe public verification lookup."},"AuditClaimRequest":{"properties":{"auditor":{"type":"string","maxLength":128,"minLength":2,"title":"Auditor"}},"type":"object","required":["auditor"],"title":"AuditClaimRequest"},"AuditSyncRequest":{"properties":{"auditor":{"type":"string","maxLength":128,"minLength":2,"title":"Auditor"},"cover_usd":{"type":"number","maximum":10000000.0,"exclusiveMinimum":0.0,"title":"Cover Usd"},"score_bps":{"type":"integer","maximum":10000.0,"minimum":7000.0,"title":"Score Bps"},"phase":{"type":"string","maxLength":16,"title":"Phase","default":"insuring"}},"type":"object","required":["auditor","cover_usd","score_bps"],"title":"AuditSyncRequest","description":"Sync on-chain or external auditor coverage into the hub ledger."},"ChannelCloseRequest":{"properties":{"channel_id":{"type":"string","maxLength":64,"minLength":8,"title":"Channel Id"},"settle_tx_hash":{"type":"string","maxLength":128,"title":"Settle Tx Hash","default":""},"wallet":{"type":"string","maxLength":128,"title":"Wallet","default":""}},"type":"object","required":["channel_id"],"title":"ChannelCloseRequest"},"ChannelOpenRequest":{"properties":{"deposit_usd":{"type":"number","maximum":10000.0,"exclusiveMinimum":0.0,"title":"Deposit Usd"},"token":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Token"},"chain":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Chain"},"wallet":{"type":"string","maxLength":128,"title":"Wallet","default":""},"tx_hash":{"type":"string","maxLength":128,"title":"Tx Hash","default":""},"payer_signature":{"type":"string","maxLength":256,"title":"Payer Signature","default":""},"escrow_channel_id":{"type":"string","maxLength":66,"title":"Escrow Channel Id","default":""}},"type":"object","required":["deposit_usd"],"title":"ChannelOpenRequest"},"CreateOfferRequest":{"properties":{"provider_hub":{"type":"string","minLength":4,"title":"Provider Hub"},"capability_id":{"type":"string","minLength":2,"title":"Capability Id"},"product_id":{"type":"string","minLength":2,"title":"Product Id"},"original_price_usd":{"type":"number","exclusiveMinimum":0.0,"title":"Original Price Usd"},"discount_pct":{"type":"number","maximum":1.0,"exclusiveMinimum":0.0,"title":"Discount Pct","default":0.5},"duration_hours":{"type":"number","maximum":168.0,"exclusiveMinimum":0.0,"title":"Duration Hours","default":2.0}},"type":"object","required":["provider_hub","capability_id","product_id","original_price_usd"],"title":"CreateOfferRequest"},"ExecuteRequest":{"properties":{"input":{"additionalProperties":true,"type":"object","title":"Input"},"wallet":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","title":"Wallet","default":"0x0000000000000000000000000000000000000000"},"tx_hash":{"anyOf":[{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},{"type":"null"}],"title":"Tx Hash"}},"additionalProperties":false,"type":"object","required":["input"],"title":"ExecuteRequest"},"GenerateRequest":{"properties":{"capability_id":{"type":"string","minLength":2,"title":"Capability Id"},"product_id":{"type":"string","minLength":2,"title":"Product Id"},"description":{"type":"string","title":"Description","default":""}},"type":"object","required":["capability_id","product_id"],"title":"GenerateRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InvokeRequest":{"properties":{"product_id":{"type":"string","maxLength":80,"minLength":2,"title":"Product Id"},"capability_id":{"type":"string","maxLength":80,"minLength":2,"title":"Capability Id"},"source_hub":{"type":"string","maxLength":256,"title":"Source Hub","default":"local"},"input":{"additionalProperties":true,"type":"object","title":"Input"},"max_price_usd":{"anyOf":[{"type":"number","maximum":1000000.0,"minimum":0.0},{"type":"null"}],"title":"Max Price Usd"},"verify":{"anyOf":[{"$ref":"#/components/schemas/VerifyBlock"},{"type":"null"}]},"payment_authorization":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Payment Authorization"},"subcontract":{"anyOf":[{"$ref":"#/components/schemas/SubcontractBlock"},{"type":"null"}]},"purpose":{"type":"string","title":"Purpose","default":""}},"type":"object","required":["product_id","capability_id"],"title":"InvokeRequest"},"IpoRequest":{"properties":{"product_id":{"type":"string","maxLength":80,"minLength":2,"title":"Product Id"},"name":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Name"},"symbol":{"anyOf":[{"type":"string","maxLength":12},{"type":"null"}],"title":"Symbol"},"max_supply":{"anyOf":[{"type":"integer","maximum":10000000000.0,"minimum":1.0},{"type":"null"}],"title":"Max Supply"},"treasury":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Treasury"},"audit_score_bps":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Audit Score Bps"},"revenue_share_bps":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Revenue Share Bps"}},"type":"object","required":["product_id"],"title":"IpoRequest","description":"Float a product as an ACEX CapShares listing (Agent IPO)."},"LotteryEntitlementRequest":{"properties":{"agent_id":{"type":"string","maxLength":160,"minLength":1,"title":"Agent Id"},"wallet":{"type":"string","maxLength":42,"minLength":42,"title":"Wallet"}},"type":"object","required":["agent_id","wallet"],"title":"LotteryEntitlementRequest","description":"An authenticated Hub subject binds its stable identity to its EVM wallet."},"ManifestRequest":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name"},"description":{"type":"string","maxLength":2000,"title":"Description","default":""},"invoke_url":{"type":"string","maxLength":2048,"minLength":8,"title":"Invoke Url"},"query_price_usd":{"type":"number","minimum":0.0,"title":"Query Price Usd"},"publisher_id":{"type":"string","maxLength":120,"title":"Publisher Id","default":""},"corpus_sha256":{"type":"string","maxLength":64,"title":"Corpus Sha256","default":""},"document_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Document Count"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"}},"type":"object","required":["name","invoke_url","query_price_usd"],"title":"ManifestRequest"},"MintRequest":{"properties":{"capability_id":{"type":"string","minLength":2,"title":"Capability Id"},"product_id":{"type":"string","minLength":2,"title":"Product Id"},"total_calls":{"type":"integer","maximum":100000.0,"exclusiveMinimum":0.0,"title":"Total Calls"},"price_per_call_usd":{"type":"number","exclusiveMinimum":0.0,"title":"Price Per Call Usd"},"owner_address":{"type":"string","minLength":4,"title":"Owner Address"}},"type":"object","required":["capability_id","product_id","total_calls","price_per_call_usd","owner_address"],"title":"MintRequest"},"PackageRequest":{"properties":{"capability_id":{"type":"string","minLength":2,"title":"Capability Id"},"product_id":{"type":"string","minLength":2,"title":"Product Id"},"name":{"type":"string","minLength":1,"title":"Name"},"description":{"type":"string","title":"Description","default":""},"input_schema":{"additionalProperties":true,"type":"object","title":"Input Schema"}},"type":"object","required":["capability_id","product_id","name"],"title":"PackageRequest"},"PermissionViolationRequest":{"properties":{"product_id":{"type":"string","maxLength":128,"minLength":1,"title":"Product Id"},"capability_id":{"type":"string","maxLength":192,"minLength":1,"title":"Capability Id"},"permission":{"type":"string","maxLength":64,"minLength":1,"title":"Permission"},"reporter_pubkey":{"type":"string","maxLength":128,"minLength":1,"title":"Reporter Pubkey"},"signature":{"type":"string","maxLength":256,"minLength":1,"title":"Signature"},"consumer_id":{"type":"string","maxLength":128,"title":"Consumer Id","default":""}},"type":"object","required":["product_id","capability_id","permission","reporter_pubkey","signature"],"title":"PermissionViolationRequest","description":"One signed observation that a listed capability broke its own declaration.\n\nThe declaration is NOT taken from this body — the Hub reads what the publisher\nactually declared at admission, so a reporter cannot choose which claim it is\ncontradicting."},"PlanRequest":{"properties":{"task":{"type":"string","maxLength":4000,"minLength":3,"title":"Task"},"budget_usd":{"type":"number","maximum":100000.0,"minimum":0.0,"title":"Budget Usd","default":3.0}},"type":"object","required":["task"],"title":"PlanRequest"},"PreflightRequest":{"properties":{"nodes":{"items":{"$ref":"#/components/schemas/StudioNode"},"type":"array","maxItems":16,"minItems":1,"title":"Nodes"},"max_budget_usd":{"anyOf":[{"type":"number","maximum":100000.0,"minimum":0.0},{"type":"null"}],"title":"Max Budget Usd"}},"type":"object","required":["nodes"],"title":"PreflightRequest"},"PrepareGraph":{"properties":{"nodes":{"items":{"$ref":"#/components/schemas/StudioNode"},"type":"array","maxItems":16,"minItems":1,"title":"Nodes"},"max_budget_usd":{"anyOf":[{"type":"number","maximum":100000.0,"minimum":0.0},{"type":"null"}],"title":"Max Budget Usd"},"gas_mode":{"type":"string","enum":["buyer","auto","required"],"title":"Gas Mode","default":"buyer"},"wallet":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","title":"Wallet","default":"0x0000000000000000000000000000000000000000"}},"type":"object","required":["nodes"],"title":"PrepareGraph"},"PreparePipeline":{"properties":{"gas_mode":{"type":"string","enum":["buyer","auto","required"],"title":"Gas Mode","default":"buyer"},"wallet":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","title":"Wallet","default":"0x0000000000000000000000000000000000000000"}},"type":"object","title":"PreparePipeline"},"ProveInputRequest":{"properties":{"capability_id":{"type":"string","minLength":2,"title":"Capability Id"},"input_schema":{"additionalProperties":true,"type":"object","title":"Input Schema"},"input_payload":{"additionalProperties":true,"type":"object","title":"Input Payload"}},"type":"object","required":["capability_id"],"title":"ProveInputRequest"},"QuoteRequest":{"properties":{"product_id":{"type":"string","maxLength":128,"minLength":1,"title":"Product Id"},"capability_id":{"type":"string","maxLength":128,"minLength":1,"title":"Capability Id"},"wallet":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","title":"Wallet","default":"0x0000000000000000000000000000000000000000"},"max_price_usd":{"type":"number","maximum":100000.0,"minimum":0.0,"title":"Max Price Usd"}},"additionalProperties":false,"type":"object","required":["product_id","capability_id","max_price_usd"],"title":"QuoteRequest"},"ReceiptVerifyRequest":{"properties":{"receipt":{"additionalProperties":true,"type":"object","title":"Receipt"}},"type":"object","required":["receipt"],"title":"ReceiptVerifyRequest","description":"A receipt to verify against this Hub's pinned live signing identities.\n\nThe endpoint intentionally accepts no caller-supplied public key: allowing one\nwould turn verification into a self-signed assertion. The bounded HTTP body and\nthe additional serialized-size check in the handler keep the public verifier from\nbecoming a JSON amplification surface."},"RefundApproval":{"properties":{"authorization":{"anyOf":[{"type":"string","pattern":"^0x[0-9a-fA-F]{130}$"},{"type":"null"}],"title":"Authorization"}},"additionalProperties":false,"type":"object","title":"RefundApproval"},"ReputationEventsRequest":{"properties":{"events":{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":100,"minItems":1,"title":"Events"}},"type":"object","required":["events"],"title":"ReputationEventsRequest"},"StudioNode":{"properties":{"id":{"type":"string","maxLength":64,"title":"Id","default":""},"product_id":{"type":"string","maxLength":80,"minLength":2,"title":"Product Id"},"capability_id":{"type":"string","maxLength":80,"minLength":2,"title":"Capability Id"},"input":{"additionalProperties":true,"type":"object","title":"Input"},"depends_on":{"items":{"type":"string"},"type":"array","maxItems":16,"title":"Depends On"},"input_from":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Input From"},"source_hub":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Source Hub"}},"type":"object","required":["product_id","capability_id"],"title":"StudioNode","description":"One hop of a studio blueprint — the executor's node shape, validated here too."},"StudioRunRequest":{"properties":{"nodes":{"items":{"$ref":"#/components/schemas/StudioNode"},"type":"array","maxItems":16,"minItems":1,"title":"Nodes"},"channel_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Channel Id"}},"type":"object","required":["nodes"],"title":"StudioRunRequest","description":"A blueprint submitted through the hub's same-origin run path.\n\nCapped at the executor's own limit rather than trusting it to reject: this route\nexists so a browser can reach the executor at all, and a forwarder that passes on\nwhatever it is handed is one bug away from being a general-purpose poster."},"SubcontractBlock":{"properties":{"allowance_usd":{"type":"number","maximum":1000.0,"exclusiveMinimum":0.0,"title":"Allowance Usd"},"max_depth":{"type":"integer","maximum":3.0,"minimum":1.0,"title":"Max Depth","default":1}},"type":"object","required":["allowance_usd"],"title":"SubcontractBlock","description":"A pass-through allowance for the providers of this call (mandates.md §6.2).\n\nThe root buyer sets aside ``allowance_usd`` of its own funding that the provider may\nspend on subcontractors while serving the call, down to ``max_depth`` levels. What they\ndo not spend is released when the call returns."},"TransferRequest":{"properties":{"token_id":{"type":"string","minLength":4,"title":"Token Id"},"from_address":{"type":"string","minLength":4,"title":"From Address"},"to_address":{"type":"string","minLength":4,"title":"To Address"}},"type":"object","required":["token_id","from_address","to_address"],"title":"TransferRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyBlock":{"properties":{"requested":{"type":"boolean","title":"Requested","default":true},"intent":{"type":"string","maxLength":20000,"title":"Intent","default":""},"mode":{"type":"string","pattern":"^(auto|fast|thinking|council|agent)$","title":"Mode","default":"auto"},"wait":{"type":"boolean","title":"Wait","default":false},"wait_timeout_s":{"type":"number","maximum":300.0,"minimum":1.0,"title":"Wait Timeout S","default":300}},"type":"object","title":"VerifyBlock","description":"Buyer opt-in for Pay-on-Verified settlement (escrow hold until a Metis verdict).\n\nThe buyer supplies the task `intent` the verdict is judged against; money moves\nonly after Metis scores the delivered output. `wait` holds the HTTP response\nuntil the verdict (bounded by `wait_timeout_s`); default is async — the invoke\nreturns immediately with a pending envelope resolvable at\nGET /ai-market/v2/verification/{nonce}."}}}}