import { ParagraphAPI } from "@paragraph-com/sdk"
const api = new ParagraphAPI()
const post = await api.posts.get({ id: "3T2PQZlsdQtigUp4fhlb" }).single()curl --request GET \
--url https://public.api.paragraph.com/api/v1/posts/{postId}import requests
url = "https://public.api.paragraph.com/api/v1/posts/{postId}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://public.api.paragraph.com/api/v1/posts/{postId}', 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://public.api.paragraph.com/api/v1/posts/{postId}",
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://public.api.paragraph.com/api/v1/posts/{postId}"
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://public.api.paragraph.com/api/v1/posts/{postId}")
.asString();require 'uri'
require 'net/http'
url = URI("https://public.api.paragraph.com/api/v1/posts/{postId}")
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_body{
"id": "<string>",
"title": "<string>",
"slug": "<string>",
"imageUrl": "<string>",
"imageAlt": "<string>",
"publishedAt": "<string>",
"updatedAt": "<string>",
"subtitle": "<string>",
"staticHtml": "<string>",
"json": "<string>",
"markdown": "<string>",
"coinId": "<string>",
"categories": [
"<string>"
],
"canonicalUrl": "<string>",
"publishOnline": true,
"communityId": "<string>",
"authors": [
{
"id": "<string>",
"publicationId": "<string>",
"walletAddress": "<string>",
"avatarUrl": "<string>",
"name": "<string>",
"bio": "<string>"
}
],
"authorIds": [
"<string>"
],
"views": 123,
"status": "published"
}{
"success": false,
"msg": "<string>"
}{
"success": false,
"msg": "<string>"
}Get post by ID
Retrieve detailed information about a specific post
import { ParagraphAPI } from "@paragraph-com/sdk"
const api = new ParagraphAPI()
const post = await api.posts.get({ id: "3T2PQZlsdQtigUp4fhlb" }).single()curl --request GET \
--url https://public.api.paragraph.com/api/v1/posts/{postId}import requests
url = "https://public.api.paragraph.com/api/v1/posts/{postId}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://public.api.paragraph.com/api/v1/posts/{postId}', 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://public.api.paragraph.com/api/v1/posts/{postId}",
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://public.api.paragraph.com/api/v1/posts/{postId}"
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://public.api.paragraph.com/api/v1/posts/{postId}")
.asString();require 'uri'
require 'net/http'
url = URI("https://public.api.paragraph.com/api/v1/posts/{postId}")
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_body{
"id": "<string>",
"title": "<string>",
"slug": "<string>",
"imageUrl": "<string>",
"imageAlt": "<string>",
"publishedAt": "<string>",
"updatedAt": "<string>",
"subtitle": "<string>",
"staticHtml": "<string>",
"json": "<string>",
"markdown": "<string>",
"coinId": "<string>",
"categories": [
"<string>"
],
"canonicalUrl": "<string>",
"publishOnline": true,
"communityId": "<string>",
"authors": [
{
"id": "<string>",
"publicationId": "<string>",
"walletAddress": "<string>",
"avatarUrl": "<string>",
"name": "<string>",
"bio": "<string>"
}
],
"authorIds": [
"<string>"
],
"views": 123,
"status": "published"
}{
"success": false,
"msg": "<string>"
}{
"success": false,
"msg": "<string>"
}Path Parameters
Unique identifier of the post
Query Parameters
Include full content fields (markdown, json, staticHtml). Default: false
Response
Post details retrieved successfully
Unique identifier for the post
Title of the post
200URL-friendly identifier for the post; accessible at paragraph.com/@[publicationSlug]/[slug]
1 - 256Optional URL to the post's main image
Alternative text describing the cover image, shown to screen readers and when the image fails to load
Epoch timestamp when the post was published
Epoch timestamp when the post was last updated
Optional subtitle or brief summary
300Rendered HTML content of the post
TipTap JSON representation of the post content structure. This is the source of truth that the staticHtml and markdown is generated from
Markdown source of the post content
ID of the associated coin, if the post is coined
Categories/tags associated with this post
Canonical URL used in rendered metadata. This does not change the Paragraph permalink.
Whether the published post is visible on the public website
Subscriber segment id selected for newsletter delivery
Authors of this post
Show child attributes
Show child attributes
IDs of the authors of this post
Total views. Only included when fetching your own posts via GET /v1/posts
Current publish status. Only set on authenticated endpoints (listOwn, getById for your own post). Use this instead of publishedAt to determine publish state — publishedAt is preserved across unpublishing.
published, draft, scheduled, archived 
