Get a blog post
curl --request GET \
--url https://{notifuseDomain}/api/blogPosts.get \
--header 'Authorization: Bearer <token>'import requests
url = "https://{notifuseDomain}/api/blogPosts.get"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{notifuseDomain}/api/blogPosts.get', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{notifuseDomain}/api/blogPosts.get",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{notifuseDomain}/api/blogPosts.get"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{notifuseDomain}/api/blogPosts.get")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{notifuseDomain}/api/blogPosts.get")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"post": {
"id": "1b4e28ba-2fa1-11d2-883f-0016d3cca427",
"category_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"slug": "october-release",
"settings": {
"title": "What shipped in October",
"template": {
"template_id": "blog_october_release",
"template_version": 3
},
"reading_time_minutes": 4,
"excerpt": "A faster editor, scheduled broadcasts and a new API.",
"featured_image_url": "https://cdn.example.com/blog/october.png",
"authors": [
{
"name": "Jane Doe",
"avatar_url": "https://cdn.example.com/avatars/jane.png"
}
],
"seo": {
"meta_title": "Release notes for October",
"meta_description": "Everything that shipped this month.",
"og_title": "<string>",
"og_description": "<string>",
"og_image": "https://cdn.example.com/og/october.png",
"canonical_url": "https://blog.example.com/product/october-release",
"keywords": [
"release",
"changelog"
],
"meta_robots": "index,follow"
}
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"published_at": "2026-10-01T09:00:00Z"
}
}{
"error": "either id or slug is required"
}{
"error": "<string>"
}{
"error": "Insufficient permissions: read access to blog required",
"resource": "blog",
"permission": "read"
}{
"error": "Failed to get post"
}Blog
Get a blog post
Retrieves a post by id or by slug; when both are given, id wins. Drafts are returned too. Requires the blog read permission.
GET
/
api
/
blogPosts.get
Get a blog post
curl --request GET \
--url https://{notifuseDomain}/api/blogPosts.get \
--header 'Authorization: Bearer <token>'import requests
url = "https://{notifuseDomain}/api/blogPosts.get"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{notifuseDomain}/api/blogPosts.get', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{notifuseDomain}/api/blogPosts.get",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{notifuseDomain}/api/blogPosts.get"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{notifuseDomain}/api/blogPosts.get")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{notifuseDomain}/api/blogPosts.get")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"post": {
"id": "1b4e28ba-2fa1-11d2-883f-0016d3cca427",
"category_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"slug": "october-release",
"settings": {
"title": "What shipped in October",
"template": {
"template_id": "blog_october_release",
"template_version": 3
},
"reading_time_minutes": 4,
"excerpt": "A faster editor, scheduled broadcasts and a new API.",
"featured_image_url": "https://cdn.example.com/blog/october.png",
"authors": [
{
"name": "Jane Doe",
"avatar_url": "https://cdn.example.com/avatars/jane.png"
}
],
"seo": {
"meta_title": "Release notes for October",
"meta_description": "Everything that shipped this month.",
"og_title": "<string>",
"og_description": "<string>",
"og_image": "https://cdn.example.com/og/october.png",
"canonical_url": "https://blog.example.com/product/october-release",
"keywords": [
"release",
"changelog"
],
"meta_robots": "index,follow"
}
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"published_at": "2026-10-01T09:00:00Z"
}
}{
"error": "either id or slug is required"
}{
"error": "<string>"
}{
"error": "Insufficient permissions: read access to blog required",
"resource": "blog",
"permission": "read"
}{
"error": "Failed to get post"
}Authorizations
API token for authentication
Query Parameters
The ID of the workspace
The post ID. Either id or slug is required.
The post slug. Either id or slug is required. Post slugs are unique across the workspace, so the slug alone identifies the post.
With slug, only match the post if it is in this category — the lookup a /{category_slug}/{post_slug} URL maps to.
Response
The post
Show child attributes
Show child attributes
