canonical: https://jentic.com/apis/postnitro.ai/postnitro

# PostNitro Embed API

The PostNitro Embed API generates social media carousels, single image posts, and short videos from a PostNitro design template, brand configuration, and AI preset. A post can be written by AI from a text prompt, an article URL, or an X post URL, or imported from your own slide content, and rendered as PNG slides, a PDF document, an MP4 video, or a saved design. Generation is asynchronous: an initiate call returns an embedPostId, the status operation reports PENDING, COMPLETED, or FAILED with processing logs, and the output operation returns the file URLs. Workspace audio files used as video soundtracks can be listed and deleted.

## For AI agents

Generate AI or imported social media carousels, image posts, and videos from PostNitro templates, poll until rendering completes, and fetch the PNG, PDF, or MP4 output URLs.

## Scope

Does not publish or schedule posts to social networks, host media, or edit uploaded audio. Use for generating and rendering carousel, image, and video post files only.

## Capabilities

- Generate a carousel, image, or video post with AI from a text topic, an article URL, or an X post URL
- Import your own slide content into a PostNitro template as a starting_slide, body slides, and an ending_slide
- Render output as PNG slides, a single PDF, an MP4 video, or a saved DESIGN via responseType
- Poll a post's status by embedPostId and read its processing logs when a step fails
- Fetch the finished image, document, or video URLs once a post is COMPLETED
- List workspace audio files to use as a video soundtrack and delete ones no longer needed

## Use cases

### Agent-made carousels through Jentic

A developer asks their agent to turn each new blog post into a branded carousel. Through Jentic the agent finds the PostNitro generate operation by intent, sends the article URL with the templateId, brandId, and presetId from the dashboard, polls status until COMPLETED, and returns the PDF link. The embed-api-key header is attached by your own instance, so the agent never sees the key.

Example prompt: Call POST `/post/initiate/generate` with postType CAROUSEL, responseType PDF, aiGeneration type article and context set to the article URL, then poll GET `/post/status/{embedPostId}` until COMPLETED and fetch GET `/post/output/{embedPostId}`

### Rendering your own copy into a template

When the words are already written, the import operation places them into a design without AI rewriting. CAROUSEL and VIDEO posts take an ordered slides array with exactly one starting_slide, one or more body_slide entries, and exactly one ending_slide, while IMAGE takes a single slide object. PNG output returns one image URL per slide.

Example prompt: Call POST `/post/initiate/import` with postType CAROUSEL, responseType PNG, a templateId and brandId, and a slides array of a starting_slide, three body_slide entries, and an ending_slide

### Short video posts with a soundtrack

For reels-style content, postType VIDEO turns each slide into a scene and renders an MP4. GET /audio lists the workspace's audio files newest first, and an entry's id goes into videoSettings.audioId to set the soundtrack. Audio is uploaded in the PostNitro app; the API only lists and deletes it.

Example prompt: Call GET /audio to pick an audio id, then POST `/post/initiate/generate` with postType VIDEO, responseType MP4, and videoSettings.audioId set to that id

### Debugging failed renders

Asynchronous generation can fail at a specific step, such as AI image generation hitting a plan quota. The status operation returns PENDING, COMPLETED, or FAILED along with a logs array, so a pipeline can report the failing step instead of retrying blindly.

Example prompt: Poll GET `/post/status/{embedPostId}` and, if status is FAILED, return the step names from the logs array

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | `/post/initiate/generate` | Initiate AI carousel generation |
| POST | `/post/initiate/import` | Create a post from your own slides |
| GET | `/post/status/{embedPostId}` | Check generation status |
| GET | `/post/output/{embedPostId}` | Retrieve generated files |
| GET | `/audio` | List workspace audio files |
| DELETE | `/audio/{id}` | Delete an audio file |

## Key resources

- **Posts** — Initiate AI-generated or imported carousel, image, and video posts, check their status, and fetch output files
- **Audio** — List and delete workspace audio files used as video soundtracks

## AI readiness

This API is usable in Jentic One now. Its AI-readiness score against Jentic's framework shows where it stands today and where improvements would make it even easier for agents to use.

- **Score:** 63 / 100
- **Maturity:** AI-Aware
- **Dimensions:**
  - Foundational Compliance: 64 / 100
  - Developer Experience & Jentic Compatibility: 58 / 100
  - AI-Readiness & Agent Experience: 51 / 100
  - Agent Usability: 94 / 100
  - Security: 50 / 100
  - AI Discoverability: 100 / 100
- **View full report:** https://jentic.com/apis/postnitro.ai/postnitro/scorecard
- **How the score is calculated:** https://docs.jentic.com/reference/api-readiness-framework/overview/
- **More about the dimensions:** https://docs.jentic.com/reference/api-readiness-framework/specification/#dimensional-model-overview

### Score it yourself

Every API in the directory is allowlisted, so you can re-score it with no key required.

- **Score your own API:** https://jentic.com/scorecard.md
- **Scoring CLI agent skill:** https://github.com/jentic/jentic-api-scorecard/blob/main/skills/jentic-api-scorecard/SKILL.md

```sh
npx @jentic/api-scorecard-cli score <openapi-url>
```

## Why Jentic

- **Setup:** Wiring PostNitro by hand means sending the embed-api-key header, looking up templateId, brandId, and presetId values, matching the slides shape to each postType, and writing the initiate, poll, and fetch loop. Through Jentic you install once, import PostNitro from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** PostNitro carries the template, brand, and content in the request body, so rules bound which operations your agent may call rather than which template. You choose the operations it may call, so the permanent audio deletion at DELETE `/audio/{id}` is not included unless you add it.
- **Credential handling:** Your PostNitro API key is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'generate a carousel' or 'check carousel render status', and Jentic returns the matching PostNitro operation with its input schema, including the postType and responseType enums, so the agent sends a valid request.

## Related APIs

- **Bannerbear API** — Template-driven image and video generation for marketing assets
- **Placid API** — Creative automation for templated images, PDFs, and videos
- **Buffer API** — Schedule and publish posts across social networks

## FAQ

### What authentication does the PostNitro Embed API use?

The PostNitro Embed API authenticates with an API key sent in the embed-api-key request header, per its OpenAPI spec. You generate the key from your PostNitro dashboard. Through Jentic the key is stored by your own instance and attached at call time, so the agent never handles it.

### Is there a PostNitro MCP server?

Yes. PostNitro documents an MCP server at https://mcp.postnitro.ai/mcp. You can also connect the PostNitro Embed API directly through Jentic: your agent gets the full 6-endpoint surface from the spec without loading another server's tool definitions into its context, your key is injected at call time by your self-hosted instance instead of living in an MCP config, and your rules decide which operations the agent may call.

### How does PostNitro generation work?

Generation is asynchronous. POST `/post/initiate/generate` or POST `/post/initiate/import` returns an embedPostId; poll GET `/post/status/{embedPostId}` until status is COMPLETED, then call GET `/post/output/{embedPostId}.` For PNG the result is one image URL per slide, for PDF a single document URL, and for MP4 a single video URL.

### What are the rate limits for the PostNitro Embed API?

The OpenAPI spec does not specify rate limits. Usage is metered in post credits, with AI images billed against a separate quota; check https://postnitro.ai/docs/embed/api for current plan limits.

### Can I limit what my agent is allowed to do with PostNitro?

Yes. For example, allow only POST `/post/initiate/generate`, GET `/post/status/{embedPostId}`, and GET `/post/output/{embedPostId}`, and the agent can create posts and collect their files but cannot delete audio from your workspace. Every call it makes is logged, so you can see how many posts a task spent.

### How do I generate a carousel from an article through Jentic?

Search Jentic for 'generate a carousel from an article', load POST `/post/initiate/generate`, and send postType CAROUSEL, your templateId, brandId, and presetId, and aiGeneration with type article and the URL as context. To run it on your own infrastructure, install Jentic One from its GitHub repo.
