DR-NTU (Digital Repository) DSpace REST API

DR-NTU (Digital Repository of NTU) is NTU's institutional repository for scholarly output, running DSpace 7.6.3 with DSpace-CRIS. It exposes the DSpace 7 HAL-based REST API at /server/api for programmatic discovery and retrieval of communities, collections, items, and bitstreams.

OpenAPI Specification

ntu-drntu-repo-rest.yaml Raw ↑
openapi: 3.0.3
info:
  title: DR-NTU (Digital Repository) DSpace REST API
  description: >-
    Subset of the DSpace 7.6.3 (with DSpace-CRIS) HAL-based REST API as exposed
    by DR-NTU (Digital Repository of NTU). This description covers the publicly
    accessible, unauthenticated discovery operations verified against the live
    deployment at https://dr.ntu.edu.sg/server/api. Responses follow the HAL
    (Hypertext Application Language) convention with _embedded and _links. The
    full DSpace 7 REST contract (authenticated CRUD, submission, workflow) is
    documented upstream at https://wiki.lyrasis.org/display/DSDOC7x/REST+API and
    is intentionally not duplicated here.
  version: 7.6.3
  contact:
    name: DR-NTU (Digital Repository of NTU)
    url: https://dr.ntu.edu.sg/home
servers:
  - url: https://dr.ntu.edu.sg/server/api
    description: DR-NTU (Digital Repository) production REST API
paths:
  /:
    get:
      operationId: getApiRoot
      summary: Get API root (HAL entry point)
      description: >-
        Returns the HAL root document listing all available endpoint links
        along with DSpace version metadata.
      tags: [Root]
      responses:
        '200':
          description: HAL root document
          content:
            application/hal+json:
              schema:
                type: object
                additionalProperties: true
  /discover/search/objects:
    get:
      operationId: discoverSearchObjects
      summary: Discover (search) repository objects
      description: >-
        Public discovery search over indexed objects (items, collections,
        communities). Returns a paged HAL search result whose hits embed the
        matching indexableObject.
      tags: [Discover]
      parameters:
        - name: query
          in: query
          description: Full-text query string.
          schema:
            type: string
        - name: dsoType
          in: query
          description: Restrict to a DSpace object type.
          schema:
            type: string
            enum: [item, collection, community]
        - name: scope
          in: query
          description: UUID of a community or collection to scope the search to.
          schema:
            type: string
            format: uuid
        - name: page
          in: query
          description: Zero-based page index.
          schema:
            type: integer
            minimum: 0
            default: 0
        - name: size
          in: query
          description: Page size.
          schema:
            type: integer
            minimum: 1
            default: 20
      responses:
        '200':
          description: Paged HAL search result
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/DiscoverSearchResult'
  /core/items/{uuid}:
    get:
      operationId: getItem
      summary: Get an item by UUID
      description: >-
        Returns a single DSpace item resource. Note that on this deployment,
        retrieving items outside of discovery may require authentication for
        restricted content.
      tags: [Items]
      parameters:
        - name: uuid
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Item resource
          content:
            application/hal+json:
              schema:
                $ref: '#/components/schemas/Item'
        '401':
          description: Authentication required for this resource
components:
  schemas:
    Item:
      type: object
      description: A DSpace item with Dublin Core / DSpace-CRIS metadata.
      properties:
        uuid:
          type: string
          format: uuid
        name:
          type: string
        handle:
          type: string
          description: Persistent handle, e.g. 10356/213929.
        metadata:
          type: object
          description: >-
            Map of metadata field keys (e.g. dc.title, dc.contributor.author) to
            arrays of value objects.
          additionalProperties:
            type: array
            items:
              $ref: '#/components/schemas/MetadataValue'
        inArchive:
          type: boolean
        discoverable:
          type: boolean
        withdrawn:
          type: boolean
        type:
          type: string
          example: item
        uniqueType:
          type: string
          example: core.item
    MetadataValue:
      type: object
      properties:
        value:
          type: string
        language:
          type: string
          nullable: true
        authority:
          type: string
          nullable: true
        confidence:
          type: integer
          nullable: true
        place:
          type: integer
    DiscoverSearchResult:
      type: object
      properties:
        type:
          type: string
          example: discover
        uniqueType:
          type: string
          example: discover.discover
        _links:
          type: object
          additionalProperties: true
        _embedded:
          type: object
          properties:
            searchResult:
              type: object
              properties:
                _links:
                  type: object
                  additionalProperties: true
                _embedded:
                  type: object
                  properties:
                    objects:
                      type: array
                      items:
                        type: object
                        properties:
                          type:
                            type: string
                          _embedded:
                            type: object
                            properties:
                              indexableObject:
                                $ref: '#/components/schemas/Item'
                page:
                  $ref: '#/components/schemas/Page'
    Page:
      type: object
      properties:
        number:
          type: integer
        size:
          type: integer
        totalPages:
          type: integer
        totalElements:
          type: integer