Gov APIsayistay.gov.tr ↗
Access Turkish Court of Accounts audit reports, General Assembly decisions, Appeals Board rulings, and homepage announcements via a structured REST API.
What is the Gov API?
This API exposes 9 endpoints covering the full content hierarchy of sayistay.gov.tr — Turkey's supreme audit institution. Starting with get_report_categories, you can traverse top-level and subcategory classifications, list paginated audit reports, retrieve per-report file download links and metadata, search across all categories by keyword, and pull full-text judicial decisions from both the General Assembly and the Appeals Board.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/7edfaad5-73f2-4f3f-834d-b6162de144c0/get_report_categories' \ -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 sayistay-gov-tr-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: Sayistay SDK — Turkish Court of Accounts audit reports and decisions."""
from parse_apis.turkish_court_of_accounts_sayistay_api import (
Sayistay, Category, Subcategory, Report, ReportDetail,
AppealsBoardDecision, GeneralAssemblyDecision, SearchResult,
Announcement, NotFoundError,
)
client = Sayistay()
# List top-level report categories
for cat in client.categories.list(limit=5):
print(cat.name, cat.id, cat.slug)
# Drill into subcategories of the first category with children
cat = client.categories.list(limit=10).first()
if cat:
for sub in cat.subcategories.list(limit=3):
print(sub.name, sub.id)
# List reports in this subcategory
report = sub.reports(limit=1).first()
if report:
# Get full report detail via navigation
detail = report.detail()
print(detail.title, detail.url)
for f in detail.files:
print(f.name, f.url)
break
# Search reports by keyword
for result in client.searchresults.search(query="belediye", limit=3):
print(result.title, result.url, result.description)
# Fetch a General Assembly decision by ID with error handling
try:
decision = client.generalassemblydecisions.get(id="42134")
print(decision.id, decision.url, decision.content[:100])
except NotFoundError as exc:
print(f"Decision not found: {exc}")
# List Appeals Board decisions
for d in client.appealsboarddecisions.list(limit=3):
print(d.id, d.date, d.department, d.decision_summary[:60])
# Homepage announcements
for ann in client.announcements.list(limit=3):
print(ann.title, ann.url)
print("exercised: categories.list / subcategories.list / reports / detail / search / get decision / appeals list / announcements")
Returns all top-level audit report categories available on the Sayıştay reports page. Each category includes an id, slug, name, and URL. Use category id and slug as inputs to get_report_subcategories or list_reports.
No input parameters required.
{
"type": "object",
"fields": {
"categories": "array of category objects each with id, slug, name, and url"
},
"sample": {
"data": {
"categories": [
{
"id": "16",
"url": "https://sayistay.gov.tr/reports/category/16-kamuoyu-duyurusu",
"name": "Kamuoyu Duyurusu",
"slug": "kamuoyu-duyurusu"
},
{
"id": "5",
"url": "https://sayistay.gov.tr/reports/category/5-kamu-idareleri-denetim-raporlari",
"name": "Kamu İdareleri Denetim Raporları",
"slug": "kamu-idareleri-denetim-raporlari"
}
]
},
"status": "success"
}
}About the Gov API
Audit Report Discovery and Detail
The get_report_categories endpoint returns all top-level categories, each with an id, slug, name, and url. Subcategories are a separate call via get_report_subcategories, which requires the parent slug and category_id — note that only certain parent categories (such as kamu-idareleri-denetim-raporlari) have children; others return an empty array. Once you have a target category or subcategory, list_reports accepts a page parameter for pagination and returns an array of report objects with title, year, url, and slug. Passing a report slug to get_report_detail yields the full picture: a files array of named download links, a title string, and a metadata object of key-value pairs such as audit year and institution name.
Search and Keyword Filtering
search_reports accepts a free-text query parameter (e.g. belediye for municipal reports) and returns matching records with title, url, and a description snippet. This is useful for cross-category lookups without knowing which category a report belongs to. The search operates across the full report catalog, not just a single category.
Judicial Decisions
Two decision endpoints cover Sayıştay's judicial output. list_general_assembly_decisions and list_appeals_board_decisions both support optional query, start, and length parameters for keyword filtering and cursor-style pagination. The General Assembly listing also returns a recordsTotal integer for sizing result sets. get_general_assembly_decision_detail takes a decision id (obtainable from decision text references) and returns the content string containing the full decision text, a url, and a metadata object.
Homepage Announcements
get_homepage_announcements requires no inputs and returns an announcements array of objects with title and url, reflecting current featured links and institutional notices from the Sayıştay homepage. This endpoint is suitable for monitoring new publications or institutional updates without parsing the full report catalog.
The Gov API is a managed, monitored endpoint for sayistay.gov.tr — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when sayistay.gov.tr 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 sayistay.gov.tr 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?+
- Aggregating annual audit reports for specific Turkish public institutions by filtering with
list_reportsand a known subcategory ID - Building a full-text search index of Sayıştay audit reports using
search_reportswith various municipal or ministry keywords - Downloading audit report documents programmatically via the
filesarray returned byget_report_detail - Tracking new General Assembly decisions by polling
list_general_assembly_decisionswithstartandlengthpagination parameters - Retrieving the complete text of a specific Appeals Board or General Assembly ruling by decision ID for legal research
- Monitoring new institutional announcements and featured publications from the Sayıştay homepage via
get_homepage_announcements - Mapping the full category and subcategory tree of Turkish public audit report types using
get_report_categoriesandget_report_subcategories
| 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 Sayıştay provide an official public developer API?+
What does `get_report_detail` return beyond basic metadata?+
get_report_detail returns the report title, the page url, a metadata object of key-value pairs (such as institution name and audit year), and a files array where each entry has a name and a direct download url for the report document. It does not return the parsed body text of the PDF documents themselves.Does `get_report_subcategories` work for every parent category?+
kamu-idareleri-denetim-raporlari (category_id 5) — return results. Passing a leaf category returns an empty subcategories array. Use get_report_categories first to identify valid parent slugs before calling this endpoint.Does the API cover Appeals Board decision detail pages, similar to `get_general_assembly_decision_detail`?+
list_appeals_board_decisions for paginated listing and keyword filtering, but there is no dedicated endpoint for retrieving the full text and metadata of an individual Appeals Board decision by ID. You can fork this API on Parse and revise it to add that detail endpoint.