Description
PostPulse n8n Node
> Official n8n integration for PostPulse — schedule and publish content to multiple social networks from your n8n workflows.
- Auth: OAuth2 (auto refresh)
- Core actions: Accounts → Media Upload → Schedule Post(s) (+ Telegram Channels / Facebook Pages / Pinterest Boards / WhatsApp numbers, contact lists and templates lookup)
- Targets today: Facebook, Instagram, TikTok, YouTube, Threads, LinkedIn, Pinterest, Telegram, X, Bluesky, WhatsApp (template broadcasts)
- Use cases: One-click multi-destination posting, media pipeline, automated campaigns
- Prerequisites
- Install
- Authenticate
- Quick start
- Operations
- Data model
- Platform settings
- Media & text validations
- Rate limits & API keys
- Webhooks
- Examples
- FAQ
- Support
- Versioning & License
- From npm (recommended):
—
Table of contents
—
Prerequisites
1. Sign up at https://post-pulse.com/login
2. Connect your social accounts in the web app: https://post-pulse.com/app/accounts
3. Create OAuth client: Open the Developer Portal in the PostPulse app (sign in with your PostPulse account). Create a new OAuth client to obtain clientid and clientsecret.
4. (Telegram only) Add the official PostPulse bot to your channels you plan to post to.
5. (WhatsApp only) Connect the WhatsApp Business Account and create contact lists on the website. Message templates are created and approved in WhatsApp Manager. WhatsApp can’t be connected from n8n.
> Use the same email in n8n OAuth as your PostPulse account email.
—
Install
npm install @postpulse/n8n-nodes-postpulse
—
Authenticate
Create Credentials → PostPulse OAuth2 API in n8n:
This node extends n8n’s oAuth2Api so tokens are refreshed automatically.
—
Quick start
> Renamed in 0.2.13: the operation formerly called Schedule (Light) is now Schedule (action “Schedule a post”), and the former Schedule is now Schedule (Advanced) (action “Schedule an advanced post”). Only the names changed: existing workflows keep working as they are.
Using Schedule – Recommended
1. Media → Upload (if posting media)
– From File: Upload binary file data (automatically confirmed for integrity)
– Returns: { path } — use this directly in attachment paths
– From Public URL: Import media from a URL
– With Wait for Completion enabled (recommended): polls until ready and returns { path } — same shape as file upload
– With Wait for Completion disabled: returns { id, state } — use Media → Get Upload Status to poll manually
2. Posts → Schedule
– Choose Schedule Mode: “Post Now” (immediate) or “Schedule for Later” (pick a time)
– Select your connected account from the dropdown (accounts loaded automatically)
– UI automatically shows platform-specific fields (e.g., Instagram: Publication Type)
– Facebook, Telegram and Pinterest accounts: select Page/Channel/Board from dropdowns (loaded automatically). A Facebook Page account is the Page itself, so it has no Page dropdown
– WhatsApp accounts: select the number to send from, the contact list and the template from dropdowns, then fill the template’s variables (see WhatsApp)
– Enter content and comma-separated attachment paths
– TikTok accounts: pick a Privacy Level (required, loaded from the account’s TikTok creator info) and set the interaction, music and commercial-content options (see below)
– Instagram and TikTok accounts: optionally turn on the AI Content toggle (off by default) to label the post as AI-generated
Using Schedule (Advanced) – Advanced workflows
For posting to several accounts in one post, several posts in one publication (e.g. several Telegram channels), drafts, or platform settings that Schedule has no fields for (e.g. LinkedIn visibility, YouTube privacy and category):
1. Accounts → Get Many
Retrieve your connected accounts. Save the id of targets you’ll post to.
2. Accounts → Get Connected Chats (only if posting to Telegram/Facebook/Pinterest/WhatsApp manually)
Input: Account ID. Output contains chat/page IDs.
3. Accounts → Get Contact Lists and Accounts → Get Templates (WhatsApp only)
Input: WhatsApp account. Output: the contact lists (id → contactListId) and the templates (name, language → templateName, templateLanguage, plus the keys of the template’s variables). See WhatsApp.
4. Media → Upload (same as above)
5. Posts → Schedule (Advanced)
Build one PostSchedule with one or more Publications.
– Choose “Post Now” or “Schedule for Later” (with a specific time, interpreted in the workflow timezone)
– Manually construct platformSettings JSON
– For now, prefer isDraft: false (update APIs will come later)
—
Operations
Accounts: Get Many
{ id, platform, handle, ... }id for each destination.Accounts: Get Connected Chats
{ id, title } — Telegram channels, Facebook Pages, Pinterest boards or WhatsApp phone numbers. Pass id as chatId into posts.Accounts: Get Contact Lists
WhatsApp Account — Dropdown of your connected WhatsApp accounts (or the account id via an expression){ id, name, contactCount, createdTime }. Pass id as contactListId in the WhatsApp platformSettings.Accounts: Get Templates
WhatsApp Account — Dropdown of your connected WhatsApp accounts (or the account id via an expression){ name, language, category, parameterFormat, headerFormat, headerText, headerParameterKey, bodyText, bodyParameterKeys, footerText, buttons, supported, unsupportedReason }name and language as templateName and templateLanguage in the WhatsApp platformSettings, then fill the variables: – bodyParameters — a value for every key in bodyParameterKeys ("1", "2", … when parameterFormat is POSITIONAL, the variable names when it is NAMED)
– headerParameter — only when headerParameterKey is set
– buttonParameters — the URL ending of each button with dynamicUrl: true, under the button’s index in buttons
– A headerFormat of IMAGE or VIDEO needs exactly one attachment of that type
supported: false can’t be sent; unsupportedReason says why. Templates are created and approved in WhatsApp Manager.Media: Upload
– File upload: { path } — use in attachmentPaths of posts (upload is automatically confirmed for integrity)
> Always use the returned path, not the name of the file you uploaded. During confirmation PostPulse detects the real media format from the file bytes; if it doesn’t match the filename extension (e.g. a .mov file renamed to .mp4), the stored file is renamed to the correct extension and path reflects the corrected name.
– URL import (Wait for Completion ON): { path } — same shape as file upload, ready to use
– URL import (Wait for Completion OFF): { id, state } — use id with “Get Upload Status” to monitor progress manually
– From File: Upload binary file data
– From Public URL: Import media from a public URL. Enable Wait for Completion to automatically poll until the import is ready (configurable polling interval and max wait time).
Media: Get Upload Status
{ importId } (from URL import response)id, state, sourceUrl, bytesDownloaded, totalBytes, detectedMime, s3Key, errorCode, errorMessagePosts: Schedule
– Platform-specific dynamic fields — The UI automatically shows relevant fields based on the selected account’s platform
– Automatic platform settings — No need to manually construct JSON; the node builds platformSettings automatically
– Smart chat selection — Facebook Pages, Telegram Channels, Pinterest Boards and WhatsApp numbers appear as dropdowns (loaded from API)
– Simple attachment paths — Enter comma-separated media paths instead of managing collections
– Schedule Mode — “Post Now” (publishes immediately) or “Schedule for Later” (pick a time)
– Scheduled Time — (only when “Schedule for Later”) When to schedule the post. Interpreted using the workflow timezone (see Workflow Settings).
– Social Media Account — Dropdown of your connected accounts
– Dynamic fields based on platform:
– Instagram: Publication Type (Feed/Reels/Story)
– Facebook: Publication Type (Feed/Reels/Story) + Page dropdown
– Facebook Page (an account that is one Page): Publication Type (Feed/Reels/Story); no Page dropdown, the account is the Page
– YouTube: Video Title
– TikTok: Title, Privacy Level, Allow Comments/Duet/Stitch, Auto Add Music, Disclose Content (Your Brand / Branded Content) — see TikTok settings in Schedule
– Threads: Topic Tag (optional)
– Pinterest: Board dropdown, Pin Title, Destination Link, Alt Text, Board Section ID (all optional)
– Telegram: Channel dropdown
– WhatsApp: Send From Number, Contact List and Template dropdowns, Header Variable, Body Variables (key/value), Button URL Suffixes (button index/value); no Content field — the text comes from the template
– X/Twitter, BlueSky, LinkedIn: No additional fields
– Content — Post text/caption (multi-line)
– Attachment Paths — Comma-separated media paths from Media → Upload. With Publication Type Story, each path becomes its own story, in the order given, within one post
– AI Content — (Instagram and TikTok only) Toggle, off by default. Turn on when the content is generated or significantly edited with AI; the node sends it as aiContent in platformSettings.
#### TikTok settings in Schedule
The TikTok fields follow the same rules as the TikTok form in the PostPulse app, which in turn follows TikTok’s Content Sharing Guidelines:
| Field | Default | Sent as | Notes |
|—|—|—|—|
| Title | — | title | Required. |
| Privacy Level | none (required) | privacyLevel | Options are loaded from the account’s TikTok creator info, so only levels the account allows are offered (all four if creator info is unavailable). There is intentionally no default. Only me is not offered while Branded Content is on. |
| Allow Comments | off | disableComments (inverted) | Always off when comments are disabled in the account’s TikTok app settings. |
| Allow Duet | off | disableDuet (inverted) | Video posts only; ignored for photo posts. Always off when Duet is disabled in the account’s TikTok app settings. |
| Allow Stitch | off | disableStitch (inverted) | Video posts only; ignored for photo posts. Always off when Stitch is disabled in the account’s TikTok app settings. |
| Auto Add Music | off | autoAddMusic | Photo posts only; ignored for video posts. |
| Disclose Content | off | — | Reveals Your Brand and Branded Content. When off, both are sent as false. |
| Your Brand | off | brandOrganic | Labeled by TikTok as “Promotional content”. |
| Branded Content | off | brandContent | Labeled by TikTok as “Paid partnership”. Disabled when Privacy Level is Only me; the node rejects that combination because branded content can’t be private. |
The node shows TikTok’s declaration “By posting, you agree to TikTok’s Music Usage Confirmation” (plus the Branded Content Policy for branded content) and sends hasUsageConfirmation: true.
At execution the node reads the account’s creator info once per account per run to apply the account-level settings above.
Posts: Schedule (Advanced)
PostSchedule in one call: several accounts, several posts per publication, drafts, any platformSettings (named Schedule before 0.2.13)PostSchedule (see Data model); platformSettings is JSON (see Platform settings): JSON text, which may contain expressions, or an expression that returns an object, e.g. one built from the output of Accounts → Get TemplatesscheduledTime needed) or “Schedule for Later” (pick a time)Z is used as-is.isDraft: false (until update endpoints are exposed in node).Posts: Get Delivery Summary
– WhatsApp Account — Dropdown of your connected WhatsApp accounts (or the account id via an expression, e.g. socialMediaAccountId of the publication)
– Post — Dropdown of the account’s broadcasts of the last 30 days, newest first (the 20 newest schedules with WhatsApp). Via an expression: the id of the post inside the WhatsApp publication (publications[].posts[] in the Schedule response), not the schedule id. The number in the PostPulse dashboard URL (?post=…, /app/edit-post/…) is the schedule id: GET /v1/posts/{scheduleId} returns its post IDs
{ total, pending, sending, accepted, sent, delivered, read, failed, optedOut, cancelled, topErrors } — how many messages of the broadcast are in each status, and the most frequent WhatsApp errors. The counts keep changing while WhatsApp reports statuses.—
Data model
PostSchedule
{
"scheduledTime": "2025-08-17T14:03:00", // omit to post immediately; naive values are read in the workflow timezone
"isDraft": false,
"publications": [ / Publication[] / ]
}
Publication
Represents “one publication in user’s mind” that may map to one or many platform posts.
{
"socialMediaAccountId": 442,
"posts": [ / Post[] / ],
"platformSettings": { / see below / }
}
– Telegram account posts to several channels (one post per channel)
– Telegram account posts with large text or more than 10 media (one post per message that will be published)
– Instagram or Facebook storyline (multiple stories in one conceptual set, one post per story). Schedule builds these posts from its comma-separated paths
Post
{
"attachmentPaths": [
"6354d8d2-e0f1-702b-af6c-62e28e377ec7/c6c2b826-8aca-4eae-8549-515325012ab4.jpeg"
],
"content": "Your caption or description",
"chatId": "1234567890" // Telegram channel, Facebook Page, Pinterest board or WhatsApp phone number
/ "thumbnailPath": "..." — coming soon /
}
> Note: For YouTube/TikTok/Pinterest, content is used as description (titles are set in platformSettings).
—
Platform settings
Each Publication must include platformSettings with a required discriminator: type.
{ "type": "INSTAGRAM", "publicationType": "REELS" }
Supported shapes:
{
"type": "INSTAGRAM",
"publicationType": "FEED" | "REELS" | "STORY",
"aiContent": false // optional, default false — mark the post as AI-generated
}
{
"type": "LINKEDIN",
"visibility": "PUBLIC" | "CONNECTIONS" | "GROUP"
}
Threads
{
"type": "THREADS",
"topicTag": "your-topic-tag"
}
TikTok
{
"type": "TIK_TOK",
"title": "My video title",
"privacyLevel": "PUBLICTOEVERYONE" | "FOLLOWEROFCREATOR" | "MUTUALFOLLOWFRIENDS" | "SELF_ONLY",
"disableDuet": false,
"disableComments": false,
"disableStitch": false,
"brandContent": false,
"brandOrganic": true,
"autoAddMusic": false, // photo posts only
"hasUsageConfirmation": true,
"aiContent": false // optional, default false — mark the post as AI-generated
}
> AI Content: aiContent is supported by Instagram and TikTok only. In Schedule it appears as the AI Content toggle for those platforms (off by default); in Schedule (Advanced) set it directly in platformSettings.
{
"type": "PINTEREST",
"title": "My Pin title", // optional, up to 100 characters
"link": "https://example.com/product", // optional, opened when the Pin is clicked
"altText": "Describe the image", // optional
"boardSectionId": "1234567890" // optional, section within the board
}
> The board is required and is set as the post’s chatId (get board IDs from Accounts → Get Connected Chats with the Pinterest account’s ID). A Pin needs media: 1 image, 1 video, or a carousel of 2–5 images.
{
"type": "WHATSAPP",
"contactListId": 42, // required
"templateName": "autumn_sale", // required, an approved template
"templateLanguage": "en", // required
"headerParameter": "Autumn sale", // only for a text header with a variable
"bodyParameters": { "1": "20%", "2": "Sunday" }, // a value for every body variable
"buttonParameters": { "0": "autumn-2026" } // URL ending of each button with a dynamic URL, by button index
}
> A WhatsApp publication sends an approved template to a contact list from one phone number: it has exactly one post, whose chatId is the number (from Accounts → Get Connected Chats). contactListId comes from Accounts → Get Contact Lists; templateName, templateLanguage and the variable keys come from Accounts → Get Templates. content is not needed: PostPulse takes the text from the template. A template with an image or video header needs exactly one attachment of that type. In Schedule, a template entered with an expression is name|language, for example autumn_sale|en. The full rules are in the API docs.
YouTube
{
"type": "YOUTUBE",
"title": "My video title",
"privacyStatus": "PUBLIC" | "UNLISTED" | "PRIVATE",
"category": "FILMANIMATION" | "AUTOSVEHICLES" | "MUSIC" | "PETSANIMALS" | "SPORTS" | "TRAVELEVENTS" | "GAMING" | "PEOPLEBLOGS" | "COMEDY" | "ENTERTAINMENT" | "NEWSPOLITICS" | "HOWTOSTYLE" | "EDUCATION" | "SCIENCETECHNOLOGY"
}
—
Media & text validations
PostPulse Web enforces rich, platform-specific validations.
API clients must currently validate themselves. (Server-side validations for API clients are planned.)
| Validation area | PostPulse Web | PostPulse API (current) |
|—|—|—|
| X: Standard users can post up to 280 characters per tweet | UI warning | You must validate |
| X: Supported image formats are JPG, PNG, GIF, and WEBP | Enforced | You must validate |
| X: Image size should be less than or equal 5MB | Enforced | You must validate |
| X: Animated GIF size should be less than or equal 15MB | Enforced | You must validate |
| X: One post is either up to 4 images, 1 animated GIF, or 1 video | Enforced | You must validate |
| X: Video size should be less than or equal 512MB | Enforced | You must validate |
| X: Maximum 4 media attachments | Enforced | You must validate |
| X: Video duration must be between 0.5 sec and 140 sec | Enforced | You must validate |
| X: Media aspect ratio between 1:3 and 3:1 | Enforced | You must validate |
| Threads: Users can post up to 500 characters | Enforced | You must validate |
| Threads: Topic tag should be less than 100 characters | Enforced | You must validate |
| Threads: When no topic tag is specified in the platform settings and the content contains a word with # – the first word with # will be used as a topic tag (expept cases with numbers, like #1) | UI warning | You must validate |
| Threads: Image size should be less than or equal 8MB | Enforced | You must validate |
| Threads: Media aspect ratio between 0,01:1 and 10:1 | Enforced | You must validate |
| Threads: Video duration must be less than 5 min | Enforced | You must validate |
| Threads: Supported video format is MP4 | Enforced | You must validate |
| YouTube: Title should be less than 100 characters | Enforced | You must validate |
| YouTube: Description should be less than 5000 characters | Enforced | You must validate |
| TikTok: Title should be less than 2200 characters for video post | Enforced | You must validate |
| TikTok: Title should be less than 90 characters for image post | Enforced | You must validate |
| TikTok: Description should be less than 4000 characters for image post | Enforced | You must validate |
| TikTok: Image size should be less than or equal 20MB | Enforced | You must validate |
| TikTok: Supported image formats are JPG, PNG, and WEBP | Enforced | You must validate |
| TikTok: Supported video formats are MP4, MOV, and WebM | Enforced | You must validate |
| TikTok: Video duration as per individual limits (typically 1 hour) | Enforced | You must validate |
| TikTok: One post is either 1 video or up to 10 images | Enforced | You must validate |
| TikTok: Video should have no more between 360 and 4096 pixels for both height and width | To Do | You must validate |
| LinkedIn: User can post up to 3000 characters | Enforced | You must validate |
| LinkedIn: One post can contain either 1 video or up to 9 images (or no media at all) | Enforced | You must validate |
| LinkedIn: Supported video format is MP4 | Enforced | You must validate |
| LinkedIn: Video size should be less than or equal 500MB | Enforced | You must validate |
| LinkedIn: Video duration must be between 3 sec and 30 min | Enforced | You must validate |
| Instagram: User can post up to 2200 characters | Enforced | You must validate |
| Instagram: Supported image formats are JPG and PNG | Enforced | You must validate |
| Instagram: Image size should be less than or equal 8MB | Enforced | You must validate |
| Instagram: Feed post can contain up to 10 media (carousel) | Enforced | You must validate |
| Instagram: Feed post media aspect ratio between 1.91:1 and 4:5 | Enforced | You must validate |
| Instagram: Supported video formats are MP4 and MOV | Enforced | You must validate |
| Instagram: Video size should be less than or equal 300MB | Enforced | You must validate |
| Instagram: Feed and Story post video duration must be between 3 sec and 15 min | Enforced | You must validate |
| Instagram: Reels video duration must be between 3 sec and 90 sec | Enforced | You must validate |
| Instagram: Reels and Story post media aspect ratio between 0.01:1 and 10:1 | Enforced | You must validate |
| Instagram: Reels and Story recommended aspect ratio is 9:16 | UI Warning | You must validate |
| Instagram: Video should have no more than 1920 horizontal pixels | To Do | You must validate |
| Bluesky: Users can post up to 300 characters | Enforced | You must validate |
| Bluesky: Post may contain up to 4 images | Enforced | You must validate |
| Pinterest: A board must be selected (chatId) | Enforced | Enforced |
| Pinterest: Description (content) should be less than or equal 800 characters | Enforced | Enforced |
| Pinterest: Title should be less than or equal 100 characters | Enforced | Enforced |
| Pinterest: One Pin is either 1 image, 1 video, or a carousel of 2–5 images | Enforced | Enforced |
| Pinterest: Supported formats are JPG, PNG, WEBP, MP4 and MOV | Enforced | Enforced |
| Pinterest: Image size should be less than or equal 20MB, video 2GB | Enforced | Enforced |
| Telegram: Users can post up to 4096 characters | Enforced | Enforced |
| Telegram: Standard user can post up to 1024 characters if post contains media as well | Enforced | Enforced |
| Telegram: One post may contain up to 10 media | Enforced | Enforced |
| Telegram: Supported image formats are JPG, PNG, and WEBP | Enforced | Enforced |
| Telegram: Supported video formats is MP4 | Enforced | Enforced |
| Telegram: Image size should be less than or equal 10MB | Enforced | Enforced |
| Telegram: Video size should be less than or equal 49MB | Enforced | Enforced |
| Telegram: Album videos over 20MB and images over 5MB together should be less than or equal 49MB | Not checked | Enforced |
> Follow updates at https://post-pulse.com/releases — we’ll announce when API-side validations roll out.
—
Rate limits & API keys
– Standard: 20 RPS burst, 200 RPS steady, 50k req/month
– Agency: higher limits on request
—
Webhooks
PostPulse supports webhooks for real-time notifications instead of polling for status updates. This is especially useful for tracking:
Setting up webhooks
1. Register webhook endpoints at the Developer Portal
2. Configure event types you want to receive notifications for
3. Review webhook models and event types in the developer documentation
Benefits over polling
> Learn more: Visit https://post-pulse.com/webhooks for complete webhook documentation, supported event types, and payload schemas.
—
Examples
The JSON examples are PostSchedule bodies for Schedule (Advanced); the Schedule examples list the node’s fields.
Minimal single-destination post (Reel)
{
"scheduledTime": "2025-08-17T14:03:00",
"isDraft": false,
"publications": [
{
"socialMediaAccountId": 442,
"platformSettings": {
"type": "INSTAGRAM",
"publicationType": "REELS"
},
"posts": [
{
"attachmentPaths": [
"6354d8d2-e0f1-702b-af6c-62e28e377ec7/c6c2b826-8aca-4eae-8549-515325012ab4.jpeg"
],
"content": "New drop is live! #fashion"
}
]
}
]
}
Telegram to multiple channels in one publication
{
"scheduledTime": "2025-08-17T14:03:00",
"isDraft": false,
"publications": [
{
"socialMediaAccountId": 501, // Telegram account id
"platformSettings": { "type": "TELEGRAM" },
"posts": [
{ "chatId": "-100123", "content": "Hello Channel A", "attachmentPaths": ["u1/p1.jpg"] },
{ "chatId": "-100456", "content": "Hello Channel B", "attachmentPaths": ["u1/p1.jpg"] }
]
}
]
}
TikTok with title & privacy
{
"scheduledTime": "2025-08-17T14:03:00",
"isDraft": false,
"publications": [
{
"socialMediaAccountId": 777,
"platformSettings": {
"type": "TIK_TOK",
"title": "Top 5 tips",
"privacyLevel": "PUBLICTOEVERYONE",
"hasUsageConfirmation": true
},
"posts": [
{ "attachmentPaths": ["u1/v1.mp4"], "content": "Full guide in bio" }
]
}
]
}
Media import from URL
{
"url": "https://example.com/my-video.mp4",
"filenameHint": "promotional-video.mp4"
}
Response:
{
"id": 12345,
"state": "QUEUED"
}
Check media import status
Input: importId: 12345
Response:
{
"id": 12345,
"state": "READY",
"sourceUrl": "https://example.com/my-video.mp4",
"bytesDownloaded": 15728640,
"totalBytes": 15728640,
"detectedMime": "video/mp4",
"s3Key": "6354d8d2-e0f1-702b-af6c-62e28e377ec7/promotional-video.mp4"
}
> Note: Use the s3Key value in attachmentPaths when the state is READY.
Schedule – Instagram Reel
Using the simplified interface with automatic platform settings:
Node configuration:
Schedule for Later2025-08-17T14:03:00INSTAGRAM - @fashionbrandReels (automatically appears for Instagram)New drop is live! #fashion6354d8d2-e0f1-702b-af6c-62e28e377ec7/video.mp4The node automatically builds this API request:
{
"scheduledTime": "2025-08-17T14:03:00",
"isDraft": false,
"publications": [{
"socialMediaAccountId": 442,
"platformSettings": {
"type": "INSTAGRAM",
"publicationType": "REELS"
},
"posts": [{
"content": "New drop is live! #fashion",
"attachmentPaths": ["6354d8d2-e0f1-702b-af6c-62e28e377ec7/video.mp4"]
}]
}]
}
Schedule – Telegram with Channel Selection
Node configuration:
Post NowTELEGRAM - @mybotTech Updates (loaded from API, shows connected channels)Check out our latest update!user1/screenshot.png, user1/demo.mp4The node automatically builds this API request (no scheduledTime — posts immediately):
{
"isDraft": false,
"publications": [{
"socialMediaAccountId": 501,
"platformSettings": {
"type": "TELEGRAM"
},
"posts": [{
"chatId": "-1001234567890",
"content": "Check out our latest update!",
"attachmentPaths": ["user1/screenshot.png", "user1/demo.mp4"]
}]
}]
}
Schedule – YouTube Video
Node configuration:
Schedule for Later2025-08-17T14:03:00YOUTUBE - @MyChannelTop 5 JavaScript Tips (automatically appears for YouTube)Full tutorial with code examples. Links in description.user1/tutorial-video.mp4The node automatically builds this API request:
{
"scheduledTime": "2025-08-17T14:03:00",
"isDraft": false,
"publications": [{
"socialMediaAccountId": 777,
"platformSettings": {
"type": "YOUTUBE",
"title": "Top 5 JavaScript Tips"
},
"posts": [{
"content": "Full tutorial with code examples. Links in description.",
"attachmentPaths": ["user1/tutorial-video.mp4"]
}]
}]
}
—
FAQ
Do I have to upload media to PostPulse even if I have a public URL?
Not anymore! You can now use the “From Public URL” option in Media → Upload to import media directly from URLs. The system will download and host the media on post-pulse.com for platform compatibility.
How do I import media from a URL?
Use Media → Upload with “From Public URL” option. Provide the URL and optionally a filename hint. Enable Wait for Completion to have the node automatically poll until the media is ready — it returns { path } just like file upload. Alternatively, disable Wait for Completion to get the import job ID and poll manually with Media → Get Upload Status.
What are the different import states?
QUEUED: Import job is waiting to startDOWNLOADING: Media is being downloaded from the source URLVALIDATING: Downloaded media is being validatedUPLOADING: Media is being uploaded to PostPulse storageREADY: Import complete, media ready to use (check s3Key field)FAILED_TEMPORARY: Temporary failure, may retry automaticallyFAILED_PERMANENT: Permanent failure, check errorCode and errorMessageCan I draft then update later via the node?
In v1 of the node, we recommend isDraft: false. Update endpoints will be exposed in a later version.
How do I post to multiple accounts at once?
Use Schedule (Advanced): create one PostSchedule with multiple Publication objects (one per account). With Schedule, each input item schedules a separate post to one account.
How do I set YouTube or TikTok titles?
Titles live in platformSettings (see schemas above). content becomes description.
How do I label a post as AI-generated?
For Instagram and TikTok, turn on the AI Content toggle in Schedule (it is off by default), or set "aiContent": true in platformSettings when using Schedule (Advanced). Other platforms ignore this setting.
Which timezone is Scheduled Time in?
The workflow timezone (n8n → Workflow Settings → Timezone). A naive value like 2025-08-17T14:03:00 is converted from that timezone to UTC before it is sent to the API. If the value already carries an offset or Z, it is used as-is.
Why does the upload path differ from my filename?
PostPulse validates the real media format after upload. If the bytes don’t match the extension (e.g. a .mov renamed to .mp4), the stored file is renamed to the correct extension. Always pass the path returned by Media → Upload into attachmentPaths.
Should I use webhooks or polling for status updates?
Webhooks are recommended for production workflows as they provide real-time notifications without the need to repeatedly call status endpoints. Set up webhooks at https://post-pulse.com/app/portal/webhooks to receive instant notifications for post publishing status and media import progress. Use polling (Get Upload Status) only for testing or when webhooks aren’t feasible.
—
Support
—
Versioning & License
MAJOR.MINOR.PATCH—


