{"service":"x402pulse","methodologyVersion":"xp-1.0.0","published":"2026-09-18T00:34:18.571Z","principle":"This service measures whether somebody else's x402 endpoint answered, how fast, and whether its 402 offer was well formed. It states what it checked, over what window, and what the answer does not establish. No LLM inference anywhere: every response is a deterministic computation over recorded observations or a live read.","whatAProbeIs":{"method":"Every tracked endpoint is requested on a fixed interval. The response status, latency, and — where a 402 is returned — the structure of the payment offer are recorded. Nothing is purchased and nothing is settled.","interval":"Every 10 minutes per endpoint, subject to the scheduler running.","measures":["reachability","latency","whether the endpoint spoke x402 at all","whether the 402 offer parsed and carried a usable price, asset, network and payTo"],"doesNotMeasure":["whether the data behind the endpoint is correct","whether the seller is solvent, honest, or will still exist next week","whether a payment would actually settle — no payment is attempted","anything about the endpoint from a vantage point other than this server"]},"evidenceModel":{"assurance":"Assurance is an ordinal label describing HOW an answer was produced (observed / deterministic / structural). It is deliberately NOT a numeric score, because a number implies a calibration that has never been performed. A grade is a summary of measurements, not a probability that a seller is trustworthy.","freshness":"A verdict describes the observations held at request time. An endpoint observed five minutes ago and an endpoint observed once a week ago can carry the same grade shape; the record count and window are returned so the difference is visible.","absenceOfHistory":"Absence of history is NOT evidence of unreliability. A newly listed endpoint has a short record because it is new, not because it failed. Endpoint history explicitly says so rather than letting a thin record read as a bad one.","signature":"Responses are Ed25519-signed as a compact JWS at _attestation.jws, verifiable against the JWK set at /.well-known/signing-key.json. A valid signature proves the response came from this service unaltered. It does not prove the measurement is correct. A signed wrong answer is still wrong.","selfObservation":"Four of the seed endpoints are operated by the same person who runs this observatory. Records from those hosts carry \"self\": 1 in the archive. They are tagged rather than removed, because an observatory that observes itself without saying so is the same defect as a self-reported ecosystem dashboard."},"archive":{"what":"One rollup record per endpoint per day, kept permanently. Raw probes are capped and used only for latency percentiles; the daily rollups are the record.","canonicalForm":"One definition of a record, shared by the anchor and the published export. Two definitions would drift, and a drifted proof stops matching the data it claims to cover without anything failing.","anchoring":"Each day a Merkle root is built over that day's canonical records, chained to the previous day's root, and submitted to OpenTimestamps calendars which aggregate into Bitcoin.","pendingVsAttested":"A calendar's first answer is a PENDING attestation — a promise to include the digest, not a block. The Bitcoin attestation is collected later by upgrading the proof. Until a proof is upgraded it rests on the calendars' own records, which is weaker. /v1/archive/anchors publishes how many proofs are in each state; do not read \"anchored\" as \"Bitcoin-attested\" without checking.","backfill":"An anchor made in arrears proves the records existed no later than the anchoring time. It does NOT prove they existed on the date they describe — nothing can establish that retroactively. Backfilled entries are labelled and counted.","continuity":"Continuity between anchored days is NOT established. The service redeploys, and each restart resets the scheduler. A day that is anchored says what was held that day; it does not prove uninterrupted observation between days.","cadence":"The dataset manifest enumerates expected days against present days, because an anchor can only attest what was committed — it cannot reveal a day that was never committed. A gap is stated rather than being invisible.","verifyWithoutTrustingUs":["Take a day's records exactly as served, one JSON object per line.","sha256 each line to get the leaves, in the order given.","Build a binary Merkle tree, promoting an odd node rather than duplicating it.","That root must equal merkleRoot for the day in /v1/archive/anchors.","sha256(prevChained || merkleRoot) must equal that day's chained value.","Verify that value against its OpenTimestamps proof with the standard `ots` client, and check the block it names against any block explorer. Nothing in that last step is ours."]},"endpoints":[{"path":"/v1/verdict","price":"$0.03","decision":"endpoint_quality","checks":["availability over the held window","latency percentiles","402 offer conformance","price drift","payTo stability"],"assurance":{"level":"observed","basis":"direct measurement from this server; no payment attempted"},"limitations":["Describes observations from one vantage point.","Says nothing about the correctness or value of the data sold.","A high grade is the absence of measured faults, not an endorsement."]},{"path":"/v1/rankings","price":"$0.07","decision":"comparative_quality","checks":["the same measurements, ordered across tracked endpoints"],"assurance":{"level":"observed","basis":"ordering of measured values"},"limitations":["Only endpoints tracked here are ranked; the ranking is not of the ecosystem.","Endpoints with short histories are ranked on less evidence, which the record count shows."]},{"path":"/v1/attest","price":"$0.12","decision":"signed_snapshot","checks":["a verdict, signed, with a 24h validity window"],"assurance":{"level":"observed","basis":"the signature covers the measurement, not its truth"},"limitations":["An attestation proves what this service measured and when. It is not a warranty to any third party."]},{"path":"/v1/feed","price":"$0.15","decision":"bulk_quality","checks":["every tracked endpoint in one response, for routers and aggregators"],"assurance":{"level":"observed","basis":"the same measurements in bulk"},"limitations":["A snapshot. Anything acting on it should re-read rather than cache indefinitely."]},{"path":"/v1/archive/full","price":"$0.50","decision":"historical_record","checks":["every day held, with its Merkle root and timestamp proof"],"assurance":{"level":"deterministic","basis":"the records are the records; the roots are recomputable by the buyer"},"limitations":["Coverage begins at observingSince and no earlier.","Backfilled days carry a weaker claim, and say so.","Continuity between days is not established."]}],"free":["/v1/methodology — this document","/v1/datasets/manifest — what the archive holds, its cadence, and how to verify it","/v1/datasets/day/{day} — the most recent 7 days, exactly as served","/v1/archive/anchors — every root, its chain link, and its timestamp proof state","/v1/selfcheck — what is currently broken, including things broken about this service"],"globalLimitations":["Measurements are informational signals for routing and diligence. They are not a rating, a certification, or advice.","Absence of a measured fault is not a positive assurance about a seller.","This service observes from one host, on one network path, at one cadence. A different vantage point may see different results."],"state":{"observingSince":"2026-08-07","endpointsTracked":300,"daysAnchored":41,"proofsBitcoinAttested":121,"proofsPending":2,"timestampStatus":"Partly upgraded. Some proofs carry a Bitcoin attestation; others are still pending."},"corrections":"Errors can be reported to contact@chainverdict.xyz. Material changes increment methodologyVersion and are reflected here."}