---
title: "Write one durable insight the founder just revealed (a standing preference, a rule about how they write, a fact about the product, or what a shipped move earned) into this product run's Memory, the shared record every growth and marketing draft is written from. Scope 'act'; free, unmetered, and available on every plan. Append-only into the KB substrate with inline provenance (which key wrote it, when, and the move it came out of). Recording the same insight twice supersedes the earlier note rather than duplicating it, and a note the founder has pinned is left untouched and reported as already recorded. Bounded to 500 characters and to a fixed number of insights per product run per day, claimed atomically before the write."
method: POST
path: "/api/v1/memory/insights/record"
---

# Write one durable insight the founder just revealed (a standing preference, a rule about how they write, a fact about the product, or what a shipped move earned) into this product run's Memory, the shared record every growth and marketing draft is written from. Scope 'act'; free, unmetered, and available on every plan. Append-only into the KB substrate with inline provenance (which key wrote it, when, and the move it came out of). Recording the same insight twice supersedes the earlier note rather than duplicating it, and a note the founder has pinned is left untouched and reported as already recorded. Bounded to 500 characters and to a fixed number of insights per product run per day, claimed atomically before the write.

`POST /api/v1/memory/insights/record`

## Request

- Base URL: `https://afterlaunch.io`
- URL: `https://afterlaunch.io/api/v1/memory/insights/record`
- Auth: HTTP bearer

## Request body

- object
  - `insight` string, required: The durable insight, as one plain sentence in the founder's own terms.
  - `kind` 'preference' | 'voice' | 'fact' | 'outcome', required: preference = a standing choice about how they work. voice = a rule about how they write (one they approved goes to record_voice_rule). fact = something true about the product or business. outcome = what a shipped move actually earned.
  - `source_move_id` string: Optional growth move id (uuid) the insight came out of, from /api/v1/feed. Must be a move on this product run.

## Response `200`

Recorded. recorded says whether a row was written; superseded_previous says whether it replaced an earlier note of the same insight; board_now carries the top moves as they stand (with move ids) so the caller can carry on without a second read, and is absent when that read failed.

- object
  - `data` object, required
  - `meta` object, required
    - `enrollment_id` string, uuid, required
    - `generated_at` string, date-time, required

## Other responses

- `400`: insight is outside 10 to 500 characters, kind is not one of the four, or source_move_id is not a uuid.
- `401`: Missing, invalid or revoked API key.
- `403`: The key does not carry the scope this endpoint requires.
- `404`: source_move_id names no move on this product run.
- `429`: This product run has reached today's insight limit. Honour Retry-After.

---

[API](https://skmtc.dev/afterlaunch/apis/afterlaunch-public-api.md) · [All operations](https://skmtc.dev/afterlaunch/apis/afterlaunch-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/afterlaunch/apis/afterlaunch-public-api/revisions/d67a599194a4?raw)
