This document describes the API endpoint requirements and data format for syndicating stories into Bold CMS using Quintype JSON Syndication.
API Endpoint Specifications:
- Host an API endpoint that returns the latest published stories in JSON format.
- Quintype will make a GET request to this endpoint at a configurable frequency (1 minute to 24 hours).
Example endpoint format:https://<your-website.com>/<route>/stories.json
- Stories will not be syndicated again unless the id or pub-date is updated.
- Ensure that pub-date is updated whenever changes are made to a story.
Expected Response Formats: (Without Cards)
{
"stories": [
{
"categories": [
"Finance",
"Politics",
"Sports"
],
"template":"photo",
"headline": "Sample story headline",
"sub-headline": "Sample story sub-headline",
"hero-image-url": "https://images.assettype.com/thequint/2018-10/212e5a00-501a-4cb6-aab0-72f21130c8bc/Modi_Nehru_Bose_HI.jpg",
"hero-image-caption": "some caption",
"id": "e46a4c7a-a14b-4c5c-ab1c-9bc767e8b014",
"slug": "sample-story-headline",
"content": "<p>Lorem ipsum dolret.</p><p>However, foo lore ispum dolret.</p><aside><cite>Foo to QT Now</cite>“No one said anything like this. Foo ”</aside><p>Bruce Wayne, eccentric billionaire. Hero can be anyone. Even a man knowing something as simple and reassuring as putting a coat around a young boy shoulders to let him know the world hadn't ended</p>",
"summary": "<p>Lorem ipsum dolret.</p>",
"pub-date": "02/14/1999 04:02:40",
"canonical-url": "https://www.publisher-host.com/politics/sample-story-headline"
"tags": [
"health",
"slice of life",
"elections2020"
],
"authors": [
{
"name": "foo",
"email": "foo@bar.com"
},
{
"name": "bar",
"email": "bar@baz.com"
}
],
"seo": {
"meta-title": "seo meta title",
"meta-description": "seo meta description",
"meta-keywords": ["seo-meta-keyword-1", "seo-meta-keyword-2"]
}
}
]
}Expected Response with cards
{
"stories": [
{
"categories": [
"Finance",
"Politics",
"Sports"
],
"template":"photo",
"headline": "Sample story headline",
"sub-headline": "Sample story sub-headline",
"hero-image-url": "https://images.assettype.com/thequint/2018-10/212e5a00-501a-4cb6-aab0-72f21130c8bc/Modi_Nehru_Bose_HI.jpg",
"hero-image-caption": "some caption",
"id": "e46a4c7a-a14b-4c5c-ab1c-9bc767e8b014",
"slug": "sample-story-headline",
"cards": [
{
"content": "<p>Use BR tags to indicate a next line character within a story element. This is the content in the first element.</p>"
},
{
"content": "<p> this is content in card no.2 </p>"
}
],
"summary": "<p>Lorem ipsum dolret.</p>",
"pub-date": "02/14/1999 04:02:40",
"canonical-url": "https://www.publisher-host.com/politics/sample-story-headline"
"tags": [
"health",
"slice of life",
"elections2020"
],
"authors": [
{
"name": "foo",
"email": "foo@bar.com"
},
{
"name": "bar",
"email": "bar@baz.com"
}
],
"seo": {
"meta-title": "seo meta title",
"meta-description": "seo meta description",
"meta-keywords": ["seo-meta-keyword-1", "seo-meta-keyword-2"]
}
}
]
}
Syndication Format Reference:
| Key | Description | Sample Value | Type | Required |
|---|---|---|---|---|
| stories | Root element with array of stories | – | Array | Yes |
| categories | Story categories / mapped sections | ["Finance","Sports"] | Array | Yes |
| headline | Story headline | "Sample headline" | String | Yes |
| sub-headline | Subheadline | "Sample sub-headline" | String | No |
| hero-image-url | URL of main story image | https://example.com/image.jpg | String/URL | No |
| id | Unique story ID | "uuid" | String | Yes |
| slug | URL slug | "sample-headline" | String | Optional |
| content | Story body (HTML) | "Content" | String | Yes (if no cards) |
| cards | Array of story cards | [{"content": "Text"}] | Array | Yes (if no content) |
| summary | Short description | "Summary" | String | No |
| pub-date | Published date (MM/dd/yyyy HH:mm:ss) | "02/14/2019 04:02:40" | String | Yes |
| canonical-url | Canonical story URL | https://example.com/story | URL | No |
| tags | Story tags | ["tag1", "tag2"] | Array | No |
| authors | Story authors | [{"name":"X","email":"x@y.com"}] | Array | Yes |
| seo | SEO metadata | {"meta-title": "..."} | Object | No |
| template | Story template in Bold | "Photo" | String | No |
How to syndicate content into multiple cards and paragraphs
You can structure story content using multiple cards, where each card represents a separate story element. This helps control how content is broken up and displayed in Bold.
Multiple Cards with a Single Paragraph Each
Each card contains one paragraph wrapped in a <p> tag.
"cards": [
{
"content": "<p>This is the content of the first card.</p>"
},
{
"content": "<p>This is the content of the second card.</p>"
}
]Multiple cards: A single card can include more than one paragraph by using multiple <p> tags.
"cards": [
{
"content": "<p>This is the first paragraph in card one.</p>"
},
{
"content": "<p>This is the first paragraph in card two.</p><p>This is the second paragraph in the same card.</p>"
}
]|
Important: When using the cards field, do not include the content field at the root level of the story. The cards array will be used as the primary story content during syndication. |
Syndicating Single or Multiple Story Elements
Single paragraph in one element:
"content": "<p>Paragraph 1</p><p>Paragraph 2</p>"Multiple story elements:
Image Syndication Guidelines
When syndicating content, HTML image elements within your story content will automatically be converted to Bold-specific image elements. To include captions with images, you can use any of the following approaches:
Important: Image URLs must be valid, accessible, and have proper image file extensions.
Valid Examples:
https://<your-website.com>/<someroute>/sample.jpeghttps://<your-website.com>/2024-05/e30bc2f9-3e6b-44e2-b78f-a17d4605fb75/FIRE.jpg
Invalid Examples:
- Missing protocol:
www.example.com/image.jpg - Incorrect domain:
https://ww.example.com/image.jpg - Wrong path or extension:
http://www.example.com/image.jpgg - File not found:
http://www.example.com/nonexistent.jpg - Restricted access:
http://www.example.com/restricted/image.jpg - Invalid characters in URL:
http://www.example.com/image with spaces.jpg - Expired URL:
http://www.example.com/expired.jpg -
Missing filename:
https://www.example.com/?uuid=c29cff3c-977e-5c07-a0a5-16a8e35d3316
Methods to Include Captions
1. Pass the caption as data-title in the <img> element. Caption for the below element will be “Singer Arjun Kanungo. (Photo: IANS)“
<img src='http://iansphoto.in/web/photoimages_new/400/2017/05/07/42b5f93b0f04a21a4f43a7384e089674.jpg' data-title='Singer Arjun Kanungo. (Photo: IANS)'/>2. Pass the caption as figcaption of figure HTML tag. Caption for the below element will be “A cheeky macaque, Lower Kintaganban River, Borneo“
<figure> <img src="http://html5doctor.com/wp-content/uploads/2010/03/macaque.jpg" alt="Macaque in the trees"> <figcaption>A cheeky macaque, Lower Kintaganban River, Borneo</figcaption> </figure>3. Captions in Wordpress follow a different pattern but the system has support for that too. Listing the structure below just for reference because this is expected to be generated by Wordpress. Here the caption will be “Marion <em> Braune</em>”
<div id="attachment_1897" style="width: 810px" class="wp-caption aligncenter"> <a href="http://iansphoto.in/web/photoimages_new/400/2017/05/07/42b5f93b0f04a21a4f43a7384e089674.jpg" class="lightbox" rel="lightbox"> <img class="wp-image-1897 size-full" src="http://iansphoto.in/web/photoimages_new/400/2017/05/07/42b5f93b0f04a21a4f43a7384e089674.jpg" alt="" width="800" height="533"> </a> <p class="wp-caption-text">Marion <em>Braune</em></p> </div>If you have any further questions, please reach out to support@quintype.com
To know more about syndication, please click here