Developer
Meetings API Feed
A read-only JSON feed of publicly available meeting information. No authentication or API key required.
Overview
This API provides read-only access to publicly visible meeting data in JSON format. It returns the same information that is available on the public meeting pages — nothing more.
All responses use Content-Type: application/json
with UTF-8 encoding. Dates are in ISO 8601 format. Text content fields
contain Markdown source.
Base URL
https://tools.britishpowerlifting.org/agm/api/
/api/meetings
Returns all publicly listed meetings, split into current/upcoming and past.
Example request
curl https://tools.britishpowerlifting.org/agm/api/meetings
Response shape
{
"current_meetings": [
{
"slug": "agm-2026",
"title": "Annual General Meeting 2026",
"subtitle": "...",
"meeting_type": "agm",
"meeting_type_label": "AGM",
"meeting_date": "2026-06-15T14:00:00",
"description": "Markdown content...",
"active_stage": "voting",
"stages": {
"motion_submission_open": false,
"comments_open": false,
"amendments_open": false,
"voting_open": true
},
"visibility": {
"show_motions_publicly": true,
"show_reports_publicly": true,
"show_comments_publicly": true,
"show_results_publicly": false
},
"url": "https://tools.britishpowerlifting.org/agm/agm-2026/"
}
],
"past_meetings": [...]
}
/api/meetings/{slug}
Returns detail for a single meeting. Use the include
query parameter to request additional data.
Query parameters
| Parameter | Type | Description |
|---|---|---|
include |
string |
Comma-separated list of optional sections.
Values: motions,
results
|
Example requests
Basic meeting info:
curl https://tools.britishpowerlifting.org/agm/api/meetings/{slug}
With motions and results:
curl "https://tools.britishpowerlifting.org/agm/api/meetings/{slug}?include=motions,results"
Response shape (with all includes)
{
"slug": "agm-2026",
"title": "Annual General Meeting 2026",
"meeting_type": "agm",
"meeting_date": "2026-06-15T14:00:00",
"url": "https://tools.britishpowerlifting.org/agm/agm-2026/",
// ... same fields as list endpoint
"motions": [
{
"public_id": "abc123",
"reference": "1.1",
"title": "Motion title",
"kind": "motion",
"kind_label": "Motion",
"voting_threshold": "ordinary",
"voting_threshold_label": "Ordinary (simple majority)",
"voting_structure": "for_against",
"voting_structure_label": "For / against / abstain",
"status": "accepted",
"status_label": "Accepted",
"sort_order": 1,
"intro": "Markdown...",
"rationale": "Markdown...",
"motion_text": "Markdown...",
"intended_outcome": "Markdown...",
"board_statement": "Markdown or null...",
"created_at": "2026-05-01T10:00:00",
"updated_at": "2026-05-10T15:30:00"
}
],
"results": {
"quorum_required": 20,
"quorum_met": true,
"total_ballots": 142,
"motions": [
{
"motion_public_id": "abc123",
"motion_reference": "1.1",
"motion_title": "Motion title",
"votes_for": 95,
"votes_against": 30,
"votes_abstain": 17,
"total_cast": 142,
"percent_for": 76.0,
"threshold_percent": 50.0,
"passed": true,
"quorum_blocked": false,
"is_withdrawn": false
}
]
}
}
Notes
-
Visibility flags control what's returned.
Motions and results are only included when the meeting admin
has made them publicly visible. If you request
include=motionsbut motions aren't public yet, the field will benullwith an explanatory note. -
Text fields contain Markdown.
Fields like
description,motion_text, etc. are Markdown source. Render them with your preferred Markdown library. - No individual vote data is exposed. Results only contain aggregate tallies (total for/against/abstain). Individual ballot data is never available through this API.
-
The
urlfield links back to the meeting on this portal, which you can use for “View details” or “Vote now” buttons. -
Multi-choice / multi-select motions include an
optionsarray with option labels and vote counts (in results).