University of Florida Search API

Full-text, exact, geospatial and page-level search.

Operations 4

GET /exactsearch Search items across the digital collections #
GET /pagetext Full-text search inside digitised page images #
GET /mapsearch Geospatial search over georeferenced items #
GET /serialtitles Search serial titles #

Documentation

Specifications

Schemas & Data

Other Resources

🔗
Examples
https://raw.githubusercontent.com/api-evangelist/university-of-florida/refs/heads/main/examples/university-of-florida-soc-schedule-response.json
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/university-of-florida/refs/heads/main/examples/university-of-florida-soc-filters-response.json
🔗
Website
https://one.ufl.edu/soc/
🔗
Errors
https://raw.githubusercontent.com/api-evangelist/university-of-florida/refs/heads/main/errors/university-of-florida-errors.yml
🔗
Rules
https://raw.githubusercontent.com/api-evangelist/university-of-florida/refs/heads/main/rules/university-of-florida-rules.yml
🔗
Vocabulary
https://raw.githubusercontent.com/api-evangelist/university-of-florida/refs/heads/main/vocabulary/university-of-florida-vocabulary.yml
🔗
Lifecycle
https://raw.githubusercontent.com/api-evangelist/university-of-florida/refs/heads/main/lifecycle/university-of-florida-lifecycle.yml
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/university-of-florida/refs/heads/main/examples/university-of-florida-libraries-root-index.json
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/university-of-florida/refs/heads/main/examples/university-of-florida-libraries-exactsearch-response.json
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/university-of-florida/refs/heads/main/examples/university-of-florida-ufdc-oai-identify.xml
🔗
Website
https://ufdc.ufl.edu/
🔗
Conformance
https://raw.githubusercontent.com/api-evangelist/university-of-florida/refs/heads/main/conformance/university-of-florida-conformance.yml

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/university-of-florida-search-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 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

university-of-florida-search-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: University of Florida Libraries Patron Search API
  version: '2026-09-01'
  summary: Public, unauthenticated read API over the University of Florida Digital Collections, the Digital Library of the Caribbean and the Florida Digital Newspaper Library.
  description: '`api.patron.uflib.ufl.edu` is the backend of the UF Digital Collections reader at

    ufdc.ufl.edu.'
  contact:
    name: UF Digital Library Center
    email: digby@ufl.edu
    url: https://lts.uflib.ufl.edu/supported-systems/uf-digital-collections/
  x-operator: institution
  x-operator-basis: api.patron.uflib.ufl.edu -> 128.227.18.113, 128.227.24.223; ARIN NetName UFNET, OrgName "University of Florida", CIDR 128.227.0.0/16. No vendor CNAME. TLS issuer "C=US, O=Internet2, CN=InCommon RSA Server CA 2". The OAI-PMH Identify response names UF as the repository and digby@ufl.edu as adminEmail. No vendor product string appears in any probed response.
  x-provenance:
    generated: '2026-09-01'
    method: derived
    source: Live HTTP probes of every resource named in the root index of https://api.patron.uflib.ufl.edu on 2026-09-01, plus the self-documenting example URLs each resource root returns. The host itself was discovered by reading https://ufdc.ufl.edu/assets/environment-CtcEkdJa.js, the UFDC client's build-time environment module.
servers:
- url: https://api.patron.uflib.ufl.edu
  description: 'Production. Public and unauthenticated; no API key is issued or required.


    WARNING — the hostname resolves to TWO A records that do not serve the same routes.

    128.227.18.113 serves every resource. 128.227.24.223 serves every resource EXCEPT

    /oai and /oai_by_title, which it returns 404 for. Verified 2026-09-01 by pinning

    each address with --resolve and replaying all nine sampled routes against both. See

    `x-node-divergence`.'
tags:
- name: Search
  description: Full-text, exact, geospatial and page-level search.
paths:
  /exactsearch:
    get:
      tags:
      - Search
      operationId: exactSearch
      summary: Search items across the digital collections
      description: Called with no parameters, returns worked example URLs for itself. Called with parameters, returns a hit list with facet buckets. Quote the `default` value to force phrase matching.
      parameters:
      - name: default
        in: query
        description: Free-text query; wrap in double quotes for an exact phrase.
        schema:
          type: string
          examples:
          - '"elmer h. bone"'
      - name: subject_keyword
        in: query
        description: Restrict to a subject keyword.
        schema:
          type: string
      - name: datelo
        in: query
        description: Earliest publication date, YYYY-MM-DD.
        schema:
          type: string
          format: date
      - name: datehi
        in: query
        description: Latest publication date, YYYY-MM-DD.
        schema:
          type: string
          format: date
      - name: filter
        in: query
        description: Facet filter in `field:value` form, e.g. `genre:novel`.
        schema:
          type: string
      responses:
        '200':
          description: Hits plus facet buckets.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResult'
  /pagetext:
    get:
      tags:
      - Search
      operationId: searchPageText
      summary: Full-text search inside digitised page images
      description: Searches the OCR text of scanned pages. Scope narrows from the whole corpus to a single serial (`bibid`) to a single volume (`bibid` + `vid`).
      parameters:
      - name: term
        in: query
        description: Single term to match.
        schema:
          type: string
      - name: fuzzy
        in: query
        description: Fuzzy-match the term.
        schema:
          type: boolean
      - name: phrase
        in: query
        description: Multi-word phrase to match.
        schema:
          type: string
      - name: bibid
        in: query
        description: Restrict to one bibliographic record.
        schema:
          type: string
          examples:
          - UF00028290
      - name: vid
        in: query
        description: Restrict to one volume within the bibid.
        schema:
          type: string
          examples:
          - '00001'
      responses:
        '200':
          description: Matching pages.
          content:
            application/json:
              schema:
                type: object
  /mapsearch:
    get:
      tags:
      - Search
      operationId: mapSearch
      summary: Geospatial search over georeferenced items
      parameters:
      - name: mapsearchtype
        in: query
        required: true
        description: Bounding-box or radius search.
        schema:
          type: string
          enum:
          - box
          - point
      - name: minlat
        in: query
        schema:
          type: number
      - name: maxlat
        in: query
        schema:
          type: number
      - name: minlng
        in: query
        schema:
          type: number
      - name: maxlng
        in: query
        schema:
          type: number
      - name: pointlat
        in: query
        schema:
          type: number
      - name: pointlng
        in: query
        schema:
          type: number
      - name: maxdist
        in: query
        description: Radius with unit suffix, e.g. `1km`, `10km`.
        schema:
          type: string
      - name: aggregationcodes
        in: query
        description: Restrict to a collection aggregation code.
        schema:
          type: string
      - name: mediatype
        in: query
        description: Restrict to a media type, e.g. `Photograph`.
        schema:
          type: string
      responses:
        '200':
          description: Georeferenced hits.
          content:
            application/json:
              schema:
                type: object
  /serialtitles:
    get:
      tags:
      - Search
      operationId: searchSerialTitles
      summary: Search serial titles
      parameters:
      - name: title
        in: query
        schema:
          type: string
          examples:
          - leader
      responses:
        '200':
          description: Matching serial titles.
          content:
            application/json:
              schema:
                type: object
components:
  schemas:
    SearchResult:
      type: object
      required:
      - hits
      properties:
        query:
          type:
          - string
          - object
        hit_count:
          type: integer
        filter_buckets:
          type: object
          description: Facet counts keyed by field.
        hits:
          type: array
          items:
            $ref: '#/components/schemas/Hit'
        ip:
          type: string
          description: The API echoes the CALLER's own IP address back in this field. It is not institutional data and must not be stored in a catalogued example.
    Hit:
      type: object
      properties:
        did:
          type: string
          description: '`BIBID:VID`.'
        bibid:
          type: string
        vid:
          type: string
        title:
          type: string
        mediatype:
          type: string
        aggregationcodes:
          type: array
          items:
            type: string
        mainthumbnail:
          type: string
        mainjpeg:
          type: string
        pagecount:
          type: integer
        language:
          type: array
          items:
            type: string
        creator:
          type: array
          items:
            type: string
        subject_keyword:
          type: array
          items:
            type: string
        genre:
          type: array
          items:
            type: string
        source_institution:
          type: string
        holding_location:
          type: string
        publication_date:
          type: string
        conv_date:
          type: string
          description: Normalised date, YYYY-MM-DD.
        collections:
          type: array
          items:
            type: string
        general_note:
          type: array
          items:
            type: string
        ip_restriction_mask:
          type:
          - integer
          - string
        made_public_date:
          type: string
        hit_reason:
          type:
          - string
          - array
          - object
x-node-divergence:
  observed: '2026-09-01'
  method: probed
  hosts:
  - address: 128.227.18.113
    routes_ok: all sampled
  - address: 128.227.24.223
    routes_404:
    - /oai
    - /oai_by_title
    routes_ok:
    - /
    - /types
    - /exactsearch
    - /recent_additions
    - /rss_ufdc
    - /collections
    - /fdnl_titles_list
  impact: An OAI-PMH harvester that resolves onto the second node receives HTTP 404 and concludes the repository has been withdrawn. Which node answers is a DNS ordering accident, so the failure is intermittent and will not reproduce on a retry that lands on the other address. This is deployment drift between two backends, not a deliberate partition — every other route is served identically by both.