{"openapi":"3.1.0","info":{"title":"agent-business","version":"0.3.0"},"paths":{"/code-research":{"post":{"summary":"Code Research","operationId":"code_research_code_research_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Code Research Code Research Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/verify":{"post":{"summary":"Verify Work","operationId":"verify_work_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Verify Work Verify Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/demo/code-research":{"get":{"summary":"Demo Code Research","operationId":"demo_code_research_demo_code_research_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Demo Code Research Demo Code Research Get"}}}}}}},"/demo/verify":{"get":{"summary":"Demo Verify","operationId":"demo_verify_demo_verify_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Demo Verify Demo Verify Get"}}}}}}},"/receipts/verify":{"post":{"summary":"Receipts Verify","description":"FREE, never paywalled: independently verify an attestation we issued.\n\necrecovers the EIP-191 signature over the canonical attestation JSON\nand compares it to our published verifier address.","operationId":"receipts_verify_receipts_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Receipts Verify Receipts Verify Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/credits/claim":{"get":{"summary":"Credits Claim","description":"Turn a paid Stripe Checkout Session into a prepaid API key.\n\nThe raw key is returned exactly once here; only its salted hash is\nstored. Re-claiming the same session is a 409, by design.","operationId":"credits_claim_credits_claim_get","parameters":[{"name":"session_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Credits Claim Credits Claim Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/stripe/webhook":{"post":{"summary":"Stripe Webhook","description":"Stripe webhook receiver. Signature-verified, event-id idempotent.","operationId":"stripe_webhook_stripe_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Stripe Webhook Stripe Webhook Post"}}}}}}},"/credits/balance":{"get":{"summary":"Credits Balance","description":"Balance + per-endpoint call estimates for an X-API-Key.","operationId":"credits_balance_credits_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Credits Balance Credits Balance Get"}}}}}}},"/watchtower/targets":{"get":{"summary":"Watchtower Targets","description":"FREE: watched services with their latest probe verdict.","operationId":"watchtower_targets_watchtower_targets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Watchtower Targets Watchtower Targets Get"}}}}}}},"/watchtower/report":{"post":{"summary":"Watchtower Report","description":"Latest signed SLA report for one watched service (substring match).","operationId":"watchtower_report_watchtower_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchtowerRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Watchtower Report Watchtower Report Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/spend-check":{"post":{"summary":"Spend Check","description":"Pre-payment counterparty check: should you pay this payee?","operationId":"spend_check_spend_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpendCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Spend Check Spend Check Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/judge":{"post":{"summary":"Judge Output","description":"Grade an agent output against a rubric; sign the score.","operationId":"judge_output_judge_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JudgeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Judge Output Judge Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/package/exists":{"post":{"summary":"Package Exists Endpoint","description":"Does this package exist in the ecosystem? Deterministic, with proof.","operationId":"package_exists_endpoint_v1_package_exists_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackageExistsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Package Exists Endpoint V1 Package Exists Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/symbol/exists":{"post":{"summary":"Symbol Exists Endpoint","description":"Does this symbol exist in the package? Negative answers carry proof.","operationId":"symbol_exists_endpoint_v1_symbol_exists_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SymbolExistsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Symbol Exists Endpoint V1 Symbol Exists Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/symbol/signature":{"post":{"summary":"Symbol Signature Endpoint","description":"Full signature + params + docstring + deprecation for one symbol.\n\nA pinned version is really resolved (exact-release ingest on miss);\nnegative answers (package/version/symbol) carry proof, signed.","operationId":"symbol_signature_endpoint_v1_symbol_signature_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SymbolSignatureRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Symbol Signature Endpoint V1 Symbol Signature Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/diff":{"post":{"summary":"Diff Endpoint","description":"Symbol-level diff between two versions of one package.\n\nbreaking = removals or signature changes; additive = additions only;\nneutral = no surface change. Unresolvable versions are a 422\n(uncharged) — a half-diff is not a deliverable.","operationId":"diff_endpoint_v1_diff_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiffRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Diff Endpoint V1 Diff Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/demo/v1/package/exists":{"post":{"summary":"Demo Package Exists Endpoint","description":"Free demo of POST /v1/package/exists (daily quota, no headers).","operationId":"demo_package_exists_endpoint_demo_v1_package_exists_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackageExistsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Demo Package Exists Endpoint Demo V1 Package Exists Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/demo/v1/symbol/exists":{"post":{"summary":"Demo Symbol Exists Endpoint","description":"Free demo of POST /v1/symbol/exists (daily quota, no headers).","operationId":"demo_symbol_exists_endpoint_demo_v1_symbol_exists_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SymbolExistsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Demo Symbol Exists Endpoint Demo V1 Symbol Exists Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/demo/v1/symbol/signature":{"post":{"summary":"Demo Symbol Signature Endpoint","description":"Free demo of POST /v1/symbol/signature (daily quota, no headers).","operationId":"demo_symbol_signature_endpoint_demo_v1_symbol_signature_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SymbolSignatureRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Demo Symbol Signature Endpoint Demo V1 Symbol Signature Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/demo/v1/diff":{"post":{"summary":"Demo Diff Endpoint","description":"Free demo of POST /v1/diff (daily quota, no headers).","operationId":"demo_diff_endpoint_demo_v1_diff_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiffRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Demo Diff Endpoint Demo V1 Diff Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/mcp/pin":{"post":{"summary":"Mcp Pin","description":"Pin a remote MCP server's tool manifest. Free wedge (demo quota).","operationId":"mcp_pin_v2_mcp_pin_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpPinRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Mcp Pin V2 Mcp Pin Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/mcp/check":{"post":{"summary":"Mcp Check","description":"Has the server's manifest drifted since the pin? Signed diff.","operationId":"mcp_check_v2_mcp_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Mcp Check V2 Mcp Check Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/mcp/report":{"post":{"summary":"Mcp Report","description":"Signed drift report from stored pin history and drift events.","operationId":"mcp_report_v2_mcp_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Mcp Report V2 Mcp Report Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/policy":{"get":{"summary":"Policy","description":"Machine-readable service policy (linked from llms.txt).","operationId":"policy_policy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Policy Policy Get"}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}}}},"/.well-known/x402":{"get":{"summary":"Well Known X402","operationId":"well_known_x402__well_known_x402_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Well Known X402  Well Known X402 Get"}}}}}}},"/.well-known/agent.json":{"get":{"summary":"Agent Registration File","description":"ERC-8004 agent registration file, referenced by our on-chain agentURI.\n\nSpec shape: https://eips.ethereum.org/EIPS/eip-8004 (registration file).","operationId":"agent_registration_file__well_known_agent_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Agent Registration File  Well Known Agent Json Get"}}}}}}},"/llms.txt":{"get":{"summary":"Llms Txt","operationId":"llms_txt_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/metrics":{"get":{"summary":"Metrics","operationId":"metrics_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"DiffRequest":{"properties":{"ecosystem":{"type":"string","pattern":"^(pypi|npm)$","title":"Ecosystem"},"package":{"type":"string","maxLength":200,"minLength":1,"title":"Package"},"from_version":{"type":"string","maxLength":50,"minLength":1,"title":"From Version"},"to_version":{"type":"string","maxLength":50,"minLength":1,"title":"To Version"}},"type":"object","required":["ecosystem","package","from_version","to_version"],"title":"DiffRequest","description":"Body for POST /v1/diff (oracle part 2)."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"JudgeRequest":{"properties":{"output":{"type":"string","maxLength":50000,"title":"Output"},"rubric":{"items":{"$ref":"#/components/schemas/RubricItem"},"type":"array","maxItems":20,"minItems":1,"title":"Rubric"},"context":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}],"title":"Context"}},"type":"object","required":["output","rubric"],"title":"JudgeRequest","description":"Body for POST /judge."},"McpCheckRequest":{"properties":{"server_url":{"type":"string","maxLength":500,"minLength":8,"title":"Server Url"},"since":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Since"}},"type":"object","required":["server_url"],"title":"McpCheckRequest","description":"Body for POST /v2/mcp/check.\n\nsince is an ISO date (pin nearest in time) or a 64-char manifest\nsha256 (that exact pin). Empty means the latest stored pin."},"McpPinRequest":{"properties":{"server_url":{"type":"string","maxLength":500,"minLength":8,"title":"Server Url"}},"type":"object","required":["server_url"],"title":"McpPinRequest","description":"Body for POST /v2/mcp/pin."},"McpReportRequest":{"properties":{"server_url":{"type":"string","maxLength":500,"minLength":8,"title":"Server Url"}},"type":"object","required":["server_url"],"title":"McpReportRequest","description":"Body for POST /v2/mcp/report."},"PackageExistsRequest":{"properties":{"ecosystem":{"type":"string","pattern":"^(pypi|npm)$","title":"Ecosystem"},"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"}},"type":"object","required":["ecosystem","name"],"title":"PackageExistsRequest"},"ReceiptRequest":{"properties":{"attestation":{"additionalProperties":true,"type":"object","title":"Attestation"},"signature":{"type":"string","minLength":1,"title":"Signature"}},"type":"object","required":["attestation","signature"],"title":"ReceiptRequest","description":"Body for POST /receipts/verify: an attestation we allegedly issued."},"ResearchRequest":{"properties":{"query":{"type":"string","maxLength":2000,"minLength":1,"title":"Query"},"context":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Context"}},"type":"object","required":["query"],"title":"ResearchRequest"},"RubricItem":{"properties":{"criterion":{"type":"string","maxLength":1000,"minLength":1,"title":"Criterion"},"weight":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Weight"}},"type":"object","required":["criterion"],"title":"RubricItem"},"SpendCheckRequest":{"properties":{"payTo":{"type":"string","maxLength":300,"minLength":1,"title":"Payto"},"amount_usd":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Amount Usd"}},"type":"object","required":["payTo"],"title":"SpendCheckRequest","description":"Body for POST /spend-check."},"SymbolExistsRequest":{"properties":{"ecosystem":{"type":"string","pattern":"^(pypi|npm)$","title":"Ecosystem"},"package":{"type":"string","maxLength":200,"minLength":1,"title":"Package"},"symbol":{"type":"string","maxLength":300,"minLength":1,"title":"Symbol"},"version":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Version"}},"type":"object","required":["ecosystem","package","symbol"],"title":"SymbolExistsRequest"},"SymbolSignatureRequest":{"properties":{"ecosystem":{"type":"string","pattern":"^(pypi|npm)$","title":"Ecosystem"},"package":{"type":"string","maxLength":200,"minLength":1,"title":"Package"},"symbol":{"type":"string","maxLength":300,"minLength":1,"title":"Symbol"},"version":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Version"}},"type":"object","required":["ecosystem","package","symbol"],"title":"SymbolSignatureRequest","description":"Body for POST /v1/symbol/signature (oracle part 2)."},"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"},"VerifyRequest":{"properties":{"job":{"additionalProperties":true,"type":"object","title":"Job"},"spec":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Spec"}},"type":"object","required":["job"],"title":"VerifyRequest","description":"Verification Oracle request. See docs/VERIFY.md for job payloads."},"WatchtowerRequest":{"properties":{"service":{"type":"string","maxLength":200,"minLength":1,"title":"Service"}},"type":"object","required":["service"],"title":"WatchtowerRequest","description":"Body for POST /watchtower/report."}}}}