API
Every issue as JSON, at addresses that will not move. Nothing here is generated for the API — it is what the pipeline already wrote, in another shape. 124 days are available, the oldest from June 2026.
Addresses
api/index.json- Every day, newest first: date, state, how many papers, the headline line, and the URL of the page. Days with no issue are in here too — a gap would say nothing happened.
api/latest.json- The newest issue in full, at an address that does not move.
api/issues/<date>.json- One day in full.
<date>isYYYY-MM-DD.
There is no rate limit and no key. It is a static file on a CDN; fetch it like any other file. Measured on 2026-08-24: this address answers with Access-Control-Allow-Origin *, so a browser on any origin may read it. The same files under raw.githubusercontent.com do too, but arrive as text/plain rather than application/json, and the repository layout is not part of the promise below — prefer these addresses. Only simple requests work: a preflight (OPTIONS) is answered 405, so send a plain GET and do not add custom headers.
Fields
Two of these have had a name that disagreed with their meaning, so both are spelled out rather than left to be guessed.
date- The day the issue covers.
statepublished,quiet,no_headlineornot_seen. ★ Derived here from the day's contents, not read from the storedquiet_dayflag — that flag answers 'did anything clear the headline bar', and it is true on days that published nine papers.quiethere means nothing was published at all.backfilled- The issue was assembled after the fact from archived candidates, because nobody was watching that morning. It is part of the method, not a fault — but those days skipped arXiv enrichment, so their contents differ slightly.
withheld- The reason the live run that morning published nothing, when there was one. A day can be both
withheldandbackfilled: the run refused and the issue was built later. Both facts are kept. recent- Our knowledge of this day is still settling — arXiv indexes about three days late. Papers posted around then can still appear in a *later* issue. Issues never change once published.
headline.present- ★ Whether there is a line in
headline.line. It does not mean a paper stood out: since 0Z-B the threshold chooses the headline's *shape*, not whether there is one.headline.basisrecords which. headline.basis- How the line was produced:
llm:lead(written about one paper),llm:day(written about the day),:retryif a check rejected the first attempt,fallback:<reason>if no attempt passed. silent_sources- ★ Sources we promise to read that answered on this day and returned nothing —
arXiv,OpenAlex, or both. The issue was still published: the papers in it are real, and withholding them would trade a partial day for none. What is missing is the other half of the scope. Empty on a normal day, and empty on a day with no issue, wherewithheldcarries the reason instead. counts.arxiv_categories- How many arXiv categories the run was configured to query. It does not say that arXiv answered —
silent_sourcessays that, and on 2026-09-07 this field reads 7 while arXiv contributed nothing. counts.unreadable- Papers we could see existed and could not read, because no source exposed an abstract. Published because it is the one blind spot this pipeline measures exactly.
scores.relevance- The classifier's probability for the arXiv path. On the journal path the paper entered because a journal we track published it, and the classifier is not consulted.
scores.headline- What decides the headline's shape. A third of the archive sits at exactly 0.44; treat small differences as noise.
summary- What the paper did and why it matters, written by a model from the abstract. Not under the open licence — see below.
synthesis.tag_shift- ★ Tags that ran above their own 30-day average on this day, with that average. Recomputed from the archive on every build, not stored in the issue — an issue never changes once published, and this number was wrong in issues published before 2026-09-03. So it can move as the archive fills: a backfilled day added inside the 30-day window changes what the average was.
statusisNO_BASELINEwhen there was not enough archive behind the day to compare against at all, which is a different claim from an emptyfoundunderOK— that one means the comparison ran and nothing stood out.
What we promise
- Addresses
-
api/index.json,api/latest.jsonandapi/issues/<date>.jsonstay where they are. A date that has been published keeps its file. - Fields
- Fields are added, not removed or repurposed. If a field's meaning has to change, it gets a new name and the old one is left as it was — renaming in place is how a consumer ends up silently wrong.
- Values
-
work_keynever changes once assigned — with one exception, taken once, on 2026-09-04: seventeen IJURR articles had been keyedarxiv:2427.…because that journal's ISSN sits inside its DOI and the parser read it as an arXiv identifier. They now carry thedoi:key they should always have had. The promise means "a key does not drift"; it was never a promise to keep a wrong one. Fields that come from OpenAlex keep their OpenAlex names. - Breaking it
-
schema_versionis1and is on every document. A change that cannot be made by adding will raise it, and the previous version stays reachable for at least ninety days. There is no mailing list to announce it on, so the version field is the announcement — read it. - What is not promised
-
Uptime, and the contents of any particular day. The pipeline runs
unattended and some days it publishes nothing; that is a
state, not an outage.
Licence and provenance
Three different things are in these files and they are not under one licence. Saying so is not lawyerly caution — it is the difference between a source you can build on and one that will surprise you later.
- Ours — CC BY 4.0
- The selection (which papers on which day), the scores, the badges and topic assignments, the day's state, and the headline line. This is the work: the deciding, not the describing. Attribute it to Urban Currents, Institute for Latent Publics, with a link to the day you used.
- Not ours — the sources' terms
- Titles, identifiers, landing-page URLs, journal names and dates come from arXiv and OpenAlex and are passed through unchanged. OpenAlex places its data in the public domain (CC0); arXiv metadata is used under arXiv's own terms. We do not relicense either.
- Uncertain — no open licence offered
-
summary.whatandsummary.why. A model wrote them from an abstract we do not own. Whether that makes them ours to license is a question we have not answered, and we will not stamp an open licence on something we have not established we can grant. Read them, quote them with attribution as you would any other page on the web; do not assume a redistribution right. If that is not enough for your use, the fields above it are, and they are the ones under CC BY. - Absent on purpose
- Abstracts are not served: third-party expressive text, and an API is a redistribution. Authors, ORCIDs and affiliations are not served either — a per-day machine-readable list of people is a different artefact from a citation and not one we cleared. Every item carries a DOI or an arXiv identifier, so the authoritative record is one fetch away.
Thank you to arXiv for use of its open access interoperability. This service was not reviewed or approved by, nor does it necessarily express or reflect the policies or opinions of, arXiv.
Citing a day
A day is the citable unit — there is no issue number, and inventing one here would make this page the source of a fact that exists nowhere else.
Urban Currents (2026–). Institute for Latent Publics. Issue 2026-10-14. https://latentpublics.com/urban-currents/issues/2026-10-14.html Accessed <date>.
If you are citing what we selected or scored, cite the day. If you are citing a paper we listed, cite the paper — its identifier is in the record, and it is not ours to stand in front of.