Multi-Source News

35 APIs and 183 operations your agent can buy one call at a time. $0.01–$0.05 per call in USDC on base via x402. No API key, no account, no subscription.

SearchLiveeip155:8453Exactvia cdp
NewsHeadlinesSearchSentimentGdelt
Calls · 30d
3
This endpoint's own trailing-30-day call count, as published by the upstream catalog and snapshotted daily. 5 snapshots so far.
$4.32
Verified settled volume
328 settlements proven x402 by their on-chain EIP-3009 marker.
$0.020
Listed price
As published in the catalog. Always read the live 402 before paying.
3
Calls · 30d
Upstream's own call count for this endpoint, not ours.
3
Unique payers · 30d
Last called 2026-09-24 00:01Z
Upstream on-chain volume
Reported by the source catalog.
Paid to
0x54ebFCF3870439B9db62381848c5DabC05c70d5B

The wallet the 402 directs payment to. Its whole payment record — every payer, every chain — is on the merchant page.

Asset 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913

Provider

The payTo wallet does not resolve to a registered ERC-8004 agent. That is not a verdict on the service — most of the catalog is unregistered.

Live 402 challenge

Captured by the enrichment pass, not read just now. Prices can change — always read the 402 the endpoint answers with.

{
  "error": "payment required",
  "accepts": [
    {
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "payTo": "0x54ebFCF3870439B9db62381848c5DabC05c70d5B",
      "amount": "20000",
      "scheme": "exact",
      "network": "eip155:8453",
      "maxTimeoutSeconds": 60
    }
  ],
  "resource": {
    "url": "https://x402.professorsausages.com/news/crypto",
    "tags": [
      "news",
      "headlines",
      "search",
      "sentiment",
      "gdelt"
    ],
    "mimeType": "application/json",
    "description": "Top Crypto/NFT News — HIGH-SIGNAL only: hacks/exploits, launches & mainnets, NFT drops/mints, regulation/ETF/legislation, the majors, funding/partnerships; price-prediction/TA chatter and shilling filtered out. Newest first, `since` to poll, `limit` to page; no search.",
    "serviceName": "Multi-Source News"
  },
  "extensions": {
    "help": {
      "docs": "https://x402.professorsausages.com/news",
      "sample": "https://x402.professorsausages.com/news/sample",
      "example": "https://x402.professorsausages.com/news/crypto",
      "openapi": "https://x402.professorsausages.com/news/openapi.json"
    },
    "bazaar": {
      "info": {
        "input": {
          "type": "http",
          "method": "GET",
          "queryParams": {
            "limit": "How many articles to return.",
            "since": "Only articles ingested (seen_at) after this point: an ISO date-time, or the next_cursor from your previous answer."
          }
        },
        "output": {
          "type": "object",
          "required": [
            "topic",
            "brand",
            "curated",
            "updated_at",
            "window_hours",
            "total",
            "count",
            "articles",
            "freshness",
            "new_count",
            "next_cursor",
            "polled_at",
            "poll"
          ],
          "properties": {
            "note": {
              "type": "string"
            },
            "poll": {
              "type": "object",
              "required": [
                "next_cursor",
                "suggested_interval_seconds",
                "updated_at"
              ],
              "properties": {
                "note": {
                  "type": "string",
                  "description": "How this page relates to your `since` (ingest-order walk, whether more remain)."
                },
                "updated_at": {
                  "type": "string",
                  "description": "The corpus refresh this answer was served from."
                },
                "next_cursor": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Opaque cursor (prefix `nc1.`) marking the newest article this answer could see — pass as `since` next time. Null only on an empty corpus."
                },
                "suggested_interval_seconds": {
                  "type": "integer",
                  "description": "How often to poll (900: the corpus refreshes every 15 minutes)."
                }
              }
            },
            "brand": {
              "type": "string",
              "description": "Human feed name, e.g. \"AI News\"."
            },
            "count": {
              "type": "integer",
              "description": "Articles returned (≤ limit)."
            },
            "since": {
              "type": [
                "string",
                "null"
              ],
              "description": "The `since` bound echoed back (ISO instant or cursor), or null when omitted."
            },
            "topic": {
              "type": "string",
              "description": "The fixed category this feed serves, e.g. ai or crypto."
            },
            "total": {
              "type": "integer",
              "description": "Articles available after curation, before `limit` (with `since`: the new ones)."
            },
            "filter": {
              "type": "object",
              "properties": {
                "kept": {
                  "type": "integer",
                  "description": "High-signal articles after filtering + dedup, before `limit` (equals `total`)."
                },
                "profile": {
                  "type": "string"
                },
                "in_category": {
                  "type": "integer",
                  "description": "Articles in the raw category (after `since`) before signal filtering."
                }
              },
              "description": "Present only on curated feeds: the profile applied and how many of the category's articles survived."
            },
            "curated": {
              "type": "boolean",
              "description": "True when a high-signal relevance filter was applied (AI News)."
            },
            "articles": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "id",
                  "title",
                  "url",
                  "domain",
                  "source",
                  "feed",
                  "published",
                  "categories",
                  "seen_at"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "sha1(normalized url) hex, first 16 chars — the dedupe key."
                  },
                  "url": {
                    "type": "string"
                  },
                  "feed": {
                    "type": "string",
                    "description": "Human feed label, e.g. \"BBC World\", \"Hacker News\", \"GDELT 15-min files\"."
                  },
                  "lang": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ISO-639-1 language, best-effort."
                  },
                  "tier": {
                    "enum": [
                      "official",
                      "major",
                      "trade",
                      "social",
                      "enrichment",
                      null
                    ],
                    "type": [
                      "string",
                      "null"
                    ],
                    "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."
                  },
                  "tone": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "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."
                  },
                  "image": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Lead image URL from the feed (media:content/thumbnail/enclosure/news image). null when absent."
                  },
                  "title": {
                    "type": "string"
                  },
                  "author": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Byline as the feed states it (dc:creator/author; `hn:<user>` for Hacker News). null when absent."
                  },
                  "domain": {
                    "type": "string"
                  },
                  "source": {
                    "enum": [
                      "gdelt",
                      "hn",
                      "rss",
                      "gnews",
                      "sitemap"
                    ],
                    "type": "string"
                  },
                  "cluster": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Story-cluster id — articles sharing one are the SAME story from different outlets. The served window already keeps only one article per cluster, so this is provenance, not a filter you must apply. null when the headline was too short to cluster safely."
                  },
                  "country": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "seen_at": {
                    "type": "string"
                  },
                  "snippet": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Short plain-text description from the feed (≤240 chars); absent when the feed carries none. `summary` is the longer form."
                  },
                  "summary": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "The feed's own description, plain text, ≤400 chars. null when the feed carries none."
                  },
                  "published": {
                    "type": "string",
                    "description": "ISO-8601 publish time (best-effort)."
                  },
                  "categories": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Categories from the feed's section, the publisher's URL path, and title/summary anchors — assigned at ingest (an article can carry several)."
                  },
                  "word_count": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "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."
                  },
                  "tone_method": {
                    "enum": [
                      "gdelt",
                      "lexicon",
                      null
                    ],
                    "type": [
                      "string",
                      "null"
                    ],
                    "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)."
                  }
                }
              }
            },
            "freshness": {
              "type": "object",
              "required": [
                "as_of",
                "window_hours",
                "source_count",
                "coverage"
              ],
              "properties": {
                "as_of": {
                  "type": "string",
                  "description": "updated_at of the corpus this response was served from."
                },
                "coverage": {
                  "type": "object",
                  "required": [
                    "oldest_published",
                    "newest_published",
                    "hours",
                    "articles"
                  ],
                  "properties": {
                    "why": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Present when thin: which filter was applied, how many articles matched, which portfolio feeds carry that category."
                    },
                    "thin": {
                      "type": "boolean",
                      "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)."
                    },
                    "hours": {
                      "type": "number",
                      "description": "newest − oldest in hours — the searchable depth, usually below window_hours."
                    },
                    "articles": {
                      "type": "integer",
                      "description": "Articles covering that span."
                    },
                    "newest_published": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Newest publish time held."
                    },
                    "oldest_published": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Oldest publish time held; the real floor of any date filter."
                    }
                  }
                },
                "source_count": {
                  "type": "integer",
                  "description": "Number of ingestion sources (rss/sitemap/hn/gdelt/gnews) with ≥1 article in the current pile."
                },
                "window_hours": {
                  "type": "integer",
                  "description": "Retention POLICY in hours (72). NOT the searchable depth — see coverage.hours."
                }
              }
            },
            "new_count": {
              "type": "integer",
              "description": "Articles ingested after your `since` (all matches when `since` is absent), before `limit`."
            },
            "polled_at": {
              "type": "string",
              "description": "When this answer was computed (ISO-8601)."
            },
            "updated_at": {
              "type": "string"
            },
            "next_cursor": {
              "type": [
                "string",
                "null"
              ],
              "description": "Same value as poll.next_cursor — where the next poll resumes. Unchanged when new_count is 0."
            },
            "window_hours": {
              "type": "integer"
            }
          }
        }
      },
      "schema": {
        "type": "object",
        "required": [
          "input"
        ],
        "properties": {
          "input": {
            "type": "object"
          },
          "output": {
            "type": "object"
          }
        }
      },
      "category": "news",
      "routeTemplate": "https://x402.professorsausages.com/news/crypto"
    },
    "sample": {
      "url": "https://x402.professorsausages.com/news/sample",
      "hint": "A real cached response from this API (with its capture timestamp), free — judge the data quality before paying."
    },
    "catalog": {
      "message": "This endpoint is 1 of 35 pay-per-call APIs for agents — all same x402 payment + auth. Browse the full menu free (no payment) at the catalog URL; every API serves a free real sample record at /<api>/sample.",
      "strategy": "minimal",
      "catalogUrl": "https://x402.professorsausages.com/?ref=402&v=minimal&from=news"
    },
    "suggest": {
      "url": "https://x402.professorsausages.com/suggest",
      "hint": "Missing data you'd pay for? POST {want, would_pay_usd} — free. The most-requested datasets get built first."
    },
    "discount": {
      "off": "50%",
      "hint": "Send X-Intent: <40+ chars describing what you're building and what data you need> for 50% off this call.",
      "header": "X-Intent"
    }
  },
  "x402Version": 2
}

Accepts

The payment requirements as published to the catalog. Read the live 402 before paying — a price here is a claim, not a quote.

0.02USDC≈ $0.02 USD
on Base · exact scheme

Pay 0.02 USDC on Base to 0x54eb…70d5B. The signed payment is good for 1 minute.

USD Coin contract
0x8335…02913
Payment window
1 minute
As published
20000 smallest units
The catalog’s raw entry
[
  {
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "extra": {
      "name": "USD Coin",
      "version": "2"
    },
    "payTo": "0x54ebFCF3870439B9db62381848c5DabC05c70d5B",
    "amount": "20000",
    "scheme": "exact",
    "network": "eip155:8453",
    "maxTimeoutSeconds": 60
  }
]

Extensions

{
  "help": {
    "docs": "https://x402.professorsausages.com/news",
    "sample": "https://x402.professorsausages.com/news/sample",
    "example": "https://x402.professorsausages.com/news/crypto",
    "openapi": "https://x402.professorsausages.com/news/openapi.json"
  },
  "bazaar": {
    "info": {
      "input": {
        "type": "http",
        "method": "GET",
        "queryParams": {
          "limit": "How many articles to return.",
          "since": "Only articles ingested (seen_at) after this point: an ISO date-time, or the next_cursor from your previous answer."
        }
      },
      "output": {
        "type": "object",
        "required": [
          "topic",
          "brand",
          "curated",
          "updated_at",
          "window_hours",
          "total",
          "count",
          "articles",
          "freshness",
          "new_count",
          "next_cursor",
          "polled_at",
          "poll"
        ],
        "properties": {
          "note": {
            "type": "string"
          },
          "poll": {
            "type": "object",
            "required": [
              "next_cursor",
              "suggested_interval_seconds",
              "updated_at"
            ],
            "properties": {
              "note": {
                "type": "string"
              },
              "updated_at": {
                "type": "string"
              },
              "next_cursor": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "suggested_interval_seconds": {
                "type": "integer"
              }
            }
          },
          "brand": {
            "type": "string"
          },
          "count": {
            "type": "integer"
          },
          "since": {
            "type": [
              "string",
              "null"
            ]
          },
          "topic": {
            "type": "string"
          },
          "total": {
            "type": "integer"
          },
          "filter": {
            "type": "object",
            "properties": {
              "kept": {
                "type": "integer"
              },
              "profile": {
                "type": "string"
              },
              "in_category": {
                "type": "integer"
              }
            }
          },
          "curated": {
            "type": "boolean"
          },
          "articles": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "title",
                "url",
                "domain",
                "source",
                "feed",
                "published",
                "categories",
                "seen_at"
              ],
              "properties": {
                "id": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "via": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "also": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "domain",
                      "url"
                    ],
                    "properties": {
                      "url": {
                        "type": "string"
                      },
                      "domain": {
                        "type": "string"
                      }
                    }
                  },
                  "maxItems": 3
                },
                "feed": {
                  "type": "string"
                },
                "lang": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "tier": {
                  "enum": [
                    "official",
                    "major",
                    "trade",
                    "social",
                    "enrichment",
                    null
                  ],
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "tone": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "image": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "author": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "domain": {
                  "type": "string"
                },
                "source": {
                  "enum": [
                    "gdelt",
                    "hn",
                    "rss",
                    "gnews",
                    "sitemap"
                  ],
                  "type": "string"
                },
                "cluster": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "country": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "seen_at": {
                  "type": "string"
                },
                "snippet": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "summary": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "published": {
                  "type": "string"
                },
                "categories": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "cluster_id": {
                  "type": "string"
                },
                "word_count": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "tone_method": {
                  "enum": [
                    "gdelt",
                    "lexicon",
                    null
                  ],
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "cluster_size": {
                  "type": "integer",
                  "minimum": 1
                },
                "source_score": {
                  "type": "number",
                  "maximum": 1,
                  "minimum": 0
                },
                "tone_confidence": {
                  "enum": [
                    "high",
                    "medium",
                    "low",
                    null
                  ],
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          },
          "freshness": {
            "type": "object",
            "required": [
              "as_of",
              "window_hours",
              "source_count",
              "coverage"
            ],
            "properties": {
              "as_of": {
                "type": "string"
              },
              "coverage": {
                "type": "object",
                "required": [
                  "oldest_published",
                  "newest_published",
                  "hours",
                  "articles"
                ],
                "properties": {
                  "why": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "thin": {
                    "type": "boolean"
                  },
                  "hours": {
                    "type": "number"
                  },
                  "articles": {
                    "type": "integer"
                  },
                  "newest_published": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "oldest_published": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "source_count": {
                "type": "integer"
              },
              "window_hours": {
                "type": "integer"
              }
            }
          },
          "new_count": {
            "type": "integer"
          },
          "polled_at": {
            "type": "string"
          },
          "updated_at": {
            "type": "string"
          },
          "next_cursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "window_hours": {
            "type": "integer"
          }
        }
      }
    },
    "schema": {
      "type": "object",
      "required": [
        "input"
      ],
      "properties": {
        "input": {
          "type": "object"
        },
        "output": {
          "type": "object"
        }
      }
    },
    "category": "news",
    "routeTemplate": "https://x402.professorsausages.com/news/crypto"
  }
}

Provenance

Seen in the source catalog
2026-09-24 00:01Z
Last indexed by Roundhouse
2026-09-24 08:20Z
Last enriched (probe, favicon, geo)
2026-09-20 02:45Z
x402 version
2
Max timeout
60s
Liveness probe
HTTP 402
Report

Hand this page to an agent

Copy the prompt and paste it into Claude, an MCP client or your own agent — it will vet this service and call it over the free read API. No key, no account.

GET api.roundhouseai.io/v0/endpoints

This endpoint's own trailing-30-day call count, as published by the upstream catalog and snapshotted daily. 5 snapshots so far. Verified volume counts only settlements with an on-chain EIP-3009 marker.

Open skill.md
Show the prompt
Using Roundhouse, look up the x402 service Multi-Source News and tell me whether it is
worth paying: what a call costs, whether the endpoint answered when last probed, and what
its payment record actually shows.

curl -s 'https://api.roundhouseai.io/v0/endpoints?q=Multi-Source%20News'
curl -s 'https://api.roundhouseai.io/v0/merchants/<the payTo wallet returned above>'

Then call it: read the price from the live 402 at https://x402.professorsausages.com/news/crypto, never from
a cached figure, and pay with an x402 client.

The /v0 API needs an API key (`authorization: Bearer rh_live_…`) on everything except
/v0/unified* and /v0/endpoints. Mint a personal key for $0.01 at GET https://api.roundhouseai.io/v0/test/x402,
or use an organization key from https://roundhouseai.io/dashboard/team.

If you do not have Roundhouse tools or skills installed, read
https://roundhouseai.io/skill.md first — it is the whole procedure.