OAI-PMH Harvester Guide

The Union Catalog exposes one OAI-PMH endpoint:

http://union.dev.ndltd.org/oai-pmh/

The endpoint implements OAI-PMH version 2.0. It supports all six protocol verbs and accepts GET and POST requests. Responses are XML, as the protocol requires. ListMetadataFormats reports the available metadata formats.

An aggregator of source repositories

The catalog is an aggregator. It harvests records from participating source repositories and re-disseminates them from this one endpoint. The protocol's aggregator guidelines say how such a service should identify and attribute the records it passes along. The catalog follows them in three visible ways.

  • Identifiers. Each record is re-identified under the catalog's namespace as oai:union.ndltd.org:repo:<repo>:<upstream-identifier>. This unique identifier names the source repository and preserves the identifier the record carries there.
  • Sets. Each source repository is exposed as a set named repo:<repo>, alongside any setSpecs the source itself published, so one repository's records can be harvested selectively.
  • Provenance. Each record carries a provenance container in its <about> section, recording the source repository's base URL and the record's identifier and datestamp there.

Protocol requests

These links run the six verbs against the live endpoint. ListIdentifiers and ListRecords require a metadataPrefix. GetRecord also requires an identifier, so its bare link below returns the protocol's badArgument response.

Selective and incremental harvesting

ListRecords and ListIdentifiers support the protocol's selective harvesting arguments. They accept a set argument and from/until datestamps at second granularity (YYYY-MM-DDThh:mm:ssZ). A record's datestamp is the time the catalog's copy of it last changed. Passing the previous harvest time as from collects only records added, updated, or deleted since then.

http://union.dev.ndltd.org/oai-pmh/?verb=ListRecords&metadataPrefix=oai_dc&set=repo:vt
http://union.dev.ndltd.org/oai-pmh/?verb=ListRecords&metadataPrefix=oai_dc&from=2026-01-01T00:00:00Z

Flow control

List responses return up to 100 records per page and carry a resumptionToken. Tokens are stateless and signed. A harvest can pause and resume at any point before the token's expirationDate, about an hour after issue. The first page reports completeListSize, and every page reports a cursor. If a token expires, the harvester reissues the original list request.

Deleted records

The catalog declares deletedRecord=persistent. When a source repository deletes a record, the catalog keeps a tombstone, a header with status="deleted" and no metadata. Tombstones remain visible so downstream harvesters can propagate removals.

Dissemination

The endpoint serves the records the catalog has classified as theses or dissertations. Deletion tombstones are always disseminated so removals propagate. Participating institutions retain control over their full-text content. The catalog aggregates descriptive metadata for discovery.

The API reference documents the catalog's other machine interfaces, including the search API, item metadata, MCP, RSS, and sitemaps. See the Terms of Service.