Skip to content

Developers

Cornwall Political Watch provides a free, public API for accessing Cornwall Council data. Use it to build tools, conduct research, or power your own accountability projects.

API base URL

https://cornwallpoliticalwatch.com/api/public

All endpoints return JSON. No authentication is required. Responses include CORS headers so you can call the API directly from client-side JavaScript.

Endpoints

GET/api/public/councillors

Returns all 87 Cornwall councillors with their party, ward, contact details, attendance statistics, and any active red flags.

Example response
{
  "councillors": [
    {
      "slug": "john-doe",
      "fullName": "John Doe",
      "party": "Conservative",
      "ward": "Truro East",
      "email": "john.doe@cornwall.gov.uk",
      "profileUrl": "https://cornwallpoliticalwatch.com/councillors/john-doe",
      "attendance": {
        "total": 24,
        "present": 20,
        "percentage": 83
      },
      "redFlags": []
    }
  ],
  "count": 87,
  "source": "Cornwall Political Watch",
  "url": "https://cornwallpoliticalwatch.com"
}
GET/api/public/councillors/{slug}

Returns detailed data for a single councillor, including attendance stats, red flags, expenses, code of conduct cases, and their 20 most recent votes. The slug is the councillor's URL-friendly name (e.g. john-doe). Returns 404 if the councillor is not found.

Example response
{
  "councillor": {
    "slug": "john-doe",
    "fullName": "John Doe",
    "party": "Conservative",
    "ward": "Truro East",
    "email": "john.doe@cornwall.gov.uk",
    "phone": "01234 567890",
    "twitterHandle": "@johndoe",
    "profileUrl": "https://cornwallpoliticalwatch.com/councillors/john-doe",
    "attendance": {
      "total": 24,
      "present": 20,
      "percentage": 83
    },
    "redFlags": [
      {
        "type": "low_attendance",
        "description": "Attendance below 60% threshold",
        "detectedAt": "2026-01-15T00:00:00.000Z"
      }
    ],
    "expenses": [
      {
        "financialYear": "2024-25",
        "basicAllowance": 15000,
        "specialResponsibility": 0,
        "travel": 1200,
        "subsistence": 0,
        "other": 0,
        "total": 16200
      }
    ],
    "conductCases": [],
    "recentVotes": [
      {
        "position": "for",
        "hasInterest": false,
        "decision": "Approve planning application PA24/01234",
        "outcome": "Approved",
        "meeting": "Strategic Planning Committee",
        "meetingDate": "2026-02-10T10:00:00.000Z"
      }
    ]
  },
  "source": "Cornwall Political Watch",
  "url": "https://cornwallpoliticalwatch.com"
}
GET/api/public/stats

Returns overall platform statistics: total councillors, meetings tracked, active red flags, and decisions recorded.

Example response
{
  "councillors": 87,
  "meetings": 186,
  "activeRedFlags": 12,
  "decisions": 340,
  "source": "Cornwall Political Watch",
  "url": "https://cornwallpoliticalwatch.com"
}

Usage guidelines

  • No authentication is required. The API is open for everyone.
  • Please keep requests reasonable (max 60 per minute). Excessive usage may be rate-limited.
  • Responses are cached for up to one hour. Data is updated weekly via our automated pipeline.
  • If you build something with this data, we would love to hear about it. Use our contact form to get in touch.

Attribution badge

If you use our API, please display this badge on your site to help others find the data.

Powered by Cornwall Political Watch

Embed with this HTML snippet:

<a href="https://cornwallpoliticalwatch.com">
  <img
    src="https://cornwallpoliticalwatch.com/api/public/badge"
    alt="Powered by Cornwall Political Watch"
  />
</a>

Councillor embed widget

You can also embed a councillor scorecard on any website using a single script tag. Replace the slug with the councillor you want to display:

<script src="https://cornwallpoliticalwatch.com/api/embed/councillor/john-doe"></script>