Posts API

The post API supports updating already published content as well as un-publishing posts.

Creating posts

Creates a post and sets the current user as the author by default.

POST /api/1.3/posts

Parameters

Name Type Description
headline String Headline - Required
body String Body - Optional
manual_basename String
Slug part - Optional
If received, this field is used as slug part, otherwise, we generate it based on the headline field.
Depending on the permalink settings configured, and in order to prevent duplicates, the id field might be appended.
In any case, we store the final value in the basename field, so take this into account if you want to fetch articles by basename.
subheadline String Subheadline - Optional
type String
Post type - Optional
Choices available depending on configuration:
  • "page"
  • "image"
  • "video"
  • "product"
  • "event"
  • "place"
  • "recipe"

Defaults to:

  • "image" if an image_id or and image_external is set.
  • "video" if a video is set.
  • "page" if type is not explicitly set and if image_id, image_external and video aren’t set.
tags Array of strings Tags - Optional
primary_tag String Primary tag - Optional
sections Array of integers Section IDs - Optional
primary_section Integer
Primary section ID - Optional
It must be added to sections field if any.
badges Array of integers Badge IDs - Optional
page_title String Meta title - Optional - headline is rendered in post pages if empty
meta_description String Meta description - Optional - subheadline is rendered in post page if empty
og_title String Social headline - Optional
og_description String Social description - Optional
image_id Integer ID of the uploaded lead image - Optional
photo_credit String Photo credit for lead image - Optional
photo_caption String Photo caption for lead image - Optional
manual_image_crops Object Crops calculated when uploading lead image - Optional
image_size String Size of the uploaded lead image with format <width>x<height> - Optional
teaser_image_id Integer ID of the uploaded teaser image - Optional
teaser_photo_credit String Photo credit for teaser image - Optional
teaser_photo_caption String Photo caption for teaser image - Optional
teaser_manual_image_crops Object Crops calculated when uploading teaser image - Optional
teaser_image_size String Size of the uploaded teaser image with format <width>x<height> - Optional
social_teaser_image_id Integer ID of the uploaded social teaser image - Optional
social_teaser_photo_credit String Photo credit for social teaser image - Optional
social_teaser_photo_caption String Photo caption for social teaser image - Optional
social_teaser_manual_image_crops Object Crops calculated when uploading social teaser image - Optional
media String Lead media - Optional
video String Embeddable video URL - Optional
listicle Object Particles (also known as listicles), refer to Listicles document for more information - Optional
product Object Product, refer to Products document for more information - Optional
layout_name String Layout name - Optional
roar_author_ids Array of integers Author IDs - Optional
roar_specific_data Object Custom fields - Optional
page_list Array of objects Custom URLs - Optional
created_ts Integer
Timestamp of publishing date - Optional - Defaults to current timestamp
It must be expressed in UTC-based time
updated_ts Integer
Timestamp of last update date - Optional
Behavior:
  • Defaults to current timestamp unless a new value is sent in payload, or
  • It keeps the saved value if prevent_modifying_updated_ts query parameter is received (on updates only).
It must be expressed in UTC-based time
applenews_article Boolean
Controls whether the article is going to be sent to Apple News - Optional -
Defaults to false
ee_layout_name String Entry Editor layout name - Optional
provider_post_id String External Post ID. It can be set only when creating drafts/posts, not on edit.

Note

  • For backward compatibility, the primary_section and sections fields are eligible by title using insensitive case mode. "Home" or 0 (zero) can be passed if you want to set a post in homepage.

  • image_id, teaser_image_id, and social_teaser_image_id can be found as id in the Image API response.

  • manual_image_crops, teaser_manual_image_crops, and social_teaser_manual_image_crops can be also found as manual_image_crops in the Image API response.

  • image_size and teaser_image_size can be also found as shortcode_params.original_size in the Image API response. You can also use width and height and send it in format "<width>x<height>".

  • Similar to the body field, the media field can be used to store HTML content. However, it is most often used to store a shortcode that will be placed at the top of the page.

  • The video field must be an embeddable URL since it’s rendered as the source of an iframe element.

  • The Scraper API provides shortcode and embeddable URL. Using it you can find:

    • embed.shortcode in order to use it in posts’ media or body field, or listicles content, and
    • videos.*.embed_url in order to use it in posts’ video field.
  • By default, in post pages, image_id takes precedence over media and video, and media takes precedence over video. This behavior can be changed in our Layout&Design page, ask your account manager for a help on this if needed.

  • In order to control where listicles will be rendered inside the body, it is required to introduce a listicle HTML tag as follows:

    <listicle id="listicle-{post_id}"></listicle>
    
  • By default, roar_author_ids is automatically populated with the ID of the user identified with the API Key sent in request.

  • The publishing date for articles will be displayed according to the time zone configured for your site. Ask your account manager if you would like to modify this.

  • Publishing articles to Apple News requires configuration in your site with access key and secret. Ask your account manager if you would like to use this feature.

Roar Specific Data

roar_specific_data is a schema-less object field and is intended for storing any extra information as is deemed necessary.

It can also be used for certain supported features, such as:

Keep Reading

Name Type Description
keep_reading_button_text String Text to be displayed on Keep Reading Button - Optional
keep_reading_hide_word_count Boolean Controls whether words count is going to be displayed - Optional - Defaults to false

Note

In order to use this feature, you will need to add an <hr> element to body at the specific point you want to split your content.

Recipes

Our recipes feature is explained in detail in this document.

Custom URLs

Important

This is an experimental feature. If you are interested in exploring its capabilities, please ask your Account Manager to enable it for your site.

page_list allows you to store an extensive set of alternative paths for your articles where you can make them available for your visitors.

Every page to be included to this list must have the following parameters:

Name Type Description
view String
Post page view - Required
Choices available
  • "web"
path String Path - Required

Note

If the field is set, the first "web" page path in the list will be used to contruct the corresponding post URLs. Otherwise, the post URL will be generated based on your permalink settings.

Important

In order to prevent unexpected issues, avoid using encoded paths, use always decoded paths instead.

Example

Considering a JSON payload containing a post, this portion shows an example of the page_list attribute.

Response

The response will contain several fields, but here are two important ones to take note of:

Name Type Description
post_url String URL for the draft when is published.
slug String URL path from post_url.

Editing posts

Edits a post.

PUT /api/1.3/posts/<id>

Parameters

The same specification from Creating posts applies here, but the following additional parameters are available:

Name Type Description
prevent_modifying_updated_ts Integer
Controls whether the updated_ts is going to be modified - Optional
Defaults to 0. It works only if a value is not sent in payload for updated_ts
Choices available:
  • 0 to allow updating updated_ts
  • 1 to prevent updating updated_ts

Important

For PUT requests, if roar_author_ids is sent with no value, then the user identified with the API key received is assigned as the unique author.

If roar_author_ids is not sent, then the author value will not be modified.

Response

The response structure here is the same as the response structure used for Creating posts.

Note

  • Unlike the drafts API, the posts API doesn’t return the draft_url in the response payload unless the post was unpublished.

Unpublishing posts

Unpublishes a post.

PUT /api/1.3/posts/<id>

Parameters and Response

In addition to the specifications for editing posts, an “action” parameter with the value “unpublish” can be sent to the API in order to unpublish a post.

Name Type Description
action String
Action to be performed.
Optional.
Choices:
  • "unpublish"

Note

  • draft_url is returned in response payload when unpublishing a post.

Deleting posts

Deletes a post.

DELETE /api/1.3/posts/<id>

Response

The response payload is an empty object.

{}

Get a single post

Fetch a single post by ID.

GET /api/1.3/posts/<id>

Response

The response structure here is the same as the response structure used for Creating posts.

List posts

Fetch all posts ordered by most recent publish date.

GET /api/1.3/posts

Parameters

Name Type Description
offset Integer Offset – Optional
limit Integer Limit – Optional, defaults to 10, maximum value is 100
provider_id Integer

Provider of Post – Optional, defaults to 20 (Public API) if provider_post_id is received in payload. Choices available:

  • 0 Entry Editor
  • 15 Custom Import
  • 20 Public API
provider_post_id String External Post ID – Optional
order_by String

Changes the order of posts, defaults to recency Choices available:

  • last_update to start from newest updated_ts
  • oldness to start from oldest created_ts
  • recency to start from newest created_ts
  • popularity to order by page views in last x days. x is defined in order_by_period_in_days parameter. x defaults to 7
include_sections String Section IDs to include, multiple values can be sent with a comma-separated string – Optional
exclude_sections String Section IDs to exclude, multiple values can be sent with a comma-separated string – Optional
require_sections String Selects posts that have all these sections selected, multiple values can be sent with a comma-separated string – Optional
phrase String Filter posts by phrase – Optional
date_from Integer Date to start filtering from – Optional
date_to Integer Date to end filtering to – Optional
type String Post type – Optional,
order_by_period_in_days String Number of days to use in popularity, defaults to 7 – Optional
exclude_private Boolean Excludes private posts – Optional
include_tags String Tags to include, multiple values can be sent with a comma-separated string – Optional
include_fields String Fields to include in response, multiple values can be sent with a comma-separated string – Optional
exclude_fields String Fields to exclude in response, multiple values can be sent with a comma-separated string – Optional

Response

An array of objects is returned with each object having the same structure as the response returned in Creating posts.

List frontpage posts

Fetch all frontpage posts in editorial order.

GET /api/1.3/posts/frontpage

Parameters

Name Type Description
offset Integer Offset – Optional
limit Integer Limit – Optional, defaults to 10, maximum value is 100

Response

An array of objects is returned with each object having the same structure as the response returned in Creating posts.

List posts by section

Fetch all posts by section in editorial order.

GET /api/1.3/posts/section

Parameters

Name Type Description
section_name String Section name – Required
offset Integer Offset – Optional
limit Integer Limit – Optional, defaults to 10, maximum value is 100

Response

An array of objects is returned with each object having the same structure as the response returned in Creating posts.

List posts by tag

Fetch all posts by tag. All returned posts will be ordered by date with the most recently published appearing first.

GET /api/1.3/posts/tag

Parameters

Name Type Description
tag String Tag – Required
offset Integer Offset – Optional
limit Integer Limit – Optional, defaults to 10, maximum value is 100

Response

An array of objects is returned with each object having the same structure as the response returned in Creating posts.

List posts by search phrase

Fetch all posts filtered by search phrase. All returned posts will be ordered by date with the most recently published appearing first.

GET /api/1.3/posts/search

Parameters

Name Type Description
phrase String Search phrase – Required
offset Integer Offset – Optional
limit Integer Limit – Optional, defaults to 10, maximum value is 100

Response

An array of objects is returned with each object having the same structure as the response returned in Creating posts.

List posts by basename

Fetch all posts by basename. All returned posts will be ordered by date with the most recently published appearing first.

GET /api/1.3/posts/basename

Important

Unlike all other endpoints that list posts, this endpoint will return articles in draft status too.

Parameters

Name Type Description
basename String Basename – Required
removed Integer Removed posts – Optional, removed articles will be listed only if received

Response

An array of objects is returned with each object having the same structure as the response returned in Creating posts.

List posts sorted by page views

Fetch published posts sorted by page views.

GET /api/1.3/posts/page_views

Parameters

Name Type Description
period_in_hours Integer Period of time in hours – Optional, defaults to 24
offset Integer Offset – Optional
limit Integer Limit – Optional, defaults to 10, maximum value is 100

Response

An array of objects is returned with each object having the same structure as the response returned in Creating posts.