curl -X GET "https://api.submagic.co/v1/projects/published/pub_8f3b4c2e-1a9d-4e5f-9b7c-2a4d6e8f1c3b" \
-H "x-api-key: sk-your-api-key-here"
const getPublication = async (publicationId) => {
const response = await fetch(
`https://api.submagic.co/v1/projects/published/${publicationId}`,
{
headers: {
"x-api-key": "sk-your-api-key-here",
},
}
);
return response.json();
};
const publication = await getPublication(
"pub_8f3b4c2e-1a9d-4e5f-9b7c-2a4d6e8f1c3b"
);
console.log(
`${publication.totals.views} views across ${publication.posts.length} platforms`
);
import requests
def get_publication(publication_id):
url = f'https://api.submagic.co/v1/projects/published/{publication_id}'
headers = {
'x-api-key': 'sk-your-api-key-here'
}
response = requests.get(url, headers=headers)
return response.json()
publication = get_publication('pub_8f3b4c2e-1a9d-4e5f-9b7c-2a4d6e8f1c3b')
print(f"{publication['totals']['views']} views across "
f"{len(publication['posts'])} platforms")
{
"id": "pub_8f3b4c2e-1a9d-4e5f-9b7c-2a4d6e8f1c3b",
"projectId": "550e8400-e29b-41d4-a716-446655440000",
"publishedAt": "2026-04-28T12:34:56.000Z",
"scheduled": false,
"status": "published",
"project": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"title": "How I Doubled My Revenue in 30 Days"
},
"totals": {
"views": 1234,
"engagement": 65,
"followersGained": 18
},
"posts": [
{
"platform": "youtube",
"platformPostId": "dQw4w9WgXcQ",
"platformPostUrl": "https://youtube.com/watch?v=dQw4w9WgXcQ",
"publishStatus": "published",
"syncStatus": "synced",
"error": null,
"analytics": {
"views": 1234,
"likes": 56,
"comments": 7,
"shares": 2,
"impressions": 5000,
"reach": 800,
"clicks": 120,
"engagementRate": 0.125
}
}
]
}
API Reference
Get Publication
Retrieve a single publication by its id, including its per-platform posts, analytics, and aggregated totals
GET
/
v1
/
projects
/
published
/
{id}
curl -X GET "https://api.submagic.co/v1/projects/published/pub_8f3b4c2e-1a9d-4e5f-9b7c-2a4d6e8f1c3b" \
-H "x-api-key: sk-your-api-key-here"
const getPublication = async (publicationId) => {
const response = await fetch(
`https://api.submagic.co/v1/projects/published/${publicationId}`,
{
headers: {
"x-api-key": "sk-your-api-key-here",
},
}
);
return response.json();
};
const publication = await getPublication(
"pub_8f3b4c2e-1a9d-4e5f-9b7c-2a4d6e8f1c3b"
);
console.log(
`${publication.totals.views} views across ${publication.posts.length} platforms`
);
import requests
def get_publication(publication_id):
url = f'https://api.submagic.co/v1/projects/published/{publication_id}'
headers = {
'x-api-key': 'sk-your-api-key-here'
}
response = requests.get(url, headers=headers)
return response.json()
publication = get_publication('pub_8f3b4c2e-1a9d-4e5f-9b7c-2a4d6e8f1c3b')
print(f"{publication['totals']['views']} views across "
f"{len(publication['posts'])} platforms")
{
"id": "pub_8f3b4c2e-1a9d-4e5f-9b7c-2a4d6e8f1c3b",
"projectId": "550e8400-e29b-41d4-a716-446655440000",
"publishedAt": "2026-04-28T12:34:56.000Z",
"scheduled": false,
"status": "published",
"project": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"title": "How I Doubled My Revenue in 30 Days"
},
"totals": {
"views": 1234,
"engagement": 65,
"followersGained": 18
},
"posts": [
{
"platform": "youtube",
"platformPostId": "dQw4w9WgXcQ",
"platformPostUrl": "https://youtube.com/watch?v=dQw4w9WgXcQ",
"publishStatus": "published",
"syncStatus": "synced",
"error": null,
"analytics": {
"views": 1234,
"likes": 56,
"comments": 7,
"shares": 2,
"impressions": 5000,
"reach": 800,
"clicks": 120,
"engagementRate": 0.125
}
}
]
}
Get Publication
Retrieve one publication by its publication id — theid returned by
List Published Projects. A publication
represents one publish event for a project and contains a posts array with one
entry per platform. The response includes per-platform delivery status, post
URLs, analytics, and a totals rollup aggregated across those posts.
This endpoint requires authentication.
The
{id} is the publication id (the id field from List Published
Projects), not a project id. A single project can be published multiple
times, so each publication has its own id. The projectId is still returned
for linking back to the underlying project.Authentication
string
required
Your Submagic API key starting with
sk-Path Parameters
string
required
The unique identifier (UUID) of the publication to retrieve
Response
string
Unique identifier of the publication
string
The unique identifier of the underlying project
string
ISO 8601 timestamp of when the publication was published or is scheduled to
publish
boolean
true if the publication was scheduled for a future timestring
Overall publication status:
published, scheduled, processing, or
failedobject
Metrics aggregated across the publication’s platforms
array
Array of per-platform post objects
Show Post Object
Show Post Object
string
Platform identifier:
youtube, tiktok, instagram, twitter,
facebook, or linkedinstring
The post ID assigned by the upstream platform
string
Public URL of the post on the platform
string
Per-platform delivery status:
published, scheduled, processing, or
failedstring
Analytics sync status:
synced, pending, or failedstring
Error message if the post failed to publish, otherwise
nullcurl -X GET "https://api.submagic.co/v1/projects/published/pub_8f3b4c2e-1a9d-4e5f-9b7c-2a4d6e8f1c3b" \
-H "x-api-key: sk-your-api-key-here"
const getPublication = async (publicationId) => {
const response = await fetch(
`https://api.submagic.co/v1/projects/published/${publicationId}`,
{
headers: {
"x-api-key": "sk-your-api-key-here",
},
}
);
return response.json();
};
const publication = await getPublication(
"pub_8f3b4c2e-1a9d-4e5f-9b7c-2a4d6e8f1c3b"
);
console.log(
`${publication.totals.views} views across ${publication.posts.length} platforms`
);
import requests
def get_publication(publication_id):
url = f'https://api.submagic.co/v1/projects/published/{publication_id}'
headers = {
'x-api-key': 'sk-your-api-key-here'
}
response = requests.get(url, headers=headers)
return response.json()
publication = get_publication('pub_8f3b4c2e-1a9d-4e5f-9b7c-2a4d6e8f1c3b')
print(f"{publication['totals']['views']} views across "
f"{len(publication['posts'])} platforms")
{
"id": "pub_8f3b4c2e-1a9d-4e5f-9b7c-2a4d6e8f1c3b",
"projectId": "550e8400-e29b-41d4-a716-446655440000",
"publishedAt": "2026-04-28T12:34:56.000Z",
"scheduled": false,
"status": "published",
"project": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"title": "How I Doubled My Revenue in 30 Days"
},
"totals": {
"views": 1234,
"engagement": 65,
"followersGained": 18
},
"posts": [
{
"platform": "youtube",
"platformPostId": "dQw4w9WgXcQ",
"platformPostUrl": "https://youtube.com/watch?v=dQw4w9WgXcQ",
"publishStatus": "published",
"syncStatus": "synced",
"error": null,
"analytics": {
"views": 1234,
"likes": 56,
"comments": 7,
"shares": 2,
"impressions": 5000,
"reach": 800,
"clicks": 120,
"engagementRate": 0.125
}
}
]
}
Error Responses
object
{
"error": "NOT_FOUND",
"message": "Publication not found"
}
object
{
"error": "UNAUTHORIZED",
"message": "Invalid or missing API key"
}
object
{
"error": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests",
"retryAfter": 30
}
object
{
"error": "INTERNAL_SERVER_ERROR",
"message": "An unexpected error occurred"
}

