Skip to content
British Powerlifting — Tools Portal home

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.

Rate limiting: All endpoints are limited to 60 requests per minute per IP address.

Base URL

https://tools.britishpowerlifting.org/agm/api/
GET /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": [...]
}
GET /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=motions but motions aren't public yet, the field will be null with 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 url field 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 options array with option labels and vote counts (in results).