Discover/Utoronto API
live

Utoronto APIrpo.library.utoronto.ca

Access thousands of poems, poet biographies, glossary terms, timelines, and awards from Representative Poetry Online via 15 structured endpoints.

Endpoint health
verified 3d ago
list_poets
get_poem
list_poems
advanced_search_poets
get_timeline
15/15 passing latest checkself-healing
Endpoints
15
Updated
26d ago

What is the Utoronto API?

The RPO API exposes 15 endpoints covering the full contents of Representative Poetry Online, including poem full-text with line numbers, poet biographies, a chronological poetry timeline, a glossary, bibliography, and honours records. The get_poem endpoint returns structured line objects, rhyme scheme, poetic form, publication year, and citation data. The advanced_search_poems endpoint filters by literary period, movement, nationality, poetic form, rhyme scheme, and publication year.

Try it
Zero-indexed page number for pagination.
api.parse.bot/scraper/9b664bef-3066-4f73-bc1a-f68bf21744ec/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/9b664bef-3066-4f73-bc1a-f68bf21744ec/list_poems?page=0' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

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 rpo-library-utoronto-ca-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: RPO SDK — search poems, explore poets, browse glossary."""
from parse_apis.rpo_poetry_api import RPO, YearOp, PoemNotFound

client = RPO()

# Search poems by keyword, iterate with a cap
for poem in client.poemsummaries.search(query="rose", limit=5):
    print(poem.title, poem.poet)

# Drill into the first result's full text
poem_summary = client.poemsummaries.search(query="silence", limit=1).first()
if poem_summary:
    full_poem = poem_summary.details()
    print(full_poem.title, full_poem.poet, full_poem.poet_dates)
    for line in full_poem.text[:4]:
        print(line.line_number, line.line_text)
    print(full_poem.metadata.rhyme_scheme, full_poem.metadata.poetic_form)

# Search poets and get full biography
poet_summary = client.poetsummaries.search(query="Keats", limit=1).first()
if poet_summary:
    poet = poet_summary.details()
    print(poet.name, poet.birth_date, poet.nationality)
    print(poet.metadata.literary_period)

# Typed error handling for a missing poem
try:
    bad = client.poemsummaries.search(query="zzz_nonexistent_zzz", limit=1).first()
    if bad:
        bad.details()
except PoemNotFound as exc:
    print(f"Poem not found: {exc.slug}")

# Browse glossary entries filtered by letter
for entry in client.glossaryentries.list(letter="S", limit=3):
    print(entry.term, entry.definition[:60] if entry.definition else "")

print("exercised: poemsummaries.search / details / poetsummaries.search / details / glossaryentries.list")
All endpoints · 15 totalmissing one? ·

List poems in the RPO database alphabetically. Returns paginated poem summaries. Each page contains approximately 40 poems. Use page=0 for the first page.

Input
ParamTypeDescription
pageintegerZero-indexed page number for pagination.
Response
{
  "type": "object",
  "fields": {
    "page": "integer, current page number",
    "poems": "array of poem summary objects, each containing title, url, path, and poet"
  },
  "sample": {
    "data": {
      "page": 0,
      "poems": [
        {
          "url": "https://rpo.library.utoronto.ca/node/78791",
          "path": "/node/78791",
          "poet": "Brooks, Shirley",
          "title": "&"
        },
        {
          "url": "https://rpo.library.utoronto.ca/content/harsher-sentences",
          "path": "/content/harsher-sentences",
          "poet": "Christakos, Margaret",
          "title": "/harsher sentences"
        }
      ]
    },
    "status": "success"
  }
}

About the Utoronto API

Poem Data

The get_poem endpoint accepts a poem slug, node ID, or full path and returns the complete poem text as an array of line objects — each with line_number and line_text — alongside structured metadata fields including rhyme_scheme, poetic_form, publication_year, editors, and edition. Citation data comes back as a separate object with source_book, publisher, and library_call_number where available. The get_random_poem endpoint returns the same structure without requiring any input.

Poet Data

The get_poet endpoint returns a full poet profile: biography, birth_date, death_date, nationality, literary_period, literary_movement, honours, occupations, and a bibliography array. The poems field lists every poem in the RPO database attributed to that poet, each with title, slug, url, and path. The advanced_search_poets endpoint filters across birth_year, death_year, nationality, period, and movement taxonomy IDs, all paginated with zero-indexed page parameters.

Reference Data

The get_timeline endpoint returns a chronological array of events covering English poetry from ancient to modern times, each with a year and event description. The get_glossary endpoint supports filtering by letter or query, returning term, definition, and url for each entry. The get_bibliography endpoint similarly supports letter- and keyword-based browsing, returning structured fields including author, title, edition, place, publisher, and year.

Honours and Collections

The get_poet_honours endpoint returns a paginated list of named poetry awards, each with a recipients array containing year, poet name, and poet slug. The list_collections endpoint returns poem sequences and collections with title, slug, url, and poet, paginated via the page parameter.

Reliability & maintenanceVerified

The Utoronto API is a managed, monitored endpoint for rpo.library.utoronto.ca — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when rpo.library.utoronto.ca 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 rpo.library.utoronto.ca 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.

Last verified
3d ago
Latest check
15/15 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a poetry reader app that displays full poem text with line numbers using get_poem
  • Populate a literary database with poet biographies, nationalities, and dates from get_poet
  • Drive a poetry discovery feature using get_random_poem or get_random_poet
  • Filter poems by rhyme scheme or poetic form using advanced_search_poems for classroom tools
  • Display a chronological timeline of English poetry using get_timeline event objects
  • Look up definitions for poetic terms with the get_glossary letter and keyword filters
  • Track poetry award history by poet and year using get_poet_honours recipient data
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 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.

Frequently asked questions
Does Representative Poetry Online have an official developer API?+
No. RPO is an academic digital anthology maintained by the University of Toronto Libraries. It does not publish an official public API or documented developer interface.
What does advanced_search_poems accept for the rhyme, form, period, movement, and nationality parameters?+
Those parameters use RPO's internal taxonomy IDs — integer-style identifiers specific to the site. Pass 'All' for any of them to skip that filter. The year_op parameter accepts '=', '<', '>', or 'between' to control how the year value is applied.
Does the API expose individual poem annotations or line-level notes beyond line number and text?+
Not currently. The text field in get_poem returns line objects with line_number and line_text only. Supplementary editorial notes or annotations are not included in the response. You can fork this API on Parse and revise it to add an endpoint targeting annotated content if RPO exposes it on specific poem pages.
Is there a way to retrieve all poems by a specific poet directly?+
Yes. The get_poet endpoint returns a poems array listing every poem attributed to that poet, each with title, slug, url, and path. You can then pass any poem's slug to get_poem for full text and metadata.
Does the API cover full bibliography entries for individual poets, or only the general RPO bibliography?+
Both are covered in separate endpoints. get_poet returns a bibliography array scoped to that individual poet. get_bibliography returns the site's general bibliography, browsable by letter (a–z) or keyword query, with structured author, title, edition, place, publisher, and year fields.
Page content last updated . Spec covers 15 endpoints from rpo.library.utoronto.ca.
Related APIs in EducationSee all →
royalsocietypublishing.org API
Search and browse scientific articles, journals, and issues from the Royal Society Publishing platform, including filtering by subject, year, and latest publications. Access detailed information about specific articles, journals, and current issues to stay updated on peer-reviewed research.
lyrics.com API
Search and retrieve song lyrics, artist biographies, and album information across multiple genres and artists. Browse music content by artist, letter, or genre, and discover new or random songs to explore.
rokomari.com API
Search for books and explore detailed information about titles, authors, and awards from Rokomari's catalog. Browse bestsellers, categories, quick deals, and discover author profiles all in one place.
novelbin.me API
Search and browse novels by title, genre, or popularity, and explore trending, completed, or recently updated works. Access full novel details, chapter listings, chapter content, author information, related titles, and reader comments. Authenticated users can manage bookmarks with reading-status tracking and subscribe to novels for update notifications.
booksrun.com API
Search millions of books and get instant buyback quotes on BooksRun. Browse bestsellers and categories, view detailed book information, and check condition guidelines to understand buyback prices and acceptance criteria.
rhsplants.co.uk API
Search and browse the RHS Plants catalogue to discover thousands of plants and gardening products. Retrieve detailed specifications, growing conditions, images, and purchasing options for any plant, and filter or sort results by category or keyword.
simplyscripts.com API
Search and browse thousands of movie, TV, radio, and unproduced scripts from SimplyScripts.com, including Oscar-winning screenplays and the latest additions. Filter by genre, alphabetically, or by script type to find exactly what you're looking for.
kobo.com API
Search and browse millions of eBooks and audiobooks from Kobo, discover bestsellers and daily deals across different categories, and get detailed information about specific books and authors. Find free eBooks, explore category collections, and use autocomplete to quickly locate titles that interest you.