Update Social Post
curl --request PATCH \
--url https://api.example.com/social/post/{post_id}import requests
url = "https://api.example.com/social/post/{post_id}"
response = requests.patch(url)
print(response.text)const options = {method: 'PATCH'};
fetch('https://api.example.com/social/post/{post_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/social/post/{post_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/social/post/{post_id}"
req, _ := http.NewRequest("PATCH", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.example.com/social/post/{post_id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/social/post/{post_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
response = http.request(request)
puts response.read_bodySocial
Update Social Post
Update supported fields on a social post.
PATCH
/
social
/
post
/
{post_id}
Update Social Post
curl --request PATCH \
--url https://api.example.com/social/post/{post_id}import requests
url = "https://api.example.com/social/post/{post_id}"
response = requests.patch(url)
print(response.text)const options = {method: 'PATCH'};
fetch('https://api.example.com/social/post/{post_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/social/post/{post_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/social/post/{post_id}"
req, _ := http.NewRequest("PATCH", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.example.com/social/post/{post_id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/social/post/{post_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
response = http.request(request)
puts response.read_bodyUpdates the supported lifecycle, moderation, and platform-specific metadata fields on a social post.
Use the
post_id returned by POST /social/post.
This endpoint cannot change post text, attached media, or destination platforms after the post has been created. Create a new post when those need to change.
For posts with multiple destinations, schedule and approval updates are applied to every destination when social_connection_id is omitted. Moderation and platform-specific metadata fields require social_connection_id when the target destination cannot be inferred.
Platform Support
| Platform | Text / media edits | Reschedule | Approval | disable_comments | platform_options |
|---|---|---|---|---|---|
x | No | Scheduled posts only | Pending approval only | No | No |
linkedin | No | Scheduled posts only | Pending approval only | Yes | linkedin.disable_comments |
instagram | No | Scheduled posts only | Pending approval only | Yes | instagram.disable_comments |
facebook | No | Scheduled posts only | Pending approval only | No | No |
tiktok | No | Scheduled posts only | Pending approval only | No | No |
youtube | No | Scheduled posts only | Pending approval only | No | youtube |
platform_options supports comment moderation for Instagram and LinkedIn, plus metadata updates for YouTube. Other platform-specific update objects are not supported for existing posts.
Reschedule Request
curl -X PATCH "https://api.mosaic.so/social/post/[post_id]" \
-H "Authorization: Bearer mk_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"schedule_date": "2026-03-10T18:30:00Z"
}'
Approval Request
curl -X PATCH "https://api.mosaic.so/social/post/[post_id]" \
-H "Authorization: Bearer mk_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"approved": true
}'
approved is only for posts that were created with an approval requirement and are still waiting for approval.
Comment Settings Request
curl -X PATCH "https://api.mosaic.so/social/post/[post_id]" \
-H "Authorization: Bearer mk_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"social_connection_id": "7f9388af-26e8-4e68-a52b-6b9a0ef3a017",
"platform_options": {
"linkedin": {
"disable_comments": true
}
}
}'
disable_comments can be updated for Instagram and LinkedIn destinations. The top-level disable_comments field is also accepted for backward compatibility.
YouTube Metadata Request
curl -X PATCH "https://api.mosaic.so/social/post/[post_id]" \
-H "Authorization: Bearer mk_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"social_connection_id": "540273be-42e4-41ac-86ad-6d72ebf7d7af",
"platform_options": {
"youtube": {
"visibility": "public",
"title": "Motion launch recap",
"description": "A quick recap from launch week.",
"category_id": 24
}
}
}'
Body Parameters
| Field | Type | Required | Description |
|---|---|---|---|
schedule_date | string | No | New scheduled publish timestamp as an ISO string. Only valid before a queued scheduled post publishes. |
approved | boolean | No | Set to true to approve a post that is waiting for approval. |
disable_comments | boolean | No | Disable or re-enable comments for Instagram or LinkedIn destinations. Prefer the platform-scoped form for new integrations. |
platform_options | object | No | Platform-specific update options for supported existing-post updates. |
platform_options.instagram.disable_comments | boolean | No | Disable or re-enable comments for an Instagram destination. |
platform_options.linkedin.disable_comments | boolean | No | Disable or re-enable comments for a LinkedIn destination. |
platform_options.youtube.visibility | string | No | One of unlisted, private, or public. |
platform_options.youtube.title | string | No | Updated YouTube title. |
platform_options.youtube.description | string | No | Updated YouTube description. |
platform_options.youtube.category_id | number | No | Updated YouTube category ID. |
social_connection_id | string (uuid) | No | Update using one specific connected account. Useful when a post targets multiple accounts on the same platform. |
Response
{
"post_id": "2d8ca860-f8e0-4f3f-9f2c-337ead6ed91e",
"status": "scheduled",
"scheduled_at": "2026-03-10T18:30:00Z",
"updated_destinations": [
{
"social_connection_id": "7f9388af-26e8-4e68-a52b-6b9a0ef3a017",
"platform": "linkedin",
"status": "scheduled"
}
]
}
Behavior
schedule_datechanges Motion’s queued publish time for scheduled posts that have not published yet.approveddoes not create a new approval workflow. It only approves a post already waiting for approval.platform_options.instagram.disable_comments,platform_options.linkedin.disable_comments, and top-leveldisable_commentsall map to the same comment setting update.- Comment settings can be used on scheduled or published Instagram and LinkedIn posts. For queued scheduled posts, the setting is stored and applied when the post publishes. Existing platform behavior for previously created comments is platform-specific.
- Comment settings cannot target only one destination if the original post grouped multiple comment-configurable platforms under one publishing operation. Create separate posts when you need independent comment settings.
platform_options.youtubecan update supported YouTube metadata on YouTube posts.youtube_optionsis still accepted as a backward-compatible alias forplatform_options.youtube, but new integrations should useplatform_options.youtube.
Was this page helpful?