Skip to content

Writings

Status: Live

The reading-detail endpoint is implemented (CSL-208). See API Conventions for auth, errors, and caching.

A Writing is a full readable Lewis unit — a letter, an essay, or a book chapter — discriminated by a kind field (one model, not three; ADR-0006 / ADR-0008). Unlike a Passage (a short standalone quote), a Writing is the long-form source-work read: the whole piece, shown top-to-bottom on the reading screen.

Every Writing may name the one Work (Book) it's drawn from — the source for the "Discover about the book" footer and the "Buy the Book" hand-off.

Reading detail: GET /api/writings/{id}/

The single-piece payload behind the source-work reading screen (essay, letter, or chapter). It is licensed content: it needs the app key and a content-access token (X-Content-Token, see Content access), is user-agnostic, and is cached by the app only (Cache-Control: private + ETag). It returns 404 when the id is not a published writing.

How it behaves:

  • Kind decides the attribution fields. A top-level kind of letter, essay, or chapter sets which attribution fields carry a value. Letters add who the letter went to and where it was written from (the origin subline, for example "from Great Bookham, Surrey"). Chapters add their position in the Work. Letters and essays add the date. A field that does not apply to a kind comes back null, so the client reads by kind.
  • author is always there. It says who wrote the piece, and it is never null or empty — the CMS pre-fills "C.S. Lewis", and an editor changes it only for a piece somebody else wrote. Articles carry the same field, so a reading screen showing both kinds reads one field. The difference is that an article's author comes from the contributor's CMS account and can be null, while this one is stored on the piece and never is.
  • source is the full book card. When a piece names a Work, source is the whole Book card: cover, year, synopsis, and the external buy_cta. One object serves both the "Discover about the book" footer and the "Buy the Book" hand-off. source is null for a standalone piece.
  • No interpretation. The "What This Means" layer is passages-only, so writings do not carry it.
  • Two computed onward rails power the footer carousels. more_on_topic returns Lewis's own Writings that share the piece's source book or theme ("more in this area"). related_content returns contributor Articles matched by shared tags, with a theme fallback when the piece has no tags. Each card's supporting_line is the "From {author}" byline. Both are content cards, live-only, self-excluded, and capped at 10, and each is [] when nothing matches.
  • No related_quotes. The curated editorial-quotes rail is passage-only, so this payload omits the field instead of returning it empty. See the Passages API guide.
  • Body is Markdown (ADR-0006), and read time comes from its word count.

See Swagger for the precise field list and status codes.

Audio

A long-form body is one performance, so the detail payload's audio object has a single key, body, holding a track or null until the writing has been narrated. The track shape and the placeholder-audio warning are in Audio.