USM Repository EPrints REST and Export

Anonymous read interface to Repository@USM beyond OAI-PMH, verified route by route on 2026-09-01. /rest/ exposes three datasets (eprint, user, subject); /rest/eprint/{id}.xml returns full EPrints EP2 data XML; /rest/eprint/{id}/{field}.txt gives single-field plain-text access; /rest/subject/{id}.xml walks the Library of Congress subject tree; and /cgi/export/eprint/{id}/{format}/{filename} serves seventeen verified bibliographic serializations including JSON, RDF/XML, METS, MODS, DIDL, Atom, BibTeX and RIS. One soft-404 trap is documented in the contract: /rest/eprint/{id}.json answers HTTP 200 with the repository's HTML landing page, not JSON.

Operations 7

GET /rest/ List the REST datasets exposed by the repository #
GET /rest/eprint/ List every eprint id in the repository #
GET /rest/eprint/{eprintid}.xml Get one record as EPrints EP2 data XML #
GET /rest/eprint/{eprintid}/documents.xml Get the document (file) set attached to a record #
GET /rest/eprint/{eprintid}/{field}.txt Get a single metadata field as plain text #
GET /rest/subject/{subjectid}.xml Get one subject-classification node as EP2 XML #
GET /cgi/export/eprint/{eprintid}/{format}/{filename} Export one record in a named bibliographic format #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/eprints-rest"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

usm-repository-eprints-rest-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: USM Repository EPrints REST
  version: '3.3.16'
  x-generated: '2026-09-01'
  x-method: derived
  x-source: >-
    Hand-derived from live probes of https://eprints.usm.my/rest/ and
    https://eprints.usm.my/cgi/export/ on 2026-09-01. Every path, response media type
    and export format below was individually requested and its status code and
    Content-Type recorded. USM publishes no OpenAPI for this surface; this description
    is API Evangelist's, not the institution's.
  x-operator: institution
  description: >-
    Read interface to Repository@USM, the EPrints 3.3.16 institutional repository
    Universiti Sains Malaysia runs on its own host. Two families were verified live:
    the EPrints REST tree at /rest/ (dataset indexes for eprint, user and subject; EP2
    data XML per record at /rest/eprint/{id}.xml; sub-resources such as
    /rest/eprint/{id}/documents.xml; and plain-text single-field access at
    /rest/eprint/{id}/{field}.txt), and the export plugin tree at
    /cgi/export/eprint/{id}/{format}/{filename}, where seventeen formats answered 200
    with distinct Content-Types. Read access is anonymous; no key, token or OAuth flow
    is offered or required. NOTE the one soft-404 trap on this host — requesting
    /rest/eprint/{id}.json returns HTTP 200 with the repository's HTML landing page,
    not JSON. JSON comes only from the export plugin.
  contact:
    name: Repository@USM administrator
    email: eprints@usm.my
    url: https://eprints.usm.my/
servers:
  - url: https://eprints.usm.my
    description: Repository@USM (production, verified 2026-09-01)
tags:
  - name: Repository
    description: EPrints REST dataset and record access.
  - name: Export
    description: EPrints export plugins — one bibliographic serialization per format.
paths:
  /rest/:
    get:
      tags: [ Repository ]
      operationId: listDatasets
      summary: List the REST datasets exposed by the repository
      description: >-
        Returns an XHTML index. Verified 2026-09-01 — three datasets are exposed:
        eprint, user, subject.
      responses:
        '200':
          description: XHTML index of datasets.
          content:
            text/html:
              schema: { type: string, contentMediaType: text/html }
  /rest/eprint/:
    get:
      tags: [ Repository ]
      operationId: listEprints
      summary: List every eprint id in the repository
      description: >-
        XHTML index of every record id. Large — 5.0 MB on 2026-09-01. Prefer OAI-PMH
        ListIdentifiers for incremental harvesting.
      responses:
        '200':
          description: XHTML index of eprint ids.
          content:
            text/html:
              schema: { type: string, contentMediaType: text/html }
  /rest/eprint/{eprintid}.xml:
    get:
      tags: [ Repository ]
      operationId: getEprintXml
      summary: Get one record as EPrints EP2 data XML
      description: >-
        Returns the full record in the http://eprints.org/ep2/data/2.0 namespace,
        including nested documents and files. Verified 200 text/xml on 2026-09-01.
      parameters:
        - name: eprintid
          in: path
          required: true
          schema: { type: integer }
          examples: [ 16 ]
      responses:
        '200':
          description: EP2 data XML for the record.
          content:
            text/xml:
              schema: { type: string, contentMediaType: text/xml }
  /rest/eprint/{eprintid}/documents.xml:
    get:
      tags: [ Repository ]
      operationId: getEprintDocuments
      summary: Get the document (file) set attached to a record
      parameters:
        - name: eprintid
          in: path
          required: true
          schema: { type: integer }
      responses:
        '200':
          description: EP2 documents XML.
          content:
            text/xml:
              schema: { type: string, contentMediaType: text/xml }
  /rest/eprint/{eprintid}/{field}.txt:
    get:
      tags: [ Repository ]
      operationId: getEprintField
      summary: Get a single metadata field as plain text
      description: >-
        Field-level access. Verified with field=title on 2026-09-01 (200 text/plain).
      parameters:
        - name: eprintid
          in: path
          required: true
          schema: { type: integer }
        - name: field
          in: path
          required: true
          description: EPrints field name, for example title or abstract.
          schema: { type: string }
      responses:
        '200':
          description: Field value as plain text.
          content:
            text/plain:
              schema: { type: string }
  /rest/subject/{subjectid}.xml:
    get:
      tags: [ Repository ]
      operationId: getSubject
      summary: Get one subject-classification node as EP2 XML
      parameters:
        - name: subjectid
          in: path
          required: true
          schema: { type: string }
          examples: [ 'Q' ]
      responses:
        '200':
          description: EP2 subjects XML.
          content:
            text/xml:
              schema: { type: string, contentMediaType: text/xml }
  /cgi/export/eprint/{eprintid}/{format}/{filename}:
    get:
      tags: [ Export ]
      operationId: exportEprint
      summary: Export one record in a named bibliographic format
      description: >-
        Seventeen formats answered 200 on 2026-09-01, each with its own Content-Type.
        JSON, RDFXML, METS, MODS, DIDL, ContextObject and Atom carry structured
        content-types; BibTeX, RIS, EndNote, Refer, DC, Simple, Text, COinS and RDFNT
        return text/plain. The filename segment is arbitrary and only names the
        download.
      parameters:
        - name: eprintid
          in: path
          required: true
          schema: { type: integer }
        - name: format
          in: path
          required: true
          schema:
            type: string
            enum: [ JSON, XML, BibTeX, RDFXML, RDFNT, DC, EndNote, METS, MODS, Atom, RIS, ContextObject, Refer, Simple, Text, COinS, DIDL ]
        - name: filename
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: The record serialized in the requested format.
          content:
            application/json:
              schema:
                $ref: ../json-schema/usm-eprint-record.json
            application/rdf+xml:
              schema: { type: string, contentMediaType: application/rdf+xml }
            text/plain:
              schema: { type: string }