Admin Cold Outreach Fire Now

Manually fire the cold-outreach auto-tick.

Same code path as the 15:00 UTC scheduler tick — vertical-balanced selection from the warm pool, REMOVE-handler gate respected, Postmark-throttled sends, end-of-run TG digest.

Response contract

  • dry_run=true (default) → 200 with the planned selection preview. Synchronous; no kv writes; no Postmark traffic.
  • dry_run=false → 202 + {"job_id": "...", "status": "queued", "candidates_to_attempt": int}. The actual fire runs in a FastAPI BackgroundTasks task; poll GET /v1/admin/cold-outreach/fire-now/{job_id}/status for progress + final counts.
  • dry_run=false when a previous run is still in-flight → 409 with {"job_id": "<in-flight uuid>", "status": "running"} so the caller can pivot to the status endpoint without queueing a duplicate run.

Use dry_run=true to preview the template + vertical mix before flipping AUTO_COLD_OUTREACH_ENABLED=1.

Query params

dry_run: Default true. false actually sends. Live sends still respect the 23h idempotency window — to override it for a legitimate same-day re-fire, ALSO pass skip_idempotency=true. quota: Override the per-run send budget. Capped at the env AUTO_COLD_OUTREACH_DAILY_QUOTA value inside the worker — the route layer just forwards the param. skip_idempotency: Only honored by the worker when also dry_run=false. The scheduler tick NEVER sets this (so the daily idempotency guard stays in force).

post/v1/admin/cold-outreach/fire-now

Request

  • Base URL: https://api.storyflo.com (the document declares no server; this is the origin it was published from)
  • URL: https://api.storyflo.com/v1/admin/cold-outreach/fire-now
  • Auth: none declared

Query parameters

dry_runboolean
quotainteger nullable
skip_idempotencyboolean
api_keystring nullable

Headers

x-storyflo-email-tokenstring nullable
x-storyflo-keystring nullable
x-readout-keystring nullable

Response

Successful Response

unknown required

Changes

No recorded changes to this operation across all 1 revision of this API.