curl --request POST \
--url https://api.example.com/api/v1/content/inbox/{draft_id}/schedule \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"scheduled_at": "2023-11-07T05:31:56Z",
"local_datetime": "2023-11-07T05:31:56Z",
"timezone": "<string>",
"provider_account_id": "<string>",
"linkedin_account_id": "<string>",
"x_account_id": "<string>"
}
'import requests
url = "https://api.example.com/api/v1/content/inbox/{draft_id}/schedule"
payload = {
"scheduled_at": "2023-11-07T05:31:56Z",
"local_datetime": "2023-11-07T05:31:56Z",
"timezone": "<string>",
"provider_account_id": "<string>",
"linkedin_account_id": "<string>",
"x_account_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
scheduled_at: '2023-11-07T05:31:56Z',
local_datetime: '2023-11-07T05:31:56Z',
timezone: '<string>',
provider_account_id: '<string>',
linkedin_account_id: '<string>',
x_account_id: '<string>'
})
};
fetch('https://api.example.com/api/v1/content/inbox/{draft_id}/schedule', 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/api/v1/content/inbox/{draft_id}/schedule",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'scheduled_at' => '2023-11-07T05:31:56Z',
'local_datetime' => '2023-11-07T05:31:56Z',
'timezone' => '<string>',
'provider_account_id' => '<string>',
'linkedin_account_id' => '<string>',
'x_account_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/content/inbox/{draft_id}/schedule"
payload := strings.NewReader("{\n \"scheduled_at\": \"2023-11-07T05:31:56Z\",\n \"local_datetime\": \"2023-11-07T05:31:56Z\",\n \"timezone\": \"<string>\",\n \"provider_account_id\": \"<string>\",\n \"linkedin_account_id\": \"<string>\",\n \"x_account_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/v1/content/inbox/{draft_id}/schedule")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"scheduled_at\": \"2023-11-07T05:31:56Z\",\n \"local_datetime\": \"2023-11-07T05:31:56Z\",\n \"timezone\": \"<string>\",\n \"provider_account_id\": \"<string>\",\n \"linkedin_account_id\": \"<string>\",\n \"x_account_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/content/inbox/{draft_id}/schedule")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"scheduled_at\": \"2023-11-07T05:31:56Z\",\n \"local_datetime\": \"2023-11-07T05:31:56Z\",\n \"timezone\": \"<string>\",\n \"provider_account_id\": \"<string>\",\n \"linkedin_account_id\": \"<string>\",\n \"x_account_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"linkedin_body": "<string>",
"x_body": "<string>",
"media_asset_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"media_asset_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"scheduled_at": "2023-11-07T05:31:56Z",
"voice_config_snapshot": {},
"source": "<string>",
"topic": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Schedule Inbox Draft
Schedule a draft (pending|approved -> scheduled) AND enroll it into the dispatch queue.
The future-instant + DST-gap checks run SERVER-SIDE (a wall-clock+timezone is resolved via ZoneInfo, spring-forward gaps rejected); the per-org daily-schedule cap is enforced atomically inside the seam RPC. Scheduling now ATOMICALLY upserts the content_scheduled_posts dispatch row (E4.1b), so the dispatcher actually publishes the post. 404 if not owned, 409 if not pending/approved, 422 on a past/DST-gap time, 429 when the daily cap is hit.
curl --request POST \
--url https://api.example.com/api/v1/content/inbox/{draft_id}/schedule \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"scheduled_at": "2023-11-07T05:31:56Z",
"local_datetime": "2023-11-07T05:31:56Z",
"timezone": "<string>",
"provider_account_id": "<string>",
"linkedin_account_id": "<string>",
"x_account_id": "<string>"
}
'import requests
url = "https://api.example.com/api/v1/content/inbox/{draft_id}/schedule"
payload = {
"scheduled_at": "2023-11-07T05:31:56Z",
"local_datetime": "2023-11-07T05:31:56Z",
"timezone": "<string>",
"provider_account_id": "<string>",
"linkedin_account_id": "<string>",
"x_account_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
scheduled_at: '2023-11-07T05:31:56Z',
local_datetime: '2023-11-07T05:31:56Z',
timezone: '<string>',
provider_account_id: '<string>',
linkedin_account_id: '<string>',
x_account_id: '<string>'
})
};
fetch('https://api.example.com/api/v1/content/inbox/{draft_id}/schedule', 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/api/v1/content/inbox/{draft_id}/schedule",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'scheduled_at' => '2023-11-07T05:31:56Z',
'local_datetime' => '2023-11-07T05:31:56Z',
'timezone' => '<string>',
'provider_account_id' => '<string>',
'linkedin_account_id' => '<string>',
'x_account_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/content/inbox/{draft_id}/schedule"
payload := strings.NewReader("{\n \"scheduled_at\": \"2023-11-07T05:31:56Z\",\n \"local_datetime\": \"2023-11-07T05:31:56Z\",\n \"timezone\": \"<string>\",\n \"provider_account_id\": \"<string>\",\n \"linkedin_account_id\": \"<string>\",\n \"x_account_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/v1/content/inbox/{draft_id}/schedule")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"scheduled_at\": \"2023-11-07T05:31:56Z\",\n \"local_datetime\": \"2023-11-07T05:31:56Z\",\n \"timezone\": \"<string>\",\n \"provider_account_id\": \"<string>\",\n \"linkedin_account_id\": \"<string>\",\n \"x_account_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/content/inbox/{draft_id}/schedule")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"scheduled_at\": \"2023-11-07T05:31:56Z\",\n \"local_datetime\": \"2023-11-07T05:31:56Z\",\n \"timezone\": \"<string>\",\n \"provider_account_id\": \"<string>\",\n \"linkedin_account_id\": \"<string>\",\n \"x_account_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"linkedin_body": "<string>",
"x_body": "<string>",
"media_asset_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"media_asset_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"scheduled_at": "2023-11-07T05:31:56Z",
"voice_config_snapshot": {},
"source": "<string>",
"topic": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Body
Schedule a draft to publish at a future instant.
Two input shapes (exactly one): an ABSOLUTE scheduled_at (tz-aware), OR a
per-tenant wall-clock local_datetime (naive) + IANA timezone. The server
resolves the wall-clock via ZoneInfo, rejects past-time + DST-gap, and enforces the
per-day cap. Scheduling enrolls the draft into the dispatch queue (E4.1b).
LinkedIn OAuth account to pin for this scheduled post. Omit to snapshot the org's LinkedIn default when the dispatch row is created.
1 - 255200200Response
Successful Response
A single Inbox draft card (list-row + get + action responses).
NEVER includes dedupe_key (internal CAS key). voice_config_snapshot is the
voice config stamped at generate time (E3.1); the UI may render it read-only.
pending, approved, denied, snoozed, scheduled