{"service":"Seneschal Private Watch","spec":"view-key based payment monitoring + on-demand historical lookups","chains":["monero","zcash"],"pricing":{"model":"prepaid credit meter (per-day idle rate + per-call delivery rate)","rate_per_day_atomic":"20000","rate_per_day_usd":"0.02","rate_per_call_atomic":"5000","rate_per_call_usd":"0.005","low_credit_threshold_atomic":"40000","low_credit_threshold_usd":"0.04","starter_credit_atomic":"100000","starter_credit_usd":"0.1","watch_creation":"$0.10","topup_tiers":[{"path":"POST /v1/private/topup","price":"$0.10","credit_atomic":"100000"},{"path":"POST /v1/private/topup-1","price":"$1.00","credit_atomic":"1000000"},{"path":"POST /v1/private/topup-5","price":"$5.00","credit_atomic":"5000000"}],"topup_custom":{"path":"POST /v1/private/topup-custom","price":"variable (your choice within bounds)","body":"{ watchId, watchToken, amountAtomic } where amountAtomic is between 100_000 and 25_000_000 (0.10 – 25.00 USDC)","note":"lets a UI present a slider rather than three fixed tiers; same credit math, same webhook contract"},"historical_lookup":{"path":"POST /v1/private/historical","price":"$0.50","returns":"spendable_atomic + spent_atomic + total_received_atomic + (optional) per-note breakdown","note":"one-shot scan; view key NEVER persists in our DB"},"derive_viewkey":{"path":"POST /v1/private/derive-viewkey","price":"free (rate-limited)","supported_chains":["zcash"],"warning":"transmits your seed phrase to our server in plaintext over TLS; we do not store it but a network-attacker between you and us would see it. For maximum safety derive offline using the orchard-scanner binary on a trusted machine."}},"poll_interval_sec":180,"max_delivery_attempts":50,"max_watch_lifetime_days":365,"paywall_enabled":true,"upstream":{"ok":true,"status":200,"lightwallet":{"connected":true,"host":"localhost","port":"9067","useTLS":true,"chainName":"main","blockHeight":3406260,"version":"v0.4.19"}},"security":{"view_key_encryption":"AES-256-GCM with operator-supplied master key (PRIVATE_WATCH_ENCRYPTION_KEY)","webhook_signature":"HMAC-SHA256 (per-watch secret in X-Seneschal-Signature: sha256=…)","webhook_url_scheme":"https only","webhook_ssrf_guard":"private IPv4/IPv6 ranges, loopback, link-local, RFC6598 CGNAT and cloud-metadata IPs are rejected at creation; the hostname is then DNS-resolved and the result re-checked","view_key_permissions":"view keys grant read-only visibility into incoming transactions; they CANNOT spend funds. Handing one to a third-party service does not put your balance at risk.","historical_view_key_handling":"historical lookups stream the view key through to NFPT in-memory only — never written to our SQLite or logs."},"surge_pricing":{"base_day_rate_atomic":"20000","base_day_rate_usd":"$0.02","base_call_rate_atomic":"5000","base_call_rate_usd":"$0.005","max_day_rate_atomic":"250000","max_day_rate_usd":"$0.25","max_call_rate_atomic":"62500","max_call_rate_usd":"$0.0625","surge_divisor":100,"active_watches":0,"current_day_rate_atomic":"20000","current_day_rate_usd":"$0.02","current_call_rate_atomic":"5000","current_call_rate_usd":"$0.005","current_factor":1,"current_tier":"base","formula":"dayRate = base * (1 + activeWatches / 100), capped at $0.25/day","notes":"Your watch locks in the rate that was in effect at creation time and keeps that rate for its lifetime. Existing watches do not re-price when the global surge climbs."},"crypto_topup":{"accepted_chains":["monero","zcash"],"min_usd":2,"max_usd":500,"spread_bps":400,"quote_ttl_sec":900,"confirmations":{"monero":10,"zcash":8},"endpoints":{"create":"POST /v1/private/watch-crypto { chain, address, viewKey, webhookUrl, birthdayHeight?, payWith?, amountUsdCents? } — create AND fund a watch in XMR/ZEC; no USDC, no EVM wallet, no x402","quote":"POST /v1/private/topup-crypto { watchId, watchToken, chain, amountUsdCents }","status":"GET /v1/private/topup-crypto/{quoteId} (header x-watch-token)"},"note":"Create or fund a watch by paying in Monero or Zcash. Creation starts the watch immediately on a small grace credit; the quoted credit lands when your coin payment confirms. We detect the payment with the same view-key scanner the product sells: the box holds only a view key for the receiving wallet, never a spend key.","quotes":{"pending":0,"confirming":0,"settled":0,"expired":3,"cancelled":0,"settled_usd_cents":0}},"integration":{"snippets":"GET /v1/private/snippets (free) — copy-paste HMAC webhook receivers for Node, Python and PHP with the live signature header baked in; ?lang=node|python|php for one language.","test_webhook":"POST /v1/private/watch/{id}/test (header x-watch-token) — fires a synthetic signed delivery at your endpoint."},"checkout":{"summary":"Accept Monero/Zcash payments on YOUR site/bot/agent with zero custody: invoices pay your watched wallet directly, we detect via your view key and webhook you. Flat settlement fee off the watch credit meter — never a percentage.","settle_fee_usd":0.02,"endpoints":{"info":"GET /v1/checkout (free) — full how-to, fees, limits","create_invoice":"POST /v1/checkout/invoices { checkoutKey | watchId+watchToken, amountUsdCents, orderId?, description?, successUrl?, ttlMinutes? }","invoice_status":"GET /v1/checkout/invoices/{invoiceId} (public — the pay page polls this)","mint_key":"POST /v1/checkout/keys { watchId, watchToken, label?, maxAmountUsdCents? } — restricted key, safe to embed client-side"},"stats":{"total":2,"expired":2,"keys":1}}}