Our council meeting summaries are also available as a free, read-only JSON API, so apps, researchers and AI assistants (our own Todd included) can search and read every Township of Langley and City of Langley council meeting we've collected: the agendas, minutes, video transcripts and our plain-language summaries. There's no key and no sign-up.
Getting meetings
Every request is a GET to https://strongtownslangley.org/library/council-summaries-api with one of these:
| Parameter | What you get |
|---|---|
recent=10 | The latest meetings (up to 50), newest first, with their agenda and video summaries. |
q=bike lanes | Meetings that mention the words, newest first, each with up to 5 of the passages that matched and how many matched in all. Add fields= to search only some texts, from=2024&to=2026 for a range of years, and limit= for up to 50 meetings (20 by default). |
date=2026-10-20 | Everything for the meetings on that day. Council sometimes meets twice in a day, so add time=16:00 for just one of them, and fields= to get only some of the texts, since transcripts can be long. |
Add m=tol for the Township of Langley or m=col for the City of Langley. Leave it out for both.
The texts are agenda_summary and transcript_summary (our summaries of the agenda and of the meeting video), and agenda_text, minutes_text and transcript (the full text of the agenda, the minutes and the video). Use them as a comma-separated list in fields=.
Examples
- ?recent=5, the 5 latest meetings in both municipalities
- ?m=tol&q=housing&from=2025&to=2026&fields=agenda_summary,transcript_summary, Township meetings since 2025 whose summaries mention housing
- ?m=col&recent=1, the City's latest meeting
What comes back
{
"count": 1,
"meetings": [
{
"municipality": "tol",
"municipality_name": "Township of Langley",
"date": "2026-10-20",
"time": "19:00",
"links": { "agenda_pdf": "...", "agenda_text": "...", "minutes_pdf": "...", "transcript_text": "...", "video": "..." },
"available": ["agenda_summary", "transcript_summary", "agenda_text", "minutes_text", "transcript"],
"agenda_summary": "...",
"transcript_summary": "..."
}
]
}
Search results also have matches (each with the field it was found in and the passage as text) and match_count. A request we can't answer comes back with an error and an HTTP status of 400 or 404.
Good to know
- The summaries are written by AI from the agendas and meeting videos, so they can miss or misread things. For what council actually decided, check the minutes, which are the official record, or the video.
- The Township and the City publish each meeting's minutes inside the agenda of a later meeting, where council adopts them, so
minutes_textis often empty. To find a meeting's minutes, search the later agendas for its date, like ?m=tol&q=July 27, 2026&fields=agenda_text. - Agendas, minutes and videos come from the Township's and the City's own public records, and new meetings are added as they publish them.
- Answers are cached for 10 minutes. Please keep requests to a reasonable pace, and credit Strong Towns Langley's council summaries with a link back to the summaries page when you use them.
- Questions or ideas: contact@strongtownslangley.org.