✓ Verified 💻 Development ✓ Enhanced Data

Publora Linkedin

Post or schedule content to LinkedIn using the Publora API.

Rating
4.3 (464 reviews)
Downloads
36,776 downloads
Version
1.0.0

Overview

Post or schedule content to LinkedIn using the Publora API.

Complete Documentation

View Source →

Publora — LinkedIn

Post and schedule LinkedIn content via the Publora API.

Prerequisite: Install the publora core skill for auth setup and getting platform IDs.

Platform ID Format

linkedin-{profileId} — get your exact ID from GET /api/v1/platform-connections.

Character Limit

3,000 characters strict. The API returns an error if exceeded — it does NOT truncate or thread automatically. Count carefully.

Supported Content

TypeSupportedNotes
Text onlyUp to 3,000 chars
Single imageJPEG/PNG; WebP auto-converted to JPEG
Multiple imagesBecomes carousel/album
VideoMP4
Rich text formattingPlain text only; use Unicode for emphasis (𝗯𝗼𝗹𝗱, 𝘪𝘵𝘢𝘭𝘪𝘤)

Post to LinkedIn Immediately

javascript
await fetch('https://api.publora.com/api/v1/create-post', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json', 'x-publora-key': 'sk_YOUR_KEY' },
  body: JSON.stringify({
    content: 'Excited to share our latest update! 🚀\n\nWe just launched a new feature that cuts onboarding time by 40%. Here is what we learned building it...',
    platforms: ['linkedin-ABC123']
  })
});

Schedule a LinkedIn Post

javascript
await fetch('https://api.publora.com/api/v1/create-post', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json', 'x-publora-key': 'sk_YOUR_KEY' },
  body: JSON.stringify({
    content: 'Monday thought: consistency beats perfection every time. 💡\n\n#leadership #startup #growth',
    platforms: ['linkedin-ABC123'],
    scheduledTime: '2026-03-16T09:00:00.000Z'
  })
});
// Response: { postGroupId: "pg_abc123", scheduledTime: "..." }

Post with Images (Carousel/Album)

Multiple images → LinkedIn carousel/album. Use the 3-step upload workflow, calling get-upload-url once per image with the same postGroupId.

python
import requests

HEADERS = { 'Content-Type': 'application/json', 'x-publora-key': 'sk_YOUR_KEY' }

# Step 1: Create post
post = requests.post('https://api.publora.com/api/v1/create-post', headers=HEADERS, json={
    'content': 'Our team at the conference — great connections made today! #networking',
    'platforms': ['linkedin-ABC123'],
    'scheduledTime': '2026-03-16T09:00:00.000Z'
}).json()
post_group_id = post['postGroupId']

# Step 2+3: Upload each image (repeat for N images — all use same postGroupId)
for file_path in ['photo1.jpg', 'photo2.jpg', 'photo3.jpg']:
    upload = requests.post('https://api.publora.com/api/v1/get-upload-url', headers=HEADERS, json={
        'fileName': file_path, 'contentType': 'image/jpeg',
        'type': 'image', 'postGroupId': post_group_id
    }).json()
    with open(file_path, 'rb') as f:
        requests.put(upload['uploadUrl'], headers={'Content-Type': 'image/jpeg'}, data=f)

WebP note: WebP images are automatically converted to JPEG by Publora.

Hashtags

Hashtags work normally and become clickable on LinkedIn. Place them at the end of the post. Recommended: 3–5 relevant hashtags.

text
Great milestone reached today. Grateful for an amazing team. 🙌

#startup #buildinpublic #product #teamwork

Analytics

Retrieve post analytics via:

text
GET /api/v1/post-analytics?postId={postId}&platform=linkedin-{profileId}

Returns:

  • impressions — total views
  • membersReached — unique LinkedIn members reached
  • reshares — number of reshares
  • reactions — reaction counts by type
  • comments — total comments
Note: Analytics data may take up to 24 hours to populate after posting.

Reaction Types

LinkedIn supports 6 reaction types:

ReactionMeaning
LIKE👍 Like
PRAISE👏 Celebrate
EMPATHY💜 Support
INTEREST🤔 Curious
APPRECIATION🙏 Love
ENTERTAINMENT😄 Funny

Tips for LinkedIn

  • 3,000 chars = room to write — LinkedIn rewards long-form storytelling and thought leadership
  • No markdownbold renders as literal asterisks; use Unicode characters for visual emphasis if needed
  • Hashtags become clickable — use them
  • Line breaks matter — LinkedIn shows ~3 lines before "see more" — hook early
  • Best times: Tuesday–Thursday, 8–10 AM or 12 PM in your audience's timezone
  • Best for: professional content, career milestones, industry insights, team updates
  • Scheduling works — use scheduledTime (ISO 8601 UTC, at least 2 min in the future)

Installation

Terminal bash

openclaw install publora-linkedin
    
Copied!

💻Code Examples

// Response: { postGroupId: "pg_abc123", scheduledTime: "..." }

-response--postgroupid-pgabc123-scheduledtime--.txt
## Post with Images (Carousel/Album)

Multiple images → LinkedIn carousel/album. Use the 3-step upload workflow, calling `get-upload-url` once per image with the same `postGroupId`.

requests.put(upload['uploadUrl'], headers={'Content-Type': 'image/jpeg'}, data=f)

-requestsputuploaduploadurl-headerscontent-type-imagejpeg-dataf.txt
**WebP note:** WebP images are automatically converted to JPEG by Publora.

## Hashtags

Hashtags work normally and become clickable on LinkedIn. Place them at the end of the post. Recommended: 3–5 relevant hashtags.

#startup #buildinpublic #product #teamwork

startup-buildinpublic-product-teamwork.txt
## Analytics

Retrieve post analytics via:
example.js
await fetch('https://api.publora.com/api/v1/create-post', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json', 'x-publora-key': 'sk_YOUR_KEY' },
  body: JSON.stringify({
    content: 'Excited to share our latest update! 🚀\n\nWe just launched a new feature that cuts onboarding time by 40%. Here is what we learned building it...',
    platforms: ['linkedin-ABC123']
  })
});
example.js
await fetch('https://api.publora.com/api/v1/create-post', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json', 'x-publora-key': 'sk_YOUR_KEY' },
  body: JSON.stringify({
    content: 'Monday thought: consistency beats perfection every time. 💡\n\n#leadership #startup #growth',
    platforms: ['linkedin-ABC123'],
    scheduledTime: '2026-03-16T09:00:00.000Z'
  })
});
// Response: { postGroupId: "pg_abc123", scheduledTime: "..." }
example.py
import requests

HEADERS = { 'Content-Type': 'application/json', 'x-publora-key': 'sk_YOUR_KEY' }

# Step 1: Create post
post = requests.post('https://api.publora.com/api/v1/create-post', headers=HEADERS, json={
    'content': 'Our team at the conference — great connections made today! #networking',
    'platforms': ['linkedin-ABC123'],
    'scheduledTime': '2026-03-16T09:00:00.000Z'
}).json()
post_group_id = post['postGroupId']

# Step 2+3: Upload each image (repeat for N images — all use same postGroupId)
for file_path in ['photo1.jpg', 'photo2.jpg', 'photo3.jpg']:
    upload = requests.post('https://api.publora.com/api/v1/get-upload-url', headers=HEADERS, json={
        'fileName': file_path, 'contentType': 'image/jpeg',
        'type': 'image', 'postGroupId': post_group_id
    }).json()
    with open(file_path, 'rb') as f:
        requests.put(upload['uploadUrl'], headers={'Content-Type': 'image/jpeg'}, data=f)
example.txt
Great milestone reached today. Grateful for an amazing team. 🙌

#startup #buildinpublic #product #teamwork

Tags

#calendar_and-scheduling #api

Quick Info

Category Development
Model Claude 3.5
Complexity One-Click
Author sergebulaev
Last Updated 3/10/2026
🚀
Optimized for
Claude 3.5
🧠

Ready to Install?

Get started with this skill in seconds

openclaw install publora-linkedin