API ยท v1
Get this paper as data. Every published story with the facts it cites, plus sections, the archive, search, the front page, the video editions, and a way to sign a reader up. No key. No sign-up.
https://dietetics-news.newsroomfloor.com/api/v1The five newest stories. Paste one line.
curl -s "https://dietetics-news.newsroomfloor.com/api/v1/stories?limit=5"const r = await fetch("https://dietetics-news.newsroomfloor.com/api/v1/stories?limit=5");
const { stories } = await r.json();
for (const s of stories) console.log(s.headline, s.url);import requests r = requests.get("https://dietetics-news.newsroomfloor.com/api/v1/stories", params={"limit": 5}) for s in r.json()["stories"]: print(s["headline"], s["url"])
Pick one, fill in the fields, run it. It calls this paper for real, so what you see is what your code will get.
Pick a story and copy the code. It shows the headline, the picture and the paper's name, and it links back here. It sets no cookies.
<iframe src="https://dietetics-news.newsroomfloor.com/embed/STORY_ID" title="Story card" width="100%" height="260" style="border:0;width:100%;max-width:640px" loading="lazy"></iframe>
<iframe src="https://dietetics-news.newsroomfloor.com/embed/STORY_ID" title="Story card" width="100%" height="260" style="border:0;width:100%;max-width:640px" loading="lazy"></iframe> <script> window.addEventListener("message", function (e) { if (!e.data || e.data.nrfEmbed !== 1) return; var f = document.querySelector('iframe[src*="/embed/STORY_ID"]'); if (f && e.data.height) f.style.height = e.data.height + "px"; }); </script>
https://dietetics-news.newsroomfloor.com/story/STORY_ID
The plain version works anywhere, including places that strip scripts. Use auto height only on a page you control.
Four things people ask for. Each one lists the endpoints it needs.
Get the newest stories. Show the headline, the section and the link. Refresh on a timer.
One endpoint returns each story already sized for a post: headline, link, picture.
Collect an address on your page and send it here. The reader confirms by email before anything goes out.
Start at the index. It lists every endpoint. The OpenAPI file describes them, and each story carries the facts it is built on.
What you send decides what comes back. There is nothing to set in the address.
Everything this paper publishes: stories, their sources, the sections, the archive, search. Send nothing extra.
For the people who run this paper. Adds drafts, source proofs, settings and the subscriber list. Ask an admin for one, then send it as Authorization: Bearer nrf_...
For a reader signed in to this paper. Adds whatever their subscription includes, and nothing else. They get it when they sign in.
Read it, cache it, publish it, feed it to a model. Say where it came from and link the story you quote.
The paper changes a few times a day. Call it every few minutes at most. On the posts endpoint, use since= so you only get what is new.
A story's text carries [^1] marks. The cited_facts list beside it says what each one is. Show them. They are the evidence.
Every story is stored with a content hash and a signed receipt. That proves who filed it and that it has not changed. It does not prove the story is right.
The same paper in the shapes a program expects.