{"supership_network":{"services_indexed":47814,"total_observations":137219,"total_receipts":43,"receipts_24h":0,"networks":["base-mainnet","base-sepolia"],"status":"early_network","maturity_note":"Early network. Trust scores are currently observatory-only (based on on-chain payment volume and payer counts). Receipt-powered rankings activate as agents contribute outcome data. Every receipt makes routing better for all agents."},"data_provenance":{"bazaar_services":{"what":"Registry of x402 services discovered on Base mainnet","how_collected":"Automated indexing of x402 HTTP 402 payment responses observed on Base mainnet. When an agent pays for a service via x402, the on-chain USDC transfer and the service URL are recorded. No scraping, no self-reporting by providers.","fields":"resource (URL), calls_30d, payers_30d, price_usd, network, last_called_at, first_seen_at","integrity":"Service entries are created from on-chain evidence (USDC transfers on Base). Call and payer counts are derived from on-chain transaction volume. Services cannot self-register or inflate their own counts without real payments occurring.","current_size":47814},"bazaar_observations":{"what":"Time-series health observations for indexed services","how_collected":"Periodic re-observation of all indexed services. Each observation records current call volume, payer count, price changes, and computes anomaly scores from variance in these metrics.","anomaly_scoring":"anomaly_score (0-1) computed from: call volume variance vs 7-day baseline, payer churn rate, price instability. Threshold: > 0.3 triggers -15 penalty.","dying_detection":"is_dying = true when: calls_30d drops > 80% from peak, or payers_30d drops to 0 while previously > 5. Triggers -30 penalty.","current_size":137219},"receipts":{"what":"Agent-submitted outcome reports","how_collected":"Agents voluntarily POST /receipt after calling a service. Supership does not require, coerce, or pay for receipt submission.","integrity":"Receipts are classified by provenance: Class A (SDK + route_id + on-chain tx_hash, weight 1.0) provides the strongest signal. Class D (anonymous, weight 0.1) provides the weakest. Weighted scoring prevents low-quality receipts from dominating.","current_size":43}},"trust_scoring":{"formula":"base(50) + volume_bonuses(calls_30d) + payer_bonuses(payers_30d) - penalties(anomalies, dying)","bonus_thresholds":{"calls_30d > 100":"+15","calls_30d > 1000":"+10","payers_30d > 5":"+10","payers_30d > 50":"+10"},"penalty_thresholds":{"anomaly_score > 0.3":"-15 (in any of last 3 observations)","is_dying = true":"-30 (in any of last 3 observations)"},"scoring_basis":{"observatory_only":"Score derived from on-chain payment volume and health observations. No receipt data factored in. This is the current state for most services.","observatory_and_receipts":"Score includes receipt-backed outcome data (requires >= 10 receipts for the service). Receipt data will blend into scoring as volume grows."},"receipt_threshold":10,"verifiable":"GET /api/scoring-formula returns the scoring function source code, Ed25519-signed"},"join":{"as_consumer":"GET /check?url=<service> to verify trust before paying. Free.","as_reporter":"POST /receipt to report outcomes. Free. Improves routing for everyone.","as_provider":"Your service may already be indexed. GET /passport?host=<your_domain> to check.","as_router":"GET /v2/route?query=<what_you_need> to find the best service. $0.001 USDC."},"discovery":{"agent_json":"/.well-known/agent.json","llms_txt":"/llms.txt","openapi":"/openapi.json","scoring_formula":"/api/scoring-formula"},"data_policy":{"receipts":"Receipts store service_url, outcome, latency, quality rating. Request/response bodies are SHA-256 hashed before storage using JSON.stringify canonicalization. Raw bodies are never stored, transmitted, or logged.","hashing":{"algorithm":"SHA-256","canonicalization":"JSON.stringify(value) before hashing. No salting (hashes are content-addressable, not secret). This means identical payloads produce identical hashes -- this is intentional for deduplication.","fields_hashed":["task_description -> task_hash","request_body -> request_hash","response_body -> response_hash"],"fields_stored_raw":["service_url","outcome","latency_ms","quality_rating","receipt_class"],"privacy_note":"Low-entropy fields (e.g. outcome=\"complete\") are stored as-is, not hashed, because hashing them provides no privacy benefit. High-entropy fields (request/response bodies) are hashed."},"agent_tracking":{"method":"In-memory Map keyed by x-api-key header, x-agent-id header, or IP address (checked in that order)","persistence":"RAM only. Cleared on server restart. No disk, no database, no external service.","data_stored":"Call count, endpoint usage counts, first/last seen timestamps. No request/response content.","purpose":"Route memory (tactic 7) -- returning agents get personalized responses."},"retention_period":"Receipt data retained indefinitely for trust scoring. Agent session data is ephemeral (in-memory only).","no_pii":"No personally identifiable information is collected, stored, or inferred. IP addresses are used only for rate limiting and agent session keying, not stored in receipts.","ip_in_receipts":"The ip_address field in the receipts table stores the submitting IP. This is used for anti-Sybil rate limiting, not identification."},"anti_sybil":{"current_defenses":{"receipt_weighting":"Class A (SDK + route_id + on-chain tx_hash) weight 1.0. Class D (anonymous) weight 0.1. Sybil attacks using D-class receipts have 10x less impact than legitimate A-class reports.","rate_limiting":"20 receipt submissions per IP per hour. 60 free API calls per IP per minute. Prevents automated flooding.","class_a_verification":"Class A requires tx_hash field. Currently format-checked (valid hex string). On-chain verification is on the roadmap.","economic_friction":"Class A receipts require a real x402 payment to have occurred (tx_hash). Generating fake Class A receipts requires spending real USDC."},"known_attack_vectors":{"class_d_flooding":"An attacker can submit many D-class receipts (weight 0.1 each). Mitigation: rate limit (20/hr/IP) caps impact. At weight 0.1, an attacker needs 100 fake D-class receipts to equal 10 legitimate A-class receipts.","self_reporting_loops":"A service provider could submit receipts about their own service. Mitigation: D-class weight (0.1) limits self-reporting impact. A-class requires third-party SDK + route_id.","observation_gaming":"bazaar_services counts are derived from on-chain data. Gaming requires real USDC transactions on Base mainnet -- economically expensive to fake at scale."},"roadmap":["On-chain tx_hash validation: verify Class A tx_hash against Base mainnet USDC transfer logs","Stake-weighted reputation: agents stake USDC to boost receipt credibility","Cross-agent corroboration: receipts from multiple independent agents weighted higher","Temporal decay: old receipts lose weight over time"]},"provider_verification":{"status":"design_complete","target":"Q3 2026","methods":[{"method":"dns_txt","description":"Provider sets DNS TXT record _supership.<domain> = <base_wallet_address>","verification":"Supership resolves DNS, matches wallet to x402 pay_to address on-chain"},{"method":"wallet_signature","description":"Provider signs a challenge message with the wallet that receives x402 payments","verification":"Supership verifies Ed25519/ECDSA signature matches on-chain pay_to address"}],"benefits":"Verified providers get a \"verified\" badge on passport, ability to update description, and higher weight in routing.","endpoint":"POST /v2/verify-provider (not yet live)"},"schema_version":"1.0.0","_retention":{"preference_signal":{"endpoint":"/network","latency_ms":2,"quality":"fast","reliability":"up"},"cache_until":"2026-05-21T05:39:37.770Z","cache_ttl_seconds":300,"schema_version":"1.0.0","agent_session":{"total_calls":1,"endpoints_used":1,"returning":false},"network":{"services_indexed":47814,"receipts_total":43,"receipts_24h":0,"agents_active_1h":1}}}