University of California, San Francisco Documents API

Query the IDL document corpus by identifier or by Solr query syntax.

Operations 1

GET /query Query the Industry Documents Library corpus #

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/ucsf-documents-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

ucsf-documents-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: UCSF Industry Library Solr Documents API
  version: '5'
  description: Public, unauthenticated Apache Solr query interface over the UCSF Industry Documents Library (IDL) — an archive of 28.2 million internal documents from the tobacco, drug, chemical, food, fossil fuel and opioid industries, produced in litigation and preserved by the UCSF Library Center for Knowledge Management (CKM). The interface is documented by UCSF in "Industry Documents Data API v5" and is queried directly against the IDL Solr server. This OpenAPI description is DERIVED by API Evangelist from that UCSF documentation plus live probed responses; UCSF does not publish an OpenAPI document.
  termsOfService: https://www.industrydocuments.ucsf.edu/copyright/
  contact:
    name: UCSF Industry Documents Library
    url: https://www.industrydocuments.ucsf.edu/
  license:
    name: UCSF Copyright and Fair Use statement
    url: https://www.industrydocuments.ucsf.edu/copyright/
  x-operator: institution
  x-operator-evidence: servers[] host solr.idl.ucsf.edu is under the ucsf.edu registrable domain; idl.ucsf.edu redirects to www.industrydocuments.ucsf.edu; the CNAME target libckm.org is the UCSF Library Center for Knowledge Management's own infrastructure domain (github.com/ucsf-ckm, "UCSF Center for Knowledge Management", 74 repositories). No other institution in the 248-university cohort claims this host.
  x-provenance:
    generated: '2026-08-19'
    method: derived
    source:
    - https://www.industrydocuments.ucsf.edu/wp-content/uploads/2022/02/IndustryDocumentsDataAPI_v5.pdf
    - https://web.archive.org/web/20230130203403/https://industrydocuments.ucsf.edu/research-tools/api/
    - https://solr.idl.ucsf.edu/solr/ltdl3/query?q=id:kylw0221&wt=json
servers:
- url: https://solr.idl.ucsf.edu/solr/ltdl3
  description: UCSF Industry Documents Library production Solr collection (ltdl3)
tags:
- name: Documents
  description: Query the IDL document corpus by identifier or by Solr query syntax.
paths:
  /query:
    get:
      tags:
      - Documents
      operationId: queryDocuments
      summary: Query the Industry Documents Library corpus
      description: Executes a Solr query against the IDL corpus. Retrieve a single document with `q=id:<8-character-id>`, or run a field query using Solr syntax with AND / OR / NOT and explicit parentheses. Results are paged 100 records at a time via `start`. Ampersands inside field values must be percent-encoded as %26.
      parameters:
      - name: q
        in: query
        required: true
        description: Solr query. Examples — `id:kylw0221`; `author:glantz`; `(author:glantz AND industry:tobacco)`; `((collection:"brown %26 williamson" AND type:letter) NOT brand:kool)`; `documentdateiso:[2001-01-01T00:00:00Z TO 2011-12-31T00:00:00Z]`.
        schema:
          type: string
        example: id:kylw0221
      - name: wt
        in: query
        required: false
        description: Writer type — the response serialization format.
        schema:
          type: string
          default: xml
          enum:
          - xml
          - json
          - python
          - ruby
          - php
          - csv
      - name: start
        in: query
        required: false
        description: Zero-based offset into the result set. Honoured. The deployed page size is 1000 documents (UCSF's documentation says 100).
        schema:
          type: integer
          minimum: 0
          default: 0
      - name: rows
        in: query
        required: false
        description: Accepted and echoed back in responseHeader.params, but NOT HONOURED by the deployed /query request handler as of 2026-08-19 — rows=0, rows=1, rows=5 and rows=100 all return the same 1000-document page. UCSF's own published documentation states that "we only return 100 records at a time" and instructs callers to page with start=100; the deployed page size is 1000. Page with `start` and read the actual length of response.docs rather than assuming a page size.
        schema:
          type: integer
          minimum: 0
        x-deployed-behavior: ignored
        x-verified: '2026-08-19'
      - name: fl
        in: query
        required: false
        description: Comma-separated list of fields to return.
        schema:
          type: string
      responses:
        '200':
          description: Solr response envelope containing matched documents.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SolrResponse'
            application/xml:
              schema:
                type: string
            text/csv:
              schema:
                type: string
        '400':
          description: Malformed Solr query.
        '403':
          description: Request rejected — collection not exposed, or edge protection engaged.
        '404':
          description: Unknown Solr collection.
components:
  schemas:
    SolrResponse:
      type: object
      properties:
        responseHeader:
          type: object
          properties:
            status:
              type: integer
            QTime:
              type: integer
            params:
              type: object
              additionalProperties: true
        response:
          type: object
          properties:
            numFound:
              type: integer
              description: Total records matching the query.
            start:
              type: integer
            numFoundExact:
              type: boolean
            docs:
              type: array
              items:
                $ref: '#/components/schemas/IndustryDocument'
    IndustryDocument:
      type: object
      description: One archived industry document record as indexed in the ltdl3 collection.
      properties:
        id:
          type: string
          description: 'Eight-character document identifier: four letters then four digits. Case-insensitive.'
          example: kylw0221
        tid:
          type: string
          description: Legacy transfer identifier.
        collection:
          type: array
          items:
            type: string
        collectioncode:
          type: array
          items:
            type: string
        industry:
          type: array
          items:
            type: string
          description: tobacco | drug | chemical | food | fossilfuel | opioids
        availability:
          type: array
          items:
            type: string
          description: e.g. public, no restrictions
        case:
          type: array
          items:
            type: string
          description: Litigation case the document was produced in.
        title:
          type: string
        author:
          type: array
          items:
            type: string
        mentioned:
          type: array
          items:
            type: string
        witness:
          type: string
        type:
          type: array
          items:
            type: string
        brand:
          type: array
          items:
            type: string
        box:
          type: string
        pages:
          type: integer
        bates:
          type: string
        batesexpanded:
          type: string
          description: Expanded bates range — query bates numbers against this field.
        description:
          type: string
        documentdate:
          type: string
          description: String date in "YYYY Month DD" form, e.g. "2014 November 25".
        documentdateiso:
          type: string
          format: date-time
          description: ISO form of documentdate — use this field for range queries.
        dateaddeducsf:
          type: string
        dateaddedindustry:
          type: string
        datemodifiedindustry:
          type: string
        dateshipped:
          type: string
        minnesotarequestnumber:
          type: string
        cited:
          type: array
          items:
            type: string