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 every Cornwall councillor 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": "[email protected]",
      "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, and code of conduct cases. recentVotes is always an empty array: Cornwall Council does not publish how individual councillors vote. 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": "[email protected]",
    "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": []
  },
  "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>