canonical: https://jentic.com/apis/publora.com/publora

# Publora API

The Publora API schedules and publishes social media posts to X/Twitter, LinkedIn, Instagram, Threads, TikTok, YouTube, Facebook, Bluesky, Mastodon, and Telegram from one request. A post names the connected platforms, its content, an optional scheduledTime, per-platform settings, a first comment, and up to 10 media URLs, and you can track its status and publishing logs afterwards. It also reads LinkedIn post, account, and follower analytics plus Mastodon and Bluesky statistics, works LinkedIn reactions, comments, and reshares, and sends webhooks when posts are scheduled, published, or fail.

## For AI agents

Create and schedule one post across X, LinkedIn, Instagram, Threads, TikTok, YouTube, Facebook, Bluesky, Mastodon, and Telegram, attach media, and track its publishing status. Also reads LinkedIn, Mastodon, and Bluesky analytics and manages webhooks.

## Scope

Does not handle paid social advertising, social listening across public accounts, or direct messages. Use for scheduling and publishing posts to your own connected accounts and reading their analytics only.

## Capabilities

- Create a post for several connected platforms at once, as a draft or scheduled for an ISO 8601 scheduledTime
- Make post creation retry-safe with an Idempotency-Key header
- Attach images and video by public URL, or upload through a pre-signed URL and finalize the file, plus custom Instagram Reel covers and YouTube thumbnails
- Check a post's status and its publishing logs, and list posts filtered by status, platform, and date range
- Read LinkedIn post, account, follower, and profile analytics, and Mastodon and Bluesky post and profile statistics
- Add LinkedIn reactions such as LIKE or PRAISE, comment on posts, and reshare an existing post
- Subscribe webhooks to post.scheduled, post.published, post.failed, and post.demoted events

## Use cases

### Agent-scheduled cross-platform posting

An AI agent drafting social content can check the live per-platform limits, list the connected accounts, and create one Publora post that targets LinkedIn, X, and Bluesky with a scheduledTime. Sending an Idempotency-Key with the request means a retried call after a timeout does not publish the post twice, and the publishing logs show exactly what happened on each platform.

Example prompt: Get platform connections, then create a post with content 'We just shipped v2' for the linkedin and bluesky connection IDs, scheduledTime 2026-11-13T09:00:00Z, and a UUID Idempotency-Key

### LinkedIn engagement and analytics

Creators and small teams track how LinkedIn posts perform and respond to them in the same workflow. Publora reads post statistics by postedId, aggregated account statistics over a dateRange, follower statistics, and a profile summary, and it can add a reaction, post a comment, or reshare a post with commentary, so an agent can report and engage without opening LinkedIn.

Example prompt: Get LinkedIn post statistics for a postedId and platformId, then add a reaction with reactionType PRAISE to that post

### Publishing failure alerts

Scheduled posts can fail when a token expires or media is rejected. A webhook subscribed to post.failed and post.published lets an integration react the moment a post lands or breaks, and the post logs operation returns the per-platform publishing log for diagnosis, while the test-connection operation checks whether a platform account is still healthy.

Example prompt: Create a webhook named failures with url https://hooks.example.com/publora and events post.failed and post.published

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | `/create-post` | Create and schedule a post |
| GET | `/get-post/{postGroupId}` | Get post details and status |
| PUT | `/update-post/{postGroupId}` | Edit a draft or scheduled post |
| GET | `/list-posts` | List posts with filters |
| GET | `/platform-connections` | List connected social accounts |
| GET | `/platform-limits` | Get live per-platform posting limits |
| POST | `/get-upload-url` | Get a pre-signed media upload URL |
| POST | `/linkedin-post-statistics` | Get LinkedIn post analytics |

## Key resources

- **Posts** — Post groups across platforms with content, schedule, settings, and status
- **Connections** — Connected social accounts identified as platform-platformId
- **Media** — Images, video, Reel covers, and YouTube thumbnails attached to posts
- **Analytics** — LinkedIn, Mastodon, and Bluesky post and profile statistics
- **Webhooks** — Event subscriptions for post scheduling, publishing, failure, and demotion
- **Workspace users** — Managed users under one account, enabled on request

## 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:** 65 / 100
- **Maturity:** AI-Aware
- **Dimensions:**
  - Foundational Compliance: 85 / 100
  - Developer Experience & Jentic Compatibility: 76 / 100
  - AI-Readiness & Agent Experience: 44 / 100
  - Agent Usability: 94 / 100
  - Security: 50 / 100
  - AI Discoverability: 82 / 100
- **View full report:** https://jentic.com/apis/publora.com/publora/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 Publora by hand means attaching its x-publora-key header, looking up platform connection IDs, and adding Idempotency-Key headers so retries do not double-post. Through Jentic you install once, import Publora from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** Publora puts the post group id in the URL path (`/get-post/{postGroupId}`, `/update-post/{postGroupId}`), so a rule can pin your agent to one post for edits, while the target platforms ride in the request body. You choose the operations it may call, so destructive ones like post deletion or webhook secret regeneration are not included unless you add them.
- **Credential handling:** Your Publora 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 'schedule a social media post' or 'get LinkedIn post analytics', and Jentic returns the matching Publora operation with its input schema so the agent calls the right endpoint without reading the reference docs.

## Related APIs

- **Late API** — Late is another multi-platform social scheduling API.
- **Postproxy Social Media API** — Postproxy publishes to several social networks through a single API.
- **LinkedIn Marketing API** — LinkedIn's own Marketing API covers organization pages and advertising.

## FAQ

### What authentication does the Publora API use?

The Publora API authenticates with an API key in the x-publora-key header, per its OpenAPI spec, using a key from Settings > API Keys in the format sk_timestamp.hexstring. Workspace calls can also pass an x-publora-user-id header to act for a managed user. Through Jentic the key is stored once and injected at call time, so it never appears in your agent's prompt or logs.

### Which platforms can I post to with the Publora API?

The spec lists X/Twitter, LinkedIn, Instagram, Threads, TikTok, YouTube, Facebook, Bluesky, Mastodon, and Telegram. POST /create-post takes an array of platform connection IDs in the format platform-platformId, which you get from GET /platform-connections.

### What are the rate limits for the Publora API?

The spec documents one limit: media URL ingestion allows 60 URLs per fixed one-hour window and returns 429 past it, with the pre-signed upload flow as the alternative. It does not state a general request limit, so check https://publora.com for current plan limits.

### How do I schedule a post with the Publora API through Jentic?

Search Jentic for 'schedule a social media post', which returns POST /create-post with its input schema, then send content, the platforms array, and a scheduledTime in UTC. Omit scheduledTime to save a draft. To run it on your own infrastructure, install Jentic One from its GitHub repo.

### Can I avoid duplicate posts when a request is retried?

Yes. POST /create-post, PUT `/update-post/{postGroupId}`, and POST `/attach-media/{postGroupId}` accept an optional Idempotency-Key header. Send the same unique value on a retry and Publora returns the original result instead of creating a second post.

### Is there a Publora MCP server?

You don't need an MCP server to give your agent the Publora API. Jentic connects it directly from the API Directory: import it, store your credential once, and your agent calls it, finding the posting and analytics operations by intent instead of loading all of them into context.

### Can I limit what my agent is allowed to do with the Publora API?

Yes. Write a rule that allows only POST /create-post, GET `/get-post/{postGroupId}`, and GET /platform-connections, so the agent can draft, schedule, and check posts but cannot delete posts, comment or react on LinkedIn, or manage workspace users, and every call it makes is logged.
