An open, read-only JSON API over Robert Scoble's hourly News Pulse digests, so anyone can build personalized news systems. It is free: no key, no sign-up. Plain static JSON files, CORS enabled (Access-Control-Allow-Origin: *), updated every hour.
Start at https://presto-ferry-g7bz.here.now/api/v1/index.json.
| URL | What it returns |
|---|---|
/api/v1/index.json | This API description: endpoints, pulses, item schema. |
/api/v1/pulses.json | List of the 21 pulses with item counts, sections, last edition time and URLs. |
/api/v1/pulses/<slug>.json | All stored items of one pulse (up to the newest 100), newest first. Example: /api/v1/pulses/top-20.json |
/api/v1/latest.json | Items of the newest edition of every pulse, one flat array, each item tagged with its pulse. |
/api/v1/all.json | The latest 500 items across all pulses, newest first (fewer while history builds up). |
/api/v1/sections.json | Map of pulse slug to the section names seen in it. |
Pulse slugs: top-20, ai-community, ai-companies, ai-industry, ai-influencers, ai-organizations, brain-neuroscience, creative-ai, crypto-web3, cybersecurity, developer-designer, general-tech, investor, pr-comms, quantum-computing, robotics, spatial-computing, tesla-ev, weather-climate, world-news, x-spacex-insiders.
curl -s https://presto-ferry-g7bz.here.now/api/v1/latest.json | jq '.items[:3]'
curl -s https://presto-ferry-g7bz.here.now/api/v1/pulses/top-20.json | jq -r '.items[] | "\(.rank). \(.title)"'
fetch("https://presto-ferry-g7bz.here.now/api/v1/pulses/robotics.json")
.then(r => r.json())
.then(d => d.items.slice(0, 5).forEach(i => console.log(i.title, i.url)));
Every endpoint that returns stories uses this object inside an items array (each response also has apiVersion, generatedAt and count). Fields are stable within v1; new optional fields may be added.
| Field | Type | Meaning |
|---|---|---|
id | string | Stable id: first 16 hex chars of sha256(pulse slug + newline + guid). Same story in the same pulse keeps the same id. |
pulse | string | Pulse slug, e.g. "robotics". |
pulseName | string | Human name of the pulse, e.g. "Robotics Pulse". |
title | string | Our headline for the story (plain text). |
url | string | Main X post for the story. (The Crypto "Market Watch" item has no post; its url is the site home page and its `also` holds the data source.) |
synopsis | string | Our short plain-text summary (no HTML). May be empty. |
also | array of string | Extra related URLs from the "Also:" line; empty array when none. |
section | string or null | Section heading inside the pulse. For Top 20 it is the name of the pulse the story came from. |
publishedAt | string (ISO 8601 UTC) | Time of the first edition (hourly digest) that contained the story. |
firstSeenAt | string (ISO 8601 UTC) or null | Wall-clock time our pipeline first ingested the story. null for items stored before this field was added. |
editionAt | string (ISO 8601 UTC) or null | Time of the most recent edition that contained the story (the edition `rank` refers to). null if unknown. |
rank | integer or null | Position within that edition (1 = first). For Top 20 it is the number 1-20. null if unknown. |
Files are regenerated hourly, about 20 minutes past the hour; generatedAt tells you when. Each pulse keeps its newest 100 items; all.json has the latest 500. Please poll no more than once an hour and use the id to de-duplicate.
The same content is available as RSS: all pulses or https://presto-ferry-g7bz.here.now/feeds/<slug>.xml per pulse. Use RSS for readers and JSON for your own code; items match one to one (the JSON url is the RSS item link).
Content is only our own headlines and short synopses plus links to public X posts; no post text is copied. Use it freely; attribution ("Scobleizer News Pulse" with a link back) is appreciated. No tracking, no cookies.