Description
n8n-nodes-posty5
N8N community nodes for Posty5 – Automate URL shortening, QR code generation, HTML hosting, and social media publishing in your N8N workflows.
🚀 What is Posty5?
Posty5 is a comprehensive platform for digital content management and distribution:
- URL Shortening – Create branded short links with analytics
- QR Code Generation – Generate QR codes for URLs, WiFi, email, SMS, and more
- HTML Hosting – Host static HTML pages with custom domains
- Form Management – Collect and manage form submissions
- Social Media Publishing – Automate video publishing to YouTube, TikTok, Facebook, and Instagram
📦 Installation
Via NPM
npm install n8n-nodes-posty5
Via N8N Community Nodes
1. Open N8N
2. Go to Settings → Community Nodes
3. Search for n8n-nodes-posty5
4. Click Install
🔑 Setup
Get Your API Key
1. Visit Posty5 Studio
2. Create a new API key
3. Copy the key for use in N8N
Configure Credentials in N8N
1. Add Posty5 API credentials
2. Paste your API key
3. Click Test. It asks the API which key this is (GET /api/api-key/current):
a good key passes, a wrong or revoked one fails with “Invalid or revoked API
key”. Requests go to https://api.posty5.com; there is no base URL to set.
Every request the nodes send carries X-Posty5-Client: posty5-n8n/
(from 4.5.0), which the API uses to tell n8n traffic apart. It is not a
credential and needs no setup.
📋 Available Nodes
1. Posty5 Short Link
Create and manage shortened URLs. Each link counts its visits.
Operations:
| Operation | What it sends |
| — | — |
| Create | Destination URL and Template (required), plus Name, Custom Slug and Additional Fields: Tag, Reference ID, Landing Page with its Page Title and Page Description, Android URL, iOS URL. |
| Get | Retrieve link details, including its visit count and Android/iOS URLs. |
| Get Analytics | Visits, unique visitors and bot visits over a range, a series by day/week/month, and breakdowns (country, device, OS, browser, referrer, channel = click or scan, language). See Get Analytics. |
| Get Statistics | Counts over all your short links: totals, visits per day, links created per day, top 10 links by visits. See Get Statistics. |
| List | Filters: Search (name), Destination URL Contains, Tag, Reference ID, Landing Page Enabled. |
| Update | Reads the link, then saves it with your changes on top: anything you leave alone keeps its stored value. Template may stay empty to keep the current one. Destination URL is under Additional Fields. The Custom Slug cannot be changed. |
| Create Many | One short link per input item in batched calls (up to 100 rows per request): Destination URL, Name, Custom Slug, Template, Row Fields (Tag, Reference ID), Defaults (Template ID, Tag, Reference ID) and Options (Batch Size, Fetch Page Metadata, Fail on Any Row Error). See Create Many. |
| Delete | Remove links. |
| Set Rules | Changes only the rule sections you add: access (Active From, Expires At, Max Visits, Fallback URL, Password / Remove Password), Routing Rules, Variants, UTM, Pixels. Empty clears a section. |
| List Tags | Your links’ distinct tags (optional Starts With), one item per tag. |
| Check Health | Queues one destination check of a link (once per 10 minutes; plan-gated). |
| Create / Get / List / Update / Delete Campaign | Link campaigns (/api/link-campaign): name, description, color, UTM, archived. Delete Campaign with Detach Links detaches the campaign’s links first. |
Create and Update also take, under Additional Fields: Tags (comma-separated;
Tag is deprecated but still works), Campaign, the access fields above,
UTM, Routing Rules (JSON), Variants (JSON), Pixels with **Pixels
Consent Acknowledged (required the first time), and Health Monitor**. List
filters gain Tags and Campaign.
> Secrets: the Password field is masked in the editor, but n8n stores node
> parameters inside the workflow. Put the password in an expression that reads
> a secret (environment variable or a credential-backed node) rather than
> typing it in, and never share the workflow JSON with a literal password.
Template is a dropdown of your QR code templates and the public ones; the
Posty5 API requires one on every API-key create and update. On Update, a Tag,
Reference ID, Android URL or iOS URL you add but leave empty clears it.
Use Cases:
2. Posty5 QR Code
Generate QR codes for 14 different types.
QR Types:
Operations:
| Operation | What it sends |
| — | — |
| Create | QR Type, its content fields and Template (required), plus Name, Mode and Additional Fields: Tag, Reference ID, Landing Page with its Page Title and Page Description. |
| Get | Retrieve QR code details. |
| Get Analytics | Scans, unique visitors and bot visits over a range, a series and breakdowns, as on the Short Link node. See Get Analytics. |
| Get Statistics | Counts over all your QR codes, as on the Short Link node (top list topQRCodes). See Get Statistics. |
| List | Filters: Search (name), Tag, Reference ID, Mode. |
| Update | Reads the QR code, then saves the content you enter with everything else kept. Template may stay empty to keep the current one; Mode defaults to Keep Current. |
| Create Many | One QR code per input item in batched calls (up to 100 rows per request): QR Type and its fields, Name, Mode, Template, Row Fields (Tag, Reference ID), Defaults and Options (Batch Size, Fail on Any Row Error). See Create Many. |
| Delete | Remove QR codes. |
The design comes from the template, and Posty5 builds the encoded text from the
content fields: the node sends the content as qrCodeTarget and nothing else.
Mode. Static (the default) encodes the content in the image. Dynamic: the
image points to a Posty5 link, so you can change where it goes later without
reprinting. Mode is hidden for WiFi, which cannot be dynamic (the API answers
400). Create sends mode only for Dynamic, so saved workflows keep producing
static codes; Update sends it only when you pick one. Outputs carry mode and
dynamicSince (null for a static code).
Scan Rules (dynamic codes, Starter plan and above): Active From, Expires At,
Max Scans and Fallback URL (where gated scans go). Shown on Create for Dynamic
and on Update. On Update, leave it empty to keep the current rules; any rule set
replaces all of them, and Clear Scan Rules removes them. Outputs carry access.
Dynamic-only types. App Store Links and File have no static form: Mode is
hidden and the node always sends mode: dynamic (Scan Rules are shown on
Create). A Social Profile code with 2 or more profiles is sent as dynamic too.
File QR codes. Set Binary Property (default data) to the input binary
holding the file, e.g. from an HTTP Request or Read Binary File node. The node
checks the type and size, asks Posty5 for a signed upload URL
(POST /api/qr-code/file/upload-url), uploads the bytes there (no API key is
sent to the storage URL), then creates the code with the returned
bucketFilePath. File Name overrides the binary’s name. On Update, leave
Binary Property empty to keep the stored file. Create Many does not offer File:
the bulk route cannot upload.
Create Many (Short Link and QR Code)
Create Many turns every input item into one row and sends them to
POST /api/short-link/bulk / POST /api/qr-code/bulk in chunks of
Batch Size (default and maximum 100): 250 items are 3 requests. Each chunk
carries Idempotency-Key: n8n-, so retrying the
same execution is not charged twice; a new run creates new records.
status (created / failed), id, shortUrl or qrCodeDownloadURL, errors.
status: "failed". Turn on Fail on Any Row Error to stop the workflow instead (rows already created
stay created).
is not sent.
On Fail* is output as error on every item of that chunk.
page and Android/iOS fields are not part of a bulk row.
Get Analytics (Short Link and QR Code)
GET /api/short-link/:id/analytics or GET /api/qr-code/:id/analytics, the
same numbers the dashboard’s Analytics tab and the Posty5 SDKs read. Reading
analytics costs no credits.
| Parameter | What it sends |
| — | — |
| Short Link ID / QR Code ID | The record to read. |
| Range | Last 7 / 30 / 90 Days (today included, “today” counted in the Time Zone option, else the workflow’s time zone) or Custom with From and To dates (both days included). Sent as from / to, YYYY-MM-DD. Default: last 30 days. |
| Interval | day (default), week (points start on Monday) or month (points start on the 1st). |
| All Breakdowns My Plan Allows | On (default): breakdown=all. Breakdowns your plan does not include are listed in meta.locked with the plan that adds them, instead of failing. |
| Breakdowns | Off the toggle: the ones you pick, comma-joined. None picked: breakdown is left out and the API returns every breakdown your plan allows. |
| Output | Full Response (one item, the API answer unchanged) or Series as Items (one item per series point, each with meta, handy for Google Sheets). |
| Options → Breakdown Rows | Rows per breakdown, 1–50 (API default 10); the rest is summed into an other row. |
| Options → Time Zone | IANA name, e.g. Africa/Cairo. Empty: the workflow’s time zone (Workflow Settings → Timezone, default the instance’s GENERIC_TIMEZONE). Always sent as tz, so the API counts days in the same zone the presets use. |
The answer is { totals: { visits, uniqueVisitors, botVisits }, series: [{ date,. Bots and link-preview fetchers count only in
visits, uniqueVisitors }], breakdowns: {
meta: { from, to, interval, timezone, source, analyticsStartedAt, locked,
maxHistoryDays } }botVisits;
uniqueVisitors over several days is the sum of each day’s unique visitors.
Naming a breakdown your plan does not include, or a range further back than it
allows, fails with the API’s own plan message (HTTP 403). An unknown ID fails
with the API’s 400 “The Short Link Is Not Found” / “The QR Code Is Not Found”.
Get Statistics (Short Link and QR Code)
GET /api/short-link/statistics or GET /api/qr-code/statistics: counts over
all your links (or QR codes), with no ID. Period is Today, Last 7 Days,
Last 30 Days (default), This Month or Custom with From / To
(YYYY-MM-DD); sent as the API’s period (today, 7d, 30d, month,
custom). Days are UTC days. The answer is one item, unchanged: { range: {.
from, to, period }, data: { totals, daily: [{ _id, createdCount, visitorsSum }],
topLinks | topQRCodes } }totals holds the lifetime totalVisitors counter
(it includes visits from before visit analytics launched) and the in-range
visitsInRange, uniqueVisitorsInRange and botVisitsInRange; visitorsSum
is visits by people that day. Reading statistics costs no credits.
3. Posty5 HTML Hosting
Host static HTML pages with CDN delivery.
Operations:
Use Cases:
4. Posty5 HTML Variables
Manage dynamic variables for HTML pages.
Operations:
Variable Keys: Must start with pst5_
5. Posty5 Form Submission
Collect and manage form submissions from HTML pages.
Operations:
Filters:
6. Posty5 Social Publisher Workspace
Manage social media workspaces/organizations.
Operations:
7. Posty5 Social Publisher Post
Publish creator-owned videos to connected social media platforms. TikTok publishing requires the Posty5 creator-controlled review and confirmation flow.
Supported Platforms:
Operations:
Long video (up to 60 minutes):
Long video is charged by duration — 50 credits for every started 5 minutes,
so a 12-minute video costs 150. The duration is measured server-side from the
file; there is no duration field to send.
Use Quote Long Video first to branch a workflow on cost before committing:
HTTP Request (fetch video) -> Quote Long Video -> IF credits < 500 -> Publish Long Video -> Get Post Status
Platform limits differ, and are checked when the post is created rather than
mid-upload:
| Platform | Longest accepted video |
| — | — |
| YouTube | 12 hours |
| Facebook | 4 hours |
| Instagram | 15 minutes (Reels) |
| TikTok | Per-creator, read from the connected account |
A workspace publish goes out to the targets that accept the video and reports
the rest in refusedTargets on the item, so a later node can branch on a
partial publish. An account publish is refused outright instead, and nothing is
charged.
Requires the socialMediaPublisher.longVideoPost plan feature.
Uploads resume. Binary video is sent to the API’s resumable endpoint in
8MiB chunks, so a dropped connection costs one chunk rather than the whole
transfer. The node falls back to a single signed PUT when the server does not
offer the resumable service.
> Note on memory. n8n’s binary helper hands a node the whole file as a
> Buffer, so a 60-minute video is in memory before the upload starts. Chunking
> bounds what a dropped connection costs, not what the workflow allocates —
> prefer the URL source for very large videos.
Video Sources:
Uploaded images: Publish Image with the Uploaded Bucket File source
takes a file you already uploaded through generate-upload-urls, so the node
cannot reserve a post ID for it. Also pass the postId from that response as
Upload Post ID. Posty5 deletes an uploaded file only from the folder of the
post that owns it, so without the ID the image stays in storage after the post
is published or deleted.
TikTok Direct Post is not exposed as a public repost workflow in these n8n nodes. Do not use TikTok publishing to copy arbitrary third-party videos from TikTok, YouTube, Facebook, Instagram, or any other platform.
Platform-Specific Settings:
Post-publish comments:
Up to five comments per post, through the Comments collection. Each one
carries its own text, its own delay (0-1440 minutes after the post goes live),
its own optional image and its own per-platform switches.
at no enabled platform is dropped before it is charged.
endpoint, so a comment aimed at it reports notSupported rather than failing.
text-only, so an image bound for either is dropped with a reason rather than
failing the comment.
The older single Comment collection still works and is marked deprecated. It
is mapped into the first entry of Comments when that is empty, and the two
are never sent together — the API refuses a request carrying both.
8. Posty5 Store
Dropshipping with a Posty5 store: watch the orders sent to suppliers, act on a
paused one, import supplier products and follow each part of an order.
Resources and operations:
Use Cases:
> No store trigger yet. The API does not push supplier-order events to
> merchants (Posty5 Trigger covers link visits, QR scans and milestones), so a
> store trigger would only poll. Use a Schedule Trigger with **Supplier Order → Get
> Many** (Example 5) — every 15 minutes matches how often Posty5 itself checks
> suppliers for updates.
>
> What the node will not do: connect a supplier, change its credentials or
> automation, or build a product link. Those stay in the store’s control panel —
> a supplier credential in a node parameter would sit in plain text in the
> workflow JSON.
Money and permissions: Pay and Submit → Pay Now spend the merchant’s
balance at the supplier and need suppliers.orders.manage. A second Submit
finds the first supplier order instead of creating another; Pay on an order
already paid at the supplier records it and does not pay again. Import is
charged like adding products; nothing else here is charged. Retry, Pay and
Submit answer a paused outcome as an error — use Continue On Fail to keep
the reason in the item.
Pagination: each Get Many outputs one item per row. **Supplier Product
→ Get Many (the supplier’s catalogue) takes Page and Limit**.
Supplier Order → Get Many and Order → Get Many page by cursor: they take
a Limit (sent as pageSize) and a Cursor filter, and put nextCursor
on the last row they return, so the next run can continue from it. **Supplier
Order → Get Many also has Return All**, which follows nextCursor 100 rows
at a time until the API says there is no more (hasMore false).
Errors: Product Link → Sync runs at most once a minute per link; a second
run inside that minute fails with Posty5 API Error: This product was synced a (an HTTP 400, not a 429) — wait a minute and run again. A 403 on
moment ago…
Pay or Submit → Pay Now means the API key lacks
suppliers.orders.manage; elsewhere, check that the store’s plan includes
dropshipping. Supplier Product → Get Many takes at most 48 rows a page and
Supplier Order → Get Many at most 100; the API refuses a larger Limit.
9. Posty5 Trigger
Starts a workflow when a short link is visited, a QR code is scanned or a
visit/scan milestone is reached. Activating the workflow registers a Posty5
webhook endpoint for the node’s URL; deactivating it removes the endpoint.
| Setting | Meaning |
| — | — |
| Events | Short Link Visited, QR Code Scanned, Short Link Visit Milestone, QR Code Scan Milestone |
| Links | All my links and QR codes, or specific short link / QR code IDs (comma-separated) |
| Options | Include Bot Visits (off), Milestones (100,1000, up to 10), Delivery (each event, or batched every 1 min / 5 min / 1 h), Split Batches Into Items (on) |
WEBHOOK_URL set to a public HTTPS address (or a tunnel). Posty5 refuses
private or plain-HTTP URLs.
window) before the workflow runs; a forged one gets 401.
itself. A scan of a short link’s QR image arrives as Short Link Visited with
channel: "qr"; dynamic QR codes send QR Code Scanned.
id, type, createdAt, data) plus webhookId for de-duplication.
by deactivating and re-activating the workflow. An endpoint Posty5 disabled
after repeated failures is recreated on the next activation.
💡 Workflow Examples
Example 1: URL Shortener → QR Code
Create a short link and generate a QR code for it:
HTTP Request (Get URL)
↓
Posty5 Short Link (Create)
↓
Posty5 QR Code (Create URL type)
↓
Send Email (with QR code)
Example 2: Form Submission → Email Notification
Monitor form submissions and send notifications:
Schedule Trigger (every 5 minutes)
↓
Posty5 Form Submission (List - filter by status: new)
↓
IF (has new submissions)
↓
Send Email
↓
Posty5 Form Submission (Update status to read)
Example 3: Social Media Publishing
Publish a video to multiple platforms:
Trigger (Manual/Webhook)
↓
Read Binary File (video.mp4)
↓
Posty5 Social Publisher Post (Publish)
- Platforms: YouTube, TikTok, Instagram
- Video: Binary data
- Scheduled: Now
↓
Posty5 Social Publisher Post (Get Post Status)
↓
Send Notification
Example 4: Landing Page Deployment
Deploy HTML page from GitHub and create short link:
GitHub Trigger (on push)
↓
Posty5 HTML Hosting (Create from GitHub)
↓
Posty5 Short Link (Create)
↓
Slack Notification (with short URL)
Example 5: Needs-Attention Alerts
Hear about a paused supplier order, and retry the fixable ones:
Schedule Trigger (every 15 minutes)
↓
Posty5 Store (Supplier Order → Get Many, Needs Review = true)
↓
Filter (updatedAt within the last 15 minutes)
↓
Slack (order number, reviewReason, reviewMessage)
↓
IF (reviewReason = connectionUnhealthy)
↓
Posty5 Store (Supplier Order → Retry)
Example 6: Import From a Spreadsheet
Google Sheets (rows of supplier product IDs)
↓
Posty5 Store (Supplier Product → Preview Import)
↓
IF (no row has duplicateOf)
↓
Posty5 Store (Supplier Product → Import)
↓
IF (jobId is set) → Wait → Posty5 Store (Supplier Product → Get Import Status)
↓
Email (rows with state = failed)
Example 7: Weekly Top Countries to Slack
Schedule Trigger (every Monday)
↓
Posty5 Short Link (Get Analytics: Last 7 Days, Breakdowns = Country, Breakdown Rows = 5)
↓
Slack (post totals.visits and breakdowns.country)
Example 8: Tracking Updates Per Part
Schedule Trigger (hourly)
↓
Posty5 Store (Order → Get Many, Status = processing)
↓
Posty5 Store (Order → Get, Split Parts = true)
↓
IF (status = shipped and shipment.trackingNumber is set)
↓
Google Sheets (append order number, part label, tracking number)
A supplier order carries the delivery address only when the API key’s owner may
see customer data. Forwarding the output to a third-party channel forwards it too.
Example 9: Slack Message on Click
Posty5 Trigger (Short Link Visited, specific short link)
↓
Slack → Send Message ("{{$json.data.target.name}} opened from {{$json.data.visit.country}}")
Example 10: Sheet Rows → Short Links (Create Many)
Google Sheets → Get Rows (800 rows)
↓
Posty5 Short Link → Create Many (Destination URL = {{$json.url}}, Defaults → Template ID)
↓ 8 API calls, one output item per row
Google Sheets → Update Row (shortUrl, status)
🔧 Advanced Features
Pagination
All list operations support pagination:
// Return all results (automatic pagination)
returnAll: true;// Or limit results
returnAll: false;
limit: 50;
Filtering
Most list operations support filters:
{
tag: "marketing",
refId: "campaign-2024",
search: "keyword"
}
Binary Data Handling
Nodes support binary data for:
Use N8N’s binary data system:
// From HTTP Request node
binaryPropertyName: 'data';// From Read Binary File node
binaryPropertyName: 'data';
Scheduling
Social Publisher Post supports scheduling:
scheduledPublishTime: 'now';
// or
scheduledPublishTime: new Date('2024-12-31T10:00:00Z');
🔒 Versioned writes (5.0.0)
Version 2 of the Short Link, QR Code, HTML Hosting, Form Submission and Social
Publisher Post nodes protects updates and deletes from overwriting someone
else’s change:
Short Link’s Set Rules, Update Campaign and Delete Campaign): the
v of the item as you read it. It defaults to {{ $json.v }}, so a
Get → Update chain works as is. It is sent as If-Match.
409 conflict: *”The item changed since it was read (current version N). Get it again, then
update.”*
Fail (default) or Use Latest (Overwrite), which reads the item and uses its current version
(last write wins, your explicit choice).
write operations: they read the item first and overwrite it, exactly as
before.
X-Posty5-Client: posty5-n8n/.🐛 Error Handling
All nodes support N8N’s “Continue on Fail” option:
{
json: {
error: 'Error message here';
}
}
Common errors:
📚 Resources
🤝 Support
📝 License
MIT License – see LICENSE file for details
🙏 Credits
Built with ❤️ by the Posty5 team
Powered by: