Skip to content

Managing Posts

nadia post schedules, publishes or drafts a post on one or more channels. Local media are uploaded first.

Terminal window
nadia post \
-i "$IG" \
-s 2026-10-02T09:00:00+02:00 \
-c "Three places in Malta" \
-m ./photo.jpg
Flag Description
-i, --integrations Channel ids, comma-separated (see nadia channels)
-s, --date Publication date, ISO 8601 (not needed with -t now)
-t, --type schedule (default), now or draft
-c, --content Text, or @file to read it from a file; repeat -c for a thread
-m, --media Media of the -c before it, comma-separated; local files are uploaded, URLs used as they are
--settings Provider settings, as JSON or @file, applied to every channel
-d, --delay Delay between the comments of a thread, in milliseconds
Terminal window
nadia post -t draft -i "$IG" -s 2026-10-02T09:00:00+02:00 -c "Review this first" -m ./photo.jpg
nadia post -t now -i "$IG" -c "Live" -m ./photo.jpg

Every -m belongs to the -c typed before it, so a thread keeps its images:

Terminal window
nadia post -i "$THREADS" -s 2026-10-02T09:00:00+02:00 \
-c "1/3 — the rent" -m ./rent.png \
-c "2/3 — the paperwork" -m ./forms.png \
-c "3/3 — the weather" \
-d 2000
Terminal window
nadia post -i "$IG,$TIKTOK" -s 2026-10-02T09:00:00+02:00 -c "Same video everywhere" -m ./reel.mp4

--settings applies to every channel. When they need different settings or different text, see the full body below.

For anything post does not cover — a different text per channel, tags, short links — send the whole request of Create a post to the generated command:

Terminal window
nadia create-post --body @post.json
{
"type": "schedule",
"date": "2026-10-02T07:00:00.000Z",
"shortLink": false,
"tags": [],
"posts": [
{
"integration": { "id": "instagram-id" },
"value": [{ "content": "Instagram version, with hashtags.", "image": [] }],
"settings": { "__type": "instagram-standalone", "post_type": "post" }
},
{
"integration": { "id": "tiktok-id" },
"value": [{ "content": "Shorter TikTok version.", "image": [] }],
"settings": { "__type": "tiktok", "content_posting_method": "DIRECT_POST", "privacy_level": "PUBLIC_TO_EVERYONE" }
}
]
}
Terminal window
nadia posts # a week back, four weeks ahead
nadia posts --from 2026-10-01 --to 2026-10-31 # a date range
nadia posts --channel "$IG" # one channel
nadia posts --group "$GROUP" # one group

nadia find-slot <channel-id> gives the next free slot in a channel’s schedule.

Move a post between draft and schedule without changing its date:

Terminal window
nadia change-post-status <post-id> --status draft
nadia change-post-status <post-id> --status schedule
  • --status schedule puts a draft back in the publishing queue, to go out at its stored date.
  • --status draft takes a scheduled post out of the queue and stops any running publication, so it will not go out.
Terminal window
nadia delete-post <post-id> # the post and everything published with it
nadia delete-post-group <group> # the whole publication group

Some providers do not return the published post’s id (TikTok in inbox mode, for instance): the post’s releaseId is then "missing", and its analytics have nothing to read. List what the provider has published recently, and record the right one:

Terminal window
# 1. Posts without a release id
nadia posts | jq '.posts[] | select(.releaseId == "missing") | {id, content}'
# 2. What the provider published recently
nadia list-missing-media <post-id>
# 3. Record the right one
nadia set-post-release-id <post-id> --release-id 7321456789012345678
# 4. The post now has analytics
nadia get-post-analytics <post-id> --date 7

list-missing-media returns { id, url } items, url being the thumbnail.