Skip to content
Greensburg Times

Developers

Public data API

Read-only local data for Greensburg and Westmoreland County. Anonymous calls work at a low limit. A free key raises it.

The contract is OpenAPI 3.1. Responses use { data, nextCursor, meta: { version: "v1" } }. Errors use { error: { code, message }, meta }.

Every record includes sourceUrl, lastVerifiedAt, and updatedAt. Directory records use a stable public id in id. Events, fish fries, and articles use the slug. Draft and retired records are left out. Email and phone are left out unless that record is marked public contact. Article responses include the title, summary, date, and link. They do not include the article body. Fish-fry phone numbers are not in this API. Long text fields stop at 4,000 characters.

Keys and limits

Send a key as Authorization: Bearer gt_… or X-API-Key. If both are set, Authorization is used. Payload user API keys (users API-Key) are rejected. A missing, unknown, revoked, or suspended key fails on the next request. Anonymous calls need no key.

  • Anonymous: 20 requests a minute and 200 a day, per IP address.
  • Free key: 60 requests a minute and 1000 a day.
  • Paid keys are not offered yet. A key marked paid still uses the free limits.

Over the limit, the API returns 429 with Retry-After and X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. Responses are not shared-cached, so each call is counted. Other methods return 405.

curl -H "Authorization: Bearer gt_your_key" "https://greensburgtimes.com/api/v1/organizations?limit=25"

Lists default to 25 records and stop at 100. Pass cursor from nextCursor to read the next page.

MCP

The same data is available as a read-only MCP server at POST /api/public-mcp. It uses these keys and limits. Each tool call counts as one request. Setup for Claude Desktop, Cursor, and a generic Streamable HTTP client is on the MCP connection guide.

Routes

  • GET /api/v1 — List the resources in this version.
  • GET /api/v1/openapi.json — OpenAPI 3.1 document for this version.
  • GET /api/v1/events — List events.
  • GET /api/v1/events/search — Search events.
  • GET /api/v1/events/{id} — Get one event by slug.
  • GET /api/v1/fish-fries — List fish fries.
  • GET /api/v1/fish-fries/search — Search fish fries.
  • GET /api/v1/fish-fries/{id} — Get one fish fry by slug.
  • GET /api/v1/officials — List officials.
  • GET /api/v1/officials/search — Search officials.
  • GET /api/v1/officials/{id} — Get one official by slug or public id.
  • GET /api/v1/organizations — List organizations.
  • GET /api/v1/organizations/search — Search organizations.
  • GET /api/v1/organizations/{id} — Get one organization by slug or public id.
  • GET /api/v1/venues — List venues.
  • GET /api/v1/venues/search — Search venues.
  • GET /api/v1/venues/{id} — Get one venue by slug or public id.
  • GET /api/v1/businesses — List businesses.
  • GET /api/v1/businesses/search — Search businesses.
  • GET /api/v1/businesses/{id} — Get one business by slug or public id.
  • GET /api/v1/articles — List articles.
  • GET /api/v1/articles/search — Search articles.
  • GET /api/v1/articles/{id} — Get one article by slug.

Version

curl https://greensburgtimes.com/api/v1

events

Published community events. Ordered by start date, then slug.

  • limit, default 25, maximum 100.
  • cursor, the previous nextCursor.
  • municipality. Exact municipality of the linked venue. Events with no venue are left out of this filter.
  • type. Event type slug.
  • from and to. Events that overlap the range. from keeps an event that has not ended before it. to keeps an event that starts on or before it.
  • Get one by slug: /api/v1/events/{id}

List events

curl "https://greensburgtimes.com/api/v1/events?municipality=Greensburg&from=2026-11-01&to=2026-12-31&limit=25"

Search events

curl "https://greensburgtimes.com/api/v1/events/search?q=council"

Get one event

curl https://greensburgtimes.com/api/v1/events/council-meeting

fish fries

Active fish fries. Ordered by slug. Phone numbers are not included.

  • limit, default 25, maximum 100.
  • cursor, the previous nextCursor.
  • municipality. Exact municipality name, for example Greensburg.
  • type. parish, vfd, club, restaurant, or other.
  • Get one by slug: /api/v1/fish-fries/{id}

List fish fries

curl "https://greensburgtimes.com/api/v1/fish-fries?municipality=Greensburg&type=parish&limit=25"

Search fish fries

curl "https://greensburgtimes.com/api/v1/fish-fries/search?q=grace"

Get one fish fry

curl https://greensburgtimes.com/api/v1/fish-fries/our-lady-of-grace

officials

Published officials. Ordered by slug. The id is the public id.

  • limit, default 25, maximum 100.
  • cursor, the previous nextCursor.
  • municipality. Exact municipality name, for example Greensburg.
  • governingBody. Exact name, for example Westmoreland County Board of Commissioners.
  • from and to. lastVerifiedAt is on or after from and on or before to. A day (2026-11-01) is that UTC day.
  • Get one by slug or public id: /api/v1/officials/{id}

List officials

curl "https://greensburgtimes.com/api/v1/officials?municipality=Greensburg&governingBody=Westmoreland%20County%20Board%20of%20Commissioners"

Search officials

curl "https://greensburgtimes.com/api/v1/officials/search?q=Kertes"

Get one official

curl https://greensburgtimes.com/api/v1/officials/sean-kertes

organizations

Published organizations, agencies, schools, and nonprofits. Ordered by slug.

  • limit, default 25, maximum 100.
  • cursor, the previous nextCursor.
  • municipality. Exact municipality name, for example Greensburg.
  • type. government, agency, school, nonprofit, church, club, or other.
  • from and to. lastVerifiedAt is on or after from and on or before to. A day (2026-11-01) is that UTC day.
  • Get one by slug or public id: /api/v1/organizations/{id}

List organizations

curl "https://greensburgtimes.com/api/v1/organizations?municipality=Greensburg&type=government&limit=25"

Search organizations

curl "https://greensburgtimes.com/api/v1/organizations/search?q=commissioners"

Get one organization

curl https://greensburgtimes.com/api/v1/organizations/westmoreland-county

venues

Published venues. Ordered by slug.

  • limit, default 25, maximum 100.
  • cursor, the previous nextCursor.
  • municipality. Exact municipality name, for example Greensburg.
  • type. hall, park, school, church, government, outdoor, or other.
  • from and to. lastVerifiedAt is on or after from and on or before to. A day (2026-11-01) is that UTC day.
  • Get one by slug or public id: /api/v1/venues/{id}

List venues

curl "https://greensburgtimes.com/api/v1/venues?municipality=Latrobe&type=other"

Search venues

curl "https://greensburgtimes.com/api/v1/venues/search?q=library"

Get one venue

curl https://greensburgtimes.com/api/v1/venues/adams-memorial-library

businesses

Published businesses. Ordered by slug.

  • limit, default 25, maximum 100.
  • cursor, the previous nextCursor.
  • municipality. Exact municipality name, for example Greensburg.
  • type. Directory category, for example restaurant. Exact match.
  • from and to. lastVerifiedAt is on or after from and on or before to. A day (2026-11-01) is that UTC day.
  • Get one by slug or public id: /api/v1/businesses/{id}

List businesses

curl "https://greensburgtimes.com/api/v1/businesses?municipality=Greensburg&type=restaurant"

Search businesses

curl "https://greensburgtimes.com/api/v1/businesses/search?q=hardware"

Get one business

curl https://greensburgtimes.com/api/v1/businesses/example-hardware

articles

Published articles. Title, summary, and link only. The body is not included. Ordered by published date, newest first.

  • limit, default 25, maximum 100.
  • cursor, the previous nextCursor.
  • type. Article category slug.
  • from and to. publishedAt is on or after from and on or before to. A day (2026-11-01) is that UTC day.
  • Get one by slug: /api/v1/articles/{id}

List articles

curl "https://greensburgtimes.com/api/v1/articles?type=government&from=2026-01-01&to=2026-12-31"

Search articles

curl "https://greensburgtimes.com/api/v1/articles/search?q=budget"

Get one article

curl https://greensburgtimes.com/api/v1/articles/example-brief