USPTO Patent Trial and Appeal Board (PTAB) API

Patent Trial and Appeal Board (PTAB) API v3 hosted on the Open Data Portal. 19 endpoints covering trial proceedings (IPR, PGR, CBM, derivation), trial decisions (institution, final written, terminations), trial documents (petitions, patent owner responses, expert declarations), and trial appeal/interference decisions. Coverage from 1997 to present; full PTAB Trial decisions and party briefing since September 2012. The legacy Developer Hub PTAB API was fully retired on January 6, 2026.

USPTO Patent Trial and Appeal Board (PTAB) API is one of 6 APIs that USPTO publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include PTAB, Patents, Trials, Decisions, and Government. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 1 Naftiko capability spec.

OpenAPI Specification

uspto-ptab-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: USPTO Patent Trial and Appeal Board (PTAB) API
  version: '3.0'
  description: |
    PTAB API v3 hosted on the USPTO Open Data Portal. Search and retrieve PTAB trial proceedings
    (IPR, PGR, CBM, derivation), trial decisions, trial documents, and historical appeal/interference
    decisions. Coverage 1997 to present; full trial decisions and party briefing since September 2012.
  contact:
    name: USPTO API Help
    email: [email protected]
servers:
- url: https://api.uspto.gov
  description: USPTO Open Data Portal
security:
- ApiKeyAuth: []
tags:
- name: Proceedings
  description: PTAB trial proceedings
- name: Decisions
  description: PTAB decisions
- name: Documents
  description: PTAB documents
- name: Appeals
  description: PTAB appeal and interference decisions
paths:
  /api/v1/ptab/proceedings/search:
    get:
      tags: [Proceedings]
      summary: Search Proceedings
      operationId: searchPtabProceedings
      parameters:
      - {name: proceedingNumber, in: query, schema: {type: string}}
      - {name: proceedingTypeCategory, in: query, schema: {type: string, enum: [IPR, PGR, CBM, DER]}}
      - {name: proceedingFilingDateFrom, in: query, schema: {type: string, format: date}}
      - {name: proceedingFilingDateTo, in: query, schema: {type: string, format: date}}
      - {name: subProceedingTypeCategory, in: query, schema: {type: string}}
      - {name: offset, in: query, schema: {type: integer}}
      - {name: limit, in: query, schema: {type: integer, default: 25, maximum: 100}}
      responses:
        '200':
          description: Search results
          content:
            application/json:
              schema: {$ref: '#/components/schemas/ProceedingSearchResponse'}
  /api/v1/ptab/proceedings/{proceedingNumber}:
    get:
      tags: [Proceedings]
      summary: Get Proceeding
      operationId: getPtabProceeding
      parameters:
      - {name: proceedingNumber, in: path, required: true, schema: {type: string}}
      responses:
        '200':
          description: Proceeding detail
          content:
            application/json:
              schema: {$ref: '#/components/schemas/Proceeding'}
  /api/v1/ptab/decisions/search:
    get:
      tags: [Decisions]
      summary: Search Decisions
      operationId: searchPtabDecisions
      parameters:
      - {name: proceedingNumber, in: query, schema: {type: string}}
      - {name: decisionTypeCategory, in: query, schema: {type: string}}
      - {name: decisionDateFrom, in: query, schema: {type: string, format: date}}
      - {name: decisionDateTo, in: query, schema: {type: string, format: date}}
      - {name: offset, in: query, schema: {type: integer}}
      - {name: limit, in: query, schema: {type: integer, default: 25}}
      responses:
        '200':
          description: Search results
          content:
            application/json:
              schema: {$ref: '#/components/schemas/DecisionSearchResponse'}
  /api/v1/ptab/decisions/{decisionIdentifier}:
    get:
      tags: [Decisions]
      summary: Get Decision
      operationId: getPtabDecision
      parameters:
      - {name: decisionIdentifier, in: path, required: true, schema: {type: string}}
      responses:
        '200':
          description: Decision detail
          content:
            application/json:
              schema: {$ref: '#/components/schemas/Decision'}
  /api/v1/ptab/documents/search:
    get:
      tags: [Documents]
      summary: Search Documents
      operationId: searchPtabDocuments
      parameters:
      - {name: proceedingNumber, in: query, schema: {type: string}}
      - {name: documentCategory, in: query, schema: {type: string}}
      - {name: filingDateFrom, in: query, schema: {type: string, format: date}}
      - {name: filingDateTo, in: query, schema: {type: string, format: date}}
      - {name: offset, in: query, schema: {type: integer}}
      - {name: limit, in: query, schema: {type: integer, default: 25}}
      responses:
        '200':
          description: Search results
          content:
            application/json:
              schema: {$ref: '#/components/schemas/DocumentSearchResponse'}
  /api/v1/ptab/documents/{documentIdentifier}:
    get:
      tags: [Documents]
      summary: Get Document
      operationId: getPtabDocument
      parameters:
      - {name: documentIdentifier, in: path, required: true, schema: {type: string}}
      responses:
        '200':
          description: Document metadata
          content:
            application/json:
              schema: {$ref: '#/components/schemas/Document'}
  /api/v1/ptab/documents/{documentIdentifier}/download:
    get:
      tags: [Documents]
      summary: Download Document
      operationId: downloadPtabDocument
      parameters:
      - {name: documentIdentifier, in: path, required: true, schema: {type: string}}
      responses:
        '200':
          description: PDF binary
          content:
            application/pdf:
              schema: {type: string, format: binary}
  /api/v1/ptab/appeals/search:
    get:
      tags: [Appeals]
      summary: Search Appeal Decisions
      operationId: searchPtabAppeals
      parameters:
      - {name: applicationNumberText, in: query, schema: {type: string}}
      - {name: decisionDateFrom, in: query, schema: {type: string, format: date}}
      - {name: decisionDateTo, in: query, schema: {type: string, format: date}}
      - {name: offset, in: query, schema: {type: integer}}
      - {name: limit, in: query, schema: {type: integer}}
      responses:
        '200':
          description: Search results
          content:
            application/json:
              schema: {type: object}
  /api/v1/ptab/interferences/search:
    get:
      tags: [Appeals]
      summary: Search Interference Decisions
      operationId: searchPtabInterferences
      parameters:
      - {name: offset, in: query, schema: {type: integer}}
      - {name: limit, in: query, schema: {type: integer}}
      responses:
        '200':
          description: Search results
          content:
            application/json:
              schema: {type: object}
components:
  securitySchemes:
    ApiKeyAuth: {type: apiKey, in: header, name: X-API-KEY}
  schemas:
    Proceeding:
      type: object
      properties:
        proceedingNumber: {type: string}
        proceedingTypeCategory: {type: string}
        subProceedingTypeCategory: {type: string}
        proceedingFilingDate: {type: string, format: date}
        proceedingStatusCategory: {type: string}
        respondentPatentNumber: {type: string}
        respondentApplicationNumberText: {type: string}
        petitionerPartyName: {type: string}
        respondentPartyName: {type: string}
        accordedFilingDate: {type: string, format: date}
        decisionDate: {type: string, format: date}
    ProceedingSearchResponse:
      type: object
      properties:
        count: {type: integer}
        results:
          type: array
          items: {$ref: '#/components/schemas/Proceeding'}
    Decision:
      type: object
      properties:
        decisionIdentifier: {type: string}
        proceedingNumber: {type: string}
        decisionTypeCategory: {type: string}
        decisionDate: {type: string, format: date}
        decisionOutcomeCategory: {type: string}
        authoringAdministrativePatentJudgeName: {type: string}
        documentIdentifier: {type: string}
    DecisionSearchResponse:
      type: object
      properties:
        count: {type: integer}
        results:
          type: array
          items: {$ref: '#/components/schemas/Decision'}
    Document:
      type: object
      properties:
        documentIdentifier: {type: string}
        proceedingNumber: {type: string}
        documentTitleText: {type: string}
        documentCategory: {type: string}
        filingDate: {type: string, format: date}
        filingPartyCategory: {type: string}
        pageQuantity: {type: integer}
        downloadUrl: {type: string, format: uri}
    DocumentSearchResponse:
      type: object
      properties:
        count: {type: integer}
        results:
          type: array
          items: {$ref: '#/components/schemas/Document'}