---
title: Read a Post - Get a Post's Content Back
description: Read a post made through the PostNitro Embed API back by its embedPostId, in the shape the import endpoint takes, with its brand's details, to see what's on it and edit it.
canonical: https://postnitro.ai/docs/embed/api/read-design
---

# Read a Post

**GET** `https://embed-api.postnitro.ai/post/{embedPostId}`

Returns the design of a post you made through the API ([generate](https://postnitro.ai/docs/embed/api/initiate/generate) or [import](https://postnitro.ai/docs/embed/api/initiate/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](https://postnitro.ai/docs/embed/api/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](https://postnitro.ai/docs/embed/api/edit) of it returned. All of them read the same design |

#### Example Request

```bash
curl --location 'https://embed-api.postnitro.ai/post/post123' \
--header 'embed-api-key: pn-your-api-key'
```

#### Response

```json
{
    "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](https://postnitro.ai/docs/embed/api/schedule) takes |
| `templateId` | string | The [template](https://postnitro.ai/docs/embed/api/templates) the design was last made with: its own, or the one an [edit](https://postnitro.ai/docs/embed/api/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](https://postnitro.ai/docs/embed/api/post-output) gives it |
| `brand` | object \| null | The brand the design shows, named as the [Brands API](https://postnitro.ai/docs/embed/api/brands) names a brand's fields |
| `slides` | array \| object | Its slides in [import's fields](https://postnitro.ai/docs/embed/api/initiate/import): `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:

```json
"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](https://postnitro.ai/docs/embed/api/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` |
