Read a Post
GET https://embed-api.postnitro.ai/post/{embedPostId}
Returns the design of a post you made through the API (generate or import) in the same shape the import endpoint takes, with its brand’s details. Read it to see what a post says, change what you need, and send it back with Edit. Reading is free.
Headers
embed-api-key: your-api-key-here(required)
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
embedPostId | string | Yes | The post’s id: the embedPostId generate or import returned, or one an edit of it returned. All of them read the same design |
Example Request
curl --location 'https://embed-api.postnitro.ai/post/post123' \
--header 'embed-api-key: pn-your-api-key'Response
{
"success": true,
"data": {
"design": {
"embedPostId": "post123",
"designId": "design123",
"templateId": "xtrnxgfgk9a08tmsz2601k1c",
"postType": "CAROUSEL",
"name": "3 habits of fast teams",
"size": "4:5",
"brand": {
"id": "cmdhb8oe10006v0pmh6a4no6t",
"name": "Acme",
"handle": "@acme",
"image": "https://<storage-host>/logo.png",
"isCompanyDetail": true,
"showName": true,
"showHandle": false,
"showImage": true
},
"slides": [
{
"type": "starting_slide",
"heading": "3 habits of fast teams",
"sub_heading": "Remote work",
"cta_button": "Watch on"
},
{
"type": "body_slide",
"heading": "Write it down",
"description": "Decisions live in docs.",
"image": "https://<storage-host>/1.png"
},
{
"type": "ending_slide",
"heading": "Try one this week",
"cta_button": "Follow for more"
}
],
"editorUrl": "https://postnitro.ai/app/carousel-maker/<workspace-identifier>/design123"
}
}
}| Field | Type | Description |
|---|---|---|
embedPostId | string | The post’s id, as you asked for it |
designId | string | The design’s id, the one scheduling takes |
templateId | string | The template the design was last made with: its own, or the one an edit moved it to |
postType | string | CAROUSEL, IMAGE or VIDEO |
name | string | The design’s name |
size | string | object | Its aspect ratio, as Post Output gives it |
brand | object | null | The brand the design shows, named as the Brands API names a brand’s fields |
slides | array | object | Its slides in import’s fields: type, heading, sub_heading, description, cta_button, image, background_image, and layoutType/layoutConfig for an infographic. An array for CAROUSEL and VIDEO; one object, with no type, for IMAGE |
videoSettings | object | VIDEO only, when it has them: its motionStyle, a built-in style’s name or a saved style’s id, and its saved sequenceId; its music’s backgroundMusicId, with its backgroundMusicVolume when the design keeps one; and, for a narrated video, its voiceover: { voice, tone, captions }, not the script. The music was named audioId before; a read gives only the new names |
editorUrl | string | null | Opens the design in the editor |
A narrated video with music, for example:
"videoSettings": {
"motionStyle": "bold",
"backgroundMusicId": "cmqi7jyir0003v0m91hxnyyaq",
"backgroundMusicVolume": 25,
"voiceover": { "voice": "nova", "tone": "Hype and punchy", "captions": true }
}A slide’s part that is turned off is left out. Text comes back as the design stores it: plain text as you sent it, or HTML once it has been edited in the editor ("<p>Write it <strong>down</strong></p>"). Anything import can’t describe, such as a freeform layout made in the editor, isn’t returned. Import needs a heading on every slide, so a slide whose title is turned off comes back without one: give it one to send it back with Edit.
Errors
| Status | Message | When |
|---|---|---|
404 | Post not found | No such post for your API key: a designId given instead, or another workspace’s post |
422 | This post has no design yet: it's still being made, or it failed before making one. | The post’s request hasn’t made its design: wait until it’s COMPLETED |