---
title: "Mark Sent"
method: POST
path: "/actions/mark_sent"
---

# Mark Sent

`POST /actions/mark_sent`

## Request

- Base URL: `https://api.signalpipe.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.signalpipe.io/actions/mark_sent`
- Auth: none declared

Operator marker: "I sent this mission by hand."

The gap this closes (the Cosankov case, 2026-05-19): when a mission's
outreach_channel is 'manual' — or whenever the operator sends the DM /
public reply themselves via the platform UI instead of letting the
sidecar/daemon send it — nothing tells the brain the send happened. The
mission sits in 'approved'/'draft_needed' forever, no prospect is born,
no message_sent interaction is logged, and a later get_message_prompt
follow-up draft is blind to what we already said.

This is the operator-side equivalent of a successful /actions/ack:
  1. flips the mission to 'sent',
  2. fires the same positive 'replied' RL nudge as /actions/approve —
     a manual send is an endorsement, and under the temperature-gated
     DM model (see project_signalpipe_v4_plan.md §3.6) manual / public
     first-touch is the COMMON path, so its RL signal must not be lost,
  3. records the outbound message (prospect upsert at temperature=10 /
     mode=nurture + message_sent interaction + last_signal).

All three helpers are idempotent, so the operator calling /actions/approve
first and /actions/mark_sent second does NOT double-fire RL or duplicate
the interaction row.

Body: { "id": "<mission_id>" }

## Headers

- `authorization` string

## Request body

- object

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/signalpipe/apis/mantidae-v3-0.md) · [All operations](https://skmtc.dev/signalpipe/apis/mantidae-v3-0/llms.txt) · [OpenAPI document](https://skmtc.dev/signalpipe/apis/mantidae-v3-0/revisions/14f89c374730?raw)
