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/ruor-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: 3.0.3
info:
title: uO Research (Recherche uO Research) DSpace REST API
version: '8.3'
description: >-
Read-only description of the publicly reachable subset of the DSpace REST/HATEOAS API
that the University of Ottawa Library operates for uO Research (Recherche uO Research),
the institution's own institutional repository, at https://ruor.uottawa.ca/server/api.
OPERATOR: University of Ottawa. The host ruor.uottawa.ca resolves to 137.122.5.61, inside
the University of Ottawa's own IP allocation, and the API root reports
dspaceName "Recherche uO Research" with adminEmail ruor@uottawa.ca. The SOFTWARE is
DSpace 8.3, an open-source repository platform stewarded by LYRASIS; uOttawa self-hosts
it. The endpoint design is DSpace's, the deployment, content and DOIs are uOttawa's.
PROVENANCE: The University of Ottawa publishes no OpenAPI for this API. This document was
written by API Evangelist from live, unauthenticated probes of the endpoints below on
2026-09-01, and describes only operations that were actually called and whose status code
was recorded. It is not a complete description of the DSpace 8.3 API - the root advertises
79 HAL link relations, most of which require authentication and were not probed.
contact:
name: uO Research, University of Ottawa Library
email: ruor@uottawa.ca
url: https://ruor.uottawa.ca/
license:
name: Not stated by the operator
url: https://ruor.uottawa.ca/
servers:
- url: https://ruor.uottawa.ca/server/api
description: Production DSpace 8.3 REST API, University of Ottawa Library
x-operator: institution
x-provenance:
generated: '2026-09-01'
method: probed
source: https://ruor.uottawa.ca/server/api
author: API Evangelist
note: >-
Probed, not published by the institution and not derived from a vendor document.
Every path below was requested anonymously and the recorded response codes are real.
paths:
/:
get:
operationId: getRoot
summary: API root / service document
description: >-
Returns the DSpace HAL root document. Probed 2026-09-01: HTTP 200,
application/hal+json, 8,619 bytes, dspaceVersion "DSpace 8.3",
dspaceName "Recherche uO Research", 79 HAL link relations.
responses:
'200':
description: HAL root document
content:
application/hal+json:
schema:
$ref: '#/components/schemas/Root'
/core/communities:
get:
operationId: listCommunities
summary: List top-level and child communities
description: >-
Probed 2026-09-01 with ?size=1: HTTP 200, application/hal+json, first community
"Affaires academiques // Academic Affairs", handle 10393/51008.
parameters:
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/Size'
responses:
'200':
description: Paged HAL collection of communities
content:
application/hal+json:
schema:
$ref: '#/components/schemas/PagedCommunities'
/core/communities/{uuid}:
get:
operationId: getCommunity
summary: Get one community by UUID
description: >-
Probed 2026-09-01 with a non-UUID identifier: HTTP 401. This deployment answers
unresolvable or unauthorized DSpace object requests with 401, not 404.
parameters:
- name: uuid
in: path
required: true
schema: { type: string, format: uuid }
responses:
'200':
description: A single community
content:
application/hal+json:
schema: { type: object }
'401':
description: Unauthenticated request for a non-resolvable or restricted object
content:
application/json:
schema: { $ref: '#/components/schemas/Error' }
/core/collections:
get:
operationId: listCollections
summary: List collections
description: 'Probed 2026-09-01 with ?size=1: HTTP 200, application/hal+json, 5,312 bytes.'
parameters:
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/Size'
responses:
'200':
description: Paged HAL collection of collections
content:
application/hal+json:
schema: { type: object }
/core/items:
get:
operationId: listItems
summary: List items
description: >-
Probed 2026-09-01 with ?size=1: HTTP 401. Item enumeration is closed to
anonymous callers on this deployment; public discovery goes through
/discover/search/objects instead.
responses:
'401':
description: Authentication required
content:
application/json:
schema: { $ref: '#/components/schemas/Error' }
/discover/search/objects:
get:
operationId: searchObjects
summary: Discovery search across the repository
description: >-
Probed 2026-09-01 with ?query=climate&size=1: HTTP 200, application/hal+json,
21,098 bytes, returning embedded search results with facets. This is the
anonymous read path for repository content.
parameters:
- name: query
in: query
schema: { type: string }
- name: dsoType
in: query
schema: { type: string, enum: [community, collection, item] }
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/Size'
responses:
'200':
description: Discovery result document
content:
application/hal+json:
schema: { type: object }
/core/metadataschemas:
get:
operationId: listMetadataSchemas
summary: Metadata schema registry
description: 'Probed 2026-09-01 with ?size=30: HTTP 200, 6,106 bytes.'
parameters:
- $ref: '#/components/parameters/Size'
responses:
'200':
description: Registered metadata schemas
content:
application/hal+json:
schema: { type: object }
/core/metadatafields:
get:
operationId: listMetadataFields
summary: Metadata field registry
description: >-
Probed 2026-09-01 with ?schema=person&size=20 and ?size=500: HTTP 200. The registry
includes person.identifier.orcid and the DSpace ORCID synchronisation fields.
parameters:
- name: schema
in: query
schema: { type: string }
- $ref: '#/components/parameters/Size'
responses:
'200':
description: Registered metadata fields
content:
application/hal+json:
schema: { type: object }
/authn/status:
get:
operationId: getAuthenticationStatus
summary: Authentication status of the caller
description: >-
Probed 2026-09-01: HTTP 200, 429 bytes, {"okay": true, "authenticated": false}.
Confirms anonymous access is permitted and no session is required for public reads.
responses:
'200':
description: Authentication status document
content:
application/hal+json:
schema: { $ref: '#/components/schemas/AuthnStatus' }
components:
parameters:
Page:
name: page
in: query
schema: { type: integer, minimum: 0, default: 0 }
Size:
name: size
in: query
schema: { type: integer, minimum: 1, maximum: 100, default: 20 }
schemas:
Root:
type: object
properties:
dspaceUI: { type: string, format: uri, example: 'https://ruor.uottawa.ca' }
dspaceName: { type: string, example: 'Recherche uO Research' }
dspaceServer: { type: string, format: uri, example: 'https://ruor.uottawa.ca/server' }
dspaceVersion: { type: string, example: 'DSpace 8.3' }
type: { type: string, example: root }
_links: { type: object }
PagedCommunities:
type: object
properties:
_embedded:
type: object
properties:
communities:
type: array
items: { $ref: '#/components/schemas/Community' }
page: { $ref: '#/components/schemas/Page' }
_links: { type: object }
Community:
type: object
properties:
id: { type: string, format: uuid }
uuid: { type: string, format: uuid }
name: { type: string, example: 'Affaires academiques // Academic Affairs' }
handle: { type: string, example: '10393/51008' }
metadata: { type: object }
type: { type: string, example: community }
Page:
type: object
properties:
size: { type: integer }
totalElements: { type: integer }
totalPages: { type: integer }
number: { type: integer }
AuthnStatus:
type: object
properties:
okay: { type: boolean }
authenticated: { type: boolean }
authenticationMethod: { type: string, nullable: true }
type: { type: string, example: status }
Error:
type: object
properties:
timestamp: { type: string, format: date-time }
status: { type: integer }
error: { type: string }
message: { type: string }
path: { type: string }