Skip to Content

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

ParameterTypeRequiredDescription
embedPostIdstringYesThe 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" } } }
FieldTypeDescription
embedPostIdstringThe post’s id, as you asked for it
designIdstringThe design’s id, the one scheduling takes
templateIdstringThe template the design was last made with: its own, or the one an edit moved it to
postTypestringCAROUSEL, IMAGE or VIDEO
namestringThe design’s name
sizestring | objectIts aspect ratio, as Post Output gives it
brandobject | nullThe brand the design shows, named as the Brands API names a brand’s fields
slidesarray | objectIts 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
videoSettingsobjectVIDEO 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
editorUrlstring | nullOpens 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

StatusMessageWhen
404Post not foundNo such post for your API key: a designId given instead, or another workspace’s post
422This 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
Last updated on