curl --request POST \
--url https://api.superx.so/v1/workers/suggestions/{id}/schedule \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"scheduled_for": "2026-09-15T14:00:00Z"
}
'import requests
url = "https://api.superx.so/v1/workers/suggestions/{id}/schedule"
payload = { "scheduled_for": "2026-09-15T14:00:00Z" }
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_for: '2026-09-15T14:00:00Z'})
};
fetch('https://api.superx.so/v1/workers/suggestions/{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.superx.so/v1/workers/suggestions/{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_for' => '2026-09-15T14:00:00Z'
]),
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.superx.so/v1/workers/suggestions/{id}/schedule"
payload := strings.NewReader("{\n \"scheduled_for\": \"2026-09-15T14:00:00Z\"\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.superx.so/v1/workers/suggestions/{id}/schedule")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"scheduled_for\": \"2026-09-15T14:00:00Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.superx.so/v1/workers/suggestions/{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_for\": \"2026-09-15T14:00:00Z\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": 4821,
"post_id": "V1StGXR8_Z5jdHi6B-myT",
"scheduled_at": "2026-09-12T09:14:00.000Z",
"scheduled_for": "2026-09-15T14:00:00.000Z"
}
}{
"error": {
"code": "already_saved",
"message": "This suggestion was already saved as a post."
}
}{
"error": {
"code": "invalid_api_key",
"message": "Unknown or revoked API key"
}
}{
"error": {
"code": "insufficient_scope",
"message": "This API key is read-only. Create a key with the write scope to use this endpoint."
}
}{
"error": {
"code": "suggestion_not_found",
"message": "No worker suggestion with that id belongs to this account."
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded for the Pro plan (30 requests/min). Upgrade for higher limits.",
"retry_after": 42
}
}{
"error": {
"code": "upstream_error",
"message": "Failed to fetch scheduled posts. Try again shortly."
}
}{
"error": {
"code": "upstream_unavailable",
"message": "The scheduling service is temporarily unavailable. Retry with the same Idempotency-Key."
}
}Schedule a suggestion
Turn one Worker suggestion into a SCHEDULED post. The SuperX scheduler
posts it at scheduled_for, the same as any other queued post, so
confirm the time and the text with the user before you call this.
Afterwards it is an ordinary scheduled post: retime it with
PATCH /v1/scheduled-posts/{id} or cancel it with
DELETE /v1/scheduled-posts/{id}, using the post_id in the response.
A Worker post never inherits the account’s Default Post Settings, only
what you send here. One suggestion can only be saved once: a second
call returns 400 already_saved, a dismissed one 400
already_dismissed. Naturally one-shot, so there is no
Idempotency-Key support. Works for your main account or any account
linked to it (account_id); accounts shared with you are read-only.
curl --request POST \
--url https://api.superx.so/v1/workers/suggestions/{id}/schedule \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"scheduled_for": "2026-09-15T14:00:00Z"
}
'import requests
url = "https://api.superx.so/v1/workers/suggestions/{id}/schedule"
payload = { "scheduled_for": "2026-09-15T14:00:00Z" }
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_for: '2026-09-15T14:00:00Z'})
};
fetch('https://api.superx.so/v1/workers/suggestions/{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.superx.so/v1/workers/suggestions/{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_for' => '2026-09-15T14:00:00Z'
]),
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.superx.so/v1/workers/suggestions/{id}/schedule"
payload := strings.NewReader("{\n \"scheduled_for\": \"2026-09-15T14:00:00Z\"\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.superx.so/v1/workers/suggestions/{id}/schedule")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"scheduled_for\": \"2026-09-15T14:00:00Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.superx.so/v1/workers/suggestions/{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_for\": \"2026-09-15T14:00:00Z\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": 4821,
"post_id": "V1StGXR8_Z5jdHi6B-myT",
"scheduled_at": "2026-09-12T09:14:00.000Z",
"scheduled_for": "2026-09-15T14:00:00.000Z"
}
}{
"error": {
"code": "already_saved",
"message": "This suggestion was already saved as a post."
}
}{
"error": {
"code": "invalid_api_key",
"message": "Unknown or revoked API key"
}
}{
"error": {
"code": "insufficient_scope",
"message": "This API key is read-only. Create a key with the write scope to use this endpoint."
}
}{
"error": {
"code": "suggestion_not_found",
"message": "No worker suggestion with that id belongs to this account."
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded for the Pro plan (30 requests/min). Upgrade for higher limits.",
"retry_after": 42
}
}{
"error": {
"code": "upstream_error",
"message": "Failed to fetch scheduled posts. Try again shortly."
}
}{
"error": {
"code": "upstream_unavailable",
"message": "The scheduling service is temporarily unavailable. Retry with the same Idempotency-Key."
}
}Authorizations
A SuperX API key ("sxk_..."), created in the SuperX app under Account > API / MCP / CLI. Keys are server-side secrets.
Path Parameters
The suggestion's numeric id, from GET /v1/workers/suggestions.
x >= 1Body
When to post it. UTC ISO-8601 with an explicit Z or offset, at least 60 seconds in the future.
Auto Retweet settings for this post, in the composer's own shape. Omit to leave it off.
Auto Plug settings for this post, in the composer's own shape. Omit to leave it off.
Auto Delete settings for this post, in the composer's own shape. Omit to leave it off.
Post it to X. Omit to leave the account's own behaviour unchanged.
Also cross-post it to Bluesky. Omit to leave the account's own behaviour unchanged.
Any account you own, meaning your main account (the default when omitted) or one linked to it. An account shared with you returns 403 writes_main_account_only.
Response
The suggestion and the scheduled post it became.
Show child attributes
Show child attributes