Purdue RCAC API

The Rosen Center for Advanced Computing publishes its own OpenAPI 3.0.0 description at www.rcac.purdue.edu/api - 206 paths and 452 operations covering research computing groups and their members, departments and fields of science, course allocations and enrollments, staff contact reports, and the RCAC service finder with its facets and facet tree. This is Purdue's own software on Purdue's own host (www.rcac.purdue.edu -> web.rcac.purdue.edu, 128.211.157.46), and it is the single largest institution-authored machine-readable artifact found anywhere in this profile. The contract is public; the endpoints are not - an unauthenticated call returns 500 with a Purdue Web Authentication login page, and the declared api_token apiKey header has no documented self-service issuance. Declared version is 0.0.1 with no stability, deprecation or changelog statement.

Operations 452

Showing the first 250 of 452. The full set is in the contract, and via get_provider_operations.

GET /contactreports/comments
POST /contactreports/comments
GET /contactreports/comments/{id}
PUT /contactreports/comments/{id}
DELETE /contactreports/comments/{id}
GET /contactreports/followgroups
POST /contactreports/followgroups
GET /contactreports/followgroups/{id}
PUT /contactreports/followgroups/{id}
DELETE /contactreports/followgroups/{id}
GET /contactreports/followusers
POST /contactreports/followusers
GET /contactreports/followusers/{id}
PUT /contactreports/followusers/{id}
DELETE /contactreports/followusers/{id}
GET /contactreports
POST /contactreports
POST /contactreports/preview
GET /contactreports/{id}
PUT /contactreports/{id}
DELETE /contactreports/{id}
GET /contactreports/types
POST /contactreports/types
GET /contactreports/types/{id}
PUT /contactreports/types/{id}
DELETE /contactreports/types/{id}
GET /api
GET /courses
POST /courses
GET /courses/{id}
PUT /courses/{id}
DELETE /courses/{id}
GET /courses/sync
GET /courses/enrollments
GET /courses/members
POST /courses/members
GET /courses/members/{id}
PUT /courses/members/{id}
DELETE /courses/members/{id}
POST /courses/members/import
GET /finder/facets
POST /finder/facets
GET /finder/facets/{id}
PUT /finder/facets/{id}
DELETE /finder/facets/{id}
GET /finder/fields
POST /finder/fields
GET /finder/fields/{id}
PUT /finder/fields/{id}
DELETE /finder/fields/{id}
GET /finder/settings
GET /finder/servicelist
GET /finder/facettree
POST /finder/sendmail
GET /finder/services
POST /finder/services
GET /finder/services/{id}
PUT /finder/services/{id}
DELETE /finder/services/{id}
GET /groups/departments
POST /groups/departments
GET /groups/departments/{id}
PUT /groups/departments/{id}
DELETE /groups/departments/{id}
GET /groups/fieldsofscience
POST /groups/fieldsofscience
GET /groups/fieldsofscience/{id}
PUT /groups/fieldsofscience/{id}
DELETE /groups/fieldsofscience/{id}
GET /groups/{group}/departments
POST /groups/{group}/departments
GET /groups/{group}/departments/{id}
PUT /groups/{group}/departments/{id}
DELETE /groups/{group}/departments/{id}
GET /groups/{group}/fieldsofscience
POST /groups/{group}/fieldsofscience
GET /groups/{group}/fieldsofscience/{id}
PUT /groups/{group}/fieldsofscience/{id}
DELETE /groups/{group}/fieldsofscience/{id}
GET /groups
POST /groups
GET /groups/{id}
PUT /groups/{id}
DELETE /groups/{id}
GET /groups/members
POST /groups/members
GET /groups/members/{id}
PUT /groups/members/{id}
DELETE /groups/members/{id}
GET /groups/motd
POST /groups/motd
GET /groups/motd/{id}
PUT /groups/motd/{id}
DELETE /groups/motd/{id}
GET /unixgroups/members
POST /unixgroups/members
GET /unixgroups/members/{id}
PUT /unixgroups/members/{id}
DELETE /unixgroups/members/{id}
GET /unixgroups
POST /unixgroups
GET /unixgroups/{id}
PUT /unixgroups/{id}
DELETE /unixgroups/{id}
GET /history
GET /history/{id}
GET /logs
GET /logs/{id}
GET /impact/constants
POST /impact/constants
GET /impact/constants/{id}
PUT /impact/constants/{id}
DELETE /impact/constants/{id}
GET /impact
POST /impact
GET /impact/{id}
PUT /impact/{id}
DELETE /impact/{id}
GET /impact/tables
POST /impact/tables
GET /impact/tables/{id}
PUT /impact/tables/{id}
DELETE /impact/tables/{id}
GET /issues/comments
POST /issues/comments
GET /issues/comments/{id}
PUT /issues/comments/{id}
DELETE /issues/comments/{id}
GET /issues
POST /issues
GET /issues/{id}
PUT /issues/{id}
DELETE /issues/{id}
GET /issues/todos
POST /issues/todos
GET /issues/todos/{id}
PUT /issues/todos/{id}
DELETE /issues/todos/{id}
GET /knowledge/feedback
POST /knowledge/feedback
GET /knowledge/feedback/{id}
PUT /knowledge/feedback/{id}
DELETE /knowledge/feedback/{id}
GET /knowledge
POST /knowledge
GET /knowledge/{id}
PUT /knowledge/{id}
DELETE /knowledge/{id}
DELETE /knowledge/diff
GET /knowledge/snippets
POST /knowledge/snippets
GET /knowledge/snippets/{id}
PUT /knowledge/snippets/{id}
DELETE /knowledge/snippets/{id}
GET /listeners
POST /listeners
GET /listeners/{id}
PUT /listeners/{id}
DELETE /listeners/{id}
GET /mail
POST /mail
GET /mailer/{id}
PUT /mailer/{id}
DELETE /mailer/{id}
POST /mailer/send
GET /media/folder
POST /media/folder
PUT /media/folder
DELETE /media/folder/delete
GET /media
GET /media/tree
GET /media/layout
POST /media/upload
PUT /media/move
DELETE /media/delete
GET /media/download
GET /media/url
GET /menus/items
POST /menus/items
GET /menus/items/{id}
PUT /menus/items/{id}
DELETE /menus/items/{id}
POST /menus/items/reorder
GET /menus
POST /menus
GET /menus/{id}
PUT /menus/{id}
DELETE /menus/{id}
GET /messages
POST /messages
GET /messages/{id}
PUT /messages/{id}
DELETE /messages/{id}
GET /messages/types
POST /messages/types
GET /messages/types/{id}
PUT /messages/types/{id}
DELETE /messages/types/{id}
GET /news
POST /news
GET /news/{id}
PUT /news/{id}
DELETE /news/{id}
GET /news/{id}/views
POST /news/preview
POST /news/{id}/email
GET /news/associations
POST /news/associations
GET /news/associations/{id}
PUT /news/associations/{id}
DELETE /news/associations/{id}
POST /news/slack
GET /news/types
POST /news/types
GET /news/types/{id}
PUT /news/types/{id}
DELETE /news/types/{id}
GET /news/{news_id}/updates
POST /news/{news_id}/updates
GET /news/{news_id}/updates/{id}
PUT /news/{news_id}/updates/{id}
DELETE /news/{news_id}/updates/{id}
GET /orders/accounts
POST /orders/accounts
GET /orders/accounts/{id}
PUT /orders/accounts/{id}
DELETE /orders/accounts/{id}
GET /orders/approvers
POST /orders/approvers
GET /orders/approvers/{id}
PUT /orders/approvers/{id}
DELETE /orders/approvers/{id}
GET /orders/cart
POST /orders/cart
GET /orders/cart/{id}
PUT /orders/cart/{id}
DELETE /orders/cart/{id}
GET /orders/categories
POST /orders/categories
GET /orders/categories/{id}
PUT /orders/categories/{id}
DELETE /orders/categories/{id}
GET /orders/items
POST /orders/items
GET /orders/items/{id}
PUT /orders/items/{id}
DELETE /orders/items/{id}
GET /orders/sequence/{id}
GET /orders
POST /orders

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/purdue-rcac-api"
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 email required.

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

OpenAPI Specification

purdue-rcac-api-openapi.yml Raw ↑
x-method: searched
x-source-url: https://www.rcac.purdue.edu/api
x-provenance:
  generated: '2026-08-30'
  method: searched
  source: >-
    Fetched verbatim from Purdue University's own host at https://www.rcac.purdue.edu/api on
    2026-08-30. This is the institution's own OpenAPI document, not one we wrote. The pristine
    JSON as fetched is preserved byte-for-byte at openapi/_original/purdue-rcac-api.json; this
    file is the same document rendered as YAML with the two x- provenance keys above added and
    nothing else changed.
  x-operator: institution
openapi: 3.0.0
info:
  title: RCAC API
  version: 0.0.1
servers:
- url: https://www.rcac.purdue.edu/api
  description: Production server
components:
  parameters:
    limitParam:
      name: limit
      in: query
      description: Number of records to return per page
      required: false
      schema:
        type: integer
        format: int32
    pageParam:
      name: page
      in: query
      description: ''
      required: false
      schema:
        type: integer
        format: int32
  securitySchemes:
    api_token:
      type: apiKey
      name: api_token
      in: header
paths:
  /contactreports/comments:
    get:
      description: Display a listing of contact reports comments
      parameters:
      - in: query
        name: contactreportid
        description: ID of contact report
        required: false
        schema:
          type: integer
          default: 0
      - in: query
        name: search
        description: A word or phrase to search for.
        required: false
        schema:
          type: string
      - in: query
        name: limit
        description: Number of result per page.
        type: integer
        required: false
        schema:
          type: integer
          default: 20
      - in: query
        name: page
        description: Number of where to start returning results.
        required: false
        schema:
          type: integer
          default: 1
      - in: query
        name: order
        description: Field to sort results by.
        required: false
        schema:
          type: string
          default: datetimecreated
          enum:
          - id
          - datetimecreated
          - datetimeremoved
      - in: query
        name: order_dir
        description: Direction to sort results by.
        required: false
        schema:
          type: string
          default: desc
          enum:
          - asc
          - desc
    post:
      description: Create a contact report comment
      parameters: []
      responses:
        '201':
          description: Successful entry creation
          content:
            application/json:
              example:
                id: 1
                contactreportid: 1
                userid: 1234
                comment: Example comment
                stemmedcomment: example comment
                notice: 0
                datetimecreated: '2021-09-14 13:01:55'
                formatteddate: Sep 14, 2021  1:01pm
                formattedcomment: <p>Example comment</p>
                username: John Doe
                api: https://example.org/api/contactreports/comments/1
        '401':
          description: Unauthorized
        '409':
          description: Invalid data
      requestBody:
        content:
          '*/*':
            schema:
              type: object
              properties:
                comment:
                  description: The comment being made
                  type: string
                  default: null
                contactreportid:
                  description: ID of the contact report
                  type: integer
                  default: null
                userid:
                  description: User ID
                  type: integer
                  default: 0
                notice:
                  description: Notification state
                  type: integer
                  default: 0
              required:
              - comment
              - contactreportid
  /contactreports/comments/{id}:
    get:
      description: Retrieve a contact report comment
      parameters:
      - in: path
        name: id
        description: Entry identifier
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Successful entry modification
          content:
            application/json:
              example:
                id: 1
                contactreportid: 1
                userid: 1234
                comment: Example comment
                stemmedcomment: example comment
                notice: 0
                datetimecreated: '2021-09-14 13:01:55'
                formatteddate: Sep 14, 2021&nbsp; 1:01pm
                formattedcomment: <p>Example comment</p>
                username: John Doe
                api: https://example.org/api/contactreports/comments/1
        '404':
          description: Record not found
    put:
      description: Update a contact report comment
      parameters:
      - in: path
        name: id
        description: Entry identifier
        required: true
        schema:
          type: integer
      responses:
        '202':
          description: Successful entry modification
          content:
            application/json:
              example:
                id: 1
                contactreportid: 1
                userid: 1234
                comment: Example comment
                stemmedcomment: example comment
                notice: 0
                datetimecreated: '2021-09-14 13:01:55'
                formatteddate: Sep 14, 2021&nbsp; 1:01pm
                formattedcomment: <p>Example comment</p>
                username: John Doe
                api: https://example.org/api/contactreports/comments/1
        '404':
          description: Record not found
        '409':
          description: Invalid data
      requestBody:
        content:
          '*/*':
            schema:
              type: object
              properties:
                comment:
                  description: The comment being made
                  type: string
                  default: null
                contactreportid:
                  description: ID of the contact report
                  type: integer
                  default: null
                userid:
                  description: User ID
                  type: integer
                  default: null
                notice:
                  description: Notification state
                  type: integer
                  default: null
              required: []
    delete:
      description: Delete a contact report comment
      parameters:
      - in: path
        name: id
        description: Entry identifier
        required: true
        schema:
          type: integer
      responses:
        '204':
          description: Successful entry deletion
        '404':
          description: Record not found
  /contactreports/followgroups:
    get:
      description: Display a listing of contact reports followgroups
      parameters:
      - in: query
        name: groupid
        description: Group ID
        required: false
        schema:
          type: integer
          default: 0
      - in: query
        name: userid
        description: User ID
        required: false
        schema:
          type: integer
          default: 0
      - in: query
        name: limit
        description: Number of result per page.
        type: integer
        required: false
        schema:
          type: integer
          default: 20
      - in: query
        name: page
        description: Number of where to start returning results.
        required: false
        schema:
          type: integer
          default: 1
      - in: query
        name: order
        description: Field to sort results by.
        required: false
        schema:
          type: string
          default: datecreated
          enum:
          - id
          - userid
          - datecreated
          - targetuserid
      - in: query
        name: order_dir
        description: Direction to sort results by.
        required: false
        schema:
          type: string
          default: desc
          enum:
          - asc
          - desc
    post:
      description: Create a group following
      parameters: []
      responses:
        '201':
          description: Successful entry creation
          content:
            application/json:
              example:
                id: 1
                groupid: 20
                userid: 1234
                userrequestid: 0
                membertype: 10
                owner: 0
                datecreated: '2021-09-03T05:44:38.000000Z'
                dateremoved: null
                datelastseen: null
                notice: 0
                api: https://example.org/api/contactreports/followgroups/1
        '409':
          description: Invalid data
      requestBody:
        content:
          '*/*':
            schema:
              type: object
              properties:
                groupid:
                  description: ID of group being followed
                  type: integer
                  default: null
                userid:
                  description: User ID of follower
                  type: integer
                  default: Current user's ID
              required: []
  /contactreports/followgroups/{id}:
    get:
      description: Retrieve a group following record
      parameters:
      - in: path
        name: id
        description: Entry identifier
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Successful entry read
          content:
            application/json:
              example:
                id: 1
                groupid: 20
                userid: 1234
                userrequestid: 0
                membertype: 10
                owner: 0
                datecreated: '2021-09-03T05:44:38.000000Z'
                dateremoved: null
                datelastseen: null
                notice: 0
                api: https://example.org/api/contactreports/followgroups/1
        '404':
          description: Record not found
    put:
      description: Update a group following
      parameters:
      - in: path
        name: id
        description: Entry identifier
        required: true
        schema:
          type: integer
      responses:
        '204':
          description: Successful entry modification
          content:
            application/json:
              example:
                id: 1
                groupid: 20
                userid: 1234
                userrequestid: 0
                membertype: 10
                owner: 0
                datecreated: '2021-09-03T05:44:38.000000Z'
                dateremoved: null
                datelastseen: null
                notice: 0
                api: https://example.org/api/contactreports/followgroups/1
        '404':
          description: Record not found
        '409':
          description: Invalid data
      requestBody:
        content:
          '*/*':
            schema:
              type: object
              properties:
                groupid:
                  description: ID of group being followed
                  type: integer
                  default: null
                userid:
                  description: ID of user following the group
                  type: integer
                  default: null
              required: []
    delete:
      description: Delete a group following
      parameters:
      - in: path
        name: id
        description: Entry identifier
        required: true
        schema:
          type: integer
      responses:
        '204':
          description: Successful entry deletion
        '404':
          description: Record not found
  /contactreports/followusers:
    get:
      description: Display a listing of contact reports user followings
      parameters:
      - in: query
        name: targetuserid
        description: Target User ID
        required: false
        schema:
          type: integer
          default: 0
      - in: query
        name: userid
        description: User ID
        required: false
        schema:
          type: integer
          default: 0
      - in: query
        name: limit
        description: Number of result per page.
        required: false
        schema:
          type: integer
          default: 20
      - in: query
        name: page
        description: Number of where to start returning results.
        required: false
        schema:
          type: integer
          default: 1
      - in: query
        name: order
        description: Field to sort results by.
        required: false
        schema:
          type: string
          default: datecreated
          enum:
          - id
          - userid
          - datecreated
          - targetuserid
      - in: query
        name: order_dir
        description: Direction to sort results by.
        required: false
        schema:
          type: string
          default: desc
          enum:
          - asc
          - desc
    post:
      description: Create a contact report user following
      parameters: []
      responses:
        '201':
          description: Successful entry creation
          content:
            application/json:
              example:
                id: 1
                userid: 1
                targetuserid: 2
                membertype: 10
                datecreated: '2021-09-01 09:12:01'
                dateremoved: null
                datelastseen: null
                api: https://example.org/api/contactreports/followusers/1
        '409':
          description: Invalid data
      requestBody:
        content:
          '*/*':
            schema:
              type: object
              properties:
                targetuserid:
                  description: User ID to follow
                  type: integer
                  default: null
                userid:
                  description: User ID of follower
                  type: integer
                  default: Current user's ID
              required:
              - targetuserid
  /contactreports/followusers/{id}:
    get:
      description: Retrieve a contact report user following
      parameters:
      - in: path
        name: id
        description: Entry identifier
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Successful entry read
          content:
            application/json:
              example:
                id: 1
                userid: 1
                targetuserid: 2
                membertype: 10
                datecreated: '2021-09-01 09:12:01'
                dateremoved: null
                datelastseen: null
                api: https://example.org/api/contactreports/followusers/1
        '404':
          description: Record not found
    put:
      description: Update a contact report user following
      parameters:
      - in: path
        name: id
        description: Entry identifier
        required: true
        schema:
          type: integer
      responses:
        '204':
          description: Successful entry modification
          content:
            application/json:
              example:
                id: 1
                userid: 1
                targetuserid: 2
                membertype: 10
                datecreated: '2021-09-01 09:12:01'
                dateremoved: null
                datelastseen: null
                api: https://example.org/api/contactreports/followusers/1
        '404':
          description: Record not found
        '409':
          description: Invalid data
      requestBody:
        content:
          '*/*':
            schema:
              type: object
              properties:
                targetuserid:
                  description: User ID to follow
                  type: integer
                  default: null
                userid:
                  description: User ID of follower
                  type: integer
                  default: null
              required: []
    delete:
      description: Delete a contact report user following
      parameters:
      - in: path
        name: id
        description: Entry identifier
        required: true
        schema:
          type: integer
      responses:
        '204':
          description: Successful entry deletion
        '404':
          description: Record not found
  /contactreports:
    get:
      description: Display a listing of contact reports
      parameters:
      - in: query
        name: limit
        description: Number of result per page.
        required: false
        schema:
          type: integer
          default: 20
      - in: query
        name: type
        description: Contact Report type ID
        required: false
        schema:
          type: integer
      - in: query
        name: group
        description: Filter by group ID
        required: false
        schema:
          type: integer
      - in: query
        name: start
        description: Timestamp (YYYY-MM-DD or YYYY-MM-DD hh:mm:ss) for records on or after that date
        required: false
        schema:
          type: string
          format: date
          example: '2021-01-30'
      - in: query
        name: stop
        description: Timestamp (YYYY-MM-DD or YYYY-MM-DD hh:mm:ss) for records before that date
        required: false
        schema:
          type: string
          format: date
          example: '2021-01-30'
      - in: query
        name: people
        description: Filter by people associated with reports. Comma-separated list of usernames, emails, or user IDs
        required: false
        schema:
          type: string
          example: person1,person2,person3
      - in: query
        name: resource
        description: Filter by resources associated with reports. Comma-separated list of resource IDs
        required: false
        schema:
          type: string
          example: 1,2,3
      - in: query
        name: tag
        description: Filter by tags associated with reports. Comma-separated list of tags
        required: false
        schema:
          type: string
          example: tag1,tag2,tag3
      - in: query
        name: page
        description: Number of where to start returning results.
        required: false
        schema:
          type: integer
          default: 1
      - in: query
        name: notice
        description: Filter by notice value
        required: false
        schema:
          type: integer
      - in: query
        name: search
        description: A word or phrase to search for.
        required: false
        schema:
          type: string
      - in: query
        name: order
        description: Field to sort results by.
        required: false
        schema:
          type: string
          default: datetimecreated
          enum:
          - id
          - report
          - datetimecreated
      - in: query
        name: order_dir
        description: Direction to sort results by.
        required: false
        schema:
          type: string
          default: desc
          enum:
          - asc
          - desc
    post:
      description: Create a contact report
      parameters: []
      responses:
        '201':
          description: Successful entry creation
          content:
            application/json:
              example:
                id: 5830
                groupid: 142
                userid: 61344
                report: Example text
                stemmedreport: eexample ttext
                datetimecontact: '2021-09-03T04:00:00.000000Z'
                datetimecreated: '2021-09-03T20:01:44.000000Z'
                notice: 23
                datetimegroupid: null
                contactreporttypeid: 3
                formatteddate: September 3, 2021 4:01pm
                formattedreport: <p>Example text.</p>
                comments: []
                subscribed: 1
                subscribedcommentid: 0
                type:
                  id: 3
                  name: Personal Meeting
                  timeperiodid: 1
                  timeperiodcount: 7
                  timeperiodlimit: 14
                  waitperiodid: 0
                  waitperiodcount: 0
                username: John Doe
                users:
                - id: 9342
                  contactreportid: 5830
                  userid: 56907
                  datetimecreated: '2021-09-03T20:01:44.000000Z'
                  datetimelastnotify: null
                  name: Gerhard Klimeck
                - id: 9343
                  contactreportid: 5830
                  userid: 81163
                  datetimecreated: '2021-09-03T20:01:44.000000Z'
                  datetimelastnotify: null
                  name: Erik S Gough
                groupname: Lorem Ipsum
                resources:
                - id: 106819
                  contactreportid: 5830
                  resourceid: 110
                  name: Geddes
                - id: 106820
                  contactreportid: 5830
                  resourceid: 92
                  name: Gilbreth
                tags: []
                age: 1200675
                api: https://example.org/api/contactreports/5830
                url: https://example.org/contactreports/5830
        '404':
          description: Record not found
        '409':
          description: Invalid data
      requestBody:
        content:
          '*/*':
            schema:
              type: object
              properties:
                datetimecontact:
                  description: Timestamp (YYYY-MM-DD or YYYY-MM-DD hh:mm:ss) of the contact
                  type: string
                  default: null
                groupid:
                  description: ID of the associated group
                  type: integer
                  default: 0
                datetimegroupid:
                  description: Timestamp (YYYY-MM-DD or YYYY-MM-DD hh:mm:ss) of the contact
                  type: string
                  default: null
                userid:
                  description: ID of the user creating the entry
                  type: integer
                  default: 0
                contactreporttypeid:
                  description: Type ID for the entry
                  type: integer
                  default: 0
                report:
                  description: The report text
                  type: string
                  default: null
                notice:
                  description: Notice state
                  type: integer
                  default: 0
              required:
              - datetimecontact
              - report
  /contactreports/preview:
    post:
      description: Parse submitted text to see the final result
      parameters: []
      requestBody:
        content:
          '*/*':
            schema:
              type: object
              properties:
                body:
                  description: Unformatted text
                  type: string
                  default: null
              required:
              - body
  /contactreports/{id}:
    get:
      description: Retrieve a contact report
      parameters:
      - in: path
        name: id
        description: Entry identifier
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Successful entry read
          content:
            application/json:
              example:
                id: 5830
                groupid: 142
                userid: 61344
                report: Example text
                stemmedreport: eexample ttext
                datetimecontact: '2021-09-03T04:00:00.000000Z'
                datetimecreated: '2021-09-03T20:01:44.000000Z'
                notice: 23
                datetimegroupid: null
                contactreporttypeid: 3
                formatteddate: September 3, 2021 4:01pm
                formattedreport: <p>Example text.</p>
                comments: []
                subscribed: 1
                subscribedcommentid: 0
                type:
                  id: 3
                  name: Personal Meeting
                  timeperiodid: 1
                  timeperiodcount: 7
                  timeperiodlimit: 14
                  waitperiodid: 0
                  waitperiodcount: 0
                username: John Doe
                users:
                - id: 9342
                  contactreportid: 5830
                  userid: 56907
                  datetimecreated: '2021-09-03T20:01:44.000000Z'
                  datetimelastnotify: null
                  name: Gerhard Klimeck
                - id: 9343
                  contactreportid: 5830
                  userid: 81163
                  datetimecreated: '2021-09-03T20:01:44.000000Z'
                  datetimelastnotify: null
                  name: Erik S Gough
                groupname: Lorem Ipsum
                resources:
                - id: 106819
                  contactreportid: 5830
                  resourceid: 110
                  name: Geddes
                - id: 106820
                  contactreportid: 5830
                  resourceid: 92
                  name: Gilbreth
                tags: []
                age: 1200675
                api: https://example.org/api/contactreports/5830
                url: https://example.org/contactreports/5830
        '404':
          description: Record not found
    put:
      description: Update a contact report
      parameters:
      - in: path
        name: id
        description: Entry identifier
        required: true
        schema:
          type: integer
      responses:
        '204':
          description: Successful entry modification
          content:
            application/json:
              example:
                id: 5830
                groupid: 142
                userid: 61344
                report: Example text
                stemmedreport: eexample ttext
                datetimecontact: '2021-09-03T04:00:00.000000Z'
                datetimecreated: '2021-09-03T20:01:44.000000Z'
                notice: 23
                datetimegroupid: null
                contactreporttypeid: 3
                formatteddate: September 3, 2021 4:01pm
                formattedreport: <p>Example text.</p>
                comments: []
                subscribed: 1
                subscribedcommentid: 0
                type:
                  id: 3
                  name: Personal Meeting
                  timeperiodid: 1
                  timeperiodcount: 7
                  timeperiodlimit: 14
                  waitperiodid: 0
                  waitperiodcount: 0
                username: John Doe
                users:
                - id: 9342
                  contactreportid: 5830
                  userid: 56907
                  datetimecreated: '2021-09-03T20:01:44.000000Z'
                  datetimelastnotify: null
                  name: Gerhard Klimeck
                - id: 9343
                  contactreportid: 5830
                  userid: 81163
                  datetimecreated: '2021-09-03T20:01:44.000000Z'
                  datetimelastnotify: null
                  name: Erik S Gough
                groupname: Lorem Ipsum
                resources:
                - id: 106819
                  contactreportid: 5830
                  resourceid: 110
                  name: Geddes
                - id: 106820
                  contactreportid: 5830
                  resourceid: 92
                  name: Gilbreth
                tags: []
                age: 1200675
                api: https://example.org/api/contactreports/5830
                url: https://example.org/contactreports/5830
        '404':
          description: Record not found
        '409':
          description: Invalid data
      requestBody:
        content:
          '*/*':
            schema:
              type: object
              properties:
                datetimecontact:
                  description: Timestamp (YYYY-MM-DD or YYYY-MM-DD hh:mm:ss) of the contact
                  type: string
                  default: null
                groupid:
                  description: ID of the associated group
                  type: integer
                  default: null
                report:
                  description: The report text
                  type: string
                  default: null
                contactreporttypeid:
                  description: Type ID for the entry
                  type: integer
                  default: 0
                notice:
                  description: Notice state
                  type: integer
                  default: 0
              required: []
    delete:
      description: Delete a contact report
      parameters:
      - in: path
        name: id
        description: Entry identifier
        required: true
        schema:
          type: integer
      responses:
        '204':
          description: Successful entry deletion
        '404':
          description: Record not found
  /contactreports/types:
    get:
      description: Display a listing of contact report types
      parameters:
      - in: query
        name: tagresources
        description: Filter by `tagresources` value
        required: false
        schema:
          type: integer
      - in: query
        name: location
        description: Filter by `location` value
        required: false
        schema:
          type: integer
      - in: query
        name: future
        description: Filter by `future` value
        required: false
        schema:
          type: integer
      - in: query
        name: ongoing
        description: Filter by `ongoing` value
        required: false
        schema:
          type: integer
      - in: query
        name: search
        description: A word or phrase to search for.
        required: false
        schema:
          type: string
      - in: query
        name: limit
        description: Number of result per page.
        required: false
        schema:
          type: integer
          default: 20
      - in: query
        name: page
        description: Number of where to start returning results.
        required: false
        schema:
          type: integer
          default: 1
      - in: query
        name: order
        description: Field to sort results by.
        required: false
        schema:
          type: string
          default: datetimecreated
          enum:
          - id
          - motd
          - datetimecreated
          - datetimeremoved
      - in: query
        name: order_dir
        description: Direction to sort results by.
        required: false
        schema:
          type: string
          default: desc
          enum:
          - asc
          - desc
    post:
      description: Create a contact report type
      parameters: []
      responses:
        '201':
          description: Successful entry creation
          content:
            application/json:
              example:
                id: 1
                name: Examples
                timeperiodid: 0
                timeperiodcount: 0
                timeperiodlimit: 0
                waitperiodid: 0
                waitperiodcount: 0
                reports_count: 442
                api: https://example.org/api/contactreports/types/1
        '409':
          description: Invalid data
      requestBody:
        content:
          '*/*':
            schema:
              type: object
              properties:
                comment:
                  description: The comment being made
                  type: string
                  default: null
                name:
                  description: The name of the type
                  type: string
                  default: null
                timeperiodid:
                  description: ID of a timeperiod
                  type: integer
                  default: 0
                timeperiodcount:
                  description: Number of time periods
                  type: integer
                  default: 0
                timeperiodlimit:
                  description: Timeperiod limit
                  type: integer
                  default: 0
                waitperiodid:
                  description: ID of a time

# --- truncated at 32 KB (495 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/purdue/refs/heads/main/openapi/purdue-rcac-api-openapi.yml