openapi: 3.0.3 info: title: Library Catalog version: 11.0.4 description: The REST API provides access to search functions and records contained in the search index. servers: - url: https://catalog.lib.msu.edu/api/v1 components: schemas: Success: type: object properties: status: description: Status code type: string enum: - OK statusMessage: description: A descriptive error message type: string required: - status Error: type: object properties: status: description: Status code type: string enum: - ERROR statusMessage: description: A descriptive error message type: string required: - status - statusMessage Unauthorized: type: object properties: status: description: Status code type: string enum: - UNAUTHORIZED statusMessage: description: A descriptive error message type: string required: - status - statusMessage Authors: type: object description: Deduplicated author information including primary, corporate and secondary authors properties: primary: description: Primary authors type: object additionalProperties: $ref: '#/components/schemas/AuthorWithRoles' secondary: description: Secondary authors type: object additionalProperties: $ref: '#/components/schemas/AuthorWithRoles' corporate: description: Corporate authors type: object additionalProperties: $ref: '#/components/schemas/AuthorWithRoles' AuthorWithRoles: type: object properties: Author name: type: array description: Author's roles items: type: string Facet: type: object properties: value: description: Facet value type: string translated: description: Translated facet value type: string count: description: Count of records that can be found if the facet is added to the search as a filter type: integer href: description: The current search with the facet added as a filter type: string isApplied: description: True if if the facet is in use in the filter parameter of the query type: boolean children: description: For hierarchical facets, any child facets type: array items: $ref: '#/components/schemas/Facet' Link: type: object properties: type: description: Link type (e.g. id, isn or title) type: string value: description: Link value (e.g. record ID, ISBN or title) type: string exclude: description: Record IDs that need to be excluded from the results type: array items: type: string Record: type: object properties: accessRestrictions: description: Access restriction notes type: array items: type: string authors: $ref: '#/components/schemas/Authors' awards: description: Award notes type: array items: type: string bibliographicLevel: description: Bibliographic level type: string enum: - Monograph - Serial - MonographPart - SerialPart - Collection - CollectionPart - Unknown bibliographyNotes: description: Bibliography notes type: array items: type: string buildings: description: Buildings where the record is held type: array items: type: string callNumbers: description: Call numbers type: array items: type: string childRecordCount: description: Number of child records type: integer cleanDoi: description: First valid DOI type: string cleanIsbn: description: First valid ISBN favoring ISBN-10 over ISBN-13 when possible type: string cleanIssn: description: Base portion of the first listed ISSN type: string cleanOclcNumber: description: First OCLC number type: string containerEndPage: description: End page in the containing item type: string containerIssue: description: Issue number of the containing item type: string containerReference: description: Reference to the containing item type: string containerStartPage: description: Start page in the containing item type: string containerTitle: description: Title of the containing item type: string containerVolume: description: Volume of the containing item type: string corporateAuthors: description: Main corporate authors type: array items: type: string dedupIds: description: IDs of all records deduplicated with the current record type: array items: type: string edition: description: Edition type: string findingAids: description: Finding aids type: array items: type: string formats: description: Formats type: array items: type: string fullRecord: description: Full metadata record (typically XML) type: string generalNotes: description: General notes type: array items: type: string geoLocations: description: Geographic locations (e.g. points, bounding boxes) type: array items: type: string hierarchicalPlaceNames: description: Hierarchical place names concatenated for display type: array items: type: string hierarchyParentId: description: Parent record IDs for hierarchical records type: array items: type: string hierarchyParentTitle: description: Parent record titles for hierarchical records type: array items: type: string hierarchyTopId: description: Hierarchy top record IDs for hierarchical records type: array items: type: string hierarchyTopTitle: description: Hierarchy top record titles for hierarchical records type: array items: type: string humanReadablePublicationDates: description: Publication dates in human-readable format type: array items: type: string id: description: Record unique ID (can be used in the record endpoint), Folio hrid (human readable identifer) prefixed with 'folio.' type: string uuid: description: Folio id (universally unique identifer) type: string institutions: description: Institutions the record belongs to type: array items: type: string isbns: description: ISBNs type: array items: type: string isCollection: description: Whether the record is a collection node in a hierarchy type: boolean issns: description: ISSNs type: array items: type: string languages: description: Languages type: array items: type: string lccn: description: LCCNs type: array items: type: string newerTitles: description: Successor titles type: array items: type: string oclc: description: OCLC numbers type: array items: type: string openUrl: description: OpenURL type: string physicalDescriptions: description: Physical dimensions etc. type: array items: type: string placesOfPublication: description: Places of publication type: array items: type: string playingTimes: description: Playing times (durations) type: array items: type: string previousTitles: description: Predecessor titles type: array items: type: string primaryAuthors: description: Primary authors type: array items: type: string productionCredits: description: Production credits type: array items: type: string publicationDates: description: Publication dates type: array items: type: string publishers: description: Publishers type: array items: type: string rawData: description: All data in the index fields type: string recordLinks: description: Links to other related records type: array items: $ref: '#/components/schemas/RecordLink' recordPage: description: Link to the record page in the UI type: string relationshipNotes: description: Notes describing relationships to other items type: array items: type: string secondaryAuthors: description: Secondary authors type: array items: type: string series: description: Series type: array items: type: string shortTitle: description: Short title (title excluding any subtitle) type: string subjects: description: 'Subject headings as an array from the least specific to the most specific ' type: array items: type: array items: type: string subjectsExtended: description: Subject headings with type and source information type: array items: $ref: '#/components/schemas/Subject' subTitle: description: Subtitle type: string summary: description: Summary type: array items: type: string systemDetails: description: Technical details on the represented item type: array items: type: string targetAudienceNotes: description: Notes about the target audience type: array items: type: string title: description: Title including any subtitle type: string titleSection: description: Part/section portion of the title type: string titleStatement: description: Statement of responsibility that goes with the title type: string toc: description: Table of contents type: array items: type: string urls: description: URLs contained in the record type: array items: $ref: '#/components/schemas/Url' bibnum: description: Sierra Bibnumber type: string RecordLink: type: object properties: title: description: Link title type: string value: description: Link value type: string link: $ref: '#/components/schemas/Link' ResumptionToken: type: object properties: token: description: Token to use for the next request type: string expires: description: Time when the token expires type: string format: date-time SearchResponse: type: object properties: resultCount: description: Number of results type: integer records: description: Records type: array items: $ref: '#/components/schemas/Record' facets: description: Facets type: array items: $ref: '#/components/schemas/Facet' resumptionToken: $ref: '#/components/schemas/ResumptionToken' status: description: Status code type: string enum: - OK required: - resultCount - status Subject: type: object properties: heading: description: Subject heading parts as an array from the least specific to the most specific type: array items: type: string type: description: Subject type type: string enum: - '' - personal name - corporate name - meeting name - uniform title - chronological - topic - geographic - genre/form - occupation - keyword source: description: Subject source/thesaurus (e.g. lcsh, mesh) type: string Url: type: object properties: url: description: URL type: string desc: description: URL Description type: string SecondaryRecord: type: object properties: accessRestrictions: description: Access restriction notes type: array items: type: string authors: $ref: '#/components/schemas/Authors' awards: description: Award notes type: array items: type: string bibliographicLevel: description: Bibliographic level type: string enum: - Monograph - Serial - MonographPart - SerialPart - Collection - CollectionPart - Unknown bibliographyNotes: description: Bibliography notes type: array items: type: string buildings: description: Buildings where the record is held type: array items: type: string callNumbers: description: Call numbers type: array items: type: string childRecordCount: description: Number of child records type: integer cleanDoi: description: First valid DOI type: string cleanIsbn: description: First valid ISBN favoring ISBN-10 over ISBN-13 when possible type: string cleanIssn: description: Base portion of the first listed ISSN type: string cleanOclcNumber: description: First OCLC number type: string containerEndPage: description: End page in the containing item type: string containerIssue: description: Issue number of the containing item type: string containerReference: description: Reference to the containing item type: string containerStartPage: description: Start page in the containing item type: string containerTitle: description: Title of the containing item type: string containerVolume: description: Volume of the containing item type: string corporateAuthors: description: Main corporate authors type: array items: type: string dedupIds: description: IDs of all records deduplicated with the current record type: array items: type: string edition: description: Edition type: string findingAids: description: Finding aids type: array items: type: string formats: description: Formats type: array items: type: string fullRecord: description: Full metadata record (typically XML) type: string generalNotes: description: General notes type: array items: type: string geoLocations: description: Geographic locations (e.g. points, bounding boxes) type: array items: type: string hierarchicalPlaceNames: description: Hierarchical place names concatenated for display type: array items: type: string hierarchyParentId: description: Parent record IDs for hierarchical records type: array items: type: string hierarchyParentTitle: description: Parent record titles for hierarchical records type: array items: type: string hierarchyTopId: description: Hierarchy top record IDs for hierarchical records type: array items: type: string hierarchyTopTitle: description: Hierarchy top record titles for hierarchical records type: array items: type: string humanReadablePublicationDates: description: Publication dates in human-readable format type: array items: type: string id: description: Record unique ID (can be used in the record endpoint) type: string institutions: description: Institutions the record belongs to type: array items: type: string isbns: description: ISBNs type: array items: type: string isCollection: description: Whether the record is a collection node in a hierarchy type: boolean issns: description: ISSNs type: array items: type: string languages: description: Languages type: array items: type: string lccn: description: LCCNs type: array items: type: string newerTitles: description: Successor titles type: array items: type: string oclc: description: OCLC numbers type: array items: type: string openUrl: description: OpenURL type: string physicalDescriptions: description: Physical dimensions etc. type: array items: type: string placesOfPublication: description: Places of publication type: array items: type: string playingTimes: description: Playing times (durations) type: array items: type: string previousTitles: description: Predecessor titles type: array items: type: string primaryAuthors: description: Primary authors type: array items: type: string productionCredits: description: Production credits type: array items: type: string publicationDates: description: Publication dates type: array items: type: string publishers: description: Publishers type: array items: type: string rawData: description: All data in the index fields type: string recordLinks: description: Links to other related records type: array items: $ref: '#/components/schemas/RecordLink' recordPage: description: Link to the record page in the UI type: string relationshipNotes: description: Notes describing relationships to other items type: array items: type: string secondaryAuthors: description: Secondary authors type: array items: type: string series: description: Series type: array items: type: string shortTitle: description: Short title (title excluding any subtitle) type: string subjects: description: 'Subject headings as an array from the least specific to the most specific ' type: array items: type: array items: type: string subjectsExtended: description: Subject headings with type and source information type: array items: $ref: '#/components/schemas/Subject' subTitle: description: Subtitle type: string summary: description: Summary type: array items: type: string systemDetails: description: Technical details on the represented item type: array items: type: string targetAudienceNotes: description: Notes about the target audience type: array items: type: string title: description: Title including any subtitle type: string titleSection: description: Part/section portion of the title type: string titleStatement: description: Statement of responsibility that goes with the title type: string toc: description: Table of contents type: array items: type: string urls: description: URLs contained in the record type: array items: $ref: '#/components/schemas/Url' SecondarySearchResponse: type: object properties: resultCount: description: Number of results type: integer records: description: Records type: array items: $ref: '#/components/schemas/SecondaryRecord' facets: description: Facets type: array items: $ref: '#/components/schemas/Facet' resumptionToken: $ref: '#/components/schemas/ResumptionToken' status: description: Status code type: string enum: - OK required: - resultCount - status WebRecord: type: object properties: id: description: Record unique ID (can be used in the record endpoint) type: string lastModified: description: Last modification date type: string title: description: Title including any subtitle type: string url: description: URL for resource type: string WebSearchResponse: type: object properties: resultCount: description: Number of results type: integer records: description: Records type: array items: $ref: '#/components/schemas/WebRecord' facets: description: Facets type: array items: $ref: '#/components/schemas/Facet' resumptionToken: $ref: '#/components/schemas/ResumptionToken' status: description: Status code type: string enum: - OK required: - resultCount - status paths: /record: get: summary: Fetch records from primary index description: Return a single record or multiple records from primary index. POST method may also be used if sending a long request. parameters: - name: id in: query description: A single record ID required: false schema: type: string - name: id[] in: query description: Multiple record IDs required: false style: form explode: true schema: type: array items: type: string - name: field[] in: query description: 'Fields to return. If not specified, a set of default fields is returned. The default fields are: - authors - formats - id - uuid - languages - series - subjects - title - urls' style: form explode: true schema: type: array items: type: string - name: prettyPrint in: query description: Whether to pretty-print the response. Useful for observing the results in a browser. schema: type: boolean default: false - name: lng in: query description: Language for returned translated strings. schema: type: string enum: - en default: en - name: callback in: query description: A callback that can be used for JSONP. schema: type: string tags: - Record responses: '200': description: Response containing result count and records content: application/json: schema: $ref: '#/components/schemas/SearchResponse' default: description: Error content: application/json: schema: $ref: '#/components/schemas/Error' /search: get: summary: Search primary index description: 'Search primary index with given terms and filters. POST method may also be used if sending a long request. The URL syntax here is the same as the one used in VuFind® user interface. It is possible to make a search in VuFind® and copy the query parameters here to make the same search via the API. While this formal specification only describes basic searching, advanced searches like join=AND&lookfor0[]=apples&type0[]=Title&lookfor0[]=oranges&type0[]=Subject&bool0[]=AND are also supported by the endpoint.' parameters: - name: lookfor in: query description: Search terms. May be a single term, multiple words or a complex query containing boolean operators (AND, OR, NOT), quotes etc. Terms may also be prefixed with a field name (e.g. author:smith) to target only that field (see also type parameter). required: false schema: type: string - name: type in: query description: 'Search type. The following search types are available: - AllFields - Title - JournalTitle - NewspaperTitle - Author - Subject - CallNumber - ISN - Publisher - oclc_num - Series - Genre' required: false schema: type: string default: AllFields - name: field[] in: query description: 'Fields to return. If not specified, a set of default fields is returned. The default fields are: - authors - formats - id - uuid - languages - series - subjects - title - urls' style: form explode: true schema: type: array items: type: string - name: filter[] in: query description: 'Filter queries. Repeat for every filter. The format for a filter is field:value. ''AND'' filtering is used by default. ''OR'' or ''NOT'' filtering can be used by prepending the field with ''~'' (OR) or ''-'' (NOT).' style: form explode: true schema: type: array items: type: string - name: facet[] in: query description: 'Fields to facet on. Repeat for every field. ' style: form explode: true schema: type: array items: type: string - name: facetFilter[] in: query description: 'Faceting result filters. Contains regular expressions that the facet must match for it to be returned. The result will include the matched facet items and for hierarchical facets any ancestor values. Format for a facet filter is field:regexp, e.g. `author_facet:Sm.*th`. **N.B.**The filtered facet needs to be present in the list of returned facets (facet[] parameter).' style: form explode: true schema: type: array items: type: string - name: sort in: query description: Sort method. schema: type: string enum: - relevance - year - year asc - first_indexed - callnumber-sort - author - author desc - title - title desc default: relevance - name: page in: query description: Record page (first page is 1). schema: type: integer minimum: 1 default: 1 - name: limit in: query description: Records to return per page. Set to 0 to return no records. schema: type: integer minimum: 0 maximum: 100 default: 20 - name: resumptionToken in: query description: 'A large result set can only be downloaded in batches. You can initiate a batch download by setting resumptionToken to a single asterisk `*`. Each batch will then return a resumptionToken value to use for the next batch until no more results are available (note that the last result set can be empty). Other parameters are ignored when resumptionToken is set to any other value than `*`. The following parameters are not available with resumptionToken: limit, page, facet[].' schema: type: string - name: prettyPrint in: query description: Whether to pretty-print the response. Useful for observing the results in a browser. schema: type: boolean default: false - name: lng in: query description: Language for returned translated strings. schema: type: string enum: - en default: en - name: callback in: query description: A callback that can be used for JSONP. schema: type: string tags: - Search responses: '200': description: Response containing result count, records and/or facets. content: application/json: schema: $ref: '#/components/schemas/SearchResponse' default: description: Error content: application/json: schema: $ref: '#/components/schemas/Error' /index2/record: get: summary: Fetch records from secondary index description: Return a single record or multiple records from secondary index. POST method may also be used if sending a long request. parameters: - name: id in: query description: A single record ID required: false schema: type: string - name: id[] in: query description: Multiple record IDs required: false style: form explode: true schema: type: array items: type: string - name: field[] in: query description: 'Fields to return. If not specified, a set of default fields is returned. The default fields are: - authors - formats - id - languages - series - subjects - title - urls' style: form explode: true schema: type: array items: type: string - name: prettyPrint in: query description: Whether to pretty-print the response. Useful for observing the results in a browser. schema: type: boolean default: false - name: lng in: query description: Language for returned translated strings. schema: type: string enum: - en default: en - name: callback in: query description: A callback that can be used for JSONP. schema: type: string tags: - Record responses: '200': description: Response containing result count and records content: application/json: schema: $ref: '#/components/schemas/SecondarySearchResponse' default: description: Error content: application/json: schema: $ref: '#/components/schemas/Error' /index2/search: get: summary: Search secondary index description: 'Search secondary index with given terms and filters. POST method may also be used if sending a long request. The URL syntax here is the same as the one used in VuFind® user interface. It is possible to make a search in VuFind® and copy the query parameters here to make the same search via the API. While this formal specification only describes basic searching, advanced searches like join=AND&lookfor0[]=apples&type0[]=Title&lookfor0[]=oranges&type0[]=Subject&bool0[]=AND are also supported by the endpoint.' parameters: - name: lookfor in: query description: Search terms. May be a single term, multiple words or a complex query containing boolean operators (AND, OR, NOT), quotes etc. Terms may also be prefixed with a field name (e.g. author:smith) to target only that field (see also type parameter). required: false schema: type: string - name: type in: query description: 'Search type. The following search types are available: - AllFields - Title - Author - Subject - CallNumber - ISN' required: false schema: type: string default: AllFields - name: field[] in: query description: 'Fields to return. If not specified, a set of default fields is returned. The default fields are: - authors - formats - id - languages - series - subjects - title - urls' style: form explode: true schema: type: array items: type: string - name: filter[] in: query description: 'Filter queries. Repeat for every filter. The format for a filter is field:value. ''AND'' filtering is used by default. ''OR'' or ''NOT'' filtering can be used by prepending the field with ''~'' (OR) or ''-'' (NOT).' style: form explode: true schema: type: array items: type: string - name: facet[] in: query description: 'Fields to facet on. Repeat for every field. ' style: form explode: true schema: type: array items: type: string - name: facetFilter[] in: query description: 'Faceting result filters. Contains regular expressions that the facet must match for it to be returned. The result will include the matched facet items and for hierarchical facets any ancestor values. Format for a facet filter is field:regexp, e.g. `author_facet:Sm.*th`. **N.B.**The filtered facet needs to be present in the list of returned facets (facet[] parameter).' style: form explode: true schema: type: array items: type: string - name: sort in: query description: Sort method. schema: type: string enum: - relevance - year - year asc - callnumber-sort - author - title default: relevance - name: page in: query description: Record page (first page is 1). schema: type: integer minimum: 1 default: 1 - name: limit in: query description: Records to return per page. Set to 0 to return no records. schema: type: integer minimum: 0 maximum: 100 default: 20 - name: resumptionToken in: query description: 'A large result set can only be downloaded in batches. You can initiate a batch download by setting resumptionToken to a single asterisk `*`. Each batch will then return a resumptionToken value to use for the next batch until no more results are available (note that the last result set can be empty). Other parameters are ignored when resumptionToken is set to any other value than `*`. The following parameters are not available with resumptionToken: limit, page, facet[].' schema: type: string - name: prettyPrint in: query description: Whether to pretty-print the response. Useful for observing the results in a browser. schema: type: boolean default: false - name: lng in: query description: Language for returned translated strings. schema: type: string enum: - en default: en - name: callback in: query description: A callback that can be used for JSONP. schema: type: string tags: - Search responses: '200': description: Response containing result count, records and/or facets. content: application/json: schema: $ref: '#/components/schemas/SecondarySearchResponse' default: description: Error content: application/json: schema: $ref: '#/components/schemas/Error' /web/record: get: summary: Fetch records from website index description: Return a single record or multiple records from website index. POST method may also be used if sending a long request. parameters: - name: id in: query description: A single record ID required: false schema: type: string - name: id[] in: query description: Multiple record IDs required: false style: form explode: true schema: type: array items: type: string - name: field[] in: query description: 'Fields to return. If not specified, a set of default fields is returned. The default fields are: - id - lastModified - title - url' style: form explode: true schema: type: array items: type: string - name: prettyPrint in: query description: Whether to pretty-print the response. Useful for observing the results in a browser. schema: type: boolean default: false - name: lng in: query description: Language for returned translated strings. schema: type: string enum: - en default: en - name: callback in: query description: A callback that can be used for JSONP. schema: type: string tags: - Record responses: '200': description: Response containing result count and records content: application/json: schema: $ref: '#/components/schemas/WebSearchResponse' default: description: Error content: application/json: schema: $ref: '#/components/schemas/Error' /web/search: get: summary: Search website index description: 'Search website index with given terms and filters. POST method may also be used if sending a long request. The URL syntax here is the same as the one used in VuFind® user interface. It is possible to make a search in VuFind® and copy the query parameters here to make the same search via the API. While this formal specification only describes basic searching, advanced searches like join=AND&lookfor0[]=apples&type0[]=Title&lookfor0[]=oranges&type0[]=Subject&bool0[]=AND are also supported by the endpoint.' parameters: - name: lookfor in: query description: Search terms. May be a single term, multiple words or a complex query containing boolean operators (AND, OR, NOT), quotes etc. Terms may also be prefixed with a field name (e.g. author:smith) to target only that field (see also type parameter). required: false schema: type: string - name: type in: query description: 'Search type. The following search types are available: - AllFields' required: false schema: type: string default: AllFields - name: field[] in: query description: 'Fields to return. If not specified, a set of default fields is returned. The default fields are: - id - lastModified - title - url' style: form explode: true schema: type: array items: type: string - name: filter[] in: query description: 'Filter queries. Repeat for every filter. The format for a filter is field:value. ''AND'' filtering is used by default. ''OR'' or ''NOT'' filtering can be used by prepending the field with ''~'' (OR) or ''-'' (NOT).' style: form explode: true schema: type: array items: type: string - name: facet[] in: query description: 'Fields to facet on. Repeat for every field. ' style: form explode: true schema: type: array items: type: string - name: facetFilter[] in: query description: 'Faceting result filters. Contains regular expressions that the facet must match for it to be returned. The result will include the matched facet items and for hierarchical facets any ancestor values. Format for a facet filter is field:regexp, e.g. `author_facet:Sm.*th`. **N.B.**The filtered facet needs to be present in the list of returned facets (facet[] parameter).' style: form explode: true schema: type: array items: type: string - name: sort in: query description: Sort method. schema: type: string enum: - relevance - title default: relevance - name: page in: query description: Record page (first page is 1). schema: type: integer minimum: 1 default: 1 - name: limit in: query description: Records to return per page. Set to 0 to return no records. schema: type: integer minimum: 0 maximum: 100 default: 20 - name: resumptionToken in: query description: 'A large result set can only be downloaded in batches. You can initiate a batch download by setting resumptionToken to a single asterisk `*`. Each batch will then return a resumptionToken value to use for the next batch until no more results are available (note that the last result set can be empty). Other parameters are ignored when resumptionToken is set to any other value than `*`. The following parameters are not available with resumptionToken: limit, page, facet[].' schema: type: string - name: prettyPrint in: query description: Whether to pretty-print the response. Useful for observing the results in a browser. schema: type: boolean default: false - name: lng in: query description: Language for returned translated strings. schema: type: string enum: - en default: en - name: callback in: query description: A callback that can be used for JSONP. schema: type: string tags: - Search responses: '200': description: Response containing result count, records and/or facets. content: application/json: schema: $ref: '#/components/schemas/WebSearchResponse' default: description: Error content: application/json: schema: $ref: '#/components/schemas/Error'