Primitives / Enhance
Enhance
A written post in, the same post with links, citations, visuals and metadata.
Passes after the writer: internal links, citations, visuals and tables, and metadata. Each adds; none rewrites your prose.
- Unit
- Pass run
- A run produces
- what the pass added to one post, and its record
- In the app
- /letterpress
- API reference
- All enhance tools
Try it
run_enhance_pass over REST: POST /api/integrations/tools/run_enhance_pass. Needs an API key with article:write.
curl -X POST https://app.letterstory.com/api/integrations/tools/run_enhance_pass \
-H "x-integrations-key: ls_..." \
-H "content-type: application/json" \
-d '{
"article_id": "...",
"pass": "..."
}'1. Constraints: what you configure
namemodelvisualsinternalLinksexternalLinksmetadataOnly name is required; the rest uses platform settings. model is the default; each pass can name its own seats and settings. Whether a pass runs is the collection's policy (update_auto_pen_config). Use ours, copy it, or bring your own.
visualsrelinkexternalLinksmetadataarticle_idpassThe endpoint fields are the collection's Auto-Pen policies (whether each pass runs). A call names one post and one pass and runs it whatever the policy says.
2. Mechanism: what always happens
- 1Four passes, in this order after the writer: visuals, internal links, external links, metadata. Each one runs only when its collection has it on, or when you ask for it on one post.
- 2A pass only inserts. Links wrap words already there; visuals and tables add their own; nothing in the prose is rewritten or dropped, and every run records whether that held.
- 3Internal links come from the collection's sitemap, up to a ceiling per post, and may swap a link for a clearly better page. Citations obey the org's source policy: a primary source, never a listed competitor or rival.
- 4On a post whose prose was shredded, metadata is written by a different model, so the page head does not re-imprint the watermark.
3. Intelligence: who picks values
An API key runs any pass on any of its posts, reads every run, and sets the collection's enhance file.
Auto-Pen runs the passes a collection has on after every post it writes; the post editor's buttons and the fleet's link refresh run them through the same door, and every run lands in the same record.
4. Verification: did it hold
| Check | Reads back | Rule |
|---|---|---|
outcome | mechanism | added, none, skipped (with why: no or unreadable sitemap) or failed. |
prose_kept | mechanism | Every word of the post before the pass is still there, in order. |
metadata_issues | metadata | The JSON-LD, meta description, title and llms.txt are valid. |
Report-only, on every run (get_enhance_run). The live evals grade the same: an unreadable sitemap, a visual that failed to render, invalid metadata, a pass that changed prose.
Surfaces
Same call over MCP (tools/call) and REST.
| Job | MCP tool | REST |
|---|---|---|
| Run a pass | run_enhance_pass | POST /api/integrations/tools/run_enhance_pass |
| Read runs | get_enhance_run | POST /api/integrations/tools/get_enhance_run |
list_enhance_runs | POST /api/integrations/tools/list_enhance_runs | |
| The enhance file | get_enhancer_file | POST /api/integrations/tools/get_enhancer_file |
save_enhancer_file | POST /api/integrations/tools/save_enhancer_file | |
list_enhancer_versions | POST /api/integrations/tools/list_enhancer_versions | |
pin_enhancer_version | POST /api/integrations/tools/pin_enhancer_version | |
accept_enhancer_offer | POST /api/integrations/tools/accept_enhancer_offer |
CLI: letterstory enhance run
Pass runs come out of your plan's AI usage, like the Auto-Pen that runs them.