Aquinas APIaquinas.cc ↗
Access bilingual Latin/English texts from Thomas Aquinas's works via 4 endpoints. Search across the full library, retrieve articles by reference, and extract statements.
What is the Aquinas API?
The aquinas.cc API provides 4 endpoints for retrieving and searching the bilingual Latin/English corpus of Thomas Aquinas's philosophical and theological works. The get_article endpoint returns paragraph-level cell objects — each with latin and english fields — for any article identified by its canonical reference (e.g. ST.I.Q2.A2). The search endpoint spans the entire library, returning per-work hit counts for any query term.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/5e7a1012-085b-4971-a63a-3ac66e69f9e5/list_works' \ -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 aquinas-cc-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.
"""Aquinas Library: search and retrieve bilingual texts from Thomas Aquinas's works."""
from parse_apis.aquinas_library_api import Aquinas, SearchMode, WorkNotFound
client = Aquinas()
# List available works in the library
for work in client.works.list(limit=5):
print(work.code, work.wid)
# Search for a Latin term across all works
for result in client.works.search(query="gratia", mode=SearchMode.EXACT, limit=5):
print(result.wid, result.hit_count)
# Retrieve bilingual article text from a specific work
st = client.work("ST.I")
for cell in st.get_article(ref="ST.I.Q2.A2", limit=3):
print(cell.cell_id, cell.latin[:60], cell.english[:60])
# Extract matching statements across the corpus
for stmt in client.works.get_statements(query="subsistendi", limit=3):
print(stmt.work_id, stmt.cell_id, stmt.latin[:50], stmt.english[:50])
# Handle typed errors when a work code is invalid
try:
bad = client.work("INVALID")
list(bad.get_article(ref="INVALID.Q1.A1", limit=1))
except WorkNotFound as exc:
print(f"Work not found: {exc.work}")
print("exercised: works.list / works.search / work.get_article / works.get_statements")List all available works in the Aquinas library with their internal work IDs and work codes. Returns a list of works with code and numeric ID that can be used with other endpoints.
No input parameters required.
{
"type": "object",
"fields": {
"works": "array of objects with code (string work code) and wid (integer work ID)"
},
"sample": {
"data": {
"works": [
{
"wid": 15,
"code": "ST.I"
},
{
"wid": 21,
"code": "ST.III"
},
{
"wid": 11,
"code": "SCG1"
}
]
},
"status": "success"
}
}About the Aquinas API
What the API Covers
The API exposes the full Aquinas library available on aquinas.cc, covering major works including the Summa Theologiae, Summa Contra Gentiles, and others accessible via work codes returned by list_works. Every work is identified by a string code and an integer wid, both of which are reused as parameters across other endpoints.
Article and Statement Retrieval
get_article accepts two required parameters — work (e.g. ST.I, SCG1) and ref (e.g. ST.I.Q2.A2) — and returns an array of cells. Each cell carries a cell_id (integer), a latin string, and an english string, representing one paragraph-level segment of the article. This makes it straightforward to render parallel text views or align Latin passages with their translations programmatically.
get_statements focuses on term-level extraction: given a Latin query string, it searches the library and returns up to 20 matching passages drawn from the top 5 works by hit count. Each result includes work_id, cell_id, latin, and english, letting you pull thematic clusters of passages without knowing the article reference in advance.
Search Behavior
search accepts a required query parameter and an optional mode parameter that controls matching strategy — exact match, any word, all words, or regex. Results are aggregated at the work level, returning each matching wid alongside its hit_count. This is useful for prioritizing which works to inspect further before fetching full article content.
The Aquinas API is a managed, monitored endpoint for aquinas.cc — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when aquinas.cc 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 aquinas.cc 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 a parallel Latin/English reader for Aquinas texts using cell-level bilingual data from
get_article - Generate a concordance of a Latin term across all works using
searchhit counts per work - Extract thematic passages on a concept like
gratiaorsubsistendiusingget_statements - Populate a reference tool that resolves canonical article citations (e.g. ST.I.Q2.A2) to full bilingual text
- Compare frequency of a theological term across different Aquinas works using per-work hit counts
- Feed bilingual cell pairs into a translation quality analysis or alignment model
| 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 aquinas.cc offer an official developer API?+
What does `get_article` return, and how specific must the reference be?+
cells, each with a cell_id integer, a latin string, and an english string corresponding to one paragraph-level segment. The ref parameter must follow the format WorkCode.Q{number}.A{number} (e.g. ST.I.Q2.A2), and the work parameter must match the work code from list_works. Both parameters are required — partial references are not supported.Does `get_statements` search English text as well as Latin?+
get_statements searches Latin text only, and search also defaults to Latin. The search endpoint accepts a mode parameter for exact, any-word, all-words, or regex matching, but English-language search is not a documented option for get_statements. You can fork this API on Parse and revise it to add an English-text search path for get_statements.Is there pagination support for `search` or `get_statements` results?+
search returns all matching works with their hit counts in a single response. get_statements is capped at 20 results from the top 5 works by hit count — there is no offset or page parameter to retrieve additional results beyond that limit. You can fork this API on Parse and revise it to add pagination or a higher result cap.Can I retrieve an entire work or a full question rather than a single article?+
get_article requires a specific Q/A reference) or return cell-level passages (get_statements). There is no endpoint to retrieve all articles within a question or an entire work in one call. You can fork this API on Parse and revise it to add a bulk-retrieval endpoint at the question or work level.