Social Planner
Social Media Posting API
Documentación de la API de Social Media Posting
Servidor base: https://services.leadconnectorhq.com
Endpoints
- POST /social-media-posting/{locationId}/posts/list — Obtener publicaciones
- POST /social-media-posting/{locationId}/posts — Crear publicacion
- GET /social-media-posting/{locationId}/posts/{id} — Obtener publicacion
- PUT /social-media-posting/{locationId}/posts/{id} — Edit post
- DELETE /social-media-posting/{locationId}/posts/{id} — Eliminar publicacion
- POST /social-media-posting/{locationId}/posts/bulk-delete — Bulk Delete Social Planner Posts
- GET /social-media-posting/{locationId}/accounts — Obtener cuentas
- DELETE /social-media-posting/{locationId}/accounts/{id} — Eliminar cuenta
- POST /social-media-posting/{locationId}/csv — Upload CSV
- GET /social-media-posting/{locationId}/csv — Obtener Upload Status
- POST /social-media-posting/{locationId}/set-accounts — Set Accounts
- GET /social-media-posting/{locationId}/csv/{id} — Obtener CSV Post
- PATCH /social-media-posting/{locationId}/csv/{id} — Start CSV Finalize
- DELETE /social-media-posting/{locationId}/csv/{id} — Eliminar CSV
- DELETE /social-media-posting/{locationId}/csv/{csvId}/post/{postId} — Eliminar CSV Post
- GET /social-media-posting/oauth/{platform}/start — Start OAuth Flow (Step 1 of 3)
- GET /social-media-posting/oauth/{locationId}/{platform}/accounts/{accountId} — Obtener Available Accounts (Step 2 of 3)
- POST /social-media-posting/oauth/{locationId}/{platform}/accounts/{accountId} — Connect Account (Step 3 of 3)
- GET /social-media-posting/{locationId}/categories — Obtener categories by location id
- GET /social-media-posting/{locationId}/categories/{id} — Obtener categories by id
- GET /social-media-posting/{locationId}/tags — Obtener tags by location id
- POST /social-media-posting/{locationId}/tags/details — Obtener tags by ids
- POST /social-media-posting/statistics — Obtener Social Media Statistics
- GET /social-media-posting/category/queues/available-categories — Obtener todos los categories with their queue status
- POST /social-media-posting/category/queues — Crear a new category queue
- POST /social-media-posting/category/queues/list — Fetch category queues for a location
- GET /social-media-posting/category/queues/{queueId} — Fetch a category queue by Id
- PUT /social-media-posting/category/queues/{queueId} — Actualizar queue settings or status
- POST /social-media-posting/category/queues/{queueId}/items — Fetch items from a queue
- POST /social-media-posting/category/queues/{queueId}/edit/start — Start or resume an edit session
- POST /social-media-posting/category/queues/{queueId}/edit/save — Save edit session changes
- POST /social-media-posting/category/queues/{queueId}/edit/discard — Discard edit session changes
- POST /social-media-posting/category/queues/{queueId}/edit/calendar — Fetch calendar view for an edit session
- POST /social-media-posting/category/queues/{queueId}/slots — Fetch slot information for queue items
- DELETE /social-media-posting/category/queues/{queueId}/items/{itemId} — Eliminar an item from a queue
- PUT /social-media-posting/category/queues/{queueId}/items/{itemId} — Actualizar an item in a queue
- POST /social-media-posting/category/queues/list/calendar — Obtener scheduled posts calendar view
- DELETE /social-media-posting/category/queues/{postId}/active-post — Eliminar an active post and schedule the next one
- PUT /social-media-posting/category/queues/{queueId}/items/{itemId}/reset — Reset an item in a queue
- POST /social-media-posting/category/queues/{queueId}/items/{itemId}/clone — Clone a queue item
- POST /social-media-posting/category/queues/{queueId}/create/item — Crear a new item in the queue
- POST /social-media-posting/comments/{platform} — Crear a comment or reply
- POST /social-media-posting/comments/{platform}/{id}/like — Like a comment
- DELETE /social-media-posting/comments/{platform}/{id}/like — Unlike a comment
- POST /social-media-posting/comments/{platform}/list — Listar comments for a post or thread
POST /social-media-posting/{locationId}/posts/list
Obtener publicaciones Get Posts
Scopes requeridos: socialplanner/post.readonly
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — Id de sede
Cuerpo de la peticion (application/json):
- type — string — type must be one of the following values: recent, all, scheduled, draft, failed, in_review, published, in_progress, pending and deleted
- accounts — string — List of account Ids separated by comma as a string
- skip (requerido) — string — Number of records to skip for pagination
- limit (requerido) — string — Maximum number of records to return
- fromDate (requerido) — string — From Date
- toDate (requerido) — string — To Date
- includeUsers (requerido) — string — Include User Data
- postType — object — Post Type must be one of the following values: - post, story, reel
Respuestas:
- 201 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/{locationId}/posts
Crear publicacion Create posts for all supported platforms. It is possible to create customized posts per channel by using the same platform account IDs in a request and hitting the create post API multiple times with different summaries and account IDs per platform.
The content and media limitations, as well as platform rate limiters corresponding to the respective platforms, are provided in the following reference link:
Link: Platform Limitations
Scopes requeridos: socialplanner/post.write
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — Id de sede
Cuerpo de la peticion (application/json):
- accountIds (requerido) — array — Account IDs for the post. Each account Id identifies a connected social media account.
Get IDs from: Get Accounts API — use the id field from each account.
Validations:
- Required for non-draft posts
- Must be a non-empty array
- All account IDs must be valid connected accounts for the location
- summary — string — Post content/caption text. Character limits vary by platform.
Custom Values & Hashtags:
- You can include custom values/variables in the content (e.g., {{contact.name}})
- Hashtags: Use #hashtag format. Instagram allows max 30 hashtags.
- Mentions: Use platform-specific mention format (see mentions field for structured mentions)
Validations: - Instagram/Facebook Story: Caption NOT supported for direct publishing - Facebook, LinkedIn, GMB: Content OR media is required (at least one) - Content is automatically trimmed to platform limits
Reference: Platform Limitations Guide
- media — array — Post Media Data
The limitations of media as per the platforms is provided through the reference link in API description
- url (requerido) — string — Public URL of the media file. Must be a valid, accessible HTTPS URL.
- caption — string — Alt text or caption for the media. Used for accessibility and SEO.
- originalUrl — string — Original media URL before any processing (watermarking/optimization). Set automatically by the system.
- watermarkedUrl — string — URL of the media after watermarking. Set automatically when watermark is applied.
- type (requerido) — string — MIME type of the media file. See Platform Limitations Guide for platform-specific format support.
- thumbnail — string — Cover image URL for a video media item.
Scope
- Applies to the first video in media[]. Values supplied on subsequent video items are ignored.
- Has no effect on image-only media items.
Response behavior
- After the post is published, the resolved cover image is surfaced on the post-level thumbnail field of the response and is no longer echoed back inside media[]. This represents the post's primary cover image and the cover used for the first video.
Limitations - Per-item thumbnails for multi-video posts are not supported. Each destination network exposes a single cover image per post for the leading video; this matches the behavior of the underlying social platform APIs.
Format
- Provide a publicly accessible JPEG or PNG URL. Animated formats and video URLs are not accepted.
- Recommended: an image matching the orientation of your video and ≤ 2 MB.
- id — string — Unique identifier for the media item. Used for tracking and referencing.
- optimizedUrl — string — URL of the optimized/compressed media. Set automatically when media optimization is enabled.
Enable Optimization: Set mediaOptimization: true in the post request.
- optimizedType — string — MIME type of the optimized media. May differ from original if format conversion occurred.
- isModified — boolean — Flag indicating if the media was modified (watermarked, optimized, or processed).
- altText — string — Alt text for accessibility. Supported on Instagram, Threads, Pinterest, Bluesky, and LinkedIn image posts (ignored for video and other platforms). Auto-truncated per platform: Pinterest 500, Instagram/Threads 1000, Bluesky 2000, LinkedIn 4086 chars.
- status — string — Post status indicating the current state of the post.
Available Status Values:
- draft - Post saved as draft, not yet ready for publishing
- scheduled - Post scheduled for future publishing (requires scheduleDate)
- in_review - Post pending approval (requires scheduleDate and postApprovalDetails)
- published - Post has been published
- in_progress - Post is currently being processed
- pending - Post is awaiting platform processing for Instagram media container creation
- failed - Post publishing failed
- notification_sent - Story notification sent (for manual story posting)
- deleted - Post has been deleted
Validations:
- scheduled or in_review status requires scheduleDate to be set
- Draft posts skip most validations (accountIds, media requirements)
- scheduleDate — string — Schedule Date
- selectedBestTime — string — Selected Best Time slot for scheduling
- createdBy — string — User Id of the creator who is creating/managing the post. Must be a valid MongoDB ObjectId.
Get User IDs from: Get User API — use the id field from the user object.
Validation: Must be a valid MongoDB ObjectId.
- followUpComment — string — Follow-up comment to be posted immediately after the main post is published.
Supported Platforms: Facebook, Instagram, LinkedIn, YouTube
NOT Supported: TikTok, Google My Business (GMB), Pinterest
Use Case: Great for adding hashtags, additional context, or engagement prompts without cluttering the main post.
- Follow-up comment is automatically trimmed to platform limits
Reference: Platform Limitations Guide
- ogTagsDetails — — Og Tags Meta Data
- type (requerido) — string — Type of post to create. Determines the format and platform requirements.
Available Types:
- post - Standard feed post (all platforms)
- story - Temporary 24-hour story (Instagram, Facebook)
- reel - Short-form video content (Instagram, Facebook, TikTok, YouTube)
Customize Per Platform:
You can specify different content/types per platform using facebookPostDetails.type, instagramPostDetails.type, etc.
Validations:
- Reels require exactly 1 video
- Stories: Caption not supported for Instagram/Facebook
- Facebook Groups do not support Reels
- postApprovalDetails — — Post Approval Details
- scheduleTimeUpdated — boolean — Flag indicating if the schedule datetime was manually updated. Used for tracking rescheduled posts.
- tags — array — Array of Tag IDs to associate with the post for organization and filtering.
Get Tag IDs from: Get Tags API — use the _id field from each tag.
Validation: All IDs must be valid MongoDB ObjectIds.
- categoryId — string — Category Id to organize the post. Categories help group related posts.
Get Category IDs from: Get Categories API — use the _id field.
Validation: Must be a valid MongoDB ObjectId.
- applyWatermark — boolean — Apply watermark to media in this post.
Note: Watermarks are applied to images only. Videos are not watermarked.
- tiktokPostDetails — — Tiktok Post Details
- gmbPostDetails — — GMB Post Details
- userId (requerido) — string — User Id of the user creating/managing the post. Required for OAuth channel posts (non-draft).
- linkedinPostDetails — — LinkedIn-specific post configuration.
Key Fields:
- postAsPdf: Set to true to post images as a PDF carousel document
- pdfTitle: Title for the PDF document (max 100 characters)
Limits: - Max 9 images/videos for regular posts - Max 300 pages for PDF carousel - Max PDF size: 100 MB
Reference: Platform Limitations Guide
- pinterestPostDetails — — Pinterest-specific post configuration. Required when posting to Pinterest accounts.
Required Fields:
- boardIds: Object mapping account OAuth IDs to Pinterest board IDs
Optional Fields:
- title: Pin title (max 100 characters)
- link: Destination URL for the pin (max 2048 characters)
Get Board IDs: Use the Pinterest boards API or retrieve from connected account details.
Limits: - Max 1 image/video per pin - Caption max 800 characters
Reference: Platform Limitations Guide
- facebookPostDetails — — Facebook-specific post configuration.
Key Fields:
- type: Post type (post, story, reel)
Restrictions: - Facebook Groups do NOT support Reels - Reels require exactly 1 video - Stories do not support captions
Reference: Platform Limitations Guide
- instagramPostDetails — — Instagram-specific post configuration.
Key Fields:
- type: Post type (post, story, reel)
- collaborators: Map of account IDs to Instagram usernames for collaboration invites (max 3 per account)
- showOnFeed: Show reel on profile feed (for reels)
Collaborators Structure:
{ "accountId": ["username1", "username2"] }
Where accountId is from Get Accounts API and usernames are Instagram handles without @.
Restrictions: - Media is REQUIRED for all Instagram posts - Max 30 hashtags allowed in caption - Stories do not support captions - Collaborators: Posts/Reels only (NOT Stories) - Reels require exactly 1 video
Reference: Platform Limitations Guide
- youtubePostDetails — — YouTube-specific post configuration.
Key Fields:
- title: Video title (max 100 characters)
- type: Video type (video for regular videos, short for YouTube Shorts)
- privacyLevel: Video visibility (private, public, unlisted)
Limits: - Max 1 video per post - Caption (description) max 5,000 characters
Requirements:
- Video is REQUIRED for YouTube posts
- type field is required
Respuestas:
- 201 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
GET /social-media-posting/{locationId}/posts/{id}
Obtener publicacion
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — Id de sede
- id (path, string) (requerido) — Id de publicacion
Respuestas:
- 200 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
PUT /social-media-posting/{locationId}/posts/{id}
Edit post Create posts for all supported platforms. It is possible to create customized posts per channel by using the same platform account IDs in a request and hitting the create post API multiple times with different summaries and account IDs per platform.
The content and media limitations, as well as platform rate limiters corresponding to the respective platforms, are provided in the following reference link:
Link: Platform Limitations
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — Id de sede
- id (path, string) (requerido) — Id de publicacion
Cuerpo de la peticion (application/json):
- accountIds (requerido) — array — Account IDs for the post. Each account Id identifies a connected social media account.
Get IDs from: Get Accounts API — use the id field from each account.
Validations:
- Required for non-draft posts
- Must be a non-empty array
- All account IDs must be valid connected accounts for the location
- summary — string — Post content/caption text. Character limits vary by platform.
Custom Values & Hashtags:
- You can include custom values/variables in the content (e.g., {{contact.name}})
- Hashtags: Use #hashtag format. Instagram allows max 30 hashtags.
- Mentions: Use platform-specific mention format (see mentions field for structured mentions)
Validations: - Instagram/Facebook Story: Caption NOT supported for direct publishing - Facebook, LinkedIn, GMB: Content OR media is required (at least one) - Content is automatically trimmed to platform limits
Reference: Platform Limitations Guide
- media — array — Post Media Data
The limitations of media as per the platforms is provided through the reference link in API description
- url (requerido) — string — Public URL of the media file. Must be a valid, accessible HTTPS URL.
- caption — string — Alt text or caption for the media. Used for accessibility and SEO.
- originalUrl — string — Original media URL before any processing (watermarking/optimization). Set automatically by the system.
- watermarkedUrl — string — URL of the media after watermarking. Set automatically when watermark is applied.
- type (requerido) — string — MIME type of the media file. See Platform Limitations Guide for platform-specific format support.
- thumbnail — string — Cover image URL for a video media item.
Scope
- Applies to the first video in media[]. Values supplied on subsequent video items are ignored.
- Has no effect on image-only media items.
Response behavior
- After the post is published, the resolved cover image is surfaced on the post-level thumbnail field of the response and is no longer echoed back inside media[]. This represents the post's primary cover image and the cover used for the first video.
Limitations - Per-item thumbnails for multi-video posts are not supported. Each destination network exposes a single cover image per post for the leading video; this matches the behavior of the underlying social platform APIs.
Format
- Provide a publicly accessible JPEG or PNG URL. Animated formats and video URLs are not accepted.
- Recommended: an image matching the orientation of your video and ≤ 2 MB.
- id — string — Unique identifier for the media item. Used for tracking and referencing.
- optimizedUrl — string — URL of the optimized/compressed media. Set automatically when media optimization is enabled.
Enable Optimization: Set mediaOptimization: true in the post request.
- optimizedType — string — MIME type of the optimized media. May differ from original if format conversion occurred.
- isModified — boolean — Flag indicating if the media was modified (watermarked, optimized, or processed).
- altText — string — Alt text for accessibility. Supported on Instagram, Threads, Pinterest, Bluesky, and LinkedIn image posts (ignored for video and other platforms). Auto-truncated per platform: Pinterest 500, Instagram/Threads 1000, Bluesky 2000, LinkedIn 4086 chars.
- status — string — Post status indicating the current state of the post.
Available Status Values:
- draft - Post saved as draft, not yet ready for publishing
- scheduled - Post scheduled for future publishing (requires scheduleDate)
- in_review - Post pending approval (requires scheduleDate and postApprovalDetails)
- published - Post has been published
- in_progress - Post is currently being processed
- pending - Post is awaiting platform processing for Instagram media container creation
- failed - Post publishing failed
- notification_sent - Story notification sent (for manual story posting)
- deleted - Post has been deleted
Validations:
- scheduled or in_review status requires scheduleDate to be set
- Draft posts skip most validations (accountIds, media requirements)
- scheduleDate — string — Schedule Date
- selectedBestTime — string — Selected Best Time slot for scheduling
- createdBy — string — User Id of the creator who is creating/managing the post. Must be a valid MongoDB ObjectId.
Get User IDs from: Get User API — use the id field from the user object.
Validation: Must be a valid MongoDB ObjectId.
- followUpComment — string — Follow-up comment to be posted immediately after the main post is published.
Supported Platforms: Facebook, Instagram, LinkedIn, YouTube
NOT Supported: TikTok, Google My Business (GMB), Pinterest
Use Case: Great for adding hashtags, additional context, or engagement prompts without cluttering the main post.
- Follow-up comment is automatically trimmed to platform limits
Reference: Platform Limitations Guide
- ogTagsDetails — — Og Tags Meta Data
- type (requerido) — string — Type of post to create. Determines the format and platform requirements.
Available Types:
- post - Standard feed post (all platforms)
- story - Temporary 24-hour story (Instagram, Facebook)
- reel - Short-form video content (Instagram, Facebook, TikTok, YouTube)
Customize Per Platform:
You can specify different content/types per platform using facebookPostDetails.type, instagramPostDetails.type, etc.
Validations:
- Reels require exactly 1 video
- Stories: Caption not supported for Instagram/Facebook
- Facebook Groups do not support Reels
- postApprovalDetails — — Post Approval Details
- scheduleTimeUpdated — boolean — Flag indicating if the schedule datetime was manually updated. Used for tracking rescheduled posts.
- tags — array — Array of Tag IDs to associate with the post for organization and filtering.
Get Tag IDs from: Get Tags API — use the _id field from each tag.
Validation: All IDs must be valid MongoDB ObjectIds.
- categoryId — string — Category Id to organize the post. Categories help group related posts.
Get Category IDs from: Get Categories API — use the _id field.
Validation: Must be a valid MongoDB ObjectId.
- applyWatermark — boolean — Apply watermark to media in this post.
Note: Watermarks are applied to images only. Videos are not watermarked.
- tiktokPostDetails — — Tiktok Post Details
- gmbPostDetails — — GMB Post Details
- userId (requerido) — string — User Id of the user creating/managing the post. Required for OAuth channel posts (non-draft).
- linkedinPostDetails — — LinkedIn-specific post configuration.
Key Fields:
- postAsPdf: Set to true to post images as a PDF carousel document
- pdfTitle: Title for the PDF document (max 100 characters)
Limits: - Max 9 images/videos for regular posts - Max 300 pages for PDF carousel - Max PDF size: 100 MB
Reference: Platform Limitations Guide
- pinterestPostDetails — — Pinterest-specific post configuration. Required when posting to Pinterest accounts.
Required Fields:
- boardIds: Object mapping account OAuth IDs to Pinterest board IDs
Optional Fields:
- title: Pin title (max 100 characters)
- link: Destination URL for the pin (max 2048 characters)
Get Board IDs: Use the Pinterest boards API or retrieve from connected account details.
Limits: - Max 1 image/video per pin - Caption max 800 characters
Reference: Platform Limitations Guide
- facebookPostDetails — — Facebook-specific post configuration.
Key Fields:
- type: Post type (post, story, reel)
Restrictions: - Facebook Groups do NOT support Reels - Reels require exactly 1 video - Stories do not support captions
Reference: Platform Limitations Guide
- instagramPostDetails — — Instagram-specific post configuration.
Key Fields:
- type: Post type (post, story, reel)
- collaborators: Map of account IDs to Instagram usernames for collaboration invites (max 3 per account)
- showOnFeed: Show reel on profile feed (for reels)
Collaborators Structure:
{ "accountId": ["username1", "username2"] }
Where accountId is from Get Accounts API and usernames are Instagram handles without @.
Restrictions: - Media is REQUIRED for all Instagram posts - Max 30 hashtags allowed in caption - Stories do not support captions - Collaborators: Posts/Reels only (NOT Stories) - Reels require exactly 1 video
Reference: Platform Limitations Guide
- youtubePostDetails — — YouTube-specific post configuration.
Key Fields:
- title: Video title (max 100 characters)
- type: Video type (video for regular videos, short for YouTube Shorts)
- privacyLevel: Video visibility (private, public, unlisted)
Limits: - Max 1 video per post - Caption (description) max 5,000 characters
Requirements:
- Video is REQUIRED for YouTube posts
- type field is required
Respuestas:
- 200 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
DELETE /social-media-posting/{locationId}/posts/{id}
Eliminar publicacion
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — Id de sede
- id (path, string) (requerido) — Id de publicacion
Respuestas:
- 200 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/{locationId}/posts/bulk-delete
Bulk Delete Social Planner Posts Deletes multiple posts based on the provided list of post IDs. This operation is useful for clearing up large numbers of posts efficiently.
Note:
1.The maximum number of posts that can be deleted in a single request is '50'.
2.However, It will only get deleted in CRM database but still it is recommended to be cautious of this operation.
Parametros:
- Versión (header, string) (requerido) — Versión de la API
Cuerpo de la peticion (application/json):
- postIds — array — Requested Results
Respuestas:
- 201 — Posts deleted successfully
- 400 — Cannot delete more than 50 posts at a time.
- 401 — No autorizado
- 404 — No posts found with the given IDs.
- 422 — Entidad no procesable
- 500 — An error occurred while trying to delete the posts. Please try again later.
GET /social-media-posting/{locationId}/accounts
Obtener cuentas Get list of accounts and groups
Scopes requeridos: socialplanner/account.readonly
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — Id de sede
Respuestas:
- 200 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
DELETE /social-media-posting/{locationId}/accounts/{id}
Eliminar cuenta Delete account and account from group
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — Id de sede
- id (path, string) (requerido) — Id
- companyId (query, string) — Id de empresa
- userId (query, string) — Id de usuario
Respuestas:
- 200 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/{locationId}/csv
Upload CSV Upload a CSV file containing social media posts for bulk scheduling
Scopes requeridos: socialplanner/csv.write
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — Id de sede
Cuerpo de la peticion (multipart/form-data):
- file (requerido) — string — CSV file to upload containing social media posts
Respuestas:
- 201 — Respuesta exitosa
- 400 — Bad Request - File is required or CSV validation error
- 401 — No autorizado
- 422 — Entidad no procesable
GET /social-media-posting/{locationId}/csv
Obtener Upload Status Get the status of all CSV imports for a location
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — Id de sede
- skip (query, string) — Número de registros a omitir
- limit (query, string) — Maximum number of records to return
- includeUsers (query, string) — Include user data in response
- isFromTemplate (query, string) — Filter CSVs imported from template library
- userId (query, string) (requerido) — Id de usuario
Respuestas:
- 200 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/{locationId}/set-accounts
Set Accounts Set social media accounts for a CSV import to publish posts to
Scopes requeridos: socialplanner/csv.write
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — Id de sede
Cuerpo de la peticion (application/json):
- accountIds (requerido) — array — Account Ids
- filePath (requerido) — string — File path
- rowsCount (requerido) — number — Entries Count. rowsCount must be between 1 and number of posts in CSV
- fileName (requerido) — string — Name of file
- approver — string — Approver User Id
- userId (requerido) — string — User Id
- csvFileType — string — CSV file type - determines the format of the CSV file being imported
Respuestas:
- 201 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Validation error
GET /social-media-posting/{locationId}/csv/{id}
Obtener CSV Post Get details of a specific CSV import including its posts
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — Id de sede
- id (path, string) (requerido) — Id de CSV
- skip (query, string) — Número de registros a omitir
- limit (query, string) — Maximum number of records to return
Respuestas:
- 200 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
PATCH /social-media-posting/{locationId}/csv/{id}
Start CSV Finalize Finalize a CSV import and schedule all posts for publishing
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — Id de sede
- id (path, string) (requerido) — Id de CSV
Cuerpo de la peticion (application/json):
- userId (requerido) — string — User Id
Respuestas:
- 200 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
DELETE /social-media-posting/{locationId}/csv/{id}
Eliminar CSV Delete a CSV import and all its associated posts
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — Id de sede
- id (path, string) (requerido) — Id de CSV
Respuestas:
- 200 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
DELETE /social-media-posting/{locationId}/csv/{csvId}/post/{postId}
Eliminar CSV Post Delete a specific post from a CSV import
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — Id de sede
- postId (path, string) (requerido) — Id de CSV Post
- csvId (path, string) (requerido) — Id de CSV
Respuestas:
- 200 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
GET /social-media-posting/oauth/{platform}/start
Start OAuth Flow (Step 1 of 3)
OAuth Connection Flow - Step 1: Initiate OAuth
This is the first step in the 3-step OAuth flow to connect a social media account:
- Start OAuth (this endpoint) → User authenticates with the platform
- Get Accounts → Retrieve available pages/channels to connect
- Attach Account → Connect the selected account to your location
How to Use
Open this API in a browser window (not via cURL) with the required query parameters. The user will be redirected to the platform's OAuth login screen.
Receiving the OAuth Response
After successful authentication, the OAuth window will post a message back to your application. Listen for this message to get the accountId needed for the next step.
window.addEventListener('message', function(e) {
if (e.data && e.data.page === 'social_media_posting') {
const { actionType, page, platform, placement, accountId, reconnectAccounts } = e.data;
// Use accountId for Step 2: GET /oauth/{locationId}/{platform}/accounts/{accountId}
}
}, false);
Event Data Response
| Field | Type | Example | Description |
|---|---|---|---|
| actionType | string | "close" | The action type |
| page | string | "social-media-posting" | Source page identifier |
| platform | string | "facebook" | The OAuth platform |
| placement | string | "placement" | Placement context |
| accountId | string | "658a9b6833b91e0ecb8f3958" | Use this for Step 2 |
| reconnectAccounts | string[] | ["658a9b...", "efd2da..."] | Accounts that need reconnection |
Next Step
Use the accountId from the response to call:
GET /social-media-posting/oauth/{locationId}/{platform}/accounts/{accountId}
Platform Notes
- bluesky: Currently not supported, will return an error
- tiktok-business: Uses a separate business OAuth flow
Parametros:
- Authorization (header, string) (requerido) — Token de acceso
- Versión (header, string) (requerido) — Versión de la API
- platform (path, string) (requerido) — Social media platform to connect. Each platform has specific account types:
- google: Google Business Profile locations
- facebook: Facebook Pages
- instagram: Instagram Professional Accounts (Business/Creator)
- linkedin: LinkedIn Pages and Profiles
- tiktok: TikTok Creator Accounts
- tiktok-business: TikTok Business Center Accounts
- youtube: YouTube Channels
- pinterest: Pinterest Business Accounts
- threads: Threads Profiles
- bluesky: Bluesky Accounts (currently not supported)
- locationId (query, string) (requerido) — Id de sede
- userId (query, string) (requerido) — Id de usuario
- page (query, string) — Page
- reconnect (query, string) — Reconnect
Respuestas:
- 200 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
GET /social-media-posting/oauth/{locationId}/{platform}/accounts/{accountId}
Obtener Available Accounts (Step 2 of 3)
OAuth Connection Flow - Step 2: Get Available Accounts
After completing OAuth authentication (Step 1), use this endpoint to retrieve the list of available pages, channels, or locations that can be connected.
OAuth Flow Position
- Start OAuth → User authenticates, returns
accountId - Get Accounts (this endpoint) → Lists available pages/channels to connect
- Attach Account → Connect the selected account
What This Returns
The response varies by platform:
| Platform | Returns |
|---|---|
| List of Facebook Pages the user manages | |
| List of Instagram Professional Accounts (linked to Facebook Pages) | |
| Google Business Profile locations | |
| LinkedIn Pages and Profile | |
| tiktok | TikTok Creator account info |
| tiktok-business | TikTok Business Center accounts |
| youtube | YouTube Channels |
| Pinterest Business accounts and boards | |
| threads | Threads profiles |
Next Step
From the response, select the account/page you want to connect and use its details in Step 3:
POST /social-media-posting/oauth/{locationId}/{platform}/accounts/{accountId}
Parametros:
- Authorization (header, string) (requerido) — Token de acceso
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — Id de Account Location
- platform (path, string) (requerido) — Social media platform
- accountId (path, string) (requerido) — The OAuth Account Id received from Step 1 (Start OAuth) via the window message event
- search (query, string) — Search term to filter accounts/pages by name. Useful when the user has many pages to choose from.
Respuestas:
- 200 — Returns available accounts/pages/channels that can be connected. Response structure varies by platform - see examples below.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/oauth/{locationId}/{platform}/accounts/{accountId}
Connect Account (Step 3 of 3)
OAuth Connection Flow - Step 3: Connect the Account
This is the final step in the OAuth flow. After retrieving available accounts (Step 2), use this endpoint to connect the selected account to your location.
OAuth Flow Summary
- Start OAuth → User authenticates with platform
- Get Accounts → Retrieved available pages/channels
- Attach Account (this endpoint) → Connect the selected account
Request Body by Platform
The request body structure varies depending on the platform:
Facebook / Instagram
{
"type": "page",
"originId": "244405XXXXX11687",
"name": "My Facebook Page",
"avatar": "https://..." // optional
}
Google Business Profile
{
"location": {
"name": "locations/12345",
"title": "My Business Location",
"storeCode": "STORE123",
"isVerified": "ChIJsZQpj1qbXjkRQNDUG4UUx6k"
},
"account": {
"name": "accounts/12345",
"accountName": "My Business Account",
"type": "LOCATION_GROUP",
"verificationState": "VERIFIED",
"vettedState": "VETTED"
}
}
{
"type": "page",
"originId": "urn:li:organization:12345",
"name": "My LinkedIn Page",
"avatar": "https://..." // optional
}
TikTok
{
"originId": "7234567890123456789",
"name": "My TikTok Account",
"avatar": "https://..." // optional
}
YouTube
{
"originId": "UCxxxxxxxxxxxxxxxx",
"name": "My YouTube Channel",
"avatar": "https://..." // optional
}
{
"originId": "123456789",
"name": "My Pinterest Account",
"avatar": "https://..." // optional
}
After Connection
Once connected, the account will appear in your location's connected accounts and can be used for social media posting.
Parametros:
- Authorization (header, string) (requerido) — Token de acceso
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — The Location Id where you want to connect this social account
- platform (path, string) (requerido) — Social media platform (must match the platform used in Steps 1 and 2)
- accountId (path, string) (requerido) — The OAuth Account Id received from Step 1 (same as used in Step 2)
Cuerpo de la peticion (application/json): - (ver esquema en la fuente original)
Respuestas:
- 201 — Successful response - Account attached. Response structure varies by platform.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
GET /social-media-posting/{locationId}/categories
Obtener categories by location id Retrieve all categories for a specific location with optional search and pagination
Scopes requeridos: socialplanner/category.readonly
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — Id de sede
- searchText (query, string) — Search text string
- limit (query, string) — Limit
- skip (query, string) — Skip
Respuestas:
- 200 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
GET /social-media-posting/{locationId}/categories/{id}
Obtener categories by id Retrieve a specific category by its Id
Parametros:
- Authorization (header, string) (requerido) — Token de acceso
- Versión (header, string) (requerido) — Versión de la API
- id (path, string) (requerido) — Id de Category
- locationId (path, string) (requerido) — Id de sede
Respuestas:
- 200 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
GET /social-media-posting/{locationId}/tags
Obtener tags by location id Retrieve all tags for a specific location with optional search and pagination
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — Id de sede
- searchText (query, string) — Search text string
- limit (query, string) — Limit
- skip (query, string) — Skip
Respuestas:
- 200 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/{locationId}/tags/details
Obtener tags by ids Retrieve specific tags by their IDs
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (path, string) (requerido) — Id de sede
Cuerpo de la peticion (application/json):
- tagIds (requerido) — array — Array of Tag Ids
Respuestas:
- 201 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/statistics
Obtener Social Media Statistics Retrieve analytics data for multiple social media accounts. Supports custom date ranges for both the current period and a comparison period. If no date ranges are provided, defaults to the last 7 days (excluding today) with comparison to the previous 7 days.
Scopes requeridos: socialplanner/statistics.readonly
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (query, string) (requerido) — Id de sede
Cuerpo de la peticion (application/json):
- profileIds (requerido) — array — Array of connected social media account IDs to fetch analytics for. This can be found as 'profileId' in /accounts api.
- platforms — array — Array of social media platforms to filter analytics by. If not provided, all platforms will be included. NOTE: Linkedin (PAGE only) and Tiktok (BUSINESS only) are supported.
- currentRange — object — Custom date range for the current analytics period. If omitted, defaults to the last 7 days (excluding today) with automatic comparison to the previous 7 days.
- startDate (requerido) — string — Start date in ISO 8601 format.
- endDate (requerido) — string — End date in ISO 8601 format. Must be after startDate.
- prevRange — object — Comparison date range. Can only be provided when currentRange is also present. If omitted while currentRange is present, no comparison data is returned.
- startDate (requerido) — string — Start date in ISO 8601 format.
- endDate (requerido) — string — End date in ISO 8601 format. Must be after startDate.
Respuestas:
- 200 — Successfully retrieved analytics data
- 400 — Bad Request - Occurs when: more than 100 accounts are requested, invalid date formats are provided, startDate is after endDate, prevRange is provided without currentRange, or invalid platform values are specified.
- 401 — Unauthorized - Invalid or missing authentication credentials
- 422 — Unprocessable Entity - Invalid request body format
GET /social-media-posting/category/queues/available-categories
Obtener todos los categories with their queue status Returns categories with status: "available" (no queue), "in_queue" (active/paused queue), or "draft" (queue in draft).
Scopes requeridos: socialplanner/category.readonly
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- locationId (query, string) (requerido) — Id de sede
- skip (query, string) — Número de elementos a omitir
- limit (query, string) — Maximum number of items to return
- q (query, string) — Search query
Respuestas:
- 200 — Available categories fetched successfully.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/category/queues
Crear a new category queue Creates a queue in draft status for a category. Published posts are auto-added. Use update endpoint to activate.
Scopes requeridos: socialplanner/category.write
Parametros:
- Versión (header, string) (requerido) — Versión de la API
Cuerpo de la peticion (application/json):
- locationId (requerido) — string — Location Id
- categoryId (requerido) — string — Category Id
- timeSlots (requerido) — array
- dayOfWeek (requerido) — number — Day of the week (0-6)
- time (requerido) — string — Time in HH:mm format
- enableFuturePosts — boolean — Enable Future Posts. Defaults to false.
- prioritizeNewContent — boolean — Prioritize New Content. Defaults to false.
- userId (requerido) — string — User id
Respuestas:
- 201 — Queue created successfully.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/category/queues/list
Fetch category queues for a location Retrieves a paginated list of all category queues for a given location, excluding any that have been marked as deleted.
Scopes requeridos: socialplanner/category.readonly
Parametros:
- Versión (header, string) (requerido) — Versión de la API
Cuerpo de la peticion (application/json):
- locationId (requerido) — string — Location Id
- skip — number — Number of items to skip
- limit — number — Maximum number of items to return
Respuestas:
- 201 — Successfully retrieved category queues.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
GET /social-media-posting/category/queues/{queueId}
Fetch a category queue by Id Retrieves the details of a single category queue by its unique Id. The response includes a count of posts within the queue that have errors.
Scopes requeridos: socialplanner/category.readonly
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- queueId (path, string) (requerido) —
- locationId (query, string) (requerido) — Id de sede
Respuestas:
- 200 — Successfully retrieved the category queue.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
PUT /social-media-posting/category/queues/{queueId}
Actualizar queue settings or status Updates queue status (active/paused/deleted), time slots, or skip dates.
Scopes requeridos: socialplanner/category.write
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- queueId (path, string) (requerido) —
Cuerpo de la peticion (application/json):
- locationId (requerido) — string — Location Id
- skipLegacyWatermark — boolean — Skip legacy watermark cleanup when rescheduling posts
- status — object — Status of the Queue
- skipDateTime — string — Skip Date Time in ISO format
- timeSlots — array
- dayOfWeek (requerido) — number — Day of the week (0-6)
- time (requerido) — string — Time in HH:mm format
- enableFuturePosts — boolean — Enable posting future content. Automatically Queue any New Posts Created in this Category.
- prioritizeNewContent — boolean — Prioritize new content over older content. When true, new items added via directToQueue will be placed at the top of the queue.
Respuestas:
- 200 — Queue updated successfully.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/category/queues/{queueId}/items
Fetch items from a queue Returns paginated queue items. Pass sessionId to get draft items from an edit session instead of live items.
Scopes requeridos: socialplanner/category.readonly
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- queueId (path, string) (requerido) —
Cuerpo de la peticion (application/json):
- locationId (requerido) — string — Location Id
- sessionId — string — Edit session Id
- skip — number — Number of items to skip
- limit — number — Maximum number of items to return
- errorFilter — boolean — To return only queue items with errors
- itemId — string — Item Id to center the response around. When provided, the response will position this item in the center with items above and below based on limit. The skip parameter is ignored when itemId is provided.
Respuestas:
- 201 — Queue items fetched successfully.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/category/queues/{queueId}/edit/start
Start or resume an edit session Creates a draft copy of queue items for editing. Changes are staged until saved or discarded.
Scopes requeridos: socialplanner/category.write
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- queueId (path, string) (requerido) —
Cuerpo de la peticion (application/json):
- locationId (requerido) — string — Location Id
Respuestas:
- 201 — Edit session started successfully.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/category/queues/{queueId}/edit/save
Save edit session changes Applies all staged changes to the live queue and closes the edit session.
Scopes requeridos: socialplanner/category.write
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- queueId (path, string) (requerido) —
Cuerpo de la peticion (application/json):
- locationId (requerido) — string — Location Id
- sessionId (requerido) — string — Edit session Id
- keepInDraft — boolean — If true, keeps the queue in DRAFT state after saving instead of automatically activating it. Only applicable when the queue is currently in DRAFT status.
Respuestas:
- 200 — Edit session saved successfully.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/category/queues/{queueId}/edit/discard
Discard edit session changes Cancels the edit session and deletes all staged changes without affecting the live queue.
Scopes requeridos: socialplanner/category.write
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- queueId (path, string) (requerido) —
Cuerpo de la peticion (application/json):
- locationId (requerido) — string — Location Id
- sessionId (requerido) — string — Edit session Id
- keepInDraft — boolean — If true, keeps the queue in DRAFT state after saving instead of automatically activating it. Only applicable when the queue is currently in DRAFT status.
Respuestas:
- 200 — Edit session discarded successfully.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/category/queues/{queueId}/edit/calendar
Fetch calendar view for an edit session Retrieves a calendar preview of scheduled posts based on draft items within an edit session. This shows how posts would be scheduled if changes were saved.
Scopes requeridos: socialplanner/category.readonly
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- queueId (path, string) (requerido) —
Cuerpo de la peticion (application/json):
- locationId (requerido) — string — Location Id
- sessionId (requerido) — string — Edit session Id
- startDate (requerido) — string — Start Date in ISO format
- endDate (requerido) — string — End Date in ISO format
- accountIds — array — Filter by Account IDs. If not provided or empty, returns all posts.
Respuestas:
- 201 — Edit session calendar fetched successfully.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/category/queues/{queueId}/slots
Fetch slot information for queue items Returns paginated slot information (scheduledDateTime, isSkipped) for queue items. Pass sessionId to get slots for draft items, or omit for live items. Call this after mutations to refresh slot data.
Scopes requeridos: socialplanner/category.readonly
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- queueId (path, string) (requerido) —
Cuerpo de la peticion (application/json):
- locationId (requerido) — string — The location Id
- sessionId — string — Session Id for edit mode. If not provided, calculates slots for live items.
- skip — number — Number of items to skip
- limit — number — Number of items to return
Respuestas:
- 201 — Slots fetched successfully.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
DELETE /social-media-posting/category/queues/{queueId}/items/{itemId}
Eliminar an item from a queue Deletes an item from a specific category queue.
Scopes requeridos: socialplanner/category.write
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- queueId (path, string) (requerido) —
- itemId (path, string) (requerido) —
- locationId (query, string) (requerido) — Id de sede
- sessionId (query, string) — Id de Edit session
Respuestas:
- 200 — The queue item has been successfully deleted.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
PUT /social-media-posting/category/queues/{queueId}/items/{itemId}
Actualizar an item in a queue Updates the content or variations of a specific item within a category queue.
Scopes requeridos: socialplanner/category.write
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- queueId (path, string) (requerido) —
- itemId (path, string) (requerido) —
Cuerpo de la peticion (application/json):
- locationId (requerido) — string — Location Id
- sessionId — string — Edit session Id
- modifiedPostPayload — — Modifications to the original post
- newOrder — — New order value or position keyword (cyclic-aware). Accepts:
- A number: explicit order value calculated by FE as midpoint between adjacent items
- "top": place at cyclic top (first to be scheduled next)
- "bottom": place at cyclic bottom (last to be scheduled)
For positions between items, FE calculates: Math.floor((prevItem.order + nextItem.order) / 2)
- variations — array — Variations
- content — string — The text content of the variation.
- mentions — array — Platform-specific mentions within the content (e.g., @username references).
- ogTags — — Open Graph tags for link previews.
- primaryImage — string — Primary media URL (image)
Respuestas:
- 200 — The queue item has been successfully updated.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/category/queues/list/calendar
Obtener scheduled posts calendar view Returns scheduled posts from active queues within a date range. Supports filtering by categories and accounts.
Scopes requeridos: socialplanner/category.readonly
Parametros:
- Versión (header, string) (requerido) — Versión de la API
Cuerpo de la peticion (application/json):
- locationId (requerido) — string — Location Id
- startDate (requerido) — string — Start Date in ISO format
- endDate (requerido) — string — End Date in ISO format
- categoryIds — array — Category Id
- accountIds — array — Filter by Account IDs. If not provided or empty, returns all posts.
Respuestas:
- 201 — Calendar list fetched successfully.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
DELETE /social-media-posting/category/queues/{postId}/active-post
Eliminar an active post and schedule the next one Deletes a post that is currently scheduled and automatically triggers the scheduling of the next available post in the queue.
Scopes requeridos: socialplanner/category.write
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- postId (path, string) (requerido) —
- locationId (query, string) (requerido) — Id de sede
Respuestas:
- 200 — Successfully deleted the active post and scheduled the next one.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
PUT /social-media-posting/category/queues/{queueId}/items/{itemId}/reset
Reset an item in a queue Resets a specific queue item to its original state, discarding any modifications made.
Scopes requeridos: socialplanner/category.write
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- queueId (path, string) (requerido) —
- itemId (path, string) (requerido) —
Cuerpo de la peticion (application/json):
- locationId (requerido) — string — Location Id
- sessionId — string — Edit session Id
Respuestas:
- 200 — The queue item has been successfully reset.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/category/queues/{queueId}/items/{itemId}/clone
Clone a queue item Duplicates an existing queue item at a specified order position. Requires an active edit session.
Scopes requeridos: socialplanner/category.write
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- queueId (path, string) (requerido) —
- itemId (path, string) (requerido) —
Cuerpo de la peticion (application/json):
- locationId (requerido) — string — Location Id
- sessionId (requerido) — string — Edit session Id
- order (requerido) — number — Order for the cloned item (typically between source and next item)
Respuestas:
- 201 — Queue item cloned successfully.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/category/queues/{queueId}/create/item
Crear a new item in the queue Adds a new post item to a queue. Use sessionId for edit session or directToQueue for immediate addition.
Scopes requeridos: socialplanner/category.write
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- queueId (path, string) (requerido) —
Cuerpo de la peticion (application/json):
- locationId (requerido) — string — Location Id
- sessionId — string — Edit session Id
- modifiedPostPayload — — New post details
- order — — Order for the new item in the queue (cyclic-aware). Accepts:
- A number: explicit order value calculated by FE as midpoint between adjacent items
- "top": place at cyclic top (first to be scheduled next)
- "bottom": place at cyclic bottom (last to be scheduled)
For positions between items, FE calculates: Math.floor((prevItem.order + nextItem.order) / 2)
Defaults to end if not provided. Note: This field is ignored when directToQueue is true -
the order will be automatically calculated based on the queue's prioritizeNewContent setting.
- variations — array — Variations
- content — string — The text content of the variation.
- mentions — array — Platform-specific mentions within the content (e.g., @username references).
- ogTags — — Open Graph tags for link previews.
- primaryImage — string — Primary media URL (image) for the post. Falls back to modifiedPostPayload.primaryImage if not set.
- directToQueue — boolean — When true, creates the queue item directly without requiring an edit session, even for active/paused queues. The order field is ignored and the item position is determined by the queue's prioritizeNewContent setting: if true, the item is added to the top of the queue; if false, it is added to the bottom.
Respuestas:
- 201 — Queue item created successfully.
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/comments/{platform}
Crear a comment or reply
Create a top-level comment on a post (isParentThread: true, parentId = postId) or a reply to an existing comment (isParentThread: false, parentId = commentId). Per-platform content max length: Facebook 8000, Instagram 2200, Linkedin 3000, Community 8000, Tiktok 150, Bluesky 300, Youtube 10000, Threads 500.
Optional-field platform support:
- attachments — supported on Facebook only. Ignored on Instagram, LinkedIn, TikTok, Bluesky, Community (Community processes the field but external URLs are not rendered due to its bucket restriction).
- mentions — supported on Facebook, LinkedIn, and Community only. Ignored on Instagram, TikTok, Bluesky.
- notifyAllGroupMembers — supported on Community only. When true, all group members get a push/in-app notification (equivalent to an @everyone broadcast). Independent of the mentions array and of @everyone text in content. Default false.
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- platform (path, string) (requerido) — Supported Comments Platforms
- locationId (query, string) (requerido) — Id de sede
Cuerpo de la peticion (application/json):
- parentId (requerido) — string — For top-level comments (isParentThread: true): pass the post Id returned by the posts API. For replies (isParentThread: false): pass the parent comment Id returned by the list-comments API. In both cases this must be a valid 24-character Highlevel Id — not the native platform Id.
- isParentThread (requerido) — boolean — Set true to create a top-level comment on a post (parentId = post Id). Set false to create a reply to an existing comment (parentId = comment Id).
- content (requerido) — string — Content of the comment. Per-platform max length: Facebook 8000, Instagram 2200, Linkedin 3000, Community 8000, Tiktok 150, Bluesky 300, Youtube 10000, Threads 500.
- attachments — array — Attachments for the comment (max 1 image). Supported on: Facebook only. Not supported on: Instagram, LinkedIn, TikTok, Bluesky, Community — the field is accepted by the API but the attachment will not appear on the comment. (Community processes the field server-side, but external URLs are not rendered due to its bucket restriction.)
- url (requerido) — string — URL of the attachment
- type (requerido) — string — Type of the attachment
- mentions — array — Mentions for the comment. Supported on: Facebook, LinkedIn, Community. Ignored on: Instagram, TikTok, Bluesky — the field is accepted but mentions are not rendered on these platforms.
- name (requerido) — string — Mention name
- id (requerido) — string — Mention Id
- offset (requerido) — number — Mention offset
- length (requerido) — number — Mention length
- slug — string — Mention slug for community profile link
- notifyAllGroupMembers — boolean — When true, all members of the Community group receive a push/in-app notification about this comment — equivalent to an @everyone broadcast.
Supported on: Community only. Ignored on all other platforms (the field is accepted but no notification is sent).
Independent of the mentions array — you do not need to add an @everyone entry to mentions for this to take effect. Conversely, putting the literal text @everyone in content does not by itself trigger notifications; only this flag does.
Defaults to false (no broadcast notification). Use true only when the comment is genuinely intended for every member of the group — overuse may cause members to mute the group.
Respuestas:
- 201 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/comments/{platform}/{id}/like
Like a comment
Like a comment by its Highlevel comment Id (the _id returned by the list-comments endpoint — not the native platform Id).
Works for any comment level — top-level comments, replies, and replies-to-replies. Supported platforms: Facebook, LinkedIn, Community, TikTok, Bluesky. Instagram is not supported (passing instagram returns 400).
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- platform (path, string) (requerido) — Platform that supports liking / unliking comments (Instagram is not supported)
- id (path, string) (requerido) — Highlevel comment Id — the _id returned by the list-comments endpoint (POST /comments/{platform}/list). Not the native platform comment Id. Works for any comment level: top-level comments, replies, and replies-to-replies.
- locationId (query, string) (requerido) — Id de sede
Respuestas:
- 201 — Respuesta exitosa
- 400 — State conflict (already liked) or unsupported platform (Instagram)
- 401 — No autorizado
- 422 — Entidad no procesable
DELETE /social-media-posting/comments/{platform}/{id}/like
Unlike a comment
Remove a like from a comment by its Highlevel comment Id (the _id returned by the list-comments endpoint — not the native platform Id).
Works for any comment level — top-level comments, replies, and replies-to-replies. Supported platforms: Facebook, LinkedIn, Community, TikTok, Bluesky. Instagram is not supported (passing instagram returns 400).
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- platform (path, string) (requerido) — Platform that supports liking / unliking comments (Instagram is not supported)
- id (path, string) (requerido) — Highlevel comment Id — the _id returned by the list-comments endpoint (POST /comments/{platform}/list). Not the native platform comment Id. Works for any comment level: top-level comments, replies, and replies-to-replies.
- locationId (query, string) (requerido) — Id de sede
Respuestas:
- 200 — Respuesta exitosa
- 400 — State conflict (not currently liked) or unsupported platform (Instagram)
- 401 — No autorizado
- 422 — Entidad no procesable
POST /social-media-posting/comments/{platform}/list
Listar comments for a post or thread
Paginated list of comments scoped to a post (parentId = postId) or a comment thread (parentId = commentId). Use skip/limit for pagination, sortBy for ordering, originIds to filter by connected account, and search for keyword search.
Parametros:
- Versión (header, string) (requerido) — Versión de la API
- platform (path, string) (requerido) — Supported Comments Platforms
- locationId (query, string) (requerido) — Id de sede
Cuerpo de la peticion (application/json):
- fromDate — string — Start of the published-date window (ISO 8601). If provided, toDate is also required, and fromDate must be ≤ toDate. Omit both to disable date filtering.
- toDate — string — End of the published-date window (ISO 8601). If provided, fromDate is also required.
- originIds (requerido) — array — Origin IDs of connected accounts to filter by
- sortBy — string — Sort by top comments or latest comments
- search — string — Search
- skip — number — Pagination offset — number of comments to skip (zero-based). Must be ≥ 0.
- limit — number — Pagination page size — number of comments to return. Must be between 1 and 100.
- parentId — string — Parent Id — pass the Highlevel post Id (for replies under a specific post) or the Highlevel comment Id (for replies under a specific comment). Omit to list all top-level comments for the location filtered by originIds. Must be a valid 24-character Highlevel Id, not the native platform Id.
Respuestas:
- 201 — Respuesta exitosa
- 400 — Peticion invalida
- 401 — No autorizado
- 422 — Entidad no procesable
