Researcher Metadata Database (RMD) API

Penn State University Libraries' faculty and research metadata service, built and run in-house with OSVPR and West Arete. Publishes cleaned researcher metadata — publications, grants, presentations, performances, ETDs, advising, news and biographical content — through a REST API described by a first-party OpenAPI 3.0.1 document with 14 paths across user, publication and organization resources. ORCID identifiers are required fields on the profile response, not optional decoration. A license key (X-API-Key) is issued by the Libraries on request; the unauthenticated response is a 401 JSON envelope.

Operations 15

GET /v1/organizations All Organizations #
GET /v1/organizations/{id}/publications Retrieve an organization's publications #
GET /v1/publications/{id}/grants Retrieve a publication's grants #
GET /v1/publications/{id} Find Publication by ID #
GET /v1/publications All Publications #
GET /v1/users/{webaccess_id}/organization_memberships Retrieve the user's organization memberships #
GET /v1/users/{webaccess_id}/news_feed_items Retrieve a user's news feed items #
GET /v1/users/{webaccess_id}/presentations Retrieve a user's presentations #
GET /v1/users/{webaccess_id}/grants Retrieve a user's grants #
GET /v1/users/{webaccess_id}/performances Retrieve a user's performances #
GET /v1/users/{webaccess_id}/etds Retrieve a user's student advising history #
GET /v1/users/{webaccess_id}/publications Retrieve a user's publications #
GET /v1/users/{webaccess_id}/profile Retrieve a user's profile
POST /v1/users/publications Retrieve publications for a group of users #

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/rmd"
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

pennsylvania-state-university-researcher-metadata-api-openapi.yml Raw ↑
openapi: 3.0.1
x-generated: '2026-08-30'
x-method: searched
x-source-url: https://metadata.libraries.psu.edu/api-docs/v1/swagger.yaml
x-operator: institution
x-provenance: >-
  Penn State University Libraries publishes this OpenAPI itself; fetched verbatim 2026-08-30 (200,
  text/yaml, 103,101 bytes) and archived byte-identical at
  openapi/_original/pennsylvania-state-university-researcher-metadata.yaml. Three edits were made to
  THIS copy and to nothing else: (1) a servers[] block was ADDED, because the published document has
  none — the base URL https://metadata.libraries.psu.edu was RESOLVED BY PROBE, not assumed
  (/v1/organizations returns 401 application/json while /api/v1/organizations returns a Rails HTML
  404); (2) info.contact / info.termsOfService were set to the Libraries' own pages; (3) tag
  descriptions were written for the three tags the operations already used. No path, parameter,
  schema or response was altered.
info:
  title: Researcher Metadata Database API
  description: An API that serves as the authority on faculty and research metadata at Penn State University
    in the swagger-2.0 specification.
  version: v1
  contact:
    name: Penn State University Libraries
    url: https://metadata.libraries.psu.edu/
  termsOfService: https://metadata.libraries.psu.edu/
servers:
- url: https://metadata.libraries.psu.edu
  description: Production — paths are versioned as /v1/... ; confirmed by live 401 probe 2026-08-30
security:
- api_key: []
tags:
- name: user
  description: Penn State researchers, their profiles, publications, grants, presentations, performances,
    ETDs and organization memberships.
- name: publication
  description: Publications and their grants; ScholarSphere open-access link updates.
- name: organization
  description: Penn State organizational units and their publications.
paths:
  /v1/organizations:
    get:
      summary: All Organizations
      description: Returns all visible organizations to which the given API token has access.
      operationId: findOrganizations
      tags:
      - organization
      security:
      - api_key: []
      responses:
        '200':
          description: organization response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      properties:
                        id:
                          type: string
                          example: '123'
                          description: The ID of the object
                        type:
                          type: string
                          example: organization
                          description: The type of object
                        attributes:
                          type: object
                          required:
                          - name
                          properties:
                            name:
                              type: string
                              example: College of Engineering
                              description: The name of the organization
                      type: object
                      required:
                      - id
                      - type
                      - attributes
                required:
                - data
        '401':
          description: unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
  /v1/organizations/{id}/publications:
    parameters:
    - name: id
      in: path
      description: The ID of an organization
      required: true
      schema:
        type: integer
    - name: offset
      in: query
      description: The number of items to skip before starting to collect the result set
      required: false
      schema:
        type: integer
        format: int32
    - name: limit
      in: query
      description: The numbers of items to return
      required: false
      schema:
        type: integer
        format: int32
    get:
      summary: Retrieve an organization's publications
      description: Returns publications that were authored by users while they were members of the organization
      operationId: findOrganizationPublications
      tags:
      - organization
      security:
      - api_key: []
      responses:
        '200':
          description: user publication response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/PublicationV1'
        '401':
          description: unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
        '404':
          description: not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
  /v1/publications/{id}/grants:
    get:
      summary: Retrieve a publication's grants
      description: Returns grant data associated with a publication
      operationId: findPublicationGrants
      tags:
      - publication
      parameters:
      - name: id
        in: path
        description: ID of publication to retrieve grants
        required: true
        schema:
          type: string
      security:
      - api_key: []
      responses:
        '200':
          description: publication grants response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      required:
                      - id
                      - type
                      - attributes
                      properties:
                        id:
                          type: string
                          example: '123'
                          description: The ID of the object
                        type:
                          type: string
                          example: grant
                          description: The type of the object
                        attributes:
                          type: object
                          required:
                          - title
                          - agency
                          - abstract
                          - amount_in_dollars
                          - start_date
                          - end_date
                          - identifier
                          properties:
                            title:
                              type: string
                              nullable: true
                              example: A Research Project Proposal
                              description: The title of the grant
                            agency:
                              type: string
                              nullable: true
                              example: National Science Foundation
                              description: The name of the organization that awarded the grant
                            abstract:
                              type: string
                              nullable: true
                              example: Information about this grant
                              description: A description of the grant's purpose
                            amount_in_dollars:
                              type: integer
                              nullable: true
                              example: 50000
                              description: The monetary amount of the grant in U.S. dollars
                            start_date:
                              type: string
                              nullable: true
                              example: '2017-12-05'
                              description: The date on which the grant begins
                            end_date:
                              type: string
                              nullable: true
                              example: '2019-12-05'
                              description: The date on which the grant ends
                            identifier:
                              type: string
                              nullable: true
                              example: '1789352'
                              description: A code identifying the grant that is unique to the awarding
                                agency
                required:
                - data
        '401':
          description: unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
        '404':
          description: not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
  /v1/publications/{id}:
    parameters:
    - name: id
      in: path
      description: ID of publication to fetch
      required: true
      schema:
        type: integer
        format: int64
    get:
      summary: Find Publication by ID
      tags:
      - publication
      description: Returns a single publication if the user has access
      operationId: findPublicationById
      security:
      - api_key: []
      responses:
        '200':
          description: publication response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/PublicationV1'
            text/html:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/PublicationV1'
        '401':
          description: unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
            text/html:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
        '404':
          description: not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
            text/html:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
  /v1/publications:
    get:
      summary: All Publications
      tags:
      - publication
      description: Returns all publications from the system that the user has access to
      operationId: findPublications
      parameters:
      - name: activity_insight_id
        in: query
        description: Activity Insight ID to filter by
        required: false
        schema:
          type: string
      - name: doi
        in: query
        description: DOI to filter by
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: max number publications to return
        required: false
        schema:
          type: integer
          format: int32
      security:
      - api_key: []
      responses:
        '200':
          description: publication response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/PublicationV1'
                required:
                - data
            text/html:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/PublicationV1'
                required:
                - data
        '401':
          description: unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
            text/html:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
    patch:
      summary: Update publication's ScholarSphere Open Access Link
      tags:
      - publication
      description: Update publication's ScholarSphere Open Access Link by doi or activity insight id
      operationId: updateOpenAccessLink
      parameters: []
      security:
      - api_key: []
      responses:
        '200':
          description: ScholarSphere Open Access Link successfully updated response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicationPatchResult'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
        '404':
          description: No publications found response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
        '422':
          description: Invalid params response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicationInput'
        required: true
        description: ScholarSphere Open Access Link update requires either a doi or an activity insight
          id
  /v1/users/{webaccess_id}/organization_memberships:
    parameters:
    - name: webaccess_id
      in: path
      description: Webaccess ID of user to retrieve organization memberships
      required: true
      schema:
        type: string
    get:
      summary: Retrieve the user's organization memberships
      tags:
      - user
      description: Returns organization memberships for a user
      operationId: findUserOrganizationMemberships
      security:
      - api_key: []
      responses:
        '200':
          description: user organization memberships response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      required:
                      - id
                      - type
                      - attributes
                      properties:
                        id:
                          type: string
                          example: '123'
                          description: The ID of the object
                        type:
                          type: string
                          example: organization_membership
                          description: The type of the object
                        attributes:
                          type: object
                          properties:
                            organization_name:
                              type: string
                              example: Biology
                              description: The name of the organization to which the user belongs
                            organization_type:
                              type: string
                              nullable: true
                              example: Department
                              description: The type of the organization
                            position_title:
                              type: string
                              nullable: true
                              example: Associate Professor of Biology
                              description: The user's role or title within the organization
                            position_started_on:
                              type: string
                              nullable: true
                              example: '2010-09-01'
                              description: The date on which the user joined the organization in this
                                role
                            position_ended_on:
                              type: string
                              nullable: true
                              example: '2012-05-30'
                              description: The date on which the user left the organization in this role
                          required:
                          - organization_name
        '401':
          description: unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
        '404':
          description: not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
  /v1/users/{webaccess_id}/news_feed_items:
    get:
      summary: Retrieve a user's news feed items
      operationId: findUserNewsFeedItems
      tags:
      - user
      description: Returns a news feed items for a user
      parameters:
      - name: webaccess_id
        in: path
        description: Webaccess ID of user to retrieve news feed items
        required: true
        schema:
          type: string
      security:
      - api_key: []
      responses:
        '200':
          description: user news_feed_items response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          example: '123'
                          description: The ID of the object
                        type:
                          type: string
                          example: news_feed_item
                          description: The type of the object
                        attributes:
                          type: object
                          properties:
                            title:
                              type: string
                              example: News Story
                              description: The title of the news feed item
                            url:
                              type: string
                              example: https://news.psu.edu/example
                              description: The URL where the full news story content can be found
                            description:
                              type: string
                              example: A news story about a Penn State researcher
                              description: A brief description of the news story content
                            published_on:
                              type: string
                              example: '2018-12-05'
                              description: The date on which the news story was published
                          required:
                          - title
                          - url
                          - description
                          - published_on
                      required:
                      - id
                      - type
                      - attributes
                required:
                - data
            text/html:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          example: '123'
                          description: The ID of the object
                        type:
                          type: string
                          example: news_feed_item
                          description: The type of the object
                        attributes:
                          type: object
                          properties:
                            title:
                              type: string
                              example: News Story
                              description: The title of the news feed item
                            url:
                              type: string
                              example: https://news.psu.edu/example
                              description: The URL where the full news story content can be found
                            description:
                              type: string
                              example: A news story about a Penn State researcher
                              description: A brief description of the news story content
                            published_on:
                              type: string
                              example: '2018-12-05'
                              description: The date on which the news story was published
                          required:
                          - title
                          - url
                          - description
                          - published_on
                      required:
                      - id
                      - type
                      - attributes
                required:
                - data
        '401':
          description: unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
            text/html:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
        '404':
          description: not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
            text/html:
              schema:
                $ref: '#/components/schemas/ErrorModelV1'
  /v1/users/{webaccess_id}/presentations:
    get:
      summary: Retrieve a user's presentations
      operationId: findUserPresentations
      tags:
      - user
      description: Returns presentations for a user
      parameters:
      - name: webaccess_id
        in: path
        description: Webaccess ID of user to retrieve presentations
        required: true
        schema:
          type: string
      security:
      - api_key: []
      responses:
        '200':
          description: user presentations response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      required:
                      - id
                      - type
                      - attributes
                      properties:
                        id:
                          type: string
                          example: '123'
                          description: The ID of the object
                        type:
                          type: string
                          example: presentation
                          description: The type of the object
                        attributes:
                          type: object
                          required:
                          - activity_insight_identifier
                          properties:
                            title:
                              type: string
                              nullable: true
                              example: A Public Presentation
                              description: The title of the presentation
                            activity_insight_identifier:
                              type: string
                              example: '1234567890'
                              description: The unique identifier for the presentation's corresponding
                                record in the Activity Insight database
                            name:
                              type: string
                              nullable: true
                              example: A Public Presentation
                              description: The name of the presentation
                            organization:
                              type: string
                              nullable: true
                              example: The Pennsylvania State University
                              description: The name of the organization associated with the presentation
                            location:
                              type: string
                              nullable: true
                              example: University Park, PA
                              description: The name of the location where the presentation took place
                            started_on:
                              type: string
                              nullable: true
                              example: '2018-12-04'
                              description: The date on which the presentation started
                            ended_on:
                              type: string
                              nullable: true
                              example: '2018-12-05'
                              description: The date on which the presentation ended
                            presentation_type:
                              type: string
                              nullable: true
                              example: Presentations
                              description: The type of the presentation
                            classification:
                              type: string
                              nullable: true
                              example: Basic or Discovery Scholarship
                              description: The classification of the presentation
                            meet_type:
                              type: string
                              nullable: true
                              example: Academic
                              description: The meet type of the presentation
                            attendance:
                              type: integer
                              nullable: true
                              example: 200
                              description: The number of people who attended the presentation
                            refereed:
                              type: string
                              nullable: true
                              example: 'Yes'
                              description: Whether or not the presentation was refereed
                            abstract:
                              type: string
                              nullable: true
                              example: A presentation about Penn State academic research
                              description: A summary of the presentation content
                            comment:
                              type: string
                              nullable: true
                              example: The goal of this presentation was to broaden public awareness of
                                a research topic.
                              description: Miscellaneous comments and notes about the presentation
                            scope:
                              type: string
                              nullable: true
                              example: International
                              description: The scope of the audience for the presentation
                            profile_preferences:
                              type: array
                              description: An array of settings for each user who is an author of the
                                publication indicating how they prefer to have the publication displayed
                                in a profile
                              items:
                                type: object
                                required:
                                - user_id
                                - webaccess_id
                                - visible_in_profile
                                - position_in_profile
                                properties:
                                  user_id:
                                    type: number
                                    example: 123
                                    description: The ID of the user to which this set of preferences belongs
                                  webaccess_id:
                                    type: string
                                    example: abc123
                                    description: The WebAccess ID of the user to which this set of preferences
                                      belongs
                                  visible_in_profile:
                                    type: boolean
                                    example: true
                                    description: The user's preference for whether or not this publication
                                      should be displayed in their profile
                                  position_in_profile:
                                    type: number
                                    nullable: true
                                    example: 8
                                    description: The user's preference for what position this publication
                                      should occupy in a list of their publications in their profile
            text/html:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      required:
                      - id
                      - type
                      - attributes
                      properties:
                        id:
                          type: string
                          example: '123'
                          description: The ID of the object
                        type:
                          type: string
                          example: presentation
                          description: The type of the object
                        attributes:
                          type: object
                          required:
                          - activity_insight_identifier
                          properties:
                            title:
                              type: string
                              nullable: true
                              example: A Public Presentation
                              description: The title of the presentation
                            activity_insight_identifier:
                              type: string
                              example: '1234567890'
                              description: The unique identifier for the presentation's corresponding
                                record in the Activity Insight database
                            name:
                              type: string
                              nullable: true
                              example: A Public Presentation
                              description: The name of the presentation
                            organization:
                              type: string
                              nullable: true
                              example: The Pennsylvania State University
                              description: The name of the organization associated with the presentation
                            location:
                              type: string
                              nullable: true
                              example: University Park, PA
                              description: The name of the location where the presentation took place
                            started_on:
                              type: string
                              nullable: true
                              example: '2018-12-04'
                              description: The date on which the presentation started
                            ended_on:
                              type: string
                              nullable: true
                              example: '2018-12-05'
                              description: The date on which the presenta

# --- truncated at 32 KB (99 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/pennsylvania-state-university/refs/heads/main/openapi/pennsylvania-state-university-researcher-metadata-api-openapi.yml