CLIGérer les publications

CLI

Gérer les publications

Créez, programmez, listez, modifiez et supprimez des posts depuis le terminal : brouillons, plusieurs réseaux, médias, essais à blanc et corps JSON complet.

Chaque post appartient à un établissement : vous passez son id avec -e. Trouvez-le avec sofia establishments:list (voir comptes).

Publier un post

Sans date, le post part tout de suite.

sofia posts:create -e $ESTABLISHMENT_ID -p instagram -c "Tarte tatin du jour"

Programmer un post

Passez une date ISO 8601 avec -s, --date.

sofia posts:create -e $ESTABLISHMENT_ID -p instagram -c "Brunch ce samedi" -s 2026-11-07T09:00:00Z

Enregistrer un brouillon

--draft enregistre le post sans le publier ni le programmer.

sofia posts:create -e $ESTABLISHMENT_ID -p instagram -c "Brunch ce samedi" --draft

Plusieurs réseaux à la fois

Listez les réseaux séparés par des virgules dans -p, --platforms. Chacun reçoit le même texte.

sofia posts:create -e $ESTABLISHMENT_ID -p instagram,facebook,linkedin -c "Tarte tatin du jour"

Les médias, le format et le compte sont eux aussi communs. Ces options façonnent le post :

  • -c, --content : le texte du post.
  • -f, --format : le format (post, reel, story, carousel…).
  • -a, --account : le compte connecté depuis lequel publier.

Ajouter des médias

-m, --media accepte des ids de médias de votre médiathèque ou des adresses https, séparés par des virgules.

sofia posts:create -e $ESTABLISHMENT_ID -p instagram -c "Tarte tatin du jour" \
  -m $MEDIA_ID,https://images.example.com/tarte-tatin.jpg

Pour une adresse, le type se déduit de l’extension : vidéo pour mp4, mov, webm et m4v, image sinon. Pour envoyer avant, voir médias.

Essai à blanc

--dry-run vérifie le post selon les règles de chaque réseau et ne publie rien. Voir Essai à blanc.

sofia posts:create -e $ESTABLISHMENT_ID -p instagram -c "Tarte tatin du jour" --dry-run

Idempotence

Relancez une commande sans risque avec --idempotency-key : la même clé donne le même post, jamais deux. Voir Idempotence.

sofia posts:create -e $ESTABLISHMENT_ID -p instagram -c "Tarte tatin du jour" \
  --idempotency-key brunch-2026-11-07

Corps complet depuis un fichier

Pour un texte par réseau, plusieurs médias ou une programmation d’un coup, écrivez tout le corps dans un fichier et passez-le avec -j, --json. Il remplace les options de contenu.

{
  "establishmentId": "$ESTABLISHMENT_ID",
  "targets": [
    {
      "platform": "instagram",
      "text": "Tarte tatin du jour",
      "media": [{ "id": "$MEDIA_ID" }],
      "format": "post"
    },
    {
      "platform": "tiktok",
      "text": "Tarte tatin du jour",
      "media": [{ "url": "https://images.example.com/tarte-tatin.mp4", "type": "video" }]
    }
  ],
  "scheduledAt": "2026-11-07T09:00:00Z",
  "status": "scheduled"
}
sofia posts:create --json post.json

Lister les posts

Filtrez la liste avec ces options. La réponse est paginée : voir Pagination.

  • -e, --establishment : seulement cet établissement.
  • --status : seulement les posts de ce statut.
  • --from et --to : une plage de dates.
  • --created-by me|app : les posts écrits par vous, ou créés via l’API.
  • --limit et --cursor : la taille de page et l’endroit où reprendre.
sofia posts:list -e $ESTABLISHMENT_ID --status scheduled --from 2026-11-01 --to 2026-11-30 --limit 20

Lire, modifier, supprimer

posts:update change la date (-s), le statut (draft ou scheduled), ou tout le corps avec -j.

sofia posts:get $POST_ID
sofia posts:update $POST_ID -s 2026-11-08T09:00:00Z
sofia posts:update $POST_ID --status draft
sofia posts:delete $POST_ID

Scripter avec jq

La sortie étant du JSON, jq extrait ce qu’il vous faut : ids, statuts, curseur de la page suivante.

sofia posts:list -e $ESTABLISHMENT_ID --status scheduled | jq '.data[] | {id, status}'
sofia posts:list -e $ESTABLISHMENT_ID | jq -r '.nextCursor'

Ensuite : comptes et médias.

Cette page vous a-t-elle aidé ?