Mutation
Use the scheduleLinkedInPost mutation to schedule professional content to LinkedIn:
mutation ScheduleLinkedInPost($input: ScheduleLinkedInPostInput!) {
scheduleLinkedInPost(input: $input) {
success
errors {
field
message
}
post {
id
socialAccount {
id
username
}
publishingStatus
text
link
visibility
firstComment
gallery {
id
galleryMediaSet {
id
media {
url
mimeType
}
}
}
submissions {
id
postAt
}
}
}
}
Input Parameters
ScheduleLinkedInPostInput
SPECIFIC_TIME, QUEUE_NEXT (default: SPECIFIC_TIME).
Only accepted when scheduling a new post. See Scheduling at the Next Open Slot.PUBLIC, CONNECTIONS, LOGGED_INid, name, or url. See Attaching Media.
Only supported when scheduling new posts, not when updating existing ones.READY_TO_PUBLISH, DRAFT (default: READY_TO_PUBLISH)LinkedInPostSubmissionInputType
Each submission defines a specific posting schedule:
schedulingMode: QUEUE_NEXT on the post when scheduling a new one, or the post is a draft.
See Drafts without a date.Examples
Simple LinkedIn Post
Schedule a basic LinkedIn post with text content.
{
"input": {
"username": "myprofile",
"text": "Excited to share insights from our latest project! The key to success in digital transformation is focusing on people-first strategies that empower teams to embrace change.\n\n#DigitalTransformation #Leadership #Innovation",
"visibility": "PUBLIC",
"submissions": [
{
"postAt": "2025-12-01T09:00:00Z"
}
]
}
}
Scheduling at the Next Open Slot
Instead of picking a time yourself, pass schedulingMode: QUEUE_NEXT and leave postAt out. Postpone puts the post in the next open slot on the account's Account Schedule, skipping any slot that already has a post on it.
{
"input": {
"username": "myprofile",
"schedulingMode": "QUEUE_NEXT",
"text": "This one goes out at my next open slot.",
"visibility": "PUBLIC",
"submissions": [{}]
}
}
Leave postAt off the submissions — the resolved slot becomes the date for all of them.
The account needs a schedule set up for this to work, postAt and QUEUE_NEXT can't be combined, and updateScheduledLinkedInPost rejects schedulingMode. See Scheduling at the Next Open Slot for the full rules.
LinkedIn Post with Media
Schedule a LinkedIn post with an image from URL.
{
"input": {
"username": "myprofile",
"text": "Just wrapped up an incredible conference! Here are my key takeaways from the sessions on emerging technologies and their impact on business strategy.\n\n📊 Data-driven decision making is more crucial than ever\n🚀 AI adoption requires thoughtful change management\n🤝 Collaboration tools are reshaping remote work\n\nWhat trends are you seeing in your industry?\n\n#Conference2024 #Technology #BusinessStrategy",
"media": [{ "url": "https://example.com/conference-photo.jpg" }],
"visibility": "PUBLIC",
"submissions": [
{
"postAt": "2025-12-01T14:30:00Z"
}
]
}
}
LinkedIn Post with Link Share
Schedule a LinkedIn post sharing an article or resource.
{
"input": {
"username": "myprofile",
"text": "Great article on the future of remote work! The insights about hybrid collaboration models really resonated with our team's experience.\n\nKey highlights:\n• Flexible work arrangements increase productivity by 25%\n• Virtual team building requires intentional effort\n• Technology should enable, not complicate workflows\n\nWhat's your take on the future of work? Share your thoughts below! 👇\n\n#RemoteWork #FutureOfWork #Productivity #TeamCollaboration",
"link": "https://example.com/remote-work-article",
"visibility": "PUBLIC",
"submissions": [
{
"postAt": "2025-12-01T11:15:00Z"
}
]
}
}
LinkedIn Post with First Comment
Schedule a LinkedIn post with an automatic first comment.
{
"input": {
"username": "myprofile",
"text": "Thrilled to announce that our team has successfully completed the Q4 project ahead of schedule! 🎉\n\nThis achievement wouldn't have been possible without the dedication and innovative thinking of every team member.\n\n#TeamWork #ProjectSuccess #Innovation #Milestone",
"firstComment": "Special thanks to @colleague1 @colleague2 and @colleague3 for their outstanding contributions to this project. Your expertise made all the difference!",
"media": [{ "name": "team-celebration.jpg" }],
"visibility": "PUBLIC",
"submissions": [
{
"postAt": "2025-12-01T16:00:00Z"
}
]
}
}
Connections-Only Post
Schedule a post visible only to your LinkedIn connections.
{
"input": {
"username": "myprofile",
"text": "Personal update for my network: After 5 amazing years at TechCorp, I'm excited to start a new chapter as Senior Director at InnovateCo!\n\nLooking forward to bringing my passion for digital transformation to help drive growth in the fintech space.\n\nGrateful for all the connections and opportunities that have led me here. Let's stay in touch!\n\n#CareerUpdate #NewBeginnings #Grateful #FinTech",
"visibility": "CONNECTIONS",
"submissions": [
{
"postAt": "2025-12-01T08:00:00Z"
}
]
}
}
Response Types
Success Response
{
"data": {
"scheduleLinkedInPost": {
"success": true,
"errors": [],
"post": {
"id": "123",
"socialAccount": {
"id": "456",
"username": "myprofile"
},
"publishingStatus": "READY_TO_PUBLISH",
"text": "Excited to share insights from our latest project! The key to success in digital transformation is focusing on people-first strategies that empower teams to embrace change.\n\n#DigitalTransformation #Leadership #Innovation",
"link": null,
"visibility": "PUBLIC",
"firstComment": null,
"gallery": null,
"submissions": [
{
"id": "789",
"postAt": "2025-12-01T09:00:00Z"
}
]
}
}
}
}
Error Response
{
"data": {
"scheduleLinkedInPost": {
"success": false,
"errors": [
{
"field": "text",
"message": "LinkedIn posts cannot exceed 3,000 characters."
}
],
"post": null
}
}
}
Updating a Post
To update an existing scheduled post, use the same input type with the corresponding update mutation and include the post id:
mutation UpdateScheduledLinkedInPost($input: ScheduleLinkedInPostInput!) {
updateScheduledLinkedInPost(input: $input) {
success
errors {
field
message
}
post {
id
}
}
}
Pass the id of the post you want to update in the input, along with the fields you want to change:
{
"input": {
"id": "12345",
"username": "myhandle",
"text": "Updated LinkedIn post!",
"submissions": [{"postAt": "2025-12-01T15:30:00Z"}]
}
}
id field to specify which post to update. Only scheduled posts that have not been published yet can be updated.postAt is required on an update, so every update states the date the post goes out on — pass the date it already has to leave it where it is. A draft staying a draft is exempt, and a draft you're promoting to READY_TO_PUBLISH needs a date of your choosing; see Drafts without a date.
schedulingMode is not accepted on an update at all; see Scheduling at the Next Open Slot.
Validation Rules
- Text Length: Maximum 3,000 characters per post
- Media: Supports images (JPEG, PNG, GIF) and videos (MP4, MOV, WMV)
- Image Requirements: Maximum 20MB, minimum 552x552 pixels
- Video Requirements: Maximum 5GB, minimum 256x144 pixels, maximum 10 minutes
- Link Previews: Automatically generated for valid URLs
- Professional Tone: Content should maintain professional standards
- Hashtags: Use relevant professional hashtags for better discoverability
- Mentions: Can mention other LinkedIn users with @ symbol
- Scheduling: Posts must be scheduled for future dates only
- Account Limits: Respects your plan's monthly post limits
Common Errors
The specified username is not connected to your Postpone account. Connect the account in your settings first.
Your post text is too long. LinkedIn allows a maximum of 3,000 characters per post.
Your media format is not supported. Use JPEG, PNG, or GIF for images, and MP4, MOV, or WMV for videos.
Your image file is too large. LinkedIn supports images up to 20MB in size.
Your video file is too large. LinkedIn supports videos up to 5GB in size.
Your video is too long. LinkedIn supports videos up to 10 minutes in length.
The provided link is not a valid URL. Ensure your link starts with http:// or https://.
The postAt timestamp must be in the future. Check your timezone settings.
A new post has to say when it goes out: pass a postAt, or schedulingMode: QUEUE_NEXT. Drafts are exempt: leave postAt off one and it is parked on a placeholder date about 30 days out.
schedulingMode isn't accepted on an update, so a postAt is the only way to say when the post goes out. You'll also see it when promoting a parked draft to publishingStatus: READY_TO_PUBLISH without giving it a date.
schedulingMode: QUEUE_NEXT needs an Account Schedule on the account you're posting to. Set one up, or pass an explicit postAt.
schedulingMode is only accepted when scheduling a new post. To move a post that is already scheduled, pass a postAt to updateScheduledLinkedInPost.
You've reached your plan's LinkedIn post limit for the scheduled month. Upgrade your plan or schedule for a different month.