Skip to content

Managing Posts

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

Fenêtre de terminal
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
Fenêtre de terminal
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:

Fenêtre de terminal
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
Fenêtre de terminal
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:

Fenêtre de terminal
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" }
}
]
}
Fenêtre de terminal
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:

Fenêtre de terminal
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.
Fenêtre de terminal
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:

Fenêtre de terminal
# 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.