Digital Public Library of America Primary Source Sets API

Search and retrieve primary source sets (PSS) for education

Operations 3

GET /pss/sets Search primary source sets #
GET /pss/sets/{id} Fetch a single primary source set by ID #
GET /pss/sources/{id} Fetch primary source items belonging to a set #

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/dpla-primary-source-sets-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

dpla-primary-source-sets-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Digital Public Library of America (DPLA) Authentication Primary Source Sets API
  description: The Digital Public Library of America (DPLA) provides a free REST API that gives access to metadata for 50 million+ cultural heritage items aggregated from 4,000+ US libraries, archives, and museums. The API supports full-text search, field-specific queries, geographic and date range filtering, faceted browsing, and JSONP callbacks. All results are returned as JSON-LD. API keys are issued free of charge via a self-service email-based registration endpoint.
  version: '2'
  contact:
    name: DPLA Developer Portal
    url: https://pro.dp.la/developers
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
  termsOfService: https://dp.la/info/terms-conditions/
servers:
- url: https://api.dp.la/v2
  description: DPLA API v2 production server
security:
- ApiKeyQuery: []
- ApiKeyHeader: []
tags:
- name: Primary Source Sets
  description: Search and retrieve primary source sets (PSS) for education
paths:
  /pss/sets:
    get:
      operationId: searchPssSets
      summary: Search primary source sets
      description: Search DPLA's Primary Source Sets (PSS) — curated collections of primary source documents designed for classroom use. Returns set metadata including title, description, creator, and source items.
      tags:
      - Primary Source Sets
      parameters:
      - name: q
        in: query
        description: Full-text search query.
        schema:
          type: string
      - name: page
        in: query
        description: Page number for pagination.
        schema:
          type: integer
          minimum: 1
          default: 1
      - name: page_size
        in: query
        description: Number of results per page.
        schema:
          type: integer
          minimum: 0
          maximum: 500
          default: 10
      - name: api_key
        in: query
        description: Your DPLA API key.
        schema:
          type: string
      responses:
        '200':
          description: Successful primary source sets search response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PssSetListResponse'
        '403':
          description: Forbidden — invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /pss/sets/{id}:
    get:
      operationId: fetchPssSet
      summary: Fetch a single primary source set by ID
      description: Retrieve a complete primary source set record by its identifier, including all source items and educational metadata.
      tags:
      - Primary Source Sets
      parameters:
      - name: id
        in: path
        required: true
        description: Primary source set identifier.
        schema:
          type: string
      - name: api_key
        in: query
        description: Your DPLA API key.
        schema:
          type: string
      responses:
        '200':
          description: Successful primary source set fetch
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PssSetResponse'
        '403':
          description: Forbidden — invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Primary source set not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /pss/sources/{id}:
    get:
      operationId: fetchPssSource
      summary: Fetch primary source items belonging to a set
      description: Retrieve primary source items (hasPart) that belong to a specific primary source set, identified by the set's ID.
      tags:
      - Primary Source Sets
      parameters:
      - name: id
        in: path
        required: true
        description: Primary source set identifier whose sources to retrieve.
        schema:
          type: string
      - name: api_key
        in: query
        description: Your DPLA API key.
        schema:
          type: string
      responses:
        '200':
          description: Successful source items response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PssSourceResponse'
        '403':
          description: Forbidden — invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    ErrorResponse:
      type: object
      description: Standard error response body.
      properties:
        error:
          type: string
          description: Machine-readable error code.
          example: invalid_api_key
        message:
          type: string
          description: Human-readable error description.
          example: Invalid or inactive API key.
        documentation:
          type: string
          format: uri
          description: Link to error documentation.
          example: https://pro.dp.la/developers/responses#errors
      required:
      - error
      - message
    PssSet:
      type: object
      description: A DPLA Primary Source Set record for educational use.
      properties:
        '@id':
          type: string
          format: uri
        id:
          type: string
        name:
          type: string
          description: Title of the primary source set.
        hasPart:
          type: array
          items:
            type: object
            properties:
              '@id':
                type: string
                format: uri
          description: References to source items in this set.
        about:
          type: array
          items:
            type: object
          description: Subject topics of this set.
        creator:
          type: object
          description: Organization that created this set.
        dateCreated:
          type: string
          description: Creation date.
    PssSourceResponse:
      type: object
      description: Source items belonging to a primary source set.
      properties:
        '@context':
          type: string
          format: uri
        '@id':
          type: string
          format: uri
        docs:
          type: array
          items:
            type: object
    PssSetListResponse:
      type: object
      description: List of primary source sets.
      properties:
        '@context':
          type: string
          format: uri
        '@id':
          type: string
          format: uri
        count:
          type: integer
        docs:
          type: array
          items:
            $ref: '#/components/schemas/PssSet'
    PssSetResponse:
      type: object
      description: A single primary source set.
      properties:
        '@context':
          type: string
          format: uri
        '@id':
          type: string
          format: uri
        docs:
          type: array
          items:
            $ref: '#/components/schemas/PssSet'
  securitySchemes:
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api_key
      description: DPLA API key passed as a query parameter. Obtain a free key by sending a POST to /api_key/{email}.
    ApiKeyHeader:
      type: apiKey
      in: header
      name: Authorization
      description: DPLA API key passed as an Authorization header value (not Bearer scheme — just the raw 32-character key).