Machine-readable archive

The same archive as the rest of this site — 258 articles across 45 topics — restructured for software that reads rather than looks. Everything below is a plain static file. There is no key, no sign-up and no rate limit beyond ordinary courtesy.

If you are building something that needs to know what this site holds, start with the manifest: /agents/index.json lists every file here, what it contains and when the content last changed.

What you may do with it

Text. Quote freely, with attribution to Writesides of History and a link to the article url. The articles are written and published by Writesides of History, which is both author and publisher.

Images. Images are not covered by the line above. Every media record carries its own creator, licence and source url; most are Wikimedia Commons files under their own terms. Honour the record, not this file.

Datasets. One dataset under /datasets/ is free: caesar-campaigns-gaul-britannia, complete, with a CSV, under CC BY 4.0. The other five are research editions: their pages carry the method, the field definitions, the sources and five sample rows; the complete tables are sold in the shop (https://writesidesofhistory.com/shop/#research-datasets) and carry no free licence. Each record in /agents/datasets.json states its own access and licence — honour that field, not this line.

Not included. The premium dossiers and e-books sold through the shop are not part of this surface and are not included in any dump here.

Start here

These few answer most questions. The rest of the surface is in the table below them.

application/json

/agents/index.json

This manifest: counts, conventions, licence and every endpoint

text/plain

/llms.txt

Guide for language models: the pillars, the topic hubs, the newest articles

text/markdown

/llms-full.txt

Every article, complete, in one markdown file

application/json

/agents/articles.json

Every article: title, url, era, topics, description, dates, hero image and its cited sources (newest first)

application/json

/agents/sources.json

The bibliography: every source entry cited across the archive, and which articles cite it

application/json

/agents/changes.json

What was published in the last 90 days — poll this instead of refetching the corpus

Every file

All 21 machine-readable files, also listed in index.json and in sitemap-agents.xml.
FileFormatWhat it holds
/agents/ text/html Front door: what this archive is, what you may do with it, and every surface below
/agents/index.json application/json This manifest: counts, conventions, licence and every endpoint
/agents/openapi.json application/json The same surface described as OpenAPI 3.1
/llms.txt text/plain Guide for language models: the pillars, the topic hubs, the newest articles
/llms-full.txt text/markdown Every article, complete, in one markdown file
/agents/articles.json application/json Every article: title, url, era, topics, description, dates, hero image and its cited sources (newest first)
/agents/corpus.json application/json Every article again, with the complete text as markdown
/agents/topics.json application/json The topic hubs: era, description, subtopics, and the articles filed under each
/agents/sources.json application/json The bibliography: every source entry cited across the archive, and which articles cite it
/agents/media.json application/json Every image and map in the media library, with creator, licence and source url
/agents/datasets.json application/json The published datasets: columns, row count, access and licence; a CSV url only where the data is free
/agents/changes.json application/json What was published in the last 90 days — poll this instead of refetching the corpus
/agents/entities.json application/json Knowledge-graph entities and historical relations, each with the source path and content hash it was drawn from
/agents/questions.json application/json Every question the archive answers: the FAQ pairs of each article, with the article url to cite
/feeds/ text/html Every feed in one place: RSS and JSON Feed for the whole archive and for each era
/feed.json application/feed+json The fifty newest articles as JSON Feed 1.1, with the full text of each
/agents/sitemap-agents.xml application/xml Every machine-readable file above, as a sitemap
/feed.xml application/rss+xml The twenty newest articles, RSS, with the full text of each
/search-index.json application/json The site's own search index: articles, topics and media in one flat array
/sitemap.xml application/xml Every page on the site, with lastmod taken from the content rather than the build clock
/robots.txt text/plain Crawl policy. Every named AI crawler is welcome on every article path

Every article on its own

Each article is also published as a single file, in two forms, so one article can be fetched without the whole corpus or the html page around it. Every record in articles.json carries both urls as markdown_url and json_url.

Replace {slug} with the slug from the article url.
PatternFormatWhat it holds
/agents/articles/{slug}.md text/markdown One article as markdown: a header with its url, era, date, topics, sources and licence, then the complete text
/agents/articles/{slug}.json application/json One article as json: the record from articles.json plus the complete markdown and its questions and answers

An example: /agents/articles/san-juan-ante-portam-latinam-the-arrowhead-problem.md.

Feeds

RSS and JSON Feed for the whole archive and an RSS feed for each era are listed on the feeds page.

What is in it

Counted from the archive at build time, never typed in.
Articles258
Topic hubs45
Eras5
Bibliography entries1078
Entries occurring in exactly one article1050
Images and maps282
Datasets6
Knowledge-graph entities43
Asserted historical relations30
Questions answered (FAQ pairs)1009
Newest article2026-11-05

Conventions

Every record carries `url`: the human page on this site. That is the url to cite and to link to.

Dates are ISO 8601. `published` is the article's publication date; `generated` is when this build ran and is NOT a content date.

`content_changed` is the newest publication date in the archive. Compare it with your last visit to decide whether to refetch.

English throughout. Article slugs are the stable identifier; they do not change.

Article sources are typed `primary`, `scholarly`, `institutional` or `reference`, and each carries a note explaining what the work is and how far it can be trusted.

Static files on ordinary hosting. Be reasonable — one request per second is plenty, and /llms-full.txt gives you the whole archive in one fetch.

Two things worth knowing about

The bibliography is reversed. Every article on this site names its primary, scholarly and institutional sources in its frontmatter, with a note on each explaining what the work is and how far it can be trusted. /agents/sources.json turns that around, so you can look up a source and find the articles that cite it: 1078 bibliography entries across the archive; 1050 occur in exactly one article.

The knowledge graph carries its evidence. /agents/entities.json holds 43 entities and 30 asserted historical relations. Every one had to be found in the article cited for it before it was admitted, and each carries the source path and content hash it was drawn from, so any statement can be checked rather than taken on faith. The human view of the same data is at the assistant knowledge base.

How to cite

Every record carries the url of its page on this site. That is the url to quote and to link to — not this page, and not the json file the text came out of. Naming the article lets a reader check it; naming the feed does not.

The article page is also the canonical copy for search. The derived files listed above are served with X-Robots-Tag: noindex: fetching them is welcome and always will be, but they are deliberately kept out of search results so the machine-readable copies never compete with the articles they are made from.

Questions, or something you need that is not here? info@writesidesofhistory.com.