USPTO Patent & Trademark API

The United States Patent and Trademark Office (USPTO) provides REST APIs for patent search, PTAB trial proceedings, trademark status lookup, and patent citation data. APIs are hosted at developer.uspto.gov and data.uspto.gov. An ODP API key is required for most endpoints.

OpenAPI Specification

uspto-patent-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: USPTO Patent & Trademark API
  description: >-
    The United States Patent and Trademark Office (USPTO) provides REST APIs for
    patent search, PTAB trial proceedings, trademark status lookup, and patent
    citation data. APIs are hosted at developer.uspto.gov and data.uspto.gov.
    An ODP API key is required for most endpoints.
  version: "3.0"
  contact:
    name: USPTO Open Data Portal
    url: https://developer.uspto.gov/
  license:
    name: Public Domain (U.S. Government Work)
    url: https://www.usa.gov/government-works
servers:
  - url: https://data.uspto.gov/api/v1
    description: USPTO Open Data Portal API v1
  - url: https://developer.uspto.gov/ds-api
    description: USPTO Data Set API (legacy)

security:
  - ApiKeyHeader: []

tags:
  - name: Assignments
    description: Patent assignment records

  - name: Patents
    description: Patent search and retrieval
  - name: PTAB
    description: Patent Trial and Appeal Board proceedings
  - name: Trademarks
    description: Trademark status and documents
paths:
  /patent/applications/search:
    get:
      operationId: searchPatentApplications
      summary: Search patent applications
      description: >-
        Searches USPTO patent applications by keyword, inventor, assignee, filing date,
        classification code, and other criteria. Returns application metadata for
        published and granted patents.
      tags:
        - Patents
      parameters:
        - name: query
          in: query
          required: false
          description: Keyword search query
          schema:
            type: string
          example: "autonomous vehicle lidar sensor"
        - name: inventor
          in: query
          schema:
            type: string
          description: Inventor name (last name, first name)
        - name: assignee
          in: query
          schema:
            type: string
          description: Assignee/applicant company name
        - name: filingDateStart
          in: query
          schema:
            type: string
            format: date
          description: Filing date range start
        - name: filingDateEnd
          in: query
          schema:
            type: string
            format: date
          description: Filing date range end
        - name: cpcClassification
          in: query
          schema:
            type: string
          description: CPC (Cooperative Patent Classification) code
          example: "B60W2050/0001"
        - name: patentType
          in: query
          schema:
            type: string
            enum: [UTILITY, DESIGN, PLANT, REISSUE]
          default: UTILITY
        - name: status
          in: query
          schema:
            type: string
            enum: [PENDING, GRANTED, ABANDONED, EXPIRED]
        - name: offset
          in: query
          schema:
            type: integer
            default: 0
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
            maximum: 100
      responses:
        '200':
          description: Patent application search results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PatentSearchResponse'
        '401':
          description: Invalid or missing API key
        '429':
          description: Rate limit exceeded

  /patent/applications/{applicationNumber}:
    get:
      operationId: getPatentApplication
      summary: Get patent application details
      description: >-
        Returns full metadata for a specific patent application including claims,
        abstract, inventors, assignees, filing history, and prosecution history.
      tags:
        - Patents
      parameters:
        - name: applicationNumber
          in: path
          required: true
          description: USPTO application number (e.g., 16123456)
          schema:
            type: string
          example: "16123456"
      responses:
        '200':
          description: Patent application details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PatentApplication'
        '404':
          description: Application not found

  /patent/grants/{patentNumber}:
    get:
      operationId: getGrantedPatent
      summary: Get a granted patent
      description: Returns full details for a granted United States patent by patent number.
      tags:
        - Patents
      parameters:
        - name: patentNumber
          in: path
          required: true
          description: USPTO patent number (without US prefix)
          schema:
            type: string
          example: "10234567"
      responses:
        '200':
          description: Granted patent details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GrantedPatent'
        '404':
          description: Patent not found

  /ptab/trials:
    get:
      operationId: searchPTABTrials
      summary: Search PTAB trial proceedings
      description: >-
        Searches Patent Trial and Appeal Board (PTAB) proceedings including
        Inter Partes Reviews (IPR), Post-Grant Reviews (PGR), and Covered Business
        Method (CBM) reviews.
      tags:
        - PTAB
      parameters:
        - name: patentNumber
          in: query
          schema:
            type: string
          description: Challenged patent number
        - name: petitionerName
          in: query
          schema:
            type: string
        - name: patentOwnerName
          in: query
          schema:
            type: string
        - name: proceedingType
          in: query
          schema:
            type: string
            enum: [IPR, PGR, CBM, DER, POP]
          description: Type of PTAB proceeding
        - name: filingDateStart
          in: query
          schema:
            type: string
            format: date
        - name: filingDateEnd
          in: query
          schema:
            type: string
            format: date
        - name: status
          in: query
          schema:
            type: string
            enum: [INSTITUTED, DENIED, TERMINATED, SETTLED, PENDING]
        - name: offset
          in: query
          schema:
            type: integer
            default: 0
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
      responses:
        '200':
          description: PTAB trial search results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PTABTrialSearchResponse'

  /ptab/trials/{trialNumber}:
    get:
      operationId: getPTABTrial
      summary: Get PTAB trial details
      description: Returns detailed information for a specific PTAB trial proceeding.
      tags:
        - PTAB
      parameters:
        - name: trialNumber
          in: path
          required: true
          description: PTAB trial number (e.g., IPR2023-00001)
          schema:
            type: string
          example: "IPR2023-00001"
      responses:
        '200':
          description: PTAB trial details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PTABTrial'
        '404':
          description: Trial not found

  /ptab/decisions/search:
    get:
      operationId: searchPTABDecisions
      summary: Search PTAB decisions
      description: Searches PTAB decisions by trial number, date, or keyword.
      tags:
        - PTAB
      parameters:
        - name: searchText
          in: query
          schema:
            type: string
          description: Full-text search in decision documents
        - name: proceedingType
          in: query
          schema:
            type: string
            enum: [IPR, PGR, CBM]
        - name: decisionType
          in: query
          schema:
            type: string
            enum: [INSTITUTION, FINAL_WRITTEN_DECISION, CLAIM_CONSTRUCTION]
        - name: dateStart
          in: query
          schema:
            type: string
            format: date
        - name: dateEnd
          in: query
          schema:
            type: string
            format: date
        - name: offset
          in: query
          schema:
            type: integer
            default: 0
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
      responses:
        '200':
          description: PTAB decision results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PTABDecisionSearchResponse'

  /trademark/status/{serialNumber}:
    get:
      operationId: getTrademarkStatus
      summary: Get trademark application status
      description: >-
        Returns the current status, prosecution history, and filing information
        for a trademark application or registration by serial number.
      tags:
        - Trademarks
      parameters:
        - name: serialNumber
          in: path
          required: true
          description: Trademark serial number (8 digits)
          schema:
            type: string
            pattern: '^\d{8}$'
          example: "88123456"
      responses:
        '200':
          description: Trademark status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrademarkStatus'
        '404':
          description: Trademark not found

  /patent/assignments/search:
    get:
      operationId: searchPatentAssignments
      summary: Search patent assignments
      description: >-
        Searches recorded patent assignments including ownership transfers,
        security agreements, and merger/acquisition records.
      tags:
        - Assignments
      parameters:
        - name: patentNumber
          in: query
          schema:
            type: string
        - name: assignorName
          in: query
          schema:
            type: string
        - name: assigneeName
          in: query
          schema:
            type: string
        - name: conveyanceType
          in: query
          schema:
            type: string
            enum: [ASSIGNMENT, SECURITY_AGREEMENT, LICENSE, MERGER]
        - name: dateStart
          in: query
          schema:
            type: string
            format: date
        - name: dateEnd
          in: query
          schema:
            type: string
            format: date
        - name: offset
          in: query
          schema:
            type: integer
            default: 0
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
      responses:
        '200':
          description: Assignment search results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssignmentSearchResponse'

components:
  securitySchemes:
    ApiKeyHeader:
      type: apiKey
      in: header
      name: X-API-KEY
      description: USPTO Open Data Portal API key

  schemas:
    PatentSearchResponse:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: '#/components/schemas/PatentSummary'
        totalResults:
          type: integer
        offset:
          type: integer
        limit:
          type: integer

    PatentSummary:
      type: object
      properties:
        applicationNumber:
          type: string
        patentNumber:
          type: string
          nullable: true
        title:
          type: string
        filingDate:
          type: string
          format: date
        grantDate:
          type: string
          format: date
          nullable: true
        status:
          type: string
          enum: [PENDING, GRANTED, ABANDONED, EXPIRED]
        patentType:
          type: string
        inventors:
          type: array
          items:
            type: object
            properties:
              firstName:
                type: string
              lastName:
                type: string
        assignees:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              country:
                type: string
        cpcClassifications:
          type: array
          items:
            type: string

    PatentApplication:
      type: object
      properties:
        applicationNumber:
          type: string
        title:
          type: string
        abstract:
          type: string
        filingDate:
          type: string
          format: date
        publicationDate:
          type: string
          format: date
          nullable: true
        status:
          type: string
        patentType:
          type: string
        inventors:
          type: array
          items:
            $ref: '#/components/schemas/Inventor'
        assignees:
          type: array
          items:
            $ref: '#/components/schemas/Assignee'
        cpcClassifications:
          type: array
          items:
            $ref: '#/components/schemas/Classification'
        claims:
          type: array
          items:
            type: object
            properties:
              claimNumber:
                type: integer
              claimType:
                type: string
                enum: [INDEPENDENT, DEPENDENT]
              claimText:
                type: string
        prosecutionHistory:
          type: array
          items:
            $ref: '#/components/schemas/ProsecutionEvent'

    GrantedPatent:
      allOf:
        - $ref: '#/components/schemas/PatentApplication'
        - type: object
          properties:
            patentNumber:
              type: string
            grantDate:
              type: string
              format: date
            expirationDate:
              type: string
              format: date

    Inventor:
      type: object
      properties:
        firstName:
          type: string
        lastName:
          type: string
        city:
          type: string
        state:
          type: string
        country:
          type: string

    Assignee:
      type: object
      properties:
        name:
          type: string
        entityType:
          type: string
          enum: [INDIVIDUAL, COMPANY, UNIVERSITY, GOVERNMENT]
        city:
          type: string
        state:
          type: string
        country:
          type: string

    Classification:
      type: object
      properties:
        code:
          type: string
        description:
          type: string
        classificationType:
          type: string
          enum: [CPC, USPC, IPC]

    ProsecutionEvent:
      type: object
      properties:
        date:
          type: string
          format: date
        eventCode:
          type: string
        eventDescription:
          type: string
        documentUrl:
          type: string
          format: uri

    PTABTrialSearchResponse:
      type: object
      properties:
        trials:
          type: array
          items:
            $ref: '#/components/schemas/PTABTrialSummary'
        totalResults:
          type: integer
        offset:
          type: integer

    PTABTrialSummary:
      type: object
      properties:
        trialNumber:
          type: string
        proceedingType:
          type: string
          enum: [IPR, PGR, CBM, DER, POP]
        status:
          type: string
        patentNumber:
          type: string
        petitionerName:
          type: string
        patentOwnerName:
          type: string
        filingDate:
          type: string
          format: date
        institutionDate:
          type: string
          format: date
          nullable: true
        finalDecisionDate:
          type: string
          format: date
          nullable: true

    PTABTrial:
      allOf:
        - $ref: '#/components/schemas/PTABTrialSummary'
        - type: object
          properties:
            contestedClaims:
              type: array
              items:
                type: integer
            groundsOfChallenge:
              type: array
              items:
                type: object
                properties:
                  claimNumbers:
                    type: array
                    items:
                      type: integer
                  priorArtType:
                    type: string
                    enum: [ANTICIPATION, OBVIOUSNESS, WRITTEN_DESCRIPTION]
                  priorArtReferences:
                    type: array
                    items:
                      type: string
            documents:
              type: array
              items:
                type: object
                properties:
                  documentId:
                    type: string
                  documentType:
                    type: string
                  filedBy:
                    type: string
                  filingDate:
                    type: string
                    format: date
                  documentUrl:
                    type: string
                    format: uri

    PTABDecisionSearchResponse:
      type: object
      properties:
        decisions:
          type: array
          items:
            type: object
            properties:
              trialNumber:
                type: string
              decisionType:
                type: string
              decisionDate:
                type: string
                format: date
              documentUrl:
                type: string
                format: uri
        totalResults:
          type: integer

    TrademarkStatus:
      type: object
      properties:
        serialNumber:
          type: string
        registrationNumber:
          type: string
          nullable: true
        markLiteralElements:
          type: string
          description: Text elements of the mark
        status:
          type: string
        statusCode:
          type: string
        statusDate:
          type: string
          format: date
        filingDate:
          type: string
          format: date
        registrationDate:
          type: string
          format: date
          nullable: true
        expirationDate:
          type: string
          format: date
          nullable: true
        applicantName:
          type: string
        goodsAndServices:
          type: string
        internationalClasses:
          type: array
          items:
            type: integer
        prosecutionHistory:
          type: array
          items:
            type: object
            properties:
              date:
                type: string
                format: date
              code:
                type: string
              description:
                type: string

    AssignmentSearchResponse:
      type: object
      properties:
        assignments:
          type: array
          items:
            $ref: '#/components/schemas/Assignment'
        totalResults:
          type: integer

    Assignment:
      type: object
      properties:
        reelFrame:
          type: string
          description: Reel/Frame assignment identifier
        conveyanceType:
          type: string
        recordDate:
          type: string
          format: date
        executionDate:
          type: string
          format: date
        assignors:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
        assignees:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              address:
                type: string
        patents:
          type: array
          items:
            type: object
            properties:
              patentNumber:
                type: string
              applicationNumber:
                type: string