Skip to content

Latest commit

 

History

History
44 lines (36 loc) · 2.07 KB

safety.md

File metadata and controls

44 lines (36 loc) · 2.07 KB
layout default
title Safety and publishing behavior

Safety and publishing behavior

Creating, scheduling, publishing, and deleting are separate operations.

Operation Effect Confirmation
drafts export Reads a draft and produces Markdown None
drafts create Creates an unpublished draft None
drafts update Updates a draft from Markdown Interactive or --yes
drafts schedule Adds a future release time None
drafts unschedule Removes a future release time None
drafts publish Publishes after a prepublish check Interactive or --yes
drafts delete Deletes the draft Interactive or --yes

drafts publish --no-send publishes without email delivery. Omitting --no-send allows Substack to send the post. Review the draft ID and flags before confirming.

In JSON or noninteractive mode, publish and delete reject the request unless --yes is supplied. API errors redact configured passwords and cookie values before they are printed by the CLI.

Substack's interfaces are undocumented and may change. Keep a reviewed copy of important source Markdown and verify the selected publication with substack status before any write.

Export never writes to Substack and never overwrites a local file unless --force is supplied. Unsupported editor content is preserved as an opaque marker and listed in JSON output so it cannot disappear unnoticed. Updates refuse to remove or alter those markers or replace remote images without explicit authorization (--allow-unsupported-change --yes or --allow-image-replacement --yes).

Draft updates verify remote revision fingerprints before writing. If the remote draft changed after export, the update fails closed with a conflict error to prevent overwriting remote work. Markdown files lacking revision metadata are treated as unprotected updates. Overriding conflicts or applying unprotected updates requires explicit confirmation (--allow-conflict --yes or --force --yes in the CLI, allow_conflict=True in the SDK).