x402.professorsausages.com

https://x402.professorsausages.com/news/timeline

Shares a payout wallet with 108 other endpoints — its adoption is attributed from that shared wallet's traffic, not earned exclusively.

Volume of matching headlines over time (hour/day buckets) plus average sentiment per bucket with its provenance (GDELT document tone vs local lexicon, never a silent null) — a local sentiment timeline over the retained multi-day archive

61
reliability

Reliability & health

Uptime and response time from our own unpaid probes, plus the reliability score built from them.

Uptime

100.0% avg
0% 50% 100% Mon 6 PMThu 1 AMSat 2 AMMon 2 PM

Response time

p50 15ms · p95 25ms
0ms 150ms 300ms Mon 6 PMThu 1 AMSat 2 AMMon 2 PM
Data table
Reliability history per time bucket over the last 7 days (hourly).
Bucket Uptime Probes Response time
9/28/2026, 6:00:00 PM 100% 1 12ms
9/28/2026, 8:00:00 PM 100% 1 10ms
9/28/2026, 10:00:00 PM 100% 1 13ms
9/29/2026, 12:00:00 AM 100% 1 17ms
9/29/2026, 1:00:00 AM 100% 1 16ms
9/29/2026, 2:00:00 AM 100% 1 12ms
9/29/2026, 4:00:00 AM 100% 1 10ms
9/29/2026, 6:00:00 AM 100% 1 10ms
9/29/2026, 8:00:00 AM 100% 1 19ms
9/29/2026, 9:00:00 AM 100% 1 10ms
9/29/2026, 11:00:00 AM 100% 1 9ms
9/29/2026, 1:00:00 PM 100% 1 11ms
9/29/2026, 3:00:00 PM 100% 1 11ms
9/29/2026, 4:00:00 PM 100% 1 32ms
9/29/2026, 6:00:00 PM 100% 1 12ms
9/29/2026, 8:00:00 PM 100% 1 12ms
9/29/2026, 10:00:00 PM 100% 1 13ms
9/30/2026, 12:00:00 AM 100% 1 13ms
9/30/2026, 2:00:00 AM 100% 1 24ms
9/30/2026, 4:00:00 AM 100% 1 25ms
9/30/2026, 6:00:00 AM 100% 1 13ms
9/30/2026, 7:00:00 AM 100% 1 16ms
9/30/2026, 10:00:00 AM 100% 1 16ms
9/30/2026, 11:00:00 AM 100% 1 17ms
9/30/2026, 2:00:00 PM 100% 1 15ms
9/30/2026, 4:00:00 PM 100% 1 19ms
9/30/2026, 6:00:00 PM 100% 1 15ms
9/30/2026, 7:00:00 PM 100% 1 12ms
9/30/2026, 9:00:00 PM 100% 1 16ms
9/30/2026, 11:00:00 PM 100% 1 13ms
10/1/2026, 1:00:00 AM 100% 1 19ms
10/1/2026, 2:00:00 AM 100% 1 15ms
10/1/2026, 3:00:00 AM 100% 1 13ms
10/1/2026, 5:00:00 AM 100% 1 11ms
10/1/2026, 7:00:00 AM 100% 1 17ms
10/1/2026, 9:00:00 AM 100% 1 21ms
10/1/2026, 10:00:00 AM 100% 1 23ms
10/1/2026, 12:00:00 PM 100% 1 13ms
10/1/2026, 2:00:00 PM 100% 1 13ms
10/1/2026, 4:00:00 PM 100% 1 18ms
10/1/2026, 5:00:00 PM 100% 1 19ms
10/1/2026, 7:00:00 PM 100% 1 18ms
10/1/2026, 9:00:00 PM 100% 1 14ms
10/1/2026, 11:00:00 PM 100% 1 18ms
10/2/2026, 1:00:00 AM 100% 1 14ms
10/2/2026, 2:00:00 AM 100% 1 13ms
10/2/2026, 3:00:00 AM 100% 1 19ms
10/2/2026, 5:00:00 AM 100% 1 18ms
10/2/2026, 7:00:00 AM 100% 1 13ms
10/2/2026, 9:00:00 AM 100% 1 13ms
10/2/2026, 10:00:00 AM 100% 1 20ms
10/2/2026, 12:00:00 PM 100% 1 273ms
10/2/2026, 2:00:00 PM 100% 1 14ms
10/2/2026, 3:00:00 PM 100% 1 18ms
10/2/2026, 5:00:00 PM 100% 1 18ms
10/2/2026, 7:00:00 PM 100% 1 13ms
10/2/2026, 9:00:00 PM 100% 1 19ms
10/2/2026, 11:00:00 PM 100% 1 16ms
10/3/2026, 12:00:00 AM 100% 1 17ms
10/3/2026, 2:00:00 AM 100% 1 14ms
10/3/2026, 3:00:00 AM 100% 1 13ms
10/3/2026, 5:00:00 AM 100% 1 14ms
10/3/2026, 7:00:00 AM 100% 1 17ms
10/3/2026, 9:00:00 AM 100% 1 12ms
10/3/2026, 10:00:00 AM 100% 1 12ms
10/3/2026, 12:00:00 PM 100% 1 19ms
10/3/2026, 2:00:00 PM 100% 1 13ms
10/3/2026, 3:00:00 PM 100% 1 12ms
10/3/2026, 5:00:00 PM 100% 1 11ms
10/3/2026, 7:00:00 PM 100% 1 14ms
10/3/2026, 9:00:00 PM 100% 1 17ms
10/3/2026, 11:00:00 PM 100% 1 17ms
10/4/2026, 1:00:00 AM 100% 1 17ms
10/4/2026, 2:00:00 AM 100% 1 18ms
10/4/2026, 3:00:00 AM 100% 1 16ms
10/4/2026, 5:00:00 AM 100% 1 14ms
10/4/2026, 7:00:00 AM 100% 1 14ms
10/4/2026, 9:00:00 AM 100% 1 12ms
10/4/2026, 1:00:00 PM 100% 1 72ms
10/4/2026, 3:00:00 PM 100% 1 13ms
10/4/2026, 4:00:00 PM 100% 1 41ms
10/4/2026, 6:00:00 PM 100% 1 15ms
10/4/2026, 8:00:00 PM 100% 1 11ms
10/5/2026, 2:00:00 AM 100% 1 24ms
10/5/2026, 7:00:00 AM 100% 1 15ms
10/5/2026, 8:00:00 AM 100% 1 15ms
10/5/2026, 9:00:00 AM 100% 1 14ms
10/5/2026, 11:00:00 AM 100% 1 16ms
10/5/2026, 1:00:00 PM 100% 1 25ms
10/5/2026, 2:00:00 PM 100% 1 12ms
61
Composite reliability — the weighted average of the dimensions below, on a 0–100 scale.
Availability
94

How often it was reachable when we probed it (weight 35%).

Latency
100

How quickly it answers when it is up — fast scores high (weight 20%).

Security
100

Whether it serves over working TLS / https (weight 15%).

Transparency
61

Whether the operator disclosed what it does — description, schema, identity (weight 15%).

Activity
2

Observed on-chain payments to this endpoint's wallet — transactions, volume, and distinct paying wallets over the last month (weight 15%; not yet measured when we have not seen its wallet settle).

Confidence 100% — how much probe evidence backs this score. A thin history is flagged, not hidden.

See the scoring methodology for exactly how each number is computed.

Payment

Currencies
USDC
Networks
base
Facilitator
unknown
SDK
unknown

Operator

Company
inferred — unknown
Jurisdiction
—
Registrar
GoDaddy.com, LLC
Domain registered
2025-08-23
Hosting network
CLOUDFLARENET
Hosting country
—

Operator context is derived from public RDAP/TLS records and unverified. Company and country are only available for endpoints that publish them (an OV/EV TLS certificate or a non-redacted domain record); most endpoints are CDN-fronted and disclose neither.

On-chain activity (base)

113
payments (30d)
2.42
USD volume (30d)
15
paying wallets (30d)

Payments per day

last payment 10/5/2026
0 35 70 Sep 6Sep 13Sep 22Oct 5
Data table
Settled payments per day.
Day Payments Volume (USD) Paying wallets
9/6/2026 1 0.01 1
9/7/2026 1 0.01 1
9/8/2026 2 0.02 2
9/9/2026 1 0.01 1
9/10/2026 2 0.02 2
9/11/2026 1 0.01 1
9/12/2026 2 0.02 2
9/13/2026 1 0.01 1
9/15/2026 2 0.02 2
9/16/2026 3 0.03 2
9/17/2026 4 0.04 4
9/18/2026 1 0.01 1
9/19/2026 1 0.01 1
9/20/2026 62 1.5 1
9/21/2026 4 0.09 2
9/22/2026 11 0.33 3
9/23/2026 1 0.02 1
9/24/2026 3 0.06 2
9/25/2026 1 0.02 1
9/27/2026 3 0.06 2
10/1/2026 2 0.04 2
10/2/2026 1 0.02 1
10/5/2026 3 0.06 1

This payout wallet is shared: figures cover all 109 endpoints paid at it, since payments cannot be attributed to one of them. Only payments settled on chains and facilitators we index.

Linked by wallet — likely same operator

On-chain agent identity and the x402 endpoint that shares its settlement wallet.

Response schema
{
  "properties": {
    "articles": {
      "description": "The matched articles themselves (title + url, newest first, capped at 50) — so a timeline hit is reachable, not just a count.",
      "items": {
        "properties": {
          "also": {
            "description": "Up to 3 OTHER outlets telling this story (distinct domains, most trusted/largest source first — see `source_score` — then earliest); [] when none.",
            "items": {
              "properties": {
                "domain": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                }
              },
              "required": [
                "domain",
                "url"
              ],
              "type": "object"
            },
            "maxItems": 3,
            "type": "array"
          },
          "author": {
            "description": "Byline as the feed states it (dc:creator/author; `hn:<user>` for Hacker News). null when absent.",
            "type": [
              "string",
              "null"
            ]
          },
          "categories": {
            "description": "Categories from the feed's section, the publisher's URL path, and title/summary anchors — assigned at ingest (an article can carry several).",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "cluster": {
            "description": "EXACT title-set id — articles sharing one carry the same headline words. The served window keeps one article per exact id; near-duplicates in other words are grouped by `cluster_id`. null when the headline was too short to cluster safely.",
            "type": [
              "string",
              "null"
            ]
          },
          "cluster_id": {
            "description": "Story id: records sharing it are the SAME story told by different outlets, even in different words (near-duplicate headlines within 48h). It is the id of the story's earliest copy; a singleton's is its own id. Tapes show one record per story. Absent on archive-shard records (/search, /timeline).",
            "type": "string"
          },
          "cluster_size": {
            "description": "Records in the served window telling this story (1 = only this outlet).",
            "minimum": 1,
            "type": "integer"
          },
          "country": {
            "type": [
              "string",
              "null"
            ]
          },
          "domain": {
            "type": "string"
          },
          "feed": {
            "description": "Human feed label, e.g. \"BBC World\", \"Hacker News\", \"GDELT 15-min files\".",
            "type": "string"
          },
          "id": {
            "description": "sha1(normalized url) hex, first 16 chars — the dedupe key.",
            "type": "string"
          },
          "image": {
            "description": "Lead image URL from the feed (media:content/thumbnail/enclosure/news image). null when absent.",
            "type": [
              "string",
              "null"
            ]
          },
          "lang": {
            "description": "ISO-639-1 language, best-effort.",
            "type": [
              "string",
              "null"
            ]
          },
          "published": {
            "description": "ISO-8601 publish time (best-effort).",
            "type": "string"
          },
          "seen_at": {
            "type": "string"
          },
          "snippet": {
            "description": "Short plain-text description from the feed (≤240 chars); absent when the feed carries none. `summary` is the longer form.",
            "type": [
              "string",
              "null"
            ]
          },
          "source": {
            "enum": [
              "gdelt",
              "hn",
              "rss",
              "gnews",
              "sitemap"
            ],
            "type": "string"
          },
          "source_score": {
            "description": "Trust + scale of this record's SOURCE, 0–1. Editorial trust class first (wire agencies > major outlets > primary institutions > established trade/regional > unknown > press-release wires & corporate newsrooms > aggregators/syndicators), then the source's measured volume and feed breadth in our corpus. A tape shows the highest-scoring copy of a story (its lead), so a press-release copy leads only when no editorial outlet carries the story. Not a quality verdict on the article itself. Absent on archive-shard records (/search, /timeline).",
            "example": 0.957,
            "maximum": 1,
            "minimum": 0,
            "type": "number"
          },
          "summary": {
            "description": "The feed's own description, plain text, ≤400 chars. null when the feed carries none.",
            "type": [
              "string",
              "null"
            ]
          },
          "tier": {
            "description": "Reputability tier of the feed: official (primary sources — government/central-bank/agency press and first-party lab/vendor newsrooms), major (wires + major outlets), trade (quality trade press), social (Hacker News), enrichment (GDELT-discovered, reputation-gated). Absent on records archived before the tiered portfolio.",
            "enum": [
              "official",
              "major",
              "trade",
              "social",
              "enrichment",
              null
            ],
            "type": [
              "string",
              "null"
            ]
          },
          "title": {
            "type": "string"
          },
          "tone": {
            "description": "Sentiment on GDELT's scale (negative = adverse, roughly −10..+10). READ tone_method: gdelt = whole-document tone attached by URL match; lexicon = our local headline+summary lexicon. null when neither could score it.",
            "type": [
              "number",
              "null"
            ]
          },
          "tone_confidence": {
            "description": "How much to trust `tone`. high: GDELT document tone matched on the canonical URL. medium: GDELT tone matched loosely (host + path), or the lexicon over title + summary with ≥2 hits. low: the lexicon over a headline alone or a single hit. null: no tone. Absent on records written before 2026-09-20.",
            "enum": [
              "high",
              "medium",
              "low",
              null
            ],
            "type": [
              "string",
              "null"
            ]
          },
          "tone_method": {
            "description": "How `tone` was produced. gdelt: GDELT document tone (GKG V1.5TONE / events AvgTone) matched by canonical URL — whole-article, the strongest. lexicon: our local lexicon over title + summary — coarse, headline-scale; replaced by a GDELT tone the moment one arrives. null: no tone could be computed. Absent on records archived before 2026-09 (their tone, if any, is GDELT's).",
            "enum": [
              "gdelt",
              "lexicon",
              null
            ],
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": "string"
          },
          "via": {
            "description": "Relay provenance: the social account or newsletter that pointed us at this article (e.g. \"@eff@mastodon.social\", \"bsky:reuters.com\"). Present only on `source: push:*` records — the record is still the LINKED publisher's article, and `via` is who relayed it, never the byline.",
            "type": [
              "string",
              "null"
            ]
          },
          "word_count": {
            "description": "Article body word count: GDELT's GKG count when it saw the document, else a full-text feed body's count. null when only a teaser was available — never estimated.",
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "title",
          "url",
          "domain",
          "source",
          "feed",
          "published",
          "categories",
          "seen_at"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "bucket": {
      "enum": [
        "hour",
        "day"
      ],
      "type": "string"
    },
    "buckets": {
      "items": {
        "properties": {
          "avg_tone": {
            "description": "Mean tone of the bucket's SCORED articles (tone_n of count), or null when tone_n is 0 — never a silent zero.",
            "type": [
              "number",
              "null"
            ]
          },
          "count": {
            "type": "integer"
          },
          "t": {
            "description": "Bucket start (ISO date or ISO hour).",
            "type": "string"
          },
          "tone_methods": {
            "description": "Provenance split of the scored articles in this bucket.",
            "properties": {
              "gdelt": {
                "type": "integer"
              },
              "lexicon": {
                "type": "integer"
              }
            },
            "type": "object"
          },
          "tone_n": {
            "description": "How many of the bucket's articles carried a tone.",
            "type": "integer"
          }
        },
        "required": [
          "t",
          "count",
          "avg_tone",
          "tone_n",
          "tone_methods"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "depth": {
      "properties": {
        "days_available": {
          "description": "Day shards retained in the index.",
          "type": "integer"
        },
        "days_scanned": {
          "description": "Day shards read for this response.",
          "type": "integer"
        },
        "mode": {
          "description": "archive = publish-day shards were fanned over; snapshot = served-window fallback (no archive index yet).",
          "enum": [
            "archive",
            "snapshot"
          ],
          "type": "string"
        },
        "newest_day": {
          "type": [
            "string",
            "null"
          ]
        },
        "oldest_day": {
          "type": [
            "string",
            "null"
          ]
        },
        "truncated": {
          "description": "True when the requested range held more days than one request may scan — narrow from/to to reach the rest.",
          "type": "boolean"
        }
      },
      "required": [
        "mode",
        "days_scanned",
        "days_available",
        "truncated"
      ],
      "type": "object"
    },
    "freshness": {
      "properties": {
        "as_of": {
          "description": "updated_at of the corpus this response was served from.",
          "type": "string"
        },
        "coverage": {
          "properties": {
            "articles": {
              "description": "Articles covering that span.",
              "type": "integer"
            },
            "hours": {
              "description": "newest − oldest in hours — the searchable depth. On the tapes it is ~window_hours (the refresh fails its audit when it falls more than 1h short); on /search and /timeline it is what the scanned shards spanned.",
              "type": "number"
            },
            "newest_published": {
              "description": "Newest publish time held.",
              "type": [
                "string",
                "null"
              ]
            },
            "oldest_published": {
              "description": "Oldest publish time held; the real floor of any date filter.",
              "type": [
                "string",
                "null"
              ]
            },
            "thin": {
              "description": "Hot-window routes only: true when fewer than 5 articles matched your filter in the served window. The answer is still complete and paid — `why` says what was checked and where more lives (/news/search reaches the multi-day archive).",
              "type": "boolean"
            },
            "why": {
              "description": "Present when thin: which filter was applied, how many articles matched, which portfolio feeds carry that category.",
              "type": [
                "string",
                "null"
              ]
            }
          },
          "required": [
            "oldest_published",
            "newest_published",
            "hours",
            "articles"
          ],
          "type": "object"
        },
        "source_count": {
          "description": "Number of ingestion sources (rss/sitemap/hn/gdelt/gnews) with ≥1 article in the current pile.",
          "type": "integer"
        },
        "window_hours": {
          "description": "Retention POLICY in hours (72) — the span the tapes hold, audited against the measured coverage.hours (which is what to trust for time-range work).",
          "type": "integer"
        }
      },
      "required": [
        "as_of",
        "window_hours",
        "source_count",
        "coverage"
      ],
      "type": "object"
    },
    "poll": {
      "properties": {
        "next_cursor": {
          "description": "Opaque cursor (prefix `nc1.`) marking the newest article this answer could see — pass as `since` next time. Null only on an empty corpus.",
          "type": [
            "string",
            "null"
          ]
        },
        "note": {
          "description": "How this page relates to your `since` (ingest-order walk, whether more remain).",
          "type": "string"
        },
        "suggested_interval_seconds": {
          "description": "How often to poll (900: the corpus refreshes every 15 minutes).",
          "type": "integer"
        },
        "updated_at": {
          "description": "The corpus refresh this answer was served from.",
          "type": "string"
        }
      },
      "required": [
        "next_cursor",
        "suggested_interval_seconds",
        "updated_at"
      ],
      "type": "object"
    },
    "query": {
      "description": "Your `q` echoed back, or null when you omitted it (every article in the scanned span is then bucketed).",
      "type": [
        "string",
        "null"
      ]
    },
    "returned": {
      "description": "How many matched articles are included in `articles` (capped at 50).",
      "type": "integer"
    },
    "terms": {
      "additionalProperties": {
        "type": "integer"
      },
      "description": "How many articles contain each individual query term/phrase — explains why an AND of several terms returns few/none.",
      "type": "object"
    },
    "tone": {
      "properties": {
        "gdelt": {
          "description": "Scored via GDELT document tone.",
          "type": "integer"
        },
        "lexicon": {
          "description": "Scored via the local lexicon.",
          "type": "integer"
        },
        "method": {
          "description": "What avg_tone is made of overall: gdelt only, lexicon only, mixed, or null when nothing was scored.",
          "enum": [
            "gdelt",
            "lexicon",
            "mixed",
            null
          ],
          "type": [
            "string",
            "null"
          ]
        },
        "note": {
          "type": "string"
        },
        "scored": {
          "description": "Matched articles with a tone (any provenance).",
          "type": "integer"
        },
        "unscored": {
          "description": "Matched articles with no tone — they are counted in `buckets[].count` but not in any avg_tone.",
          "type": "integer"
        }
      },
      "required": [
        "scored",
        "unscored",
        "gdelt",
        "lexicon",
        "method"
      ],
      "type": "object"
    },
    "total": {
      "description": "Total matched articles (the true count the buckets sum to).",
      "type": "integer"
    }
  },
  "required": [
    "query",
    "bucket",
    "total",
    "returned",
    "buckets",
    "articles",
    "terms",
    "tone",
    "freshness"
  ],
  "type": "object"
}