Endpoint
Mark message sent
POST/api/public/v1/messages/{message_id}/sentwrite
Record that a drafted message was ALREADY sent by some other route (a hand-send, an export, a push made outside sayintel): stamps sent_at = now and writes the same bookkeeping as approving it in the app — message_audit_log entry, approved-lead ledger row, needs_human cleared, exemplar promotion. It deliberately does NOT push anything to HeyReach: the premise is that the send already happened, so pushing would double-send. Use push_approved (send scope) to actually send, or approve_fits_and_clean_drafts (send scope) to approve-and-push. Idempotent unless force=true.
Request
curl -X POST "https://sayintel.com/api/public/v1/messages/<message_id>/sent" \
-H "Authorization: Bearer $SAYINTEL_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'Try it out
Try it outPOST/api/public/v1/messages/{message_id}/sentwrite
Sent as a bearer token to this site only, and kept in this tab's session storage. It is never written to disk or sent anywhere else.
Paste an API key to run.
Path parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| message_id | path | string | yes | — |
Body
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| force | body | boolean | no | — |
Response
{
"ok": true,
"tool": "mark_message_sent",
"kind": "write",
"data": { ... },
"error": null
}Notes
- Scope required: write. How scopes work.
- Accepts Idempotency-Key. A retry with the same key replays the first result instead of repeating the work.
- Same capability over MCP as the tool mark_message_sent. MCP setup.