Approve or reject a post
Approves or rejects a post saved with requiresApproval: true (status pending_approval).
approve schedules the post for its scheduledFor and fires the post.scheduled webhook. When that time has already passed, the post publishes within a couple of minutes.
reject returns the post to draft.
Returns 409 when the post is not pending_approval.
Authorization
bearerAuth API key authentication: send your Zernio API key in the Authorization header, prefixed with Bearer.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.posts.reviewPost({ path: { postId: 'post_abc123', }, body: { decision: 'approve', },});console.log(data);{ "post": { "_id": "string", "userId": "string", "title": "string", "content": "string", "mediaItems": [ { "type": "image", "url": "http://example.com", "title": "string", "altText": "string", "filename": "string", "size": 0, "mimeType": "string", "thumbnail": "http://example.com", "instagramThumbnail": "http://example.com", "subtitles": [ { "url": "http://example.com", "language": "string" } ], "tiktokProcessed": true } ], "platforms": [ { "platform": "string", "accountId": "string", "customContent": "string", "customMedia": [ { "type": "image", "url": "http://example.com", "title": "string", "altText": "string", "filename": "string", "size": 0, "mimeType": "string", "thumbnail": "http://example.com", "instagramThumbnail": "http://example.com", "subtitles": [ { "url": "http://example.com", "language": "string" } ], "tiktokProcessed": true } ], "scheduledFor": "2019-08-24T14:15:22Z", "platformSpecificData": {}, "status": "string", "platformPostId": "string", "platformPostUrl": "string", "publishedAt": "2019-08-24T14:15:22Z", "removedFromPlatformAt": "2019-08-24T14:15:22Z", "isTrialReel": true, "trialGraduationStrategy": "MANUAL", "publishAttempts": 0, "publishRetries": 0, "errorMessage": "string", "errorCategory": "auth_expired", "errorSource": "user", "platformError": { "code": 0, "subcode": 0, "message": "string" } } ], "scheduledFor": "2019-08-24T14:15:22Z", "timezone": "string", "status": "draft", "tags": [ "string" ], "hashtags": [ "string" ], "mentions": [ "string" ], "visibility": "public", "metadata": {}, "recycling": { "enabled": true, "gap": 0, "gapFreq": "week", "startDate": "2019-08-24T14:15:22Z", "expireCount": 0, "expireDate": "2019-08-24T14:15:22Z", "contentVariations": [ "string" ], "contentVariationIndex": 0, "recycleCount": 0, "nextRecycleAt": "2019-08-24T14:15:22Z", "lastRecycledAt": "2019-08-24T14:15:22Z" }, "recycledFromPostId": "string", "queuedFromProfile": "string", "queueId": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }}Edit published post
Edit the text of an already-published post. Supported on X, Discord, Facebook, Reddit, LinkedIn, Telegram, Pinterest, Google Business Profile, YouTube, and Slack. When a post was published to several accounts on the same platform, pass `accountId` to pick which account's copy to edit (without it the request returns 409). Each platform enforces its own rules: **X** - Connected X account must have an active X Premium subscription - Must be within 1 hour of original publish time - Maximum 5 edits per tweet (enforced by X) - Threads cannot be edited, only single tweets - X assigns a NEW post ID on edit, returned as `id` **Discord** - No time limit and no premium requirement - The message ID is unchanged after the edit **Facebook** - Graph only permits editing a post that the same app created, so this works on posts published through Zernio and is rejected for posts created in Meta Business Suite / Composer or by another tool - Media cannot be swapped, only the message text - Reactions, comments, and shares are preserved. The post ID is unchanged **Reddit** - Self-posts only. A link post has no editable body and is rejected before the write - Body only. Reddit exposes no API to edit a post title, ever - The post ID is unchanged **LinkedIn** - Text only, no time limit. Media, polls, articles, and reshare targets cannot be changed - Works for member and organization posts published through this API. The post keeps its ID and LinkedIn shows an "edited" marker - Text is limited to 3,000 characters; mentions and hashtags are preserved **Telegram** - No time limit; messages published through Zernio are editable indefinitely - Text posts: edits the message text (up to 4096 characters) - Media posts: edits the caption only (up to 1024 characters). The media itself cannot be swapped - For albums, the caption shown on the album (its first message) is edited - The message ID is unchanged **Pinterest** - Description only, maximum 800 characters. Media, link, and board cannot be changed, and a pin title derived from the old content's first line at publish stays as-is - Pinterest's pin-update endpoint is currently in closed beta; until the app is allowlisted by Pinterest, edits are rejected with a "beta feature not yet enabled" error - The pin ID is unchanged **Google Business Profile** - Post body (summary) text only. Call-to-action, event/offer fields, and media are untouched - No time limit and no edit limit. The post ID is unchanged - The post must still exist on Google: a post deleted from the Business Profile dashboard, or an event/offer post past its end date, returns a 404 **YouTube** - `content` replaces the video description only. The title is unchanged, even if it was originally derived from the content's first line at publish time - Title, tags, thumbnail, and privacy edits belong to `POST /v1/posts/{postId}/update-metadata` - No time window and no edit cap. The video ID is unchanged **Slack** - Text only, up to 4,000 characters. Media cannot be swapped, and media posts whose share message reference never resolved cannot be edited - No time limit unless workspace admins restrict message editing - The message ID is unchanged Media edits are not supported on any platform. The post record in Zernio is updated with the new content and an edit-history entry.
List schedules
Returns queue schedules for a profile. Use all=true for all queues, or queueId for a specific one. Defaults to the default queue.