Blog
In addition to an online storefront, Shopify shops come with a built-in blogging engine, allowing a shop to have one or more blogs.

Shop owners are encouraged to use blogs to:
- Make announcements
- Talk about their products in more detail
- Show off their expertise
- Connect with their customers and
- Boost their shop's search engine rankings
Shopify blogs are like most other blogs: a content management system for articles posted in reverse chronological order. Articles can be posted under one or more user-defined categories and tagged with one or more user-defined tags, with an option to allow readers to post comments to articles. An Atom feed is automatically generated for each blog, allowing for syndication. The search functionality built into every shop also searches the text in blog articles.
Blogs are meant to be used as a type of magazine or newsletter for the shop, with content that changes over time. If your shop needs a static page (such as an "About Us" page), we recommend that you use a Page instead.
Also see the Article resource for managing blog articles.
What you can do with Blog
The Shopify API lets you do the following with the Blog resource. More detailed versions of these general actions may be available:
- GET /admin/api/2020-01/blogs.json Retrieve a list of all blogs
- GET /admin/api/2020-01/blogs/count.json Receive a count of all Blogs
- GET /admin/api/2020-01/blogs/{blog_id}.json Receive a single Blog
- POST /admin/api/2020-01/blogs.json Create a new Blog
- PUT /admin/api/2020-01/blogs/{blog_id}.json Modify an existing Blog
- DELETE /admin/api/2020-01/blogs/{blog_id}.json Remove an existing Blog
Blog properties
commentable |
Indicates whether readers can post comments to the blog and if comments are moderated or not. Possible values are:
|
created_at
read-only |
The date and time when the blog was created. The API returns this value in ISO 8601 format. |
feedburner |
Feedburner is a web feed management provider and can be enabled to provide custom RSS feeds for Shopify bloggers. This property will default to blank or "null" unless feedburner is enabled through the shop admin. |
feedburner_location |
URL to the feedburner location for blogs that have enabled feedburner through their store admin. This property will default to blank or "null" unless feedburner is enabled through the shop admin. |
handle |
A human-friendly unique string for a blog automatically generated from its title. This handle is used by the Liquid templating language to refer to the blog. |
id
read-only |
A unique numeric identifier for the blog. |
metafield |
Attaches additional metadata to a store's resources:
|
tags |
Tags are additional short descriptors formatted as a string of comma-separated values. For example, if an article has three tags: tag1, tag2, tag3. Tags are limited to 255 characters. |
template_suffix |
States the name of the template a blog is using if it is using an alternate template. If a blog is using the default blog.liquid template, the value returned is "null". |
title |
The title of the blog. |
updated_at
read-only |
The date and time when changes were last made to the blog's properties. Note that this is not updated when creating, modifying or deleting articles in the blog. The API returns this value in ISO 8601 format. |
Endpoints
page
parameter will return an error. To learn more, see Making requests to paginated REST Admin API endpoints.
limit
|
The maximum number of results to retrieve. (default:50 , maximum: 250 )
|
since_id
|
Restrict results to after the specified ID |
handle
|
Filter by blog handle |
fields
|
comma-separated list of fields to include in the response |
Get all blogs for a shop
GET /admin/api/2020-01/blogs.json
View Response
HTTP/1.1 200 OK
{
"blogs": [
{
"id": 382285388,
"handle": "banana-blog",
"title": "A Gnu Blog",
"updated_at": "2006-02-02T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/382285388"
},
{
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2006-02-01T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
]
}
Get all blogs for a shop after a specified ID
GET /admin/api/2020-01/blogs.json?since_id=241253187
View Response
HTTP/1.1 200 OK
{
"blogs": [
{
"id": 382285388,
"handle": "banana-blog",
"title": "A Gnu Blog",
"updated_at": "2006-02-02T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/382285388"
},
{
"id": 1008414254,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:12-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:12-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414254"
}
]
}
Get all blogs for a shop
GET /admin/api/2020-01/blogs/count.json
View Response
HTTP/1.1 200 OK
{
"count": 2
}
fields
|
comma-separated list of fields to include in the response |
Get a single blog
GET /admin/api/2020-01/blogs/241253187.json
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2006-02-01T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Create a new empty blog
HTTP/1.1 201 Created
{
"blog": {
"id": 1008414255,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:15-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:15-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414255"
}
}
Trying to create a blog without a title will return an error
HTTP/1.1 422 Unprocessable Entity
{
"errors": {
"title": [
"can't be blank"
]
}
}
Create a new empty blog with a metafield
POST /admin/api/2020-01/blogs.json
{
"blog": {
"title": "Apple main blog",
"metafields": [
{
"key": "new",
"value": "newvalue",
"value_type": "string",
"namespace": "global"
}
]
}
}
View Response
HTTP/1.1 201 Created
{
"blog": {
"id": 1008414256,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:16-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:16-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414256"
}
}
Update an existing blog title
PUT /admin/api/2020-01/blogs/241253187.json
{
"blog": {
"id": 241253187,
"title": "IPod Updates"
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "IPod Updates",
"updated_at": "2021-01-01T14:20:17-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Update an existing blog title and handle and also activate comments
PUT /admin/api/2020-01/blogs/241253187.json
{
"blog": {
"id": 241253187,
"title": "IPod Updates",
"handle": "ipod-updates",
"commentable": "moderate"
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "ipod-updates",
"title": "IPod Updates",
"updated_at": "2021-01-01T14:20:19-05:00",
"commentable": "moderate",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Add a metafield to an existing blog
PUT /admin/api/2020-01/blogs/241253187.json
{
"blog": {
"id": 241253187,
"metafields": [
{
"key": "new",
"value": "newvalue",
"value_type": "string",
"namespace": "global"
}
]
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2021-01-01T14:20:20-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Remove an existing blog from a shop
DELETE /admin/api/2020-01/blogs/241253187.json
View Response
HTTP/1.1 200 OK
{
}
In addition to an online storefront, Shopify shops come with a built-in blogging engine, allowing a shop to have one or more blogs.

Shop owners are encouraged to use blogs to:
- Make announcements
- Talk about their products in more detail
- Show off their expertise
- Connect with their customers and
- Boost their shop's search engine rankings
Shopify blogs are like most other blogs: a content management system for articles posted in reverse chronological order. Articles can be posted under one or more user-defined categories and tagged with one or more user-defined tags, with an option to allow readers to post comments to articles. An Atom feed is automatically generated for each blog, allowing for syndication. The search functionality built into every shop also searches the text in blog articles.
Blogs are meant to be used as a type of magazine or newsletter for the shop, with content that changes over time. If your shop needs a static page (such as an "About Us" page), we recommend that you use a Page instead.
Also see the Article resource for managing blog articles.
What you can do with Blog
The Shopify API lets you do the following with the Blog resource. More detailed versions of these general actions may be available:
- GET /admin/api/2020-04/blogs.json Retrieve a list of all blogs
- GET /admin/api/2020-04/blogs/count.json Receive a count of all Blogs
- GET /admin/api/2020-04/blogs/{blog_id}.json Receive a single Blog
- POST /admin/api/2020-04/blogs.json Create a new Blog
- PUT /admin/api/2020-04/blogs/{blog_id}.json Modify an existing Blog
- DELETE /admin/api/2020-04/blogs/{blog_id}.json Remove an existing Blog
Blog properties
commentable |
Indicates whether readers can post comments to the blog and if comments are moderated or not. Possible values are:
|
created_at
read-only |
The date and time when the blog was created. The API returns this value in ISO 8601 format. |
feedburner |
Feedburner is a web feed management provider and can be enabled to provide custom RSS feeds for Shopify bloggers. This property will default to blank or "null" unless feedburner is enabled through the shop admin. |
feedburner_location |
URL to the feedburner location for blogs that have enabled feedburner through their store admin. This property will default to blank or "null" unless feedburner is enabled through the shop admin. |
handle |
A human-friendly unique string for a blog automatically generated from its title. This handle is used by the Liquid templating language to refer to the blog. |
id
read-only |
A unique numeric identifier for the blog. |
metafield |
Attaches additional metadata to a store's resources:
|
tags |
Tags are additional short descriptors formatted as a string of comma-separated values. For example, if an article has three tags: tag1, tag2, tag3. Tags are limited to 255 characters. |
template_suffix |
States the name of the template a blog is using if it is using an alternate template. If a blog is using the default blog.liquid template, the value returned is "null". |
title |
The title of the blog. |
updated_at
read-only |
The date and time when changes were last made to the blog's properties. Note that this is not updated when creating, modifying or deleting articles in the blog. The API returns this value in ISO 8601 format. |
Endpoints
page
parameter will return an error. To learn more, see Making requests to paginated REST Admin API endpoints.
limit
|
The maximum number of results to retrieve. (default:50 , maximum: 250 )
|
since_id
|
Restrict results to after the specified ID |
handle
|
Filter by blog handle |
fields
|
comma-separated list of fields to include in the response |
Get all blogs for a shop
GET /admin/api/2020-04/blogs.json
View Response
HTTP/1.1 200 OK
{
"blogs": [
{
"id": 382285388,
"handle": "banana-blog",
"title": "A Gnu Blog",
"updated_at": "2006-02-02T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/382285388"
},
{
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2006-02-01T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
]
}
Get all blogs for a shop after a specified ID
GET /admin/api/2020-04/blogs.json?since_id=241253187
View Response
HTTP/1.1 200 OK
{
"blogs": [
{
"id": 382285388,
"handle": "banana-blog",
"title": "A Gnu Blog",
"updated_at": "2006-02-02T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/382285388"
},
{
"id": 1008414254,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:12-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:12-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414254"
}
]
}
Get all blogs for a shop
GET /admin/api/2020-04/blogs/count.json
View Response
HTTP/1.1 200 OK
{
"count": 2
}
fields
|
comma-separated list of fields to include in the response |
Get a single blog
GET /admin/api/2020-04/blogs/241253187.json
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2006-02-01T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Create a new empty blog
HTTP/1.1 201 Created
{
"blog": {
"id": 1008414255,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:15-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:15-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414255"
}
}
Trying to create a blog without a title will return an error
HTTP/1.1 422 Unprocessable Entity
{
"errors": {
"title": [
"can't be blank"
]
}
}
Create a new empty blog with a metafield
POST /admin/api/2020-04/blogs.json
{
"blog": {
"title": "Apple main blog",
"metafields": [
{
"key": "new",
"value": "newvalue",
"value_type": "string",
"namespace": "global"
}
]
}
}
View Response
HTTP/1.1 201 Created
{
"blog": {
"id": 1008414256,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:16-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:16-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414256"
}
}
Update an existing blog title
PUT /admin/api/2020-04/blogs/241253187.json
{
"blog": {
"id": 241253187,
"title": "IPod Updates"
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "IPod Updates",
"updated_at": "2021-01-01T14:20:17-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Update an existing blog title and handle and also activate comments
PUT /admin/api/2020-04/blogs/241253187.json
{
"blog": {
"id": 241253187,
"title": "IPod Updates",
"handle": "ipod-updates",
"commentable": "moderate"
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "ipod-updates",
"title": "IPod Updates",
"updated_at": "2021-01-01T14:20:19-05:00",
"commentable": "moderate",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Add a metafield to an existing blog
PUT /admin/api/2020-04/blogs/241253187.json
{
"blog": {
"id": 241253187,
"metafields": [
{
"key": "new",
"value": "newvalue",
"value_type": "string",
"namespace": "global"
}
]
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2021-01-01T14:20:20-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Remove an existing blog from a shop
DELETE /admin/api/2020-04/blogs/241253187.json
View Response
HTTP/1.1 200 OK
{
}
In addition to an online storefront, Shopify shops come with a built-in blogging engine, allowing a shop to have one or more blogs.

Shop owners are encouraged to use blogs to:
- Make announcements
- Talk about their products in more detail
- Show off their expertise
- Connect with their customers and
- Boost their shop's search engine rankings
Shopify blogs are like most other blogs: a content management system for articles posted in reverse chronological order. Articles can be posted under one or more user-defined categories and tagged with one or more user-defined tags, with an option to allow readers to post comments to articles. An Atom feed is automatically generated for each blog, allowing for syndication. The search functionality built into every shop also searches the text in blog articles.
Blogs are meant to be used as a type of magazine or newsletter for the shop, with content that changes over time. If your shop needs a static page (such as an "About Us" page), we recommend that you use a Page instead.
Also see the Article resource for managing blog articles.
What you can do with Blog
The Shopify API lets you do the following with the Blog resource. More detailed versions of these general actions may be available:
- GET /admin/api/2020-07/blogs.json Retrieve a list of all blogs
- GET /admin/api/2020-07/blogs/count.json Receive a count of all Blogs
- GET /admin/api/2020-07/blogs/{blog_id}.json Receive a single Blog
- POST /admin/api/2020-07/blogs.json Create a new Blog
- PUT /admin/api/2020-07/blogs/{blog_id}.json Modify an existing Blog
- DELETE /admin/api/2020-07/blogs/{blog_id}.json Remove an existing Blog
Blog properties
commentable |
Indicates whether readers can post comments to the blog and if comments are moderated or not. Possible values are:
|
created_at
read-only |
The date and time when the blog was created. The API returns this value in ISO 8601 format. |
feedburner |
Feedburner is a web feed management provider and can be enabled to provide custom RSS feeds for Shopify bloggers. This property will default to blank or "null" unless feedburner is enabled through the shop admin. |
feedburner_location |
URL to the feedburner location for blogs that have enabled feedburner through their store admin. This property will default to blank or "null" unless feedburner is enabled through the shop admin. |
handle |
A human-friendly unique string for a blog automatically generated from its title. This handle is used by the Liquid templating language to refer to the blog. |
id
read-only |
A unique numeric identifier for the blog. |
metafield |
Attaches additional metadata to a store's resources:
|
tags |
Tags are additional short descriptors formatted as a string of comma-separated values. For example, if an article has three tags: tag1, tag2, tag3. Tags are limited to 255 characters. |
template_suffix |
States the name of the template a blog is using if it is using an alternate template. If a blog is using the default blog.liquid template, the value returned is "null". |
title |
The title of the blog. |
updated_at
read-only |
The date and time when changes were last made to the blog's properties. Note that this is not updated when creating, modifying or deleting articles in the blog. The API returns this value in ISO 8601 format. |
Endpoints
page
parameter will return an error. To learn more, see Making requests to paginated REST Admin API endpoints.
limit
|
The maximum number of results to retrieve. (default:50 , maximum: 250 )
|
since_id
|
Restrict results to after the specified ID |
handle
|
Filter by blog handle |
fields
|
comma-separated list of fields to include in the response |
Get all blogs for a shop
GET /admin/api/2020-07/blogs.json
View Response
HTTP/1.1 200 OK
{
"blogs": [
{
"id": 382285388,
"handle": "banana-blog",
"title": "A Gnu Blog",
"updated_at": "2006-02-02T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/382285388"
},
{
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2006-02-01T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
]
}
Get all blogs for a shop after a specified ID
GET /admin/api/2020-07/blogs.json?since_id=241253187
View Response
HTTP/1.1 200 OK
{
"blogs": [
{
"id": 382285388,
"handle": "banana-blog",
"title": "A Gnu Blog",
"updated_at": "2006-02-02T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/382285388"
},
{
"id": 1008414254,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:12-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:12-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414254"
}
]
}
Get all blogs for a shop
GET /admin/api/2020-07/blogs/count.json
View Response
HTTP/1.1 200 OK
{
"count": 2
}
fields
|
comma-separated list of fields to include in the response |
Get a single blog
GET /admin/api/2020-07/blogs/241253187.json
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2006-02-01T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Create a new empty blog
HTTP/1.1 201 Created
{
"blog": {
"id": 1008414255,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:15-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:15-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414255"
}
}
Trying to create a blog without a title will return an error
HTTP/1.1 422 Unprocessable Entity
{
"errors": {
"title": [
"can't be blank"
]
}
}
Create a new empty blog with a metafield
POST /admin/api/2020-07/blogs.json
{
"blog": {
"title": "Apple main blog",
"metafields": [
{
"key": "new",
"value": "newvalue",
"value_type": "string",
"namespace": "global"
}
]
}
}
View Response
HTTP/1.1 201 Created
{
"blog": {
"id": 1008414256,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:16-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:16-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414256"
}
}
Update an existing blog title
PUT /admin/api/2020-07/blogs/241253187.json
{
"blog": {
"id": 241253187,
"title": "IPod Updates"
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "IPod Updates",
"updated_at": "2021-01-01T14:20:17-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Update an existing blog title and handle and also activate comments
PUT /admin/api/2020-07/blogs/241253187.json
{
"blog": {
"id": 241253187,
"title": "IPod Updates",
"handle": "ipod-updates",
"commentable": "moderate"
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "ipod-updates",
"title": "IPod Updates",
"updated_at": "2021-01-01T14:20:19-05:00",
"commentable": "moderate",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Add a metafield to an existing blog
PUT /admin/api/2020-07/blogs/241253187.json
{
"blog": {
"id": 241253187,
"metafields": [
{
"key": "new",
"value": "newvalue",
"value_type": "string",
"namespace": "global"
}
]
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2021-01-01T14:20:20-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Remove an existing blog from a shop
DELETE /admin/api/2020-07/blogs/241253187.json
View Response
HTTP/1.1 200 OK
{
}
In addition to an online storefront, Shopify shops come with a built-in blogging engine, allowing a shop to have one or more blogs.

Shop owners are encouraged to use blogs to:
- Make announcements
- Talk about their products in more detail
- Show off their expertise
- Connect with their customers and
- Boost their shop's search engine rankings
Shopify blogs are like most other blogs: a content management system for articles posted in reverse chronological order. Articles can be posted under one or more user-defined categories and tagged with one or more user-defined tags, with an option to allow readers to post comments to articles. An Atom feed is automatically generated for each blog, allowing for syndication. The search functionality built into every shop also searches the text in blog articles.
Blogs are meant to be used as a type of magazine or newsletter for the shop, with content that changes over time. If your shop needs a static page (such as an "About Us" page), we recommend that you use a Page instead.
Also see the Article resource for managing blog articles.
What you can do with Blog
The Shopify API lets you do the following with the Blog resource. More detailed versions of these general actions may be available:
- GET /admin/api/2020-10/blogs.json Retrieve a list of all blogs
- GET /admin/api/2020-10/blogs/count.json Receive a count of all Blogs
- GET /admin/api/2020-10/blogs/{blog_id}.json Receive a single Blog
- POST /admin/api/2020-10/blogs.json Create a new Blog
- PUT /admin/api/2020-10/blogs/{blog_id}.json Modify an existing Blog
- DELETE /admin/api/2020-10/blogs/{blog_id}.json Remove an existing Blog
Blog properties
commentable |
Indicates whether readers can post comments to the blog and if comments are moderated or not. Possible values are:
|
created_at
read-only |
The date and time when the blog was created. The API returns this value in ISO 8601 format. |
feedburner |
Feedburner is a web feed management provider and can be enabled to provide custom RSS feeds for Shopify bloggers. This property will default to blank or "null" unless feedburner is enabled through the shop admin. |
feedburner_location |
URL to the feedburner location for blogs that have enabled feedburner through their store admin. This property will default to blank or "null" unless feedburner is enabled through the shop admin. |
handle |
A human-friendly unique string for a blog automatically generated from its title. This handle is used by the Liquid templating language to refer to the blog. |
id
read-only |
A unique numeric identifier for the blog. |
metafield |
Attaches additional metadata to a store's resources:
|
tags |
Tags are additional short descriptors formatted as a string of comma-separated values. For example, if an article has three tags: tag1, tag2, tag3. Tags are limited to 255 characters. |
template_suffix |
States the name of the template a blog is using if it is using an alternate template. If a blog is using the default blog.liquid template, the value returned is "null". |
title |
The title of the blog. |
updated_at
read-only |
The date and time when changes were last made to the blog's properties. Note that this is not updated when creating, modifying or deleting articles in the blog. The API returns this value in ISO 8601 format. |
Endpoints
page
parameter will return an error. To learn more, see Making requests to paginated REST Admin API endpoints.
limit
|
The maximum number of results to retrieve. (default:50 , maximum: 250 )
|
since_id
|
Restrict results to after the specified ID |
handle
|
Filter by blog handle |
fields
|
comma-separated list of fields to include in the response |
Get all blogs for a shop
GET /admin/api/2020-10/blogs.json
View Response
HTTP/1.1 200 OK
{
"blogs": [
{
"id": 382285388,
"handle": "banana-blog",
"title": "A Gnu Blog",
"updated_at": "2006-02-02T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/382285388"
},
{
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2006-02-01T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
]
}
Get all blogs for a shop after a specified ID
GET /admin/api/2020-10/blogs.json?since_id=241253187
View Response
HTTP/1.1 200 OK
{
"blogs": [
{
"id": 382285388,
"handle": "banana-blog",
"title": "A Gnu Blog",
"updated_at": "2006-02-02T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/382285388"
},
{
"id": 1008414254,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:12-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:12-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414254"
}
]
}
Get all blogs for a shop
GET /admin/api/2020-10/blogs/count.json
View Response
HTTP/1.1 200 OK
{
"count": 2
}
fields
|
comma-separated list of fields to include in the response |
Get a single blog
GET /admin/api/2020-10/blogs/241253187.json
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2006-02-01T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Create a new empty blog
HTTP/1.1 201 Created
{
"blog": {
"id": 1008414255,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:15-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:15-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414255"
}
}
Trying to create a blog without a title will return an error
HTTP/1.1 422 Unprocessable Entity
{
"errors": {
"title": [
"can't be blank"
]
}
}
Create a new empty blog with a metafield
POST /admin/api/2020-10/blogs.json
{
"blog": {
"title": "Apple main blog",
"metafields": [
{
"key": "new",
"value": "newvalue",
"value_type": "string",
"namespace": "global"
}
]
}
}
View Response
HTTP/1.1 201 Created
{
"blog": {
"id": 1008414256,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:16-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:16-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414256"
}
}
Update an existing blog title
PUT /admin/api/2020-10/blogs/241253187.json
{
"blog": {
"id": 241253187,
"title": "IPod Updates"
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "IPod Updates",
"updated_at": "2021-01-01T14:20:17-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Update an existing blog title and handle and also activate comments
PUT /admin/api/2020-10/blogs/241253187.json
{
"blog": {
"id": 241253187,
"title": "IPod Updates",
"handle": "ipod-updates",
"commentable": "moderate"
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "ipod-updates",
"title": "IPod Updates",
"updated_at": "2021-01-01T14:20:19-05:00",
"commentable": "moderate",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Add a metafield to an existing blog
PUT /admin/api/2020-10/blogs/241253187.json
{
"blog": {
"id": 241253187,
"metafields": [
{
"key": "new",
"value": "newvalue",
"value_type": "string",
"namespace": "global"
}
]
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2021-01-01T14:20:20-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Remove an existing blog from a shop
DELETE /admin/api/2020-10/blogs/241253187.json
View Response
HTTP/1.1 200 OK
{
}
In addition to an online storefront, Shopify shops come with a built-in blogging engine, allowing a shop to have one or more blogs.

Shop owners are encouraged to use blogs to:
- Make announcements
- Talk about their products in more detail
- Show off their expertise
- Connect with their customers and
- Boost their shop's search engine rankings
Shopify blogs are like most other blogs: a content management system for articles posted in reverse chronological order. Articles can be posted under one or more user-defined categories and tagged with one or more user-defined tags, with an option to allow readers to post comments to articles. An Atom feed is automatically generated for each blog, allowing for syndication. The search functionality built into every shop also searches the text in blog articles.
Blogs are meant to be used as a type of magazine or newsletter for the shop, with content that changes over time. If your shop needs a static page (such as an "About Us" page), we recommend that you use a Page instead.
Also see the Article resource for managing blog articles.
What you can do with Blog
The Shopify API lets you do the following with the Blog resource. More detailed versions of these general actions may be available:
- GET /admin/api/2021-01/blogs.json Retrieve a list of all blogs
- GET /admin/api/2021-01/blogs/count.json Receive a count of all Blogs
- GET /admin/api/2021-01/blogs/{blog_id}.json Receive a single Blog
- POST /admin/api/2021-01/blogs.json Create a new Blog
- PUT /admin/api/2021-01/blogs/{blog_id}.json Modify an existing Blog
- DELETE /admin/api/2021-01/blogs/{blog_id}.json Remove an existing Blog
Blog properties
commentable |
Indicates whether readers can post comments to the blog and if comments are moderated or not. Possible values are:
|
created_at
read-only |
The date and time when the blog was created. The API returns this value in ISO 8601 format. |
feedburner |
Feedburner is a web feed management provider and can be enabled to provide custom RSS feeds for Shopify bloggers. This property will default to blank or "null" unless feedburner is enabled through the shop admin. |
feedburner_location |
URL to the feedburner location for blogs that have enabled feedburner through their store admin. This property will default to blank or "null" unless feedburner is enabled through the shop admin. |
handle |
A human-friendly unique string for a blog automatically generated from its title. This handle is used by the Liquid templating language to refer to the blog. |
id
read-only |
A unique numeric identifier for the blog. |
metafield |
Attaches additional metadata to a store's resources:
|
tags |
Tags are additional short descriptors formatted as a string of comma-separated values. For example, if an article has three tags: tag1, tag2, tag3. Tags are limited to 255 characters. |
template_suffix |
States the name of the template a blog is using if it is using an alternate template. If a blog is using the default blog.liquid template, the value returned is "null". |
title |
The title of the blog. |
updated_at
read-only |
The date and time when changes were last made to the blog's properties. Note that this is not updated when creating, modifying or deleting articles in the blog. The API returns this value in ISO 8601 format. |
Endpoints
page
parameter will return an error. To learn more, see Making requests to paginated REST Admin API endpoints.
limit
|
The maximum number of results to retrieve. (default:50 , maximum: 250 )
|
since_id
|
Restrict results to after the specified ID |
handle
|
Filter by blog handle |
fields
|
comma-separated list of fields to include in the response |
Get all blogs for a shop
GET /admin/api/2021-01/blogs.json
View Response
HTTP/1.1 200 OK
{
"blogs": [
{
"id": 382285388,
"handle": "banana-blog",
"title": "A Gnu Blog",
"updated_at": "2006-02-02T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/382285388"
},
{
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2006-02-01T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
]
}
Get all blogs for a shop after a specified ID
GET /admin/api/2021-01/blogs.json?since_id=241253187
View Response
HTTP/1.1 200 OK
{
"blogs": [
{
"id": 382285388,
"handle": "banana-blog",
"title": "A Gnu Blog",
"updated_at": "2006-02-02T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/382285388"
},
{
"id": 1008414254,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:12-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:12-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414254"
}
]
}
Get all blogs for a shop
GET /admin/api/2021-01/blogs/count.json
View Response
HTTP/1.1 200 OK
{
"count": 2
}
fields
|
comma-separated list of fields to include in the response |
Get a single blog
GET /admin/api/2021-01/blogs/241253187.json
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2006-02-01T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Create a new empty blog
HTTP/1.1 201 Created
{
"blog": {
"id": 1008414255,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:15-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:15-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414255"
}
}
Trying to create a blog without a title will return an error
HTTP/1.1 422 Unprocessable Entity
{
"errors": {
"title": [
"can't be blank"
]
}
}
Create a new empty blog with a metafield
POST /admin/api/2021-01/blogs.json
{
"blog": {
"title": "Apple main blog",
"metafields": [
{
"key": "new",
"value": "newvalue",
"value_type": "string",
"namespace": "global"
}
]
}
}
View Response
HTTP/1.1 201 Created
{
"blog": {
"id": 1008414256,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:16-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:16-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414256"
}
}
Update an existing blog title
PUT /admin/api/2021-01/blogs/241253187.json
{
"blog": {
"id": 241253187,
"title": "IPod Updates"
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "IPod Updates",
"updated_at": "2021-01-01T14:20:17-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Update an existing blog title and handle and also activate comments
PUT /admin/api/2021-01/blogs/241253187.json
{
"blog": {
"id": 241253187,
"title": "IPod Updates",
"handle": "ipod-updates",
"commentable": "moderate"
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "ipod-updates",
"title": "IPod Updates",
"updated_at": "2021-01-01T14:20:19-05:00",
"commentable": "moderate",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Add a metafield to an existing blog
PUT /admin/api/2021-01/blogs/241253187.json
{
"blog": {
"id": 241253187,
"metafields": [
{
"key": "new",
"value": "newvalue",
"value_type": "string",
"namespace": "global"
}
]
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2021-01-01T14:20:20-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Remove an existing blog from a shop
DELETE /admin/api/2021-01/blogs/241253187.json
View Response
HTTP/1.1 200 OK
{
}
In addition to an online storefront, Shopify shops come with a built-in blogging engine, allowing a shop to have one or more blogs.

Shop owners are encouraged to use blogs to:
- Make announcements
- Talk about their products in more detail
- Show off their expertise
- Connect with their customers and
- Boost their shop's search engine rankings
Shopify blogs are like most other blogs: a content management system for articles posted in reverse chronological order. Articles can be posted under one or more user-defined categories and tagged with one or more user-defined tags, with an option to allow readers to post comments to articles. An Atom feed is automatically generated for each blog, allowing for syndication. The search functionality built into every shop also searches the text in blog articles.
Blogs are meant to be used as a type of magazine or newsletter for the shop, with content that changes over time. If your shop needs a static page (such as an "About Us" page), we recommend that you use a Page instead.
Also see the Article resource for managing blog articles.
What you can do with Blog
The Shopify API lets you do the following with the Blog resource. More detailed versions of these general actions may be available:
- GET /admin/api/2021-04/blogs.json Retrieve a list of all blogs
- GET /admin/api/2021-04/blogs/count.json Receive a count of all Blogs
- GET /admin/api/2021-04/blogs/{blog_id}.json Receive a single Blog
- POST /admin/api/2021-04/blogs.json Create a new Blog
- PUT /admin/api/2021-04/blogs/{blog_id}.json Modify an existing Blog
- DELETE /admin/api/2021-04/blogs/{blog_id}.json Remove an existing Blog
Blog properties
commentable |
Indicates whether readers can post comments to the blog and if comments are moderated or not. Possible values are:
|
created_at
read-only |
The date and time when the blog was created. The API returns this value in ISO 8601 format. |
feedburner |
Feedburner is a web feed management provider and can be enabled to provide custom RSS feeds for Shopify bloggers. This property will default to blank or "null" unless feedburner is enabled through the shop admin. |
feedburner_location |
URL to the feedburner location for blogs that have enabled feedburner through their store admin. This property will default to blank or "null" unless feedburner is enabled through the shop admin. |
handle |
A human-friendly unique string for a blog automatically generated from its title. This handle is used by the Liquid templating language to refer to the blog. |
id
read-only |
A unique numeric identifier for the blog. |
metafield |
Attaches additional metadata to a store's resources:
|
tags |
Tags are additional short descriptors formatted as a string of comma-separated values. For example, if an article has three tags: tag1, tag2, tag3. Tags are limited to 255 characters. |
template_suffix |
States the name of the template a blog is using if it is using an alternate template. If a blog is using the default blog.liquid template, the value returned is "null". |
title |
The title of the blog. |
updated_at
read-only |
The date and time when changes were last made to the blog's properties. Note that this is not updated when creating, modifying or deleting articles in the blog. The API returns this value in ISO 8601 format. |
Endpoints
page
parameter will return an error. To learn more, see Making requests to paginated REST Admin API endpoints.
limit
|
The maximum number of results to retrieve. (default:50 , maximum: 250 )
|
since_id
|
Restrict results to after the specified ID |
handle
|
Filter by blog handle |
fields
|
comma-separated list of fields to include in the response |
Get all blogs for a shop
GET /admin/api/2021-04/blogs.json
View Response
HTTP/1.1 200 OK
{
"blogs": [
{
"id": 382285388,
"handle": "banana-blog",
"title": "A Gnu Blog",
"updated_at": "2006-02-02T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/382285388"
},
{
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2006-02-01T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
]
}
Get all blogs for a shop after a specified ID
GET /admin/api/2021-04/blogs.json?since_id=241253187
View Response
HTTP/1.1 200 OK
{
"blogs": [
{
"id": 382285388,
"handle": "banana-blog",
"title": "A Gnu Blog",
"updated_at": "2006-02-02T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/382285388"
},
{
"id": 1008414254,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:12-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:12-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414254"
}
]
}
Get all blogs for a shop
GET /admin/api/2021-04/blogs/count.json
View Response
HTTP/1.1 200 OK
{
"count": 2
}
fields
|
comma-separated list of fields to include in the response |
Get a single blog
GET /admin/api/2021-04/blogs/241253187.json
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2006-02-01T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Create a new empty blog
HTTP/1.1 201 Created
{
"blog": {
"id": 1008414255,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:15-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:15-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414255"
}
}
Trying to create a blog without a title will return an error
HTTP/1.1 422 Unprocessable Entity
{
"errors": {
"title": [
"can't be blank"
]
}
}
Create a new empty blog with a metafield
POST /admin/api/2021-04/blogs.json
{
"blog": {
"title": "Apple main blog",
"metafields": [
{
"key": "new",
"value": "newvalue",
"value_type": "string",
"namespace": "global"
}
]
}
}
View Response
HTTP/1.1 201 Created
{
"blog": {
"id": 1008414256,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:16-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:16-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414256"
}
}
Update an existing blog title
PUT /admin/api/2021-04/blogs/241253187.json
{
"blog": {
"id": 241253187,
"title": "IPod Updates"
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "IPod Updates",
"updated_at": "2021-01-01T14:20:17-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Update an existing blog title and handle and also activate comments
PUT /admin/api/2021-04/blogs/241253187.json
{
"blog": {
"id": 241253187,
"title": "IPod Updates",
"handle": "ipod-updates",
"commentable": "moderate"
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "ipod-updates",
"title": "IPod Updates",
"updated_at": "2021-01-01T14:20:19-05:00",
"commentable": "moderate",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Add a metafield to an existing blog
PUT /admin/api/2021-04/blogs/241253187.json
{
"blog": {
"id": 241253187,
"metafields": [
{
"key": "new",
"value": "newvalue",
"value_type": "string",
"namespace": "global"
}
]
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2021-01-01T14:20:20-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Remove an existing blog from a shop
DELETE /admin/api/2021-04/blogs/241253187.json
View Response
HTTP/1.1 200 OK
{
}
In addition to an online storefront, Shopify shops come with a built-in blogging engine, allowing a shop to have one or more blogs.

Shop owners are encouraged to use blogs to:
- Make announcements
- Talk about their products in more detail
- Show off their expertise
- Connect with their customers and
- Boost their shop's search engine rankings
Shopify blogs are like most other blogs: a content management system for articles posted in reverse chronological order. Articles can be posted under one or more user-defined categories and tagged with one or more user-defined tags, with an option to allow readers to post comments to articles. An Atom feed is automatically generated for each blog, allowing for syndication. The search functionality built into every shop also searches the text in blog articles.
Blogs are meant to be used as a type of magazine or newsletter for the shop, with content that changes over time. If your shop needs a static page (such as an "About Us" page), we recommend that you use a Page instead.
Also see the Article resource for managing blog articles.
What you can do with Blog
The Shopify API lets you do the following with the Blog resource. More detailed versions of these general actions may be available:
- GET /admin/api/unstable/blogs.json Retrieve a list of all blogs
- GET /admin/api/unstable/blogs/count.json Receive a count of all Blogs
- GET /admin/api/unstable/blogs/{blog_id}.json Receive a single Blog
- POST /admin/api/unstable/blogs.json Create a new Blog
- PUT /admin/api/unstable/blogs/{blog_id}.json Modify an existing Blog
- DELETE /admin/api/unstable/blogs/{blog_id}.json Remove an existing Blog
Blog properties
commentable |
Indicates whether readers can post comments to the blog and if comments are moderated or not. Possible values are:
|
created_at
read-only |
The date and time when the blog was created. The API returns this value in ISO 8601 format. |
feedburner |
Feedburner is a web feed management provider and can be enabled to provide custom RSS feeds for Shopify bloggers. This property will default to blank or "null" unless feedburner is enabled through the shop admin. |
feedburner_location |
URL to the feedburner location for blogs that have enabled feedburner through their store admin. This property will default to blank or "null" unless feedburner is enabled through the shop admin. |
handle |
A human-friendly unique string for a blog automatically generated from its title. This handle is used by the Liquid templating language to refer to the blog. |
id
read-only |
A unique numeric identifier for the blog. |
metafield |
Attaches additional metadata to a store's resources:
|
tags |
Tags are additional short descriptors formatted as a string of comma-separated values. For example, if an article has three tags: tag1, tag2, tag3. Tags are limited to 255 characters. |
template_suffix |
States the name of the template a blog is using if it is using an alternate template. If a blog is using the default blog.liquid template, the value returned is "null". |
title |
The title of the blog. |
updated_at
read-only |
The date and time when changes were last made to the blog's properties. Note that this is not updated when creating, modifying or deleting articles in the blog. The API returns this value in ISO 8601 format. |
Endpoints
page
parameter will return an error. To learn more, see Making requests to paginated REST Admin API endpoints.
limit
|
The maximum number of results to retrieve. (default:50 , maximum: 250 )
|
since_id
|
Restrict results to after the specified ID |
handle
|
Filter by blog handle |
fields
|
comma-separated list of fields to include in the response |
Get all blogs for a shop
GET /admin/api/unstable/blogs.json
View Response
HTTP/1.1 200 OK
{
"blogs": [
{
"id": 382285388,
"handle": "banana-blog",
"title": "A Gnu Blog",
"updated_at": "2006-02-02T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/382285388"
},
{
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2006-02-01T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
]
}
Get all blogs for a shop after a specified ID
GET /admin/api/unstable/blogs.json?since_id=241253187
View Response
HTTP/1.1 200 OK
{
"blogs": [
{
"id": 382285388,
"handle": "banana-blog",
"title": "A Gnu Blog",
"updated_at": "2006-02-02T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/382285388"
},
{
"id": 1008414254,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:12-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:12-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414254"
}
]
}
Get all blogs for a shop
GET /admin/api/unstable/blogs/count.json
View Response
HTTP/1.1 200 OK
{
"count": 2
}
fields
|
comma-separated list of fields to include in the response |
Get a single blog
GET /admin/api/unstable/blogs/241253187.json
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2006-02-01T19:00:00-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Create a new empty blog
HTTP/1.1 201 Created
{
"blog": {
"id": 1008414255,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:15-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:15-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414255"
}
}
Trying to create a blog without a title will return an error
HTTP/1.1 422 Unprocessable Entity
{
"errors": {
"title": [
"can't be blank"
]
}
}
Create a new empty blog with a metafield
POST /admin/api/unstable/blogs.json
{
"blog": {
"title": "Apple main blog",
"metafields": [
{
"key": "new",
"value": "newvalue",
"value_type": "string",
"namespace": "global"
}
]
}
}
View Response
HTTP/1.1 201 Created
{
"blog": {
"id": 1008414256,
"handle": "apple-main-blog",
"title": "Apple main blog",
"updated_at": "2021-01-01T14:20:16-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:20:16-05:00",
"template_suffix": null,
"tags": "",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/1008414256"
}
}
Update an existing blog title
PUT /admin/api/unstable/blogs/241253187.json
{
"blog": {
"id": 241253187,
"title": "IPod Updates"
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "IPod Updates",
"updated_at": "2021-01-01T14:20:17-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Update an existing blog title and handle and also activate comments
PUT /admin/api/unstable/blogs/241253187.json
{
"blog": {
"id": 241253187,
"title": "IPod Updates",
"handle": "ipod-updates",
"commentable": "moderate"
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "ipod-updates",
"title": "IPod Updates",
"updated_at": "2021-01-01T14:20:19-05:00",
"commentable": "moderate",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Add a metafield to an existing blog
PUT /admin/api/unstable/blogs/241253187.json
{
"blog": {
"id": 241253187,
"metafields": [
{
"key": "new",
"value": "newvalue",
"value_type": "string",
"namespace": "global"
}
]
}
}
View Response
HTTP/1.1 200 OK
{
"blog": {
"id": 241253187,
"handle": "apple-blog",
"title": "Mah Blog",
"updated_at": "2021-01-01T14:20:20-05:00",
"commentable": "no",
"feedburner": null,
"feedburner_location": null,
"created_at": "2021-01-01T14:04:27-05:00",
"template_suffix": null,
"tags": "Announcing, Mystery",
"admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/241253187"
}
}
Remove an existing blog from a shop
DELETE /admin/api/unstable/blogs/241253187.json
View Response
HTTP/1.1 200 OK
{
}