Story JSON
Read one published story, with its content, media and contacts, by adding .json to its URL.
Add .json to the URL of any public story to get the story as JSON. No API key is needed.
curl --silent 'https://newsroom.example.com/example-company-opens-a-new-office.json'The JSON is available whenever the story's page is:
- Published public stories.
- Published private (unlisted) stories, which never appear in the feeds.
- Embargoed stories, before the embargo lifts. Anyone with the link can already open the story page.
Drafts and confidential stories return 404. A story's previous slugs keep working, like its page URL. Unlike the feeds, this endpoint sends no CORS headers.
{
"title": "Example Company opens a new office",
"modified_at": "2026-10-08 11:06:42",
"published_at": "2026-10-08 11:06:00",
"url": "https://newsroom.example.com/example-company-opens-a-new-office",
"short_url": "http://prez.ly/AbCd",
"culture": "en",
"language": "EN",
"subtitle": "The Ghent office is the company's third in Belgium",
"slug": "example-company-opens-a-new-office",
"body": "<p>Example Company today opened …</p>",
"mainvisual": {
"thumbnail": "https://cdn.uc.assets.prezly.com/…/-/scale_crop/250x250/center/-/format/auto/",
"large": "https://cdn.uc.assets.prezly.com/…/-/preview/500x500/-/format/auto/",
"original": "https://cdn.uc.assets.prezly.com/…/"
},
"images": [
{
"caption": "The new office",
"original": "https://cdn.uc.assets.prezly.com/…/",
"medium": "https://cdn.uc.assets.prezly.com/…/-/preview/500x500/-/format/auto/",
"small": "https://cdn.uc.assets.prezly.com/…/-/preview/200x200/-/format/auto/",
"thumbnail": "https://cdn.uc.assets.prezly.com/…/-/preview/100x100/-/format/auto/",
"square": "https://cdn.uc.assets.prezly.com/…/-/scale_crop/200x200/center/-/format/auto/",
"squaresmall": "https://cdn.uc.assets.prezly.com/…/-/scale_crop/58x58/center/-/format/auto/"
}
],
"attachments": [
{ "description": "Fact sheet", "extension": "pdf", "url": "https://cdn.uc.assets.prezly.com/…/" }
],
"tags": ["Offices", "Ghent"],
"author": { "first_name": "Jane", "last_name": "Doe" },
"format_version": 6
}Fields
title, modified_at, published_at, url, short_url, culture and language are always present. Every other field is left out when the story has no value for it, so check that a field exists before you read it.
| Field | Description |
|---|---|
modified_at, published_at | Y-m-d H:i:s in the story author's time zone, without an offset. Unlike the JSON feed, date_format is not supported. |
culture, language | Locale code of the story, such as nl_BE, and its upper-case language code, such as NL. |
subtitle, intro | Subtitle, and the legacy summary field, which is usually absent for current stories. |
body | Story content as HTML, as rendered in the newsroom. |
mainvisual | Preview image in three sizes: thumbnail (250×250 crop), large (up to 500px) and original. |
header | Header image: large and release, both up to 1200px. |
images | Images and gallery images in the content, in several sizes. |
videos | Embedded videos: caption, thumbnail, url and the provider's embed HTML. |
links | Link previews (bookmarks) in the content: description and url. |
attachments | Files attached to the story: description, extension and a download url. |
contacts | Press contacts shown with the story: name, company, description, email, website, address, telephone, mobile, twitter, facebook, linkedin, instagram. |
tags | Tag names. |
author | first_name and last_name of the story's author. |
format_version | Version of the format the story was written in. |
Image URLs point to the Prezly CDN and accept its image transformations. Use original when you process images yourself.
Story JSON or the feed?
To list stories, use the JSON feed. To include each story's content in the feed, add scope=full: every item is then this document. Story JSON is meant for server-side use. It doesn't send CORS headers, so a browser on another website can't read it. Use the feed instead, which can.