/Primitives

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

The enhance file (one JSON file per version, per collection)
namemodelvisualsinternalLinksexternalLinksmetadata

Only 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.

The endpoint's config file
visualsrelinkexternalLinksmetadata
Per call
article_idpass

The 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

  1. 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.
  2. 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.
  3. 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.
  4. 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

You, directly

An API key runs any pass on any of its posts, reads every run, and sets the collection's enhance file.

Letterstory, for you

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

CheckReads backRule
outcomemechanismadded, none, skipped (with why: no or unreadable sitemap) or failed.
prose_keptmechanismEvery word of the post before the pass is still there, in order.
metadata_issuesmetadataThe 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.

JobMCP toolREST
Run a passrun_enhance_passPOST /api/integrations/tools/run_enhance_pass
Read runsget_enhance_runPOST /api/integrations/tools/get_enhance_run
list_enhance_runsPOST /api/integrations/tools/list_enhance_runs
The enhance fileget_enhancer_filePOST /api/integrations/tools/get_enhancer_file
save_enhancer_filePOST /api/integrations/tools/save_enhancer_file
list_enhancer_versionsPOST /api/integrations/tools/list_enhancer_versions
pin_enhancer_versionPOST /api/integrations/tools/pin_enhancer_version
accept_enhancer_offerPOST /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.

Other primitives