Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Zoen-DEV/repurpose-youtube-video/llms.txt

Use this file to discover all available pages before exploring further.

Step 6 is the single mandatory approval point in the entire workflow — no publishing happens without explicit confirmation. Even if you approved post text in an earlier conversation turn, the skill always halts here and waits for a before calling any publish API.

The approval block

Before asking for approval, the skill assembles all content — post texts, visual URLs, and timing — into a single block:
─────────────────────────────────────────
CONTENIDO LISTO PARA PUBLICAR
─────────────────────────────────────────

[LinkedIn] — Account Name
<full post text>
Visual: https://...
Timing: ahora

─────────────────────────────────────────

[Instagram] — @username
<full post text>
Visual: https://...
Formato: imagen única | carrusel (3 imágenes)
Timing: ahora

─────────────────────────────────────────

¿Apruebas este contenido? (sí/editar/cancelar)
If solo: linkedin was passed, the Instagram block is omitted, and vice versa. If dry-run: si was passed, a [aviso] DRY-RUN ACTIVADO header appears at the top of the block.

Response options

The skill waits for one of three responses:
  • — Proceeds to publish (Step 7).
  • editar — The skill asks what to change. You can target a specific piece: "cambia el hook de LinkedIn", "quita el último hashtag de Instagram", "regenera el visual de Instagram". After applying your edits, text changes are re-run through the Step 4.5 humanization checklist before the full approval block is shown again. This loop repeats until you reply or cancelar.
  • cancelar — Prints [cancelado] No se publicó nada. and stops immediately.
No other input proceeds to publishing. If the response is not one of these three, the skill waits again.

Publishing via Blotato

Once you confirm with , the skill calls bc.publish_post for each active platform. LinkedIn:
resp = bc.publish_post(
    cfg["linkedin_account_id"], "linkedin",
    linkedin_text, linkedin_media_urls,
    api_key=cfg["api_key"],
    schedule_time=schedule_time,
)
li_status = bc.poll_post_status(resp["postSubmissionId"], api_key=cfg["api_key"])
Instagram (note share_to_feed=True):
resp = bc.publish_post(
    cfg["instagram_account_id"], "instagram",
    instagram_text, instagram_media_urls,
    api_key=cfg["api_key"],
    schedule_time=schedule_time,
    share_to_feed=True,
)
ig_status = bc.poll_post_status(resp["postSubmissionId"], api_key=cfg["api_key"])
After each publish call, the skill polls bc.poll_post_status until the status reaches published (immediate) or scheduled (deferred).

Scheduling

The publicar: field controls when the post goes live:
InputBehavior
ahora (or field absent)schedule_time = None — publishes immediately
ISO-8601 timestamp (e.g. 2026-06-01T14:00:00Z)Used as-is, passed directly to bc.publish_post
Spanish natural language (e.g. mañana 9am, viernes 18h)Converted to ISO-8601 UTC; the conversion is shown in the approval block as Timing: programado para 2026-05-16T09:00:00Z (mañana 9am)
A date in the past[error] La fecha programada es en el pasado: <fecha>. — the skill re-asks

Dry-run mode

When dry-run: si is passed, all steps run including visual generation and the Step 6 approval block. The only difference: bc.publish_post is never called. The final summary marks each platform accordingly:
Status: dry-run (no se envió)
This is useful for reviewing the full output — posts, visuals, and timing — without publishing anything.

Summary output (Step 8)

After publishing, the skill prints a summary for each platform that actually ran (respecting solo:):
[listo] Publicado exitosamente:

[LinkedIn]
   Post: "First 80 chars of post..."
   Visual: <url or "ninguno">
   Status: published | scheduled for <time>
   URL: <publicUrl>
In dry-run mode the header reads [listo] DRY-RUN finalizado — no se publicó nada: and URL: shows .

Build docs developers (and LLMs) love