Saratoga Falcon APIsaratogafalcon.org ↗
Access articles from The Saratoga Falcon student newspaper by staff member. Returns titles, dates, excerpts, categories, and pagination via a single endpoint.
What is the Saratoga Falcon API?
The Saratoga Falcon API provides one endpoint — get_articles_by_staff — that returns all articles written by a named staff member of The Saratoga Falcon, a high school student newspaper. Each response includes 7 fields per article: id, title, slug, publication date, link, HTML excerpt, and category IDs, plus top-level pagination metadata covering total article count and total pages.
curl -X GET 'https://api.parse.bot/scraper/821432d1-df52-43dd-807e-0a8293e884e8/get_articles_by_staff?page=1&per_page=5&staff_name=ethan-ko' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace saratogafalcon-org-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Saratoga Falcon Staff Articles — bounded, re-runnable."""
from parse_apis.saratoga_falcon_staff_articles_api import SaratogaFalcon, StaffName, StaffNotFound
client = SaratogaFalcon()
# Construct a staff member by slug and list their articles (capped).
staff = client.staffmember(slug=StaffName.ETHAN_KO)
for article in staff.articles(per_page=5, limit=5):
print(article.title, article.date)
# Drill-down: take one article with .first()
first_article = staff.articles(limit=1).first()
if first_article:
print(first_article.title, first_article.link, first_article.categories)
# Typed error handling: catch StaffNotFound for an invalid slug.
bad_staff = client.staffmember(slug="nonexistent-person")
try:
bad_staff.articles(limit=1).first()
except StaffNotFound as exc:
print(f"Staff not found: {exc.staff_name}")
print("exercised: staffmember / articles.list / StaffNotFound error")
Get all articles written by a staff member, identified by their URL slug. Returns paginated results with article titles, dates, links, and excerpts. Pagination via integer page number; each article includes id, title, slug, publication date, link, excerpt HTML, and category IDs.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| per_page | integer | Number of articles per page, between 1 and 100. |
| staff_namerequired | string | URL slug of the staff member (e.g. 'ethan-ko', 'ryan-kim'). This is the hyphenated lowercase name as it appears in the staff URL path. |
{
"type": "object",
"fields": {
"page": "integer - current page number",
"articles": "array of article objects with id, title, slug, date, link, excerpt, categories",
"per_page": "integer - results per page",
"staff_name": "string - display name of the staff member",
"staff_slug": "string - URL slug used in the request",
"total_pages": "integer - total number of pages",
"total_articles": "integer - total number of articles by this staff member"
},
"sample": {
"page": 1,
"articles": [
{
"id": 8444,
"date": "2017-06-06T11:09:48",
"link": "https://saratogafalcon.org/8444/opinion/bursting-bubble-unsafe-communities-differ-most-education/",
"slug": "bursting-bubble-unsafe-communities-differ-most-education",
"title": "Bursting the bubble: ‘Unsafe’ communities differ most in education",
"excerpt": "<p>Exploring the Saratoga bubble – 1 in 2000 have a chance of becoming victims of crime.</p>\n",
"categories": [
4
]
}
],
"per_page": 20,
"staff_name": "Ethan Ko",
"staff_slug": "ethan-ko",
"total_pages": 1,
"total_articles": 16
}
}About the Saratoga Falcon API
What the API Returns
The single endpoint get_articles_by_staff accepts a required staff_name parameter — the hyphenated lowercase URL slug of a staff writer (e.g. ethan-ko, ryan-kim) — and returns that writer's full article history from The Saratoga Falcon. Each article object contains an id, title, slug, date, link, HTML excerpt, and an array of categories (as IDs). The top-level response wraps these in pagination metadata: page, per_page, total_pages, and total_articles.
Pagination and Filtering
Results are paginated. The optional page parameter selects the result page (integer), and per_page controls how many articles appear per page, accepting values between 1 and 100. The response always echoes back staff_name (the display name resolved from the slug) and staff_slug (the slug as submitted), which makes it straightforward to confirm you're querying the correct author.
Coverage Scope
Coverage is limited to content published under individual staff bylines on saratogafalcon.org. The API reflects the publication's own author-to-article mapping, so articles attributed to multiple authors will appear under each credited staff slug. Article bodies are not returned — only the HTML excerpt — and category data is returned as IDs rather than human-readable labels.
The Saratoga Falcon API is a managed, monitored endpoint for saratogafalcon.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when saratogafalcon.org changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official saratogafalcon.org API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build an author portfolio page that lists all articles a specific Saratoga Falcon staff writer has published, using
title,date, andlinkfields. - Track publication frequency for a staff member over time by parsing the
datefield across paginated results. - Aggregate article counts per writer using
total_articlesto identify the most prolific contributors. - Filter coverage by topic by cross-referencing returned
categoriesIDs against known category mappings. - Display article teasers in a school community app using the HTML
excerptfield alongside articletitleandlink. - Monitor when a specific student journalist publishes new work by polling
get_articles_by_staffand comparing the latestdatevalues.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does The Saratoga Falcon have an official developer API?+
What does `get_articles_by_staff` return beyond the article list?+
staff_name (the resolved display name), staff_slug (the slug you submitted), total_articles (total count of articles by that writer), total_pages, page, and per_page. This lets you paginate through a full author history without additional lookups.Does the API return full article body text?+
excerpt per article rather than the complete body text, along with title, date, link, slug, id, and categories. You can fork the API on Parse and revise it to add a full-article body endpoint if your use case requires the complete text.Can I query articles by category, date range, or keyword rather than by staff member?+
staff_name (the author slug). You can fork the API on Parse and revise it to add endpoints that filter by category ID, date range, or keyword search.How do I find the correct `staff_name` slug for a writer?+
/staff_name/ethan-ko/ corresponds to the slug ethan-ko. If a slug does not match any known author, the endpoint will return zero articles and a total_articles of 0.