# relay-eval relay-eval compares what multiple AT Protocol relays see during the same measurement window. It is mainly for answering: "did this relay emit the same repo activity as the rest of the observed relay set?" Site: - https://relay-eval.waow.tech/ - Source: https://tangled.sh/@zzstoatzz.io/relay/tree/main/relay-eval - Human API guide: https://relay-eval.waow.tech/diffs-api Important vocabulary: - repo: an AT Protocol repository identified by a DID. - relay: a service that aggregates repository synchronization streams. - stream gap: a repo was observed on at least one relay during a run, but not on the relay being inspected. - missing repo: a row in that stream-gap set. This is a stream-comparison fact, not by itself proof that the account is currently live. - checked row: relay-eval spent resolver/classifier effort on the row. - unchecked row: the row was outside the resolver/classifier budget. - next_cursor: an opaque resume token. Pass it back as `cursor` to fetch the next page. It is not a numeric page number. Core JSON APIs: 1. Latest run summary GET https://relay-eval.waow.tech/api/latest Returns the current dashboard snapshot: run metadata, per-relay coverage stats, small diff samples, and aggregate diff counts. Diff samples are intentionally small; use the Diffs API for the full list. 2. Diffs API: fetch missing repos GET https://relay-eval.waow.tech/api/latest/diffs?relay=&limit=5000 GET https://relay-eval.waow.tech/api/runs//diffs?relay=&limit=5000 Use `/api/latest/diffs` for convenience. Use `/api/runs//diffs` when exporting or paging so every response comes from the same measurement run. Common parameters: - relay=: relay being inspected, for example relay.xero.systems. - limit=: rows per response. Default 1000, maximum 5000. - cursor=: resume token from the previous response. - lane=live: checked rows that look like likely live stream gaps. - lane=unchecked: rows not checked because the classifier budget was not spent. - lane=review: resolver failures, malformed DIDs, unsupported methods, invalid DID documents, or legacy unresolved rows. - lane=inactive: rows with inactive/no-PDS evidence. - lane=checked: all rows except `classification_not_attempted`. - classification=