Get Public Blog Post
curl --request GET \
--url https://api.example.com/blog/{public_slug}import requests
url = "https://api.example.com/blog/{public_slug}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/blog/{public_slug}', 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://api.example.com/blog/{public_slug}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://api.example.com/blog/{public_slug}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/blog/{public_slug}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/blog/{public_slug}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyBlog
Get Public Blog Post
Get a published blog post by its public slug
GET
/
blog
/
{public_slug}
Get Public Blog Post
curl --request GET \
--url https://api.example.com/blog/{public_slug}import requests
url = "https://api.example.com/blog/{public_slug}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/blog/{public_slug}', 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://api.example.com/blog/{public_slug}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://api.example.com/blog/{public_slug}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/blog/{public_slug}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/blog/{public_slug}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyRetrieves a single published blog post by its public slug. Returns the blog post markdown content and metadata. This endpoint does not require authentication.
Path Parameters
string
required
The unique public slug of the blog post.
Request
curl -X GET "https://app.shipstar.ai/api/v1/blog/weekly-update-march-31-2025"
const slug = 'weekly-update-march-31-2025';
const response = await fetch(`https://app.shipstar.ai/api/v1/blog/${slug}`);
const post = await response.json();
import requests
slug = 'weekly-update-march-31-2025'
response = requests.get(f'https://app.shipstar.ai/api/v1/blog/{slug}')
post = response.json()
Response
Returns the blog post object with its full markdown content.Example Response
200
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"slug": "weekly-update-march-31-2025",
"content": "# What We Shipped This Week\n\nThis week we focused on improving the dashboard experience...",
"period_start": "2025-03-24T00:00:00Z",
"period_end": "2025-03-31T23:59:59Z",
"published_at": "2025-03-31T12:00:00Z",
"created_at": "2025-03-31T10:00:00Z"
}
Errors
| Status | Description |
|---|---|
| 404 | Blog post not found or not published |
| 422 | Invalid slug format |
Was this page helpful?
⌘I