{
  "kind": "lumi_seller_monitoring",
  "summary": "Opt-in monitoring for x402 sellers (XRPL first, Base supported): Lumi test-buys your endpoints with real payments and alerts you when something breaks.",
  "plans": [
    {
      "plan": "monitor",
      "name": "Monitor",
      "price_usd": "9",
      "term_days": 30,
      "auto_renew": false,
      "pay": "https://api.lumitrades.io/v1/monitor/subscribe/monitor?enrollment=<enrollment_id>",
      "summary": "30 days: one seller-funded test-buy of 1 endpoint per term (one recheck after a failure) + alerts."
    },
    {
      "plan": "monitor_plus",
      "name": "Monitor Plus",
      "price_usd": "29",
      "term_days": 30,
      "auto_renew": false,
      "pay": "https://api.lumitrades.io/v1/monitor/subscribe/monitor_plus?enrollment=<enrollment_id>",
      "summary": "30 days: weekly seller-funded test-buys of up to 20 endpoints + alerts."
    },
    {
      "plan": "audit",
      "name": "Audit",
      "price_usd": "99",
      "term_days": null,
      "auto_renew": false,
      "pay": "https://api.lumitrades.io/v1/monitor/subscribe/audit?enrollment=<enrollment_id>",
      "summary": "One-off: one seller-funded test-buy of every listed endpoint of the seller, with a full report signed by Lumi's wallet."
    }
  ],
  "payment": "x402 on XRPL (XRP, RLUSD, USDC) or Base (USDC). One payment = one term; renew by paying again (stacks after the current term). Reminders 3 days before the end.",
  "steps": [
    "1. GET https://api.lumitrades.io/v1/monitor/challenge?pay_to=<your payTo> (free): a message to sign. XRPL: sign the UTF-8 hex of the message with the payTo's master or regular key (ripple-keypairs) and send public_key. Base: EIP-191 personal_sign from the payTo (smart-contract wallets/EIP-1271 are not supported yet).",
    "2. POST https://api.lumitrades.io/v1/monitor/enroll {message, signature, public_key?, endpoints:[{url, method?, body?}], webhook_url?, email?} (free). Each endpoint is quote-checked: it must pay the proven payTo and cost ≤ $0.1 per buy, or it is rejected with the reason. Returns enrollment_id, a management token and the webhook signing secret (shown once).",
    "3. Pay a plan: GET https://api.lumitrades.io/v1/monitor/subscribe/{monitor|monitor_plus|audit}?enrollment=<id> (x402).",
    "4. Public entry: https://api.lumitrades.io/v1/monitor/sellers/<id>; badge: https://api.lumitrades.io/v1/monitor/badge/<id>.svg (or .json)."
  ],
  "alerts": {
    "kinds": [
      "paid_no_data",
      "paid_invalid_data",
      "http_5xx",
      "http_error",
      "timeout",
      "pay_to_changed",
      "price_changed",
      "schema_changed",
      "recovered",
      "renewal_due",
      "plan_lapsed"
    ],
    "webhook": "POST JSON {type:'lumi.monitor.finding', enrollment_id, finding, seller_page}; header X-Lumi-Signature: t=<unix>,v1=<hex HMAC-SHA256(secret, t + '.' + body)>.",
    "email": "Plain-text email to the address given at enrolment (kept private, never shown publicly)."
  },
  "replies": "POST https://api.lumitrades.io/v1/monitor/replies {enrollment_id, finding_id, text} with Authorization: Bearer <management token>. Replies are shown next to the finding; findings cannot be removed.",
  "methodology": {
    "what": "Seller monitoring (opt-in, paid by the seller): Lumi buys the seller's own x402 endpoints on a schedule with a real payment and checks what comes back.",
    "checks": [
      "paid_no_data / paid_invalid_data: payment settled but no data, an empty body or a non-JSON body where JSON was declared",
      "http_5xx / timeout: the paid retry failed with a server error or did not answer within 20 s",
      "pay_to_changed: the 402 quote pays a different address than the one the seller proved at enrolment",
      "price_changed: the quoted price moved more than 10% (USD-normalised) from the enrolled price",
      "schema_changed: the structure (keys and types) of the paid response changed",
      "recovered: a previously failing endpoint delivers again"
    ],
    "cadence": {
      "monitor": "1 endpoint, 1 test-buy per 30-day term (+1 recheck after a failure)",
      "monitor_plus": "up to 20 endpoints, weekly",
      "audit": "one-off: every listed endpoint once (catalog listings for the payTo + endpoints the seller names)"
    },
    "test_buy_cap": "Each test-buy is capped at $0.10 and funded from the plan fee; planned test-buy spend must stay within 50% of the fee. Endpoints above the cap are rejected at enrolment (Audit: quote-checked only, no buy).",
    "safeguards": [
      "Paying never changes a score, tier or label. The scoring and catalog code does not read monitoring tables; a monitored seller is checked exactly like everyone else.",
      "Seller-funded test-buys are labelled funding: 'seller-funded' everywhere they appear; Lumi's own independent checks stay separate.",
      "Findings are append-only. A seller can reply to a finding (the reply is shown next to it) but cannot edit or remove it.",
      "The badge is computed live: it is removed automatically when the latest test fails, when no recent test exists, or when the plan lapses.",
      "Corrections Lumi makes to its own data are listed in a public correction log (GET /v1/monitor/corrections); nothing is removed silently.",
      "A paid plan is a commercial relationship and is disclosed on the seller's public entry (seller page, trust lookups and the licence feed).",
      "Plans are 30-day terms (Audit is one-off) with no auto-renew. Renewing means paying again; reminders go out 3 days before the end.",
      "Enrolment requires proof of control of the payTo (a signature from that wallet). Lumi never asks for keys or seeds."
    ],
    "terms": [
      "Refunds: plans are not refundable once paid, except when Lumi cannot perform the monitoring it sold (for example it cannot reach or pay your endpoints because of a fault on Lumi's side). Then the unperformed part of the term is refunded.",
      "Audit reports: the full report is private to the seller and is only shown with the management token. Only its report_hash and Lumi's signature over it are public, so anyone can check a report the seller chooses to share.",
      "No warranty: monitoring results are dated observations (quote checks and test-buys), not a rating, endorsement, audit opinion or guarantee. They can be incomplete, delayed or wrong. Provided as is.",
      "Liability: to the extent permitted by law, Lumi is not liable for losses from decisions made using monitoring results, alerts or reports. Not financial advice.",
      "Terms: 30-day plans (Audit is one-off), no auto-renew; renewing means paying again. Changes to these terms are dated here."
    ],
    "full": "https://api.lumitrades.io/v1/trust/methodology"
  },
  "safeguards": [
    "Paying never changes a score, tier or label. The scoring and catalog code does not read monitoring tables; a monitored seller is checked exactly like everyone else.",
    "Seller-funded test-buys are labelled funding: 'seller-funded' everywhere they appear; Lumi's own independent checks stay separate.",
    "Findings are append-only. A seller can reply to a finding (the reply is shown next to it) but cannot edit or remove it.",
    "The badge is computed live: it is removed automatically when the latest test fails, when no recent test exists, or when the plan lapses.",
    "Corrections Lumi makes to its own data are listed in a public correction log (GET /v1/monitor/corrections); nothing is removed silently.",
    "A paid plan is a commercial relationship and is disclosed on the seller's public entry (seller page, trust lookups and the licence feed).",
    "Plans are 30-day terms (Audit is one-off) with no auto-renew. Renewing means paying again; reminders go out 3 days before the end.",
    "Enrolment requires proof of control of the payTo (a signature from that wallet). Lumi never asks for keys or seeds."
  ],
  "corrections": "https://api.lumitrades.io/v1/monitor/corrections",
  "sellers": "https://api.lumitrades.io/v1/monitor/sellers",
  "refunds": "Refunds: plans are not refundable once paid, except when Lumi cannot perform the monitoring it sold (for example it cannot reach or pay your endpoints because of a fault on Lumi's side). Then the unperformed part of the term is refunded. Contact via lumitrades.io.",
  "audit_reports": "Audit reports: the full report is private to the seller and is only shown with the management token. Only its report_hash and Lumi's signature over it are public, so anyone can check a report the seller chooses to share.",
  "terms": {
    "version": "2026-10-22",
    "terms": [
      "Refunds: plans are not refundable once paid, except when Lumi cannot perform the monitoring it sold (for example it cannot reach or pay your endpoints because of a fault on Lumi's side). Then the unperformed part of the term is refunded.",
      "Audit reports: the full report is private to the seller and is only shown with the management token. Only its report_hash and Lumi's signature over it are public, so anyone can check a report the seller chooses to share.",
      "No warranty: monitoring results are dated observations (quote checks and test-buys), not a rating, endorsement, audit opinion or guarantee. They can be incomplete, delayed or wrong. Provided as is.",
      "Liability: to the extent permitted by law, Lumi is not liable for losses from decisions made using monitoring results, alerts or reports. Not financial advice.",
      "Terms: 30-day plans (Audit is one-off), no auto-renew; renewing means paying again. Changes to these terms are dated here."
    ]
  },
  "disclaimer": "Monitoring results are dated observations, not an endorsement, audit opinion or guarantee. Not financial advice."
}